解读 EIP-3041:为 `eth_getBlockByHash` 响应新增 `baseFee` 字段的 JSON-RPC 接口扩展
解读 EIP-3041为eth_getBlockByHash响应新增baseFee字段的 JSON-RPC 接口扩展【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs本文以 EIP-3041EIPS/eip-3041.md为核心深入讲解该提案如何在以太坊 JSON-RPC 接口eth_getBlockByHash的响应对象中暴露 EIP-1559 引入的每区块基础费base fee。读完本文你将掌握eth_getBlockByHash的完整请求/响应结构、baseFee字段的 MUST/MUST NOT 语义、Quantity十六进制编码规则以及 base fee 在区块头、EVM 与 RPC 三层的落点并了解它与 EIP-1474、EIP-1559、EIP-3198 等姊妹规范的关系。一、提案背景为什么 RPC 需要暴露 base fee1.1 EIP-1559 在协议层引入了 base feeEIP-1559Fee market change for ETH 1.0 chain状态为 Final在共识层引入了每单位 Gas 的基础费base fee per gas概念每个区块的区块头新增base_fee_per_gas字段该值由协议根据父区块的 Gas 使用量与 Gas 目标值gas limit 除以弹性倍数自动上下浮动并被销毁burn矿工只能获得优先费priority fee。从 EIP-1559 的参考实现可以看到其Block数据类中明确包含base_fee_per_gas: int 0字段dataclass class Block: ... gas_limit: int 0 # note the gas_limit is the gas_target * ELASTICITY_MULTIPLIER gas_used: int 0 timestamp: int 0 extra_data: bytes bytes() proof_of_work: int 0 nonce: int 0 base_fee_per_gas: int 0同时EIP-1559 的验证逻辑给出了 base fee 的推导规则分叉块expected_base_fee_per_gas INITIAL_BASE_FEE初始值1000000000wei即 1 Gwei父块 Gas 使用量等于目标值base fee 保持不变父块 Gas 使用量高于目标值base fee 上调增量为max(parent_base_fee * gas_used_delta // parent_gas_target // 8, 1)父块 Gas 使用量低于目标值base fee 下调增量同理。也就是说base fee 是一个由共识保证、写入区块头、随网络拥堵程度上下波动的公开数值。正是区块头里多了一个字段这一事实催生了 EIP-3041 这样的接口层提案。1.2 动机更准确的气费预测EIP-3041 的 Motivation 段落明确写道base fee 是用户在某个给定区块需要的关键数值它对提高 Gas 价格预测的准确性至关重要Base fee value is important to make gas price predictions more accurate。在 EIP-1559 之前钱包和基础设施服务只能依赖eth_gasPrice见 EIP-1474这类动态接口来猜测下一个区块的费用而有了按区块公开的 base fee客户端就可以基于历史区块的 base fee 序列结合 EIP-1559 的调整公式外推未来几个区块的 base fee 区间从而让钱包自动设置max_fee_per_gas成为可能。二、规范详解eth_getBlockByHash的修改EIP-3041 属于 Standards Track / Interface 类提案其定位是对既有 RPC 方法的增量修改而非引入全新端点。提案要求 EIP-1474Remote procedure call specification即以太坊 RPC 规范与 EIP-1559 作为前置依赖。2.1 方法描述eth_getBlockByHash返回由哈希指定的区块信息。提案用 RFC-2119 的 MUST/MUST NOT 语气对baseFee字段的呈现做出硬性约束区块号在EIP-1559 分叉块之前的区块响应MUST NOT包含baseFee字段区块号在EIP-1559 分叉块及之后的区块响应MUST包含baseFee字段。这一按分叉点条件化的设计是 EIP-3041 规范的核心语义它保证了同一端点对历史区块pre-1559返回的结构与旧版客户端完全一致而对新区块则多出一个字段。2.2 参数不变Parameters remain unchanged.eth_getBlockByHash仍接受两个参数完整定义见 EIP-1474 的eth_getBlockByHash小节#类型说明1{Data}区块哈希64 个十六进制字符0x 前缀2{boolean}true返回完整交易对象false仅返回交易哈希调用示例原始请求体{ id: 1337, jsonrpc: 2.0, method: eth_getBlockByHash, params: [0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331, true] }2.3 返回对象新增字段在 EIP-1474 定义的块对象成员列表extraData、hash、logsBloom、miner、nonce、parentHash、receiptsRoot、sha3Uncles、stateRoot、transactionsRoot、difficulty、gasLimit、gasUsed、number、size、timestamp、totalDifficulty、transactions、uncles等基础上EIP-3041 为后 EIP-1559 区块追加一个新成员{Quantity}baseFee- 本区块的 base fee单位wei字段类型引用的是 EIP-1474 的Quantity编码规范Quantity值MUST以十六进制编码MUST带0x前缀MUST使用每个字节所需的最少十六进制位数禁止前导零零值MUST表示为0x0。因此baseFee: 0x7表示 7 weibaseFee: 0x3b9aca00表示 1 Gwei10^9 wei。示例中0x0400、0x00这类带前导零的写法都是非法 Quantity。2.4 完整请求/响应示例EIP-3041 给出了完整的 curl 调用与响应示例# Request curl -X POST --data { id: 1559, jsonrpc: 2.0, method: eth_getBlockByHash, params:[0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331, true] } url # Response { id: 1559, jsonrpc: 2.0, result: { difficulty: 0x027f07, extraData: 0x0000000000000000000000000000000000000000000000000000000000000000, baseFee: 0x7, gasLimit: 0x9f759, gasUsed: 0x9f759, hash: 0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331, logsBloom: 0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331, miner: 0x4e65fda2159562a496f9f3522f89122a3088497a, nonce: 0xe04d296d2460cfb8472af2c5fd05b5a214109c25688d3704aed5484f9a7792f2, number: 0x1b4, parentHash: 0x9646252be9520f6e71339a8df9c55e4d7619deeb018d2a3f2d21fc165dde5eb5, sha3Uncles: 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347, size: 0x027f07, stateRoot: 0xd5855eb08b3387c0af375e9cdb6acfc05eb8f519e419b874b6ff2ffda7ed1dff, timestamp: 0x54e34e8e, totalDifficulty: 0x027f07, transactions: [], transactionsRoot: 0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421, uncles: [] } }注意示例中baseFee为0x7即 7 wei与 EIP-3198BASEFEE opcode状态 Final测试用例中假设当前区块 base fee 为 7 wei的取值一致可互相印证。请求中的id取 1559 也并非随意——它呼应了 EIP-1559 的编号。三、设计取舍RationaleEIP-3041 的 Rationale 阐明了两个关键决策只加字段、不新增端点与其为读取 base fee 引入一个全新的 RPC 方法不如在既有eth_getBlockByHash响应中追加单个参数。这是改动最小、最容易被各客户端集成the simplest change that would be easiest to get integrated的方案。pre-1559 区块不返回 baseFee出于向后兼容考虑对 EIP-1559 分叉前的区块省略该字段。这样旧工具在读取历史区块时不会遇到意外的新键解析行为不变。四、向后兼容性与安全性向后兼容Backwards CompatibilityEIP-3041 声明完全向后兼容。凡是查询 EIP-1559 分叉前区块的调用响应中会省略baseFee字段既有客户端无需任何改动即可继续工作。安全性Security Considerations新增的baseFee字段是纯信息性informational数据其值原本就公开存在于区块头中不引入任何技术安全隐患。这一点与 EIP-3198 的安全考量base fee 并非敏感数据公开可查相互呼应。五、同系列姊妹提案与规范全景EIP-3041 并非孤立提案。同一作者Abdelhamid Bakhta围绕把 base fee 暴露到 RPC 响应这一主题在 EIPS 目录 中还提交了三个结构完全同构的姊妹提案均以 EIP-1474、EIP-1559 为前置依赖均处于 Stagnant 状态提案目标方法文件EIP-3041eth_getBlockByHash响应新增baseFeeEIPS/eip-3041.mdEIP-3044eth_getBlockByNumber响应新增baseFeeEIPS/eip-3044.mdEIP-3045eth_getUncleByBlockHashAndIndex响应新增baseFeeEIPS/eip-3045.mdEIP-3046eth_getUncleByBlockNumberAndIndex响应新增baseFeeEIPS/eip-3046.md四个提案共享完全相同的 MUST/MUST NOT 语义分叉前省略、分叉后必含、相同的Quantity类型、相同的 Rationale 与兼容性结论只是在方法名与参数上不同。例如 EIP-3044 的请求示例为{ id: 1559, jsonrpc: 2.0, method: eth_getBlockByNumber, params:[latest, true] }此外base fee 在接口层还有一个重要落点——EIP-3198BASEFEE opcode状态 Final为 EVM 增加了BASEFEE (0x48)操作码Gas 成本G_base2 gas让合约在链上直接读取当前区块的 base fee。至此base fee 形成了三层暴露体系共识层区块头base_fee_per_gas字段EIP-1559EVM 层BASEFEE操作码EIP-3198RPC 层eth_getBlockByHash等方法的baseFee字段EIP-3041 及姊妹提案。六、实际应用基于baseFee的 Gas 预测综合以上规范baseFee字段在工程上最典型的用途是按区块粒度的 Gas 价格预测通过eth_getBlockByHash或 EIP-3044 的eth_getBlockByNumber批量拉取近期区块解析每个区块的baseFee与gasUsed、gasLimit依据 EIP-1559 的调整公式BASE_FEE_MAX_CHANGE_DENOMINATOR 8、ELASTICITY_MULTIPLIER 2外推下一区块的 base fee钱包据此为用户设置合理的max_fee_per_gas与max_priority_fee_per_gas避免因max_fee_per_gas低于 base fee 而导致的交易无法打包EIP-1559 校验规则assert transaction.max_fee_per_gas block.base_fee_per_gas。实现时需注意的细节解析baseFee必须按 EIP-1474 的Quantity规则 解码0x 前缀、最少位数、零为0x0且要区分字段缺失pre-1559 区块正常现象与字段解析失败客户端实现异常两种情况——这正是 EIP-3041 强制 MUST/MUST NOT 语义的工程价值所在。七、状态说明与阅读建议截至本仓库收录的版本EIP-3041 的元数据状态为Stagnant停滞同系列 EIP-3044、EIP-3045、EIP-3046 亦为 Stagnant。需要说明的是实际主流客户端在后 EIP-1559 区块的eth_getBlockByHash响应中已普遍携带baseFee字段但本文严格以仓库文档为依据不对提案是否被正式采纳做任何断言。若想深入理解本条提案建议按以下顺序阅读本仓库文档EIPS/eip-1559.md —— 理解 base fee 的来源、块头字段与调整算法EIPS/eip-1474.md —— 理解 RPC 方法定义、Quantity/Data编码与错误码约定EIPS/eip-3198.md —— 了解 base fee 在 EVM 层的暴露方式EIPS/eip-3044.md、EIPS/eip-3045.md、EIPS/eip-3046.md —— 对比同系列姊妹提案的异同。八、版权声明本文所述规范内容源自 EIP-3041 等以太坊改进提案文档相关版权与相关权利已依据 CC0 协议放弃见 LICENSE.md。【免费下载链接】EIPsThe Ethereum Improvement Proposal repository项目地址: https://gitcode.com/GitHub_Trending/ei/EIPs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

