EIP-1559EIP费用Final(2021-08-05,伦敦升级)费用市场改革
把 Gas 价格拆成「销毁的基础费 + 给矿工/验证者的小费」,交易费变得可预测。
适用链:以太坊主网 + 多数 L2 / 兼容链
为什么重要:它改变的不只是费用:baseFee 会被销毁,使 ETH 具备通缩压力;也让「卡交易」的处理方式完全不同。
函数签名与选择器
选择器是签名的 keccak256 前 4 字节;事件则是完整的 32 字节 topic0。 点一下即可复制。
| 签名 / 字段 | 选择器 / topic0 | 说明 |
|---|---|---|
| baseFeePerGas | — | 由协议按上一个区块的填充率自动调整,用户无法直接设置。 |
| maxPriorityFeePerGas | — | 小费,直接给验证者,决定打包优先级。 |
| maxFeePerGas | — | 用户愿意支付的单价上限,必须 ≥ baseFee + 小费。 |
| 实际扣费公式 | — | 实际单价 = min(maxFeePerGas, baseFee + maxPriorityFeePerGas)。 |
| gasUsed / gasLimit | — | targetGas = gasLimit / 2,用满则下个区块 baseFee 上涨,用不满则下降。 |
代码模板
区块头里的费用字段
区块头里的费用字段JSON
费率推荐逻辑
费率推荐逻辑TypeScript
实现与使用时的常见陷阱
- ✕maxFeePerGas 设得过低时交易会一直挂在 mempool(baseFee 涨上去就永远不满足条件),只能靠替换交易取消。
- ✕baseFee 是销毁的,不是给矿工的。合约里读 block.basefee 可以拿到当前值。
- ✕在 L2 上仍沿用这套字段,但真正的成本大头往往是 L1 数据费(blob / calldata),两者要分开估算。