类型2交易最终每Gas价格不是maxFeePerGas,而是基础费加上受两个上限共同约束的小费。把“报价上限”误写成“实际扣款”会同时误导费用和成交判断。
站内已有通用Gas说明;本文只做EIP-1559类型2的字段、有效价格公式与具体数字复算。
三个容易造成错误结论的做法
- 不要这样做:用maxFeePerGas乘gasLimit直接展示“最终花费”
- 不要这样做:忘记maxFee必须覆盖当前基础费
- 不要这样做:把普通转账21000 Gas套到合约调用或失败交易
30 Gwei基础费的算例
设baseFee=30 Gwei、maxPriorityFeePerGas=2 Gwei、maxFeePerGas=50 Gwei,则有效小费是min(2, 50-30)=2 Gwei,实际Gas价格为32 Gwei。若交易实际使用21000 Gas,总费用为32 × 21000 = 672000 Gwei = 0.000672 ETH。
当基础费升到49 Gwei,有效小费只剩1 Gwei,价格仍不超过50;当基础费高于50 Gwei,该报价无法在该区块按上限执行。未使用的gasLimit不会按maxFee全部扣走,结算看gas_used。
| 字段 | 是什么 | 不是什么 |
|---|---|---|
| maxFeePerGas | 基础费与小费之和的价格上限 | 必然支付单价 |
| maxPriorityFeePerGas | 给验证者小费的上限 | 最终一定获得的小费 |
| gasLimit | 最多可消耗的Gas | 实际使用量 |
| gas_used | 收据中的实际消耗 | 钱包预估值 |
一手规范给出的结论
类型2字段表
EIP-1559类型2交易携带chain_id、max_priority_fee_per_gas、max_fee_per_gas、gas_limit、目标、金额、数据、access_list和签名字段。
实际价格公式
区块基础费被协议燃烧;实际每Gas价格等于基础费加上不超过maxPriorityFeePerGas且不突破maxFeePerGas的优先费。
基础费与小费流向
maxFeePerGas是价格上限而非预扣后必然支付值,最终总费用还取决于gas_used;基础费高于费用上限时交易不能在该区块按该报价执行。
基础费与小费流向实操清单
- 保存类型2交易的chainId、两个费用上限、gasLimit和data
- 在待打包区块读取baseFee并计算可用优先费
- 执行前用eth_estimateGas估算,但把估算与gasLimit分栏
- 交易确认后从收据读取gasUsed和effectiveGasPrice复算总费用
- 分别展示被燃烧基础费与验证者小费,不承诺成交时间
把报价失败边界写进回归测试
回归用例先准备一份黄金样本:对象、网络、版本和预期结果均已知。脚本完成“保存类型2交易的chainId、两个费用上限、gasLimit和data”后只保存原始数据,再由独立模块执行“在待打包区块读取baseFee并计算可用优先费”。黄金样本的作用是发现实现变化,不代表其他对象天然安全;测试报告必须注明它覆盖的具体范围。
负向用例至少两条。第一条构造“用maxFeePerGas乘gasLimit直接展示“最终花费””,第二条构造“忘记maxFee必须覆盖当前基础费”。两条用例分别运行,禁止同时改变多个字段。合格实现会保留原始错误并停止在对应层级;自动切换网络、猜测未知字段或引用旧缓存都应让用例失败。
状态用例在动作前取得类型2字段表快照,执行“执行前用eth_estimateGas估算,但把估算与gasLimit分栏”后再次取证,并对照实际价格公式和基础费与小费流向。如果状态由节点视图、缓存或索引延迟造成,结果应注明观察来源。A时点和B时点必须各自保留,不能只存一条被覆盖的最终记录。
发布前由人工检查结果页是否同时显示原始字段、推导规则、单位或版本以及三态结论。触发“把普通转账21000 Gas套到合约调用或失败交易”时,系统必须建议“交易确认后从收据读取gasUsed和effectiveGasPrice复算总费用”并停止自动动作。回归记录由此覆盖正常、错误、状态变化和人工接管四条路径。
来源、增量与风险边界
- Ethereum Improvement Proposals:正式接口、字段与规范语义。
- Ethereum Gas Docs:实现路径、兼容性或安全边界。
本文资料读取于2026-07-20。钱包的费用预测取决于未来区块拥堵和自身估算算法,本文不能把某次报价写成保证成交时间或最终支出。
站内相邻主题可继续阅读:Gas估算边界、交易类型与字段。费用预测会随未来区块拥堵变化。本文算例用于核对公式,不构成价格或成交时间承诺。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。