typescript-eslint 如何用 TSESTREE_SINGLE_RUN 环境变量控制单次运行推断以优化 CI 速度?

typescript-eslint 如何用 TSESTREE_SINGLE_RUN 环境变量控制单次运行推断以优化 CI 速度?

typescript-eslint 如何用 TSESTREE_SINGLE_RUN 环境变量控制单次运行推断以优化 CI 速度? 【免费下载链接】typescript-eslint :sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript 项目地址: https://gitcode.com/GitHub_Tren…

2026/11/1 19:00:32 阅读更多 →
PostgreSQL报错invalid value for parameter timeZone Asia/Beijing的排查与修复

PostgreSQL报错invalid value for parameter timeZone Asia/Beijing的排查与修复

先说结论:这个invalid value for parameter "timeZone": "Asia/Beijing"的报错,我在中标麒麟上处理过不止一次。头一回遇到时,第一反应是去查系统时钟、查硬件时间、查NTP同步,折腾了大半天,最后发…

2026/11/4 15:50:15 阅读更多 →
SAP MDG工作流任务配置与代理分配实战指南

SAP MDG工作流任务配置与代理分配实战指南

聊到SAP-MDG的实施项目,最绕不开的一块硬骨头就是工作流任务配置。很多刚接触MDG的同事容易把注意力全放在数据模型、UI建模和校验规则上,等到了权限和审批环节,才发现工作流这一层才是真正决定系统能不能“跑起来”的关键。尤其当你面对的是…

2026/11/1 19:00:32 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/6 15:21:35 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/7 12:08:40 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/6 22:01:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/6 22:01:11 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/7 12:08:40 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/6 22:01:09 阅读更多 →

日新闻

周新闻

月新闻