主页 > imtoken限制中国用户该咋办 > 想了解gas fee,看这篇文章就够了

想了解gas fee,看这篇文章就够了

54a6e0c52b0a9cd780110b2c2417d366.png

问:什么是气体?

Gas 是指在以太坊上执行操作所需的“燃料”。

以太坊提供了一个虚拟机(EVM,Ethereum Virtual Machine),开发者可以在上面开发各种应用。 EVM相对于BTC的优势在于“图灵完备”,但这带来了一个潜在的风险,即一个程序可能会无休止地运行,这是EVM所不能容忍的。

因此,运行程序会消耗 gas。 这就像开一辆需要油费或电费的汽车。 当汽油或电力用完时,汽车会自然停下来。

Q:gas、gas price 和 gas fee 是一回事吗?

太好了,你注意到了。 汽油和汽油的成本显然不一样,对吧。

你使用 EVM 执行一笔交易,这需要一定数量的 gas,称为 gas 数。 类似于升油和度电。

而每一种gas都要花钱,gas有一个价格,叫做gasprice。 这类似于一升汽油的价格和一度电的价格。

Gas 费用是 Gas 数量乘以 Gas 价格。

比如你要部署一个合约,需要3,000,000 gas,gasprice为200gwei。 所以你要花的是:

3* 10^6 * 200 gwei = 3* 10^6 * 200 * 10^(-9) = 0.6 ETH

gasprice的计量单位是:gwei,一个gwei就是1g wei,也就是10^9 wei。

因为 1 wei = 10^(-18) ETH,所以:1 gwei = 10^9 wei = 10^(-9) ETH。

Wei 是 ETH 的最小单位,以 b-money 的创造者 Wei Dai 的名字命名。

Gwei读作ge wei(读音:大家快读:贵)。

问:谁来决定 gas 价格?

煤气价不是我们想象的那样,是政府统一定的,No!

它也不是由矿工定价的。

天然气的价格由交易的发送方指定。 伦敦升级前,发送方必须在交易中指定两个值,一个是gaslimit,一个是gasprice。

问:为什么以太坊的 gasprice 这么贵?

由于以太坊的流行,很多人都想在上面进行交易。 谁出价高,谁就更有可能被矿工执行,并被纳入区块。 矿工显然喜欢更高的汽油费。

因此,这更像是一场拍卖。 想要交易的人给出各种 gas 价格,矿工优先考虑出价高的人。

问:那么,gas limit 是多少?

操作越复杂,需要消耗的gas就越多。 有时交易的发送者无法计算出他需要花费多少gas费来执行该操作,因此他需要添加一个gas消耗上限以防止他的钱被意外花掉。 (如果没有这个机制,这可能会发生)

以太坊gas费_以太坊gas费用什么意思_以太坊gas怎么买

发件人设置气体限制。 如果 gas limit 没有用完,剩余的值将被发回。

如果 gas limit 耗尽,交易还没有执行,EVM 会抛出异常,结束代码执行,回滚发生的变化。 但是,由于矿工已经完成了他们的工作并花费了成本,所以已经花费的gas是不退还的。

所以gas limit应该高一点,太低一点,因为高了也无所谓,没花完的会退的。 如果低了,一旦没了gas,不仅你想要的操作完成不了,消耗的gas也不会retire你可以说是一场空局。

一个例子:

张三向李四转移1 ETH(也即ether的transfer操作)。
张三将gaslimit设为3万,gasprice设为200 gwei。
以太坊规定,transfer操作花费21000个gas,所以实际发生总费用是:
21,000 * 200 = 4,200,000 gwei,即0.0042 ETH。
这样,张三发送1.006 ETH,李四获得1 ETH,矿工获得0.0042 ETH,然后退还张三0.0018 ETH。
张三虽然将gaslimit设为3万,但实际只花了2.1万个gas,实际支出1.0042 ETH。
但如果张三将gaslimit设置为1万,这个操作就无法完成,而且10000个gas也没了,白白损失10000*200=200万gwei=0.002 ETH。

Q:气数是怎么计算的?

具体计算有点复杂,但有标准可查。 您可以在 GitHub 上查看 evm-opcodes1 和 DynamicgasCosts2。

在 EVM 中,每一次计算、操作和存储都需要 gas,例如:

Q:有什么方便的方法可以计算gas limit吗?

1、你的钱包帮你算,你的开发工具帮你算。

2、Web3内置了两个函数可以使用。 web3.eth.getgasprice 可以提供 gasprice 设置建议,estimategas 可以估算一个函数需要的 gas(带参数)。

3.如果你想看一个合约的函数调用消耗了多少gas,你可以去etherscan.io这样的网站看看这些交易实际消耗了多少gas(gas Used by Transaction)已经发生。

以太坊gas怎么买_以太坊gas费_以太坊gas费用什么意思

Q:在具体交易中应该如何指定这两个值?

一般来说,钱包或者开发工具会帮你做这两件事。 (你不需要人工来设置它)

例如,在小狐狸中以太坊gas费,有高、中、低三个选项供用户选择。

你不需要自己指定gaslimit和gasprice,最多只需要选择high、medium、low。

高、中、低的含义如下:

450c57f996a4e48ead940f3e48dd7848.png

如何选择交易手续费水平

粗略地说,如果你想让你的交易快速执行,就选择高费用,如果你不着急,就选择低费用。

现在大致展示一下不同的选择会带来哪些变化。

这是一笔转账交易,在中等费用的情况下,它看起来像这样:

7313611014843ca16fcbcabf1c80bc2d.png

如果您选择高额手续费,小狐狸会自动计算并提供如下:

bee3f3ba475915bcf137599cf4f549fd.png

如果选择低费用,则如下:

0ea472ca403abf2fd4d8af5aa782f032.png

这里的“fuel limit”就是刚才说的gas limit,只是没有出现刚才说的gasprice,而是出现了最高优先费(max priority fee)和最高费(max fee)。 这是因为在伦敦升级之后,对gas费有了新的规定,下面会介绍。

Q:听说不仅交易有gas limit,区块也有gas limit?

是的,每个区块都有gas上限(即区块内所有交易的gas总量)。 当达到这个上限时,必须产生一个区块,并且新的交易不能被包含在区块中。

而这个上限是由矿工投票决定的。

现在(伦敦升级后)上限是 30M(3000 万 gas)。 注意不是30M的存储空间,而是30M的gas。

一个区块中包含的气体总量可以称为区块大小。

注:本文首发于2022年2月7日

Q:伦敦升级带来了哪些变化?

伦敦升级后(以太坊于2021年8月5日完成伦敦升级),区块大小灵活,目标大小为15M,上限为30M。

以太坊gas费_以太坊gas费用什么意思_以太坊gas怎么买

London升级后,总gas费的计算方式依然是:gaslimit * gasprice。

但是gasprice分为两部分:

gasprice=基本费用+小费

其中basefee(基本费用)是协议根据区块大小自动计算的,但这部分会被销毁,矿工无法获取。

矿工只能得到Tips。 小费就是小费,或者写成书面形式,就叫Priority Fee。

当区块大于15M时,gas价格会上涨(通过自动调整basefee),目的是阻止更多的交易,从而使区块大小减小到15M; 反之,当区块小于 15M 时,Gasprice 会更便宜,交易量会增加,从而使区块大小始终在目标大小附近浮动。

伦敦升级(尤其是烧掉basefee)带来的好处很多,这里就不一一列举了。 有兴趣的可以看这两篇文章:EIP-15593解析,EIP-15594你需要知道的一切。

以下是伦敦升级后的 gas 费用计算示例:

张三给李四转1个ETH。
gaslimit为21,000,basefee为100 gwei,Tip为10 gwei,可以计算得出gas费为21,000 * (100 + 10) = 2,310,000 gwei,即0.00231 ETH。
当张三汇款时,1.00231 ETH将从张三的账户中扣除。李四将得到1个ETH。基本费用为0.0021 ETH会被烧掉,矿工获得0.00021 ETH的Tip。

问:如何设置这些值?

当然,这些也是钱包或开发工具为用户设置的。

basefee不需要设置(钱包无所谓),是根据上一个区块的大小和上一个basefee通过以太坊的算法自动计算出来的。

为了让用户更好地控制自己的钱,在实际交易中,设置了maxfee(他们愿意给出的最大gasprice)和maxpriorityfee(他们愿意给出的最大小费)。

