eth_feeHistory怎么读? 图 1
eth_feeHistory怎么读? · 图 1

钱包要估算EIP-1559费用,不能只看一个“当前Gas价”。eth_feeHistory一次返回一段历史:每块的base fee、Gas使用比例,以及用户指定百分位上的有效优先费。最容易出错的是数组没有同样长度——baseFeePerGas故意比区块数量多一项。

请求先定义窗口与百分位

blockCount决定回看多少块,newestBlock可用区块号或latest、safe、finalized标签。rewardPercentiles必须递增并位于0到100,用来问“该区块中有多少Gas支付的有效优先费不高于这个值”。百分位不是交易数量排序,而是按Gas使用量加权。

多出来的base fee是什么

第i项baseFeePerGas对应窗口第i块,最后一项不是多抓到一块,而是依据最后区块Gas使用量推导的下一块base fee。钱包可用它构造maxFeePerGas上限,但下一块是否就是交易进入的块、网络是否继续拥堵仍不确定。

字段长度含义
oldestBlock单值窗口第一块高度
baseFeePerGasblockCount + 1每块base fee与下一块推导值
gasUsedRatioblockCount实际Gas/区块Gas上限
rewardblockCount × 百分位数按Gas使用量加权的有效优先费

响应数组为什么不等长

  1. eth_feeHistory按newestBlock和blockCount返回历史窗口;oldestBlock标明第一条记录的区块号。
  2. baseFeePerGas比区块数多一个元素,最后一项是根据窗口最后区块推导的下一块base fee;gasUsedRatio每块一个值。
  3. 提供rewardPercentiles时,reward按每个区块和百分位返回有效优先费,按Gas使用量加权;结果是历史分布而非打包承诺。

从历史分布到费用建议

可取最近若干块中位或较高百分位作为priority fee起点,再根据交易紧急度、连续拥堵和节点策略调整。maxFeePerGas应覆盖预期base fee增长加priority fee;实际支付仍由所在区块base fee和出价规则决定,并非总会花完上限。

费用估算器的数据校验

  1. 固定newestBlock标签与blockCount
  2. 校验百分位递增且范围有效
  3. 正确处理base fee多一项的对齐
  4. 对空块和零reward使用回退策略
  5. 发送后根据回执读取实际effectiveGasPrice

EIP-1559交易字段可先看以太坊交易Type 0到4,访问列表成本参考EIP-2930何时省Gas,交易完成后按回执核对实际费用。

一个历史窗口不能适配所有拥堵

gasUsedRatio接近1不代表每笔交易都支付高小费,reward也不包含base fee。单个异常块不应支配长期估价;同样,过长历史会掩盖刚发生的拥堵。估价器需要窗口、异常值和紧急度三层策略。