以太坊GasLimit的计算方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊GasLimit的计算方法相关的知识,希望对你有一定的参考价值。

参考技术A 以太坊黄皮书上说的gasLimit的计算方法:

gasLimit = Gtransaction + Gtxdatanonzero × dataByteLength

需要注意的是这只是静态的gas消耗,实际gas消耗还需要加上合约执行的开销。

计算 IntrinsicGas的源码位置 core/state_transition.go

相关源码位置:internal/ethapi/api.go

EstimateGas 采用二分查找法获取要评估交易的gas值。二分查找的下限是 param.TxGas , 如果 args 参数指定 Gas 大于 param.Gas ,那么二分查找的上限就是 args.Gas ,否则以当前pending块的block gas limit(后面简称BGL)作为二分查找的上限。 doCall 函数模拟智能合约的执行,经过多次尝试找到智能合约能够成功运行的最佳gas值。

由于二分查找的上限和BGL有关,而BGL和不是固定不变的,因此每次gas评估的结果不一定都是相同的,可能每个区块周期就会变动一次。

在实际进行gas评估的时候,可能会出现类似下面的错误

该错误出现的最可能是合约执行中出错。

How do you calculate gas limit for transaction with data in Ethereum?

以太坊交易费用、gas 限额和已用 Gas

【中文标题】以太坊交易费用、gas 限额和已用 Gas【英文标题】:Transaction fee, gasLimit and usedGas in Ethereum 【发布时间】:2019-05-21 06:33:46 【问题描述】:

我正在阅读有关以太坊中的 Gas 以及它如何用于控制执行的信息。有几点我不清楚:

TransactionFee = GasLimit * Gas​​Price(都由账户指定?)

据我了解,当交易处理完毕并在挖矿后,这笔费用将归矿工所有。另一方面,对于 EOA,它从余额中删除 GasUsed*GasPrice 的数量,GasLimit - GasUsed 的差值也返回给 EOA(如果交易有效)。 我的问题是:

    Gavin Wood 的论文中指定的帐户中没有气场。 GasLimit - GasUsed 如何退回账户?是不是转换成魏? 在 Andreas M. Antonopoulos 和 Gavin Wood 的“掌握以太坊”一书中,有一句话

“您只需为您的交易实际消耗的 gas 付费, 但你必须有足够的余额来支付你的最大金额 愿意在您发送交易前付款”

在gasLimit领域的论文中说

“这是在任何计算完成之前预先支付的,可能不会 增加”

该帐户用于支付什么费用? gasLimit 还是消费Gas?

    如果它为消费的Gas 付款,则不应向矿工支付消费的Gas 而不是transactionFee,因为从发送方提取的“钱”流向了矿工。 如果是TransactionFee,给矿工发件人消耗的Gas + Gas的差额,但这个差额也被退回到账户?!它就像以太坊一样使用两倍的相同差异。

我错过了什么?

【问题讨论】:

【参考方案1】: 交易签名者定义 gas 限制gas 价格。 在处理交易时,金额(gas limit * gas price)会从交易发送者的账户中扣除。 交易结束时,gas 使用量为gas used。发件人的帐户因未使用而记入贷方。该金额为 (gas limit - gas used) * gas price

所以最终结果是 gas used * gas price 已从发送者的账户中扣除,这是作为一部分记入矿工的金额他们的奖励。尽管从技术上讲,先扣除然后退款(以便在交易处理期间余额正确),但通常更简单地将其视为“您为使用的天然气付费”。我想这就是为什么你看到它在不同的地方有不同的描述。

回答您的个别问题:

    乘以汽油价格。这就变成了wei。 该帐户最终会支付刚刚消耗的 gas。 是的,矿工只获得消耗的气体的报酬。

【讨论】:

以上是关于以太坊GasLimit的计算方法的主要内容,如果未能解决你的问题,请参考以下文章

智能合约实战 gas gasprice gaslimit

以太坊开发如何开发一个编译以太坊智能合约并且发布的平台

区块链 以太坊 gaslimit 区块大小

以太坊源码交易流程源码解读

以太坊 Solidity block对象

1分钟搞清Gas/ Gas Price/ Gas Limit