Gas 费 = 消耗的 Gas 量 × 每单位 Gas 的价格。用量取决于交易让以太坊做了多少计算,发一笔 ETH 和在去中心化交易所里兑换一次能差出好几倍;单价由协议设定的基础费加上发送方自愿附加的优先费组成,以 Gwei 标价,结算一律用 ETH。

换到 TRON 上是另一套算法:它不按 Gas 计费,把一笔交易的消耗拆成能量和带宽两种资源。在 TRON 上有 USDT 却转不出去,就卡在这一层。

转一笔 ETH、发代币、在 Uniswap 兑换各要多少 Gas

Gas 本身是计量单位,记的是计算量。以太坊上每个计算操作都有一个设定的 Gas 价格,一笔交易里所有操作的总成本,就是它的 Gas 费。操作越复杂,用掉的 Gas 越多,和智能合约交互比单纯发送一笔交易耗得多。

ethereum.org 的列表按交易类型给了消耗量:

交易类型 消耗的 Gas 单位数量
发送 ETH 21,000
发送 ERC-20 代币 65,000
转移 NFT 84,904
在 Uniswap 上兑换 184,523

发 ERC-20 代币的用量是发 ETH 的三倍多。代币的余额记在合约里,转一笔代币,就是请链上执行一次这份合约。在 Uniswap 上兑换是更复杂的合约操作,用量又接近发代币的三倍。

按计算量收费,是为了防滥用:计算要花 Gas,无论有意还是无意,拿大量昂贵交易去刷网络在经济上都不划算;网络对同一时刻能执行的计算量设了硬性限制,也是为了不让它不堪重负。

基础费(Base Fee)加优先费(Priority Fee):基础费被销毁,优先费给验证者

公式里的「每单位 Gas 的价格」是两项相加,完整的算式是:消耗的 Gas 单位数量 ×(基础费用 + 优先费)。

基础费用由网络设定,每笔交易都必须付,发送方自己压不下来。这部分不进谁的口袋,会被协议销毁(燃烧)。

优先费是可选的,用来激励节点运营者打包交易。交易里带了优先费,它会付给提议这笔交易的验证者。

在单价这一项上,发送方能调的只有优先费。急着让交易早点被打包,可以把优先费给高一些,这正是它存在的用途;不赶时间,就没必要在这一项上多给,省下的也只能是这一项。

优先费填 0,交易还能不能上链

技术上能。只付基础费的交易是有效的,但不太可能被选进区块:它没给验证者任何理由,在一堆等着的交易里先挑它。

优先费还有一层用处,是让验证者愿意把区块装满。验证者的质押奖励和区块里装了多少笔交易无关,没有优先费,少装甚至一笔不装,也不会受到协议的直接惩罚。

给多少算合适,没有固定的数,看发交易那一刻用的人多不多:需求大时要给得高些,才更有可能排进下一个区块;需求小时可以少给。多数钱包会把基础费加上一个推荐的优先费直接填好,不用自己逐项去定。

Gas Limit(Gas 上限):只封用量,填低了交易会失败

Gas 上限不是价格,是用量的封顶:你愿意让一笔交易最多消耗多少 Gas(ethereum.org 开发者文档的定义)。标准的 ETH 转账,需要 21,000 单位的 Gas 上限。

上限设高了,多出来的部分不会被用掉。举个例子:给一笔简单的 ETH 转账设 50,000 的上限,实际消耗 21,000,剩下的 29,000 退还给用户。

设低了,要分两种情况看。还是那笔 ETH 转账,上限只填 20,000,交易会在验证阶段失败,进区块之前就被拒绝,不消耗 Gas。另一种是交易已经开始执行,中途把 Gas 用光,例如智能合约跑到一半用尽了上限,这时虚拟机(EVM)会回退这笔交易做出的全部改动,但提供的 Gas 仍会因已经执行的工作被消耗掉。

后一种最吃亏:事没办成,费照样付了。给合约交互填上限时,宁可留些余量,别压到刚好,没用掉的那部分本来就会退回。

