你的钱包已经准备好发送,可它没有给你一个干净的确认按钮,而是在最高交易费旁边挂了一条警告。此刻还什么都没有失败。那个数字是你正在授权的一个上限,而不是你已经同意支付的一笔费用,警告说的是这个上限越过了钱包一直盯着的某条线。它越过的是哪条线,才是“这笔交易根本发不出去”与“这笔交易只是看着让人不舒服”之间的区别。
最高交易费到底是什么
产生那个数字的是两个设置,而它们里的哪一个都不是价格。第一个是 gas 上限,ethereum.org 把它定义为你愿意在一笔交易上消耗的 gas 的最大量。第二个是每单位 gas 的最高费,那份文档把它描述成你愿意为自己这笔交易被执行而支付的一个上限。把两者相乘,你就得到了最高交易费。
所以它是一个由两个最坏情况搭出来的最坏情况。它回答的是这件事可能要花你多少钱,而不是它将要花你多少钱。拿一笔普通的以太转账来说,它需要 21,000 单位 gas 的 gas 上限,再假设你的钱包把每单位的最高费设成了 30 gwei。上限就是 0.00063 ETH,而钱包给你看的正是这个数。
钱包展示上限而不是估算值,是因为上限才是在网络肯看这笔交易之前、必须已经躺在你账户里的那个金额。界面上摆在它旁边、一切更友善的数字,都是预测。
为什么这个数比你预期要付的费用大
自 EIP-1559 起,你为每单位 gas 支付的价格分成两部分:一笔由网络设定并销毁的基础费,以及一笔归打包你的人的优先费。你的最高费,是罩在这两者之和上的天花板。把它们连起来的规则,开发者文档写得很直白:最高费必须超过基础费与小费之和,而发送方会被退还最高费与基础费加小费之和的差额。想要这两个部分背后的完整机制,可以看我们关于 gas 费的讲解。
给同一个例子配上数字。如果你的交易被打包时基础费落在 12 gwei,而你的小费是 1 gwei,有效价格就是 13 gwei,于是这笔转账花掉 0.000273 ETH。剩下的 0.000357 ETH 从来没有被花掉。它被授权了、在交易挂起期间被冻在你够不着的地方,然后被释放。
这就是为什么留余量其实很便宜、看上去却很贵。把你的上限翻一倍,并不会让费用翻一倍,因为 gas 费的定价方式是在打包那一刻由网络定下的,而不是由你的上限定的。上限翻倍,翻的只是授权额,而授权额正是屏幕上的那个数。
钱包会拿你的上限跟三样东西比
| 上限被拿来比的东西 | 钱包为什么要标出来 | 会不会挡住发送 |
|---|---|---|
| 你的账户余额 | 余额要同时盖住转账金额与整个上限 | 会 |
| 你正在发送的金额 | 费用比它搬动的那笔钱还大,值得再看一眼 | 不会 |
| 钱包自己的费用建议 | 一个远高于当前行情的上限,读起来像多打了一位数 | 不会 |
只有第一行是协议的规则。另外两行是钱包在替你做判断,在你动手去找某个设置改之前,这一点值得先知道:这三条警告里有两条是可以读懂、理解,然后直接确认过去的。
超过余额,才是真正拦住你的那一条
余额这一关写在规范里:它断言签名者的余额至少要等于 gas 上限乘以每单位 gas 的最高费,再加上正在发送的金额。网络查的是上限而不是预期成本,因为在做这个检查的那一刻,还没有人知道最终打包区块里的基础费会是多少。
由此而来的实际后果常让人意外:你没法在一笔交易里把余额全部发走,而差的那一块并不是费用,是费用之上的那个上限。钱包上的全部发送按钮留下一个别扭的零头,做的就是这件事。调低每单位 gas 的最高费会缩小上限、腾出空间,但只能降到某个地板为止,下一节讲的就是你降到地板以下会发生什么。
超过你正在发送的金额,是一次判断题
在一条繁忙的链上,一笔小额转账花掉的钱可能比它搬动的还多。这不是故障,也不是哪里配错了的迹象。网络给计算与区块空间定价,而不给骑在上面的那笔支付的大小定价,所以在同样两个账户之间,转几个单位的价值和转一笔巨款,成本是一样的。
这条警告真正在告诉你的是:这笔转账在此刻不划算。答案是等一个清净些的时段、把几笔支付合并成一笔交易,或者把这类活动挪到更便宜的网络上。把费用设置改高或改低,对这些都没有帮助,因为你发送的金额根本就不是费用的输入项。
相反的抱怨:上限低于基础费
同一个设置在被设得太低时,会产生相反的警告。规范要求每单位 gas 的最高费至少要等于所在区块的基础费,所以一个低于当前基础费的上限,会让你的交易没有资格被纳入。它不会大声失败。它会待在内存池里,看着一个又一个区块从它身边过去。
等基础费自己降下来迎接你,比听上去要慢。基础费每个区块最多变动 12.5%,也就是它上一个值的八分之一,因为 EIP-1559 里那个变动分母是八。所以一个远低于当前基础费的上限,不会在接下来一两个区块里被够到,而在出块快的链上,那仍然是很长一段什么都不发生的时间。
补救办法是把上限抬上去,而不是等它自己变得够用。在账户模型的链上,这意味着用同一个 nonce、带一笔确实更高的费用重发。在比特币上,对应的动作是手续费替换,也就是把同一笔交易带着更大的费用重新广播出去。
gas 上限、最高费与优先费:该改哪一个
| 设置 | 它给什么设上限 | 什么时候该调高 | 调高它会发生什么 |
|---|---|---|---|
| gas 上限 | 这笔交易被允许消耗的工作量 | 交易的 gas 不够用了 | 上限与余额那一关一起变大 |
| 每单位 gas 的最高费 | 每单位 gas 的总价格 | 你的上限低于基础费 | 授权额变大,预期费用不变 |
| 优先费 | 你付给打包你的验证者的小费 | 你需要更快被纳入 | 你实际付出的钱变多 |
最后一列里的那种不对称,正是关键。调高最高费,动的是上限,预期费用留在原地;而调高小费,动的是费用本身。所以一条关于上限的警告并不是一条关于价格的警告,把它当价格看,会让人去削错设置。
在这种情况下应当别碰的设置是 gas 上限。它管的是这笔交易被允许做多少工作,而不是那些工作值多少钱,所以为了消掉一条费用警告去调高它,只会把上限与余额要求一起撑大,而对能不能被纳入毫无作用。没用掉的 gas 会被退还,这就是为什么一个过大的上限本身不构成一笔费用,但它仍然是一份你已经签过字的授权。
退还这件事盖不住的,是失败。一笔跑起来之后已回退的交易,仍然要为它停下来之前做过的工作付钱,所以在合约调用上,那个上限不像在简单转账上那样,只是一个纯理论的数字。
小结
最高交易费是 gas 上限乘以每单位 gas 的最高费,它是一个上界而不是一个价格。你的账户必须能盖住它,它与有效价格之间的差额会回到你手里,而钱包关于它的警告,是一条关于授权额有多大的警告。
读这条警告的方法,是问它由哪一次比较触发。跟余额比,它是硬性拦截,要么上限降下来、要么金额降下来。跟支付金额比,它是在提醒你今天这笔转账值不值得做。跟钱包自己的建议比,它是在替你检查一个打错的设置。而当抱怨反过来、上限低于基础费时,并没有什么东西卡住到坏掉的程度,因为一笔网络不肯给它定价的交易,压根就没有进过队列。想系统学习更多加密基础知识,可以关注 Bitbase(币贝)学院的后续内容。
相关阅读
币贝上与本主题相关的其他文章:
- 加密波动率指数解析:BVIV、EVIV 与 CVI 入门
风险披露:本文为 Bitbase(币贝)学院的科普内容,仅供教育与信息参考,不构成任何投资、交易、税务或财务建议。加密资产波动剧烈,请自行评估风险。本文撰写于 2026 年 9 月,请以官方最新信息为准。
参考资料
[1] ethereum.org,开发者文档,Gas and fees ethereum.org
[2] Ethereum Improvement Proposals,EIP-1559: Fee market change for ETH 1.0 chain,状态 Final eips.ethereum.org
[3] ethereum/execution-specs,src/ethereum/forks/london/fork.py,check_transaction 函数(标签 v2.20.0,提交 2004296) github.com