maxfee 必须大于 basefee,然后,矿工将根据以下算法计算 Tip:

Tip = min(maxpriorityfee, maxfee - basefee)

如果 maxfee > basefee + Tip,超出的费用将由矿工退还给交易发送方。

例如:

张三给李四转1个ETH。
gaslimit为21,000,maxfee为150 gwei,maxpriorityfee设为10 gwei。

以太坊gas怎么买_以太坊gas费用什么意思_以太坊gas费

basefee为100 gwei,所以,Tip= min( 10,150-100) = 10 gwei,可以计算得出gas费为21,000 * (100 + 10) = 2,310,000 gwei,即0.00231 ETH。 当张三汇款时,21000 * 150 = 1.00315 ETH将从张三的账户中扣除。李四将得到1个ETH。基本费用为0.0021 ETH会被烧掉,矿工获得0.00021 ETH的Tip,矿工退回张三0.00084 ETH(即21000 * 40 gwei)。

注:上面提到的maxfe、basefee、tip都是per gas的。 计算实际成本时,需要乘以gas量。

您在不同场合看到的这些符号中,有些带有 pergas,有些则没有。 注意区分,一般都是指pergas。

还有一点,如果maxfee和maxpriorityfee设置为相同的值,maxfee就相当于之前的gasprice。

问:那么,基本费用是如何自动计算的?

basefee 由以太坊协议自动计算,它将前一个块的大小与目标大小 (15M) 进行比较。 如果超过目标块大小,下一个块的基础费用将根据目标块大小按比例增加,最高可达 12.5%。

例如,如果一个区块是 30M,达到上限,它的大小是目标大小的两倍,它的 basefee 是之前 basefee 的 112.5%。

如果区块大小保持在 30M,每个 basefee 将比前一个高 12.5%,导致指数增长。 当基础费用高到人们不愿意交易时,区块大小自然会回落。

在EIP-15595中,描述了这个算法的具体细节(看复杂度,不难理解):

Note: // is integer division, round down.
BASE_FEE_MAX_CHANGE_DENOMINATOR = 8
if parent_gas_used == parent_gas_target:
            expected_base_fee_per_gas = parent_base_fee_per_gas
elif parent_gas_used > parent_gas_target:
            gas_used_delta = parent_gas_used - parent_gas_target
            base_fee_per_gas_delta = max(parent_base_fee_per_gas * gas_used_delta // parent_gas_target // BASE_FEE_MAX_CHANGE_DENOMINATOR, 1)
            expected_base_fee_per_gas = parent_base_fee_per_gas + base_fee_per_gas_delta
else:
            gas_used_delta = parent_gas_target - parent_gas_used
            base_fee_per_gas_delta = parent_base_fee_per_gas * gas_used_delta // parent_gas_target // BASE_FEE_MAX_CHANGE_DENOMINATOR
            expected_base_fee_per_gas = parent_base_fee_per_gas - base_fee_per_gas_delta

以太坊gas费用什么意思_以太坊gas怎么买_以太坊gas费

Q:这些价值会体现在交易消息中吗?

是的,这是交易的示例 6:

{
  from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",
  to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",
  gaslimit: "21000",
  maxFeePergas: "300",
  maxPriorityFeePergas: "10",
  nonce: "0",
  value: "10000000000"
}

看到一些与里面的气体有关的东西。

传统交易消息中以太坊gas费,用户直接指定gasprice; 而在上述 EIP-1559 交易消息中,用户指定了 MaxFeePerGas 和 MaxPriorityFeePerGas。

您实际为每 gas 支付的单价为:

min( MaxPriorityFeePerGas + basefee, MaxFeePerGas )

值得注意的是,在可预见的未来,用户仍然可以使用传统的交易格式发送交易,但这种格式最终可能会在协议层被淘汰。

Q:最后,能再给我一些学习资料吗?

想看原汁原味的科普,可以看看这个7。

如果你喜欢看视频,你可以看看这个8,做得很好。

如果你想跟踪 gas 价格,你可以在 Etherscan 的 gastracker9 上查看。

如果您对细节感兴趣,可以阅读 EIP-1559。

文|魏建凡

EIP-1559分析()

关于 EIP-1559() 你需要知道的一切

eip-1559.md()

气体和费用()