最高费用(maxFeePerGas):给单价设的封顶,多出的差额会退

Gas 上限管用量,单价这一头也能设一个封顶,叫最高费用,参数名是 maxFeePerGas:发送方愿意为每单位 Gas 最多付多少。它是可选的。交易要能执行,最高费用必须超过基础费与优先费之和;实际收的仍是「基础费 + 优先费」,最高费用比这个和多出来的部分,退给发送方。

算例拿 ethereum.org 开发者文档里的一笔转账来算:发 1 ETH,用量 21,000,基础费 10 Gwei,优先费 2 Gwei。费用是 21,000 ×(10 + 2)= 252,000 Gwei,即 0.000252 ETH,付款账户一共少了 1.000252 ETH,收款方收到 1 ETH。252,000 Gwei 里,21,000 × 10 = 210,000 Gwei(0.00021 ETH)的基础费被销毁,21,000 × 2 = 42,000 Gwei(0.000042 ETH)的优先费归验证者。再假设发送方把最高费用填成 20 Gwei(这个数是为演示另加的,文档的例子里没有):每单位多出 20 −(10 + 2)= 8 Gwei,退回 21,000 × 8 = 168,000 Gwei,即 0.000168 ETH。

最高费用留些余量有它的道理:基础费每个区块都可能变,交易要是没赶上眼前这个区块,下一个区块的基础费也许已经涨了,最高费用压得太贴,就可能够不上新的基础费与优先费之和。

钱包里没有 ETH,能转 USDT 这类代币吗

转不了。ethereum.org 有一句话说得很直接:「以太坊上的所有 gas 费都必须使用原生货币 ETH 支付。」

转代币也一样。把 USDT、USDC 这类 ERC-20 代币从钱包转出去,同样是一笔以太坊交易,要消耗 65,000 Gas,这 65,000 Gas 也只能用 ETH 付。代币余额再多,也抵不了它自己的转账费。

一个只存了 ERC-20 代币、ETH 余额为 0 的地址,发起转账时付不出 Gas,交易就发不出去。要补 ETH,得转进存着代币的同一个地址,走以太坊网络。原生币和代币怎么区分,同名代币又怎么认,见原生币、代币和合约地址。

交易所提币手续费和链上 Gas 费有什么不同

在交易所里提币,提币页上也会出现一笔网络手续费。它和自己在钱包里付的 Gas 有关联,但谁来付、怎么算都不一样。

具体扣多少,提币时就能看到:输入提现金额后,提币页会显示网络手续费和最终到账金额(币安的提币页就是这样)。

Gas 费为什么忽高忽低,什么时候便宜

Gas 价格每 12 秒就随以太坊的拥堵程度变一次。同一笔转账,用量不变,早几分钟发和晚几分钟发,算出来的费可以不一样。

涨价的机制:每当以太坊上的计算量超过某个阈值,Gas 费就开始上涨,超出越多,涨得越快。

推高需求的有几类:受欢迎的去中心化应用、NFT 或去中心化交易所上周期性增加的交易,以及高峰时段海量的用户活动。写得糟糕的智能合约也会多耗 Gas,用的人一多,可能把整个网络拖进拥堵。2017 年 11 月加密猫项目上线后人气飙升,就造成过严重拥堵和极高的 Gas 费(ethereum.org 举的例子)。

想少付一些,有三个办法:挑北美处于睡眠时间的时段,等几分钟让价格回落,或者把不必放在主网上的交易移到二层网络(L2)上做。交易发出去以后,想知道它有没有进区块,拿交易哈希到区块浏览器里查。

在哪里看实时 Gas 价格

多数钱包会算好 Gas 用量,把费用用更直观的方式显示出来。想在动手之前先看行情,ethereum.org 列了几种工具:

  • Etherscan 和 Blockscout 各有一个 Gas 价格估算器,后者是开源的;
  • ETH Gas Tracker 跟踪以太坊和二层网络两边的 Gas 价格;
  • Cryptoneur 的计算器能把主网、Arbitrum、Polygon 上不同类型交易的费用折成本地货币。

