1 智能合约部署 2 通过智能合约部署比较以太坊和YOUChain GAS费 3 智能合约gas费用估算的2种方法(需要的可以看看)
YOUChain在12月16日上线了名为MarcoPolo的公测网。总说收费低收费低,今天就测一下。
公测网发布了,意味着已经具备主网上线的条件,所以我们以公测网与以太坊智能合约进行实测对比。
●以太坊智能合约部署及GAS
我们用以太坊的测试网Rinkeby 实时的做一次测试,就执行一句简单的程序。如下图编译成功后开始部署。
可以在钱包中看到部署的扣费请求(下图),一共需要0.000168ETH(约0.14人民币)。也就是说用以太坊网络仅仅执行一条简单的语句就需要0.14人民币/次。
从钱包中查看本次智能合约,如下图,花费了168324*1=168324Gwei,得出了上文的0.000168ETH的GAS费。
目前的wei建议价格如下:(数据来自https://ethgasstation.info/index.php)
●YOUChain智能合约部署
(顺便手把手教你部署一次合约)
注:以下操作一定要用谷歌浏览器
①https://dev.iyouchain.com/zh/youwallet/browser-extension.html 安装钱包。
②有了钱包账户就在钱包点击“存入”,可以领取测试网络的100YOU用于接下来的智能合约的部署。
③打开YOUChain的IDE编译器 https://ide.iyouchain.com/
点击左上角“+”号新建一个 .sol文件,命名随意。
④把这几行代码(够短吧)粘贴到如图的框里,然后点击右边的“开始编译”
pragma solidity ^0.4.25;
contract YOUFen{
string Myname = "easy";
function getName() public view returns(string)
{
return Myname;
}
}
出现下图部分就是编译成功了
⑤如图选择部署环境“Injected YOUChain”,如果你前面钱包安装没有问题的话,“环境”下面的“账号”浏览器会自动帮你填写的。直接点击“确认部署”。
⑥弹出钱包,点击“确认”
⑦下方出现如下图{"blockHash":" 就是成功了 你可以将该hash值复制到区块链浏览器中搜索查看你的智能合约。
恭喜你成功部署智能合约!
该代码与刚刚部署在以太坊公测网络的代码完全相同,来看看该合约部署在YOUChain公测网络花费了多少gas费。
在钱包中点击刚刚部署的合约,发现一共消耗了192736Glu,lu是YOU最小的单位,1YOU=10^18lu,1Glu=10^9lu。所以刚刚一共消耗了0.000192736YOU(约0.00006元)相比以太坊的0.14元简直是白菜价。我使用的环境,YOUChain ide 和 remix 虚拟机版本不一样,所以数量上稍微有差距,但不会是数量级的差异。
也就是说以该程序为例的话,在以太坊上部署合约的成本是在YOUChain上部署合约成本的2000多倍。(实际可能因各种因素有些许差异。)
●2种GAS费预估的方法
①通过 rpc
curl -X POST
http://test-node.iyouchain.com
-H 'Content-Type: application/json'
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "you_estimateGas",
"params": [
{
"data": "0x智能合约数据"
}
]
}
②通过youchain.js
const YOUChain = require('youchain');
const solc = require('solc');
const fs = require('fs');
const youchain = new YOUChain('http://test-node.iyouchain.com');
const address = '0x59677fd68ec54e43ad4319d915f81748b5a6ff8b';
const contractWrap = (content) => {
return {
language: 'Solidity',
sources: {
'Adoption.sol': {
content
}
},
settings: {
outputSelection: {
'*': {
'*': ['*']
}
}
}
};
};
fs.readFile('Adoption.sol', 'utf8', async (error, data) => {
let output = JSON.parse(solc.compile(JSON.stringify(contractWrap(data))));
output = output.contracts['Adoption.sol']['Adoption'];
const contract = new youchain.you.Contract(output.abi);
console.log('object: ', output.evm.bytecode.object);
const encodeABI = contract
.deploy({
data: output.evm.bytecode.object,
arguments: []
})
.encodeABI();
youchain.you.estimateG