发交易前钱包给你看一个预估费用,交易完成后你想核对实际扣了多少,两个数字经常不一样。要弄清差在哪,得把”预估”和”结算”当成两套东西:预估发生在签名之前,是钱包根据当时行情猜的;结算发生在落块之后,由区块的实际情况决定。真正的账单写在交易回执里,核心就两个字段。
账单公式:gasUsed 乘 effectiveGasPrice
回执里 gasUsed 记录这笔交易实际烧掉的燃料量,effectiveGasPrice 记录实际成交的每单位燃料单价,两者相乘就是你这笔交易真实付出的手续费,再按 ETH 计价换算法币。发送时填的 gas limit 只是”最多允许烧多少”的授权上限,用不完的部分原路留在你余额里,并不会被扣走——这也是为什么调低 gas limit 省不了钱、只可能让交易因燃料不够而失败(详见 Gas Limit怎么填?为什么调低了省不了钱、只可能白白烧掉手续费)。gasUsed 则由执行本身决定:转账用不到多少,链上交互、批量操作、mint 会明显更多,失败的回滚同样消耗燃料。
单价是怎么定出来的
EIP-1559 之后,每笔交易的单价不再由出价者单方说了算。每个区块有一个协议自动调节的基础费,用量高于目标就涨、低于目标就降;你提交交易时报两个价:愿意给验证者的优先费上限,以及愿意付的总单价上限。结算时实际单价等于”区块基础费加优先费”,但不超过你报的总上限。三个数字各归各位:基础费直接销毁,不进任何人钱包;优先费归打包这个区块的验证者;你的总上限只是保险丝。所以网络不拥堵时你按预估出的价、成交时基础费降了,实付就比预估便宜;反过来行情跳涨、你设置的上限贴着原价,就可能顶格成交甚至一直排队。钱包预估页那几档速度档位的原理是把区块历史费用做了分位统计,见 钱包手续费的“慢速、标准、快速”三档数字从哪来,什么时候会失灵。
失败、退款与对账口径
两个高频困惑。其一,交易失败了手续费照样扣:失败了只是状态回滚,燃料已经烧了、基础费照样销毁,这是设计而非扣费错误。其二,“退 gas”的误解:链上不存在把手续费退回来的机制,你感觉”退了”通常是 gas limit 与实际消耗的差额从未离开过你的账户。对账时建议这样勾稽:抓回执里的 gasUsed、effectiveGasPrice、区块基础费三个数,验证”基础费加优先费不超过 maxFee”成立,再乘出来与钱包历史里显示的扣费对照;数字对不上,先检查是不是把多笔交易或代币合约代付(Gas Tank 类)算混了。
实操清单
签名前,看钱包给的预估区间而不是单点;签名后,交易落块再到浏览器回执页读实付,不要拿预估页当报销凭证。要复盘”这周手续费为什么贵”,把每笔回执的区块基础费列出来看趋势,比盯 ETH 价格灵敏得多。写记账脚本的话,统一用回执字段做数据源:gasUsed 与 effectiveGasPrice 在回执里是规范字段,各主流浏览器与节点都按同一口径暴露,跨工具可比。再补一个容易忽略的换算习惯:回执里的金额单位是最小的 wei,除以十的十八次方才得到常规 ETH 数;手算对账时先统一单位再比较,避免把”单价便宜了”和”单位看错了”当成同一件事。至于用几个确认、读哪条链尖来判定”这笔算不算数”,那是另一套与费用无关的判定线,账单归账单、状态归状态,分开核才不会互相污染结论。
风险提示
本文是链上费用机制科普,不构成投资建议。各钱包展示字段命名不同,交易回执字段以区块浏览器实际显示为准;涉及财务核算时请以可复核的链上原始数据为准。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。