主页 > imtoken钱包下载安卓教程 > 如何估算以太坊智能合约的gas?
如何估算以太坊智能合约的gas?
以太坊如何估算计算气体?在 Etherscan 上的交易信息中有 txn 使用的气体。结果与remix给出的结果和geth中getTransactionReceipt的gasUsed给出的结果一致。您可以直接使用 geth 或 remix 来模拟和估算 gas 成本。浏览器
之前还没有弄清楚以太坊gas查询,所以让我们尝试一下。重击
remix浏览器下方有一个可执行日志页面,可以详细调试,非常方便。微信
gas 成本有两个地方,交易成本和执行成本。这两者有什么区别?你可以参考他们的源代码。应用
简单地说:交易成本是指将交易发送到以太坊区块链的成本,它是根据数据大小的大小而定。部署合约时,基于合约内容的大小。执行成本是指虚拟机(VM)执行所需的成本,合约部署时会执行构造函数和一些初始化工作。功能
这是一个简单的合约测试:oop
contract Test {
bytes32 public tmp;
function test(
bytes32 input,
uint num
)
constant returns (bytes32){
bytes32 result = input;
for(uint i = 0; i < num; i++) {
result = sha3(result);
}
}
function set(bytes32 input, uint num) {
tmp = test(input, num);
} }
复制代码
如果直接调用常量函数,会由自己的节点发送。计算不会改变区块链上的值,也不会消耗gas,但是如果普通合约调用常量函数(非常量函数调用),需要矿工计算常量函数,所以会消耗气体。区块链
在上面的简单合约中,我让测试函数为第一个 bytes32 参数制作 sha3,第二个 uint 参数表示要制作多少个循环。我分别引入了set函数和test函数。 10个和1000个参数,结果如下。用户界面
set(“0x63d7db5ce060b288ecf5390594d5969bc1a206ceeb24df31cffcc8876df5e44b”, 10)
transaction cost:30628execution
cost:6988
复制代码
set(“0x63d7db5ce060b288ecf5390594d5969bc1a206ceeb24df31cffcc8876df5e44b”, 1000)
transaction cost:196022
execution cost:172318
复制代码
test(“0x63d7db5ce060b288ecf5390594d5969bc1a206ceeb24df31cffcc8876df5e44b”, 10)
transaction cost:25663 (cost only applies when called by a contract)
execution cost:2023 (cost only applies when called by a contract)
复制代码
test(“0x63d7db5ce060b288ecf5390594d5969bc1a206ceeb24df31cffcc8876df5e44b”, 1000)
transaction cost:191057(cost only applies when called by a contract)
execution cost:167353(cost only applies when called by a contract)
复制代码
ps:如果从执行成本中减去交易成本,1、3得到23640,2、4得到23704 spa
大致就是这样的过程。发现当参数设置为1000时以太坊gas查询,交易成本也会增加。 (初步猜测加上ps的计算:交易成本已经包括了执行成本,最后要支付给矿工的费用一起计算,因为每次相减的结果都很小)调试
另外,geth的estimateGas不准确的原因是一些不确定的算子操作会有所不同。例如,在一个合约中,如果blockhash的尾数是奇数,他会执行一个消耗大量gas的合约。 , 否则会执行 hello world 合约,所以在 gas 成本较大的情况下,它的 gas 成本是一半。
因此,请始终记住设置合理的 gas 限制,以保护自己免受恶意攻击。
还建议参考traceTransaction命令查看每个操作码的gas成本。为了确认矿工处理交易的状态,在 ropsten 测试网上做了一个简单的实验。先在 ropsten 水龙头上玩一点 ether,然后在 metamask 上发送交易,因为 ropsten 是一个模拟 pow 的环境,我相信它应该是正确的数字。
如果重要的话,我再说一遍结论:Etherscan上的交易信息中有一个txn使用的gas,结果和remix给出的结果和geth中getTransactionReceipt的gasUsed给出的结果是一样的,然后你可以直接使用 geth 或者 remix 模拟来估算 gas 成本。
参考:以太坊DApp开发实践介绍
可以加微信拉以太坊技术群聊。