二层网络是建在以太坊之上的链,费用更低,能处理的交易也更多;开发者文档把二层扩容称作改善 Gas 成本的主要举措。

基础费每个区块调一次:上一个区块超过目标大小就涨,最多 12.5%

每个区块都有一个基础费,由它前一个区块算出来,不看当前这个区块里装了什么,所以下一个区块的基础费事先就能知道。

算法是拿前一个区块用掉的 Gas 总量和目标大小比。目标大小是区块 Gas 上限的一半,一个区块最多装到目标的 2 倍。这里的上限属于整个区块,和每笔交易自己填的 Gas Limit 同名,管的范围不同。前一个区块高于目标,基础费上调;低于目标,下调;正好等于目标,不变。幅度按偏离目标的程度线性计算:空区块降 12.5%,装到上限的区块涨 12.5%,每个区块的变动不会超过这个数。

假设区块 Gas 上限是 3,600 万,目标就是 1,800 万。区块一个接一个装满时,基础费这样走(ethereum.org 开发者文档的演示):

区块号 区块里的 Gas 基础费变动 这个区块的基础费
1 1,800 万 0% 100 Gwei
2 3,600 万 0% 100 Gwei
3 3,600 万 +12.5% 112.5 Gwei
4 3,600 万 +12.5% 126.6 Gwei
5 3,600 万 +12.5% 142.4 Gwei
6 3,600 万 +12.5% 160.2 Gwei
7 3,600 万 +12.5% 180.2 Gwei
8 3,600 万 +12.5% 202.7 Gwei

区块 1 正好装到目标,区块 2 的基础费没动;从区块 2 起连续装满,到区块 8,基础费从 100 Gwei 涨到 202.7 Gwei,翻了一倍多。区块 9 的基础费最高是 202.7 × 112.5% = 228.1 Gwei,钱包在发交易前就能把这个数告诉用户。照这个速度一直满下去,区块 30 是 2,705.6 Gwei,区块 50 是 28,531.3 Gwei,区块 100 是 10,302,608.6 Gwei。

基础费按指数涨,让区块长期装满在经济上撑不住,所以连续满区块不太会持续很久。高峰时等上几分钟,费用可能降下来一大截,道理在这里。区块的 Gas 上限也不是定死的,会随验证者的信号和网络升级调整。

Gwei 和 ETH 的换算:1 ETH 等于 10 亿 Gwei

钱包和 Gas 追踪器里,Gas 价格多以 Gwei 计。Gwei 是 ETH 的一个更小单位,1 ETH 等于 10 亿 Gwei,也就是 10^9 Gwei,谈论很少量的 ETH 时用它方便。

用量乘以 Gwei 单价,得出的是 Gwei 数,再除以 10 亿,就换成了 ETH。

算例基础费 9 Gwei、优先费 1 Gwei,这两个数是为了好算凑出来的整数。发送一笔 ETH 消耗 21,000 Gas:21,000 ×(9 + 1)= 210,000 Gwei;210,000 ÷ 1,000,000,000 = 0.00021 ETH。

不想手算,可以用本站的单位换算工具,ETH 和 Gwei、wei 之间,BTC 和聪之间,都能来回换。

可以把 Gas 费看成一笔计件工钱,件数大体由交易本身定下,单价却随发出那一刻网络的忙闲浮动。

常见疑问

Gas 费和矿工费是不是一回事?

中文里说的矿工费,指的就是链上手续费,放在以太坊上就是 Gas 费。只是叫法和收款方已经对不上:费用里的基础费会被协议销毁,只有交易里带的优先费付给提议交易的验证者,收钱的并不是矿工。

Gas 设高一点会不会多扣钱?

要看调高的是哪一项。费用按消耗的 Gas 单位数量乘以(基础费用 + 优先费)计算,把优先费调高,每单位的价格跟着变高,费用就会多。调高 Gas 上限则不同:上限只是愿意消耗的最大量,比如一笔 ETH 转账设 50,000 的上限,实际消耗 21,000,剩下的 29,000 退回。