以太坊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 * GasPrice(都由账户指定?)
据我了解,当交易处理完毕并在挖矿后,这笔费用将归矿工所有。另一方面,对于 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的计算方法的主要内容,如果未能解决你的问题,请参考以下文章