web3-eth 版本演进全解:从 4.0 到 4.11 的交易、Gas 与 RPC 能力变迁
web3-eth 版本演进全解从 4.0 到 4.11 的交易、Gas 与 RPC 能力变迁【免费下载链接】web3.jsCollection of comprehensive TypeScript libraries for Interaction with the Ethereum JSON RPC API and utility functions.项目地址: https://gitcode.com/gh_mirrors/we/web3.jsweb3-eth是 web3.js 生态中负责与以太坊区块链交互的核心模块封装了eth_*系列 JSON-RPC 调用、交易构造与发送、事件订阅等能力。本文以 packages/web3-eth/CHANGELOG.md 为主线结合仓库源码系统梳理web3-eth从 4.0.1-alpha 到 4.11.1 的功能演进脉络帮助你理解当前版本中交易发送、Gas 定价、错误解析、RPC 包装器、过滤与订阅等能力的来龙去脉并为从旧版本升级或评估是否使用新特性提供依据。一、模块定位与包结构web3-eth是 web3.js monorepo 中独立的 TypeScript 包从 package.json 可以看出它同时提供 CommonJS./lib/commonjs/index.js与 ESM./lib/esm/index.js双构建产物并依赖web3-core、web3-errors、web3-eth-abi、web3-eth-accounts、web3-net、web3-rpc-methods、web3-types、web3-utils、web3-validator、web3-providers-ws等兄弟包。核心入口为 src/web3_eth.ts 中的Web3Eth类它继承Web3Context既可独立使用也可经由web3聚合包的web3.eth访问import { Web3Eth } from web3-eth; const eth new Web3Eth(https://mainnet.infura.io/v3/YOURPROJID); const block await eth.getBlock(0);src目录还包含 rpc_method_wrappers.tsRPC 方法包装器、filtering_rpc_method_wrappers.ts过滤类方法、web3_subscriptions.ts订阅实现以及 src/utils 下的一组交易辅助工具交易构造、签名准备、Gas 定价、超时检测、回执等待等。CHANGELOG 中记录的绝大多数变化都落在这几个文件里。二、版本脉络总览CHANGELOG 记录的版本跨度如下版本阶段关键主题4.0.1-alpha.1 ~ alpha.5预发布依赖重构、错误类迁移、区块超时逻辑4.0.1-rc.0 ~ rc.2候选发布createAccessList、EIP-1559 交易类型、hybrid 构建4.0.1 ~ 4.0.3正式发布依赖更新、稳定性修复4.1.0 ~ 4.3.0功能增强默认填充 Gas、signTypedData、contractDataInputFill、默认 type 2 交易4.4.0 ~ 4.7.0持续演进getMaxPriorityFeePerGas、EIP-4844/4895/4788 字段、defaultReturnFormat4.8.0 ~ 4.11.1新能力与治理TransactionMiddleware、自定义交易 Schema、过滤方法导出、TypeScript 5下面按技术主题展开而非逐版本罗列。三、交易发送链路与回执等待3.1 sendTransaction / sendSignedTransaction 的演进sendTransaction与sendSignedTransaction是Web3Eth最核心的发送入口实现在 rpc_method_wrappers.ts。它们的形态在 4.0.1-rc.0 之后趋于稳定返回Web3PromiEvent可通过sending、sent、transactionHash、confirmation、error等事件流式观察交易生命周期。关键行为变化包括revert 检查与错误类型4.0.1-rc.0发送前默认执行checkRevertBeforeSending当交易 revert 时抛出或通过error事件发射以下可能的错误TransactionRevertedWithoutReasonError、TransactionRevertInstructionError、TransactionRevertWithCustomError、InvalidResponseError或ContractExecutionError。这些错误类在 web3-errors/src/errors/transaction_errors.ts 中定义。自定义 Solidity 错误解析4.0.1-rc.0SendTransactionOptions与SendSignedTransactionOptions新增contractAbi选项配合 ABI 即可解析合约自定义错误TransactionRevertWithCustomError。本地钱包索引支持4.0.1-alpha.5to字段支持本地钱包索引。gas 默认填充4.1.0sendTransaction默认通过estimateGas填充 gas除非交易构造器选项fillGas为false。3.2 区块超时与订阅式监听4.0.1-alpha.1 引入transactionBlockTimeout的实现逻辑随后在 4.3.0 修复了provider 不支持订阅时仍按订阅监听的问题确保调用provider.supportsSubscriptions()之后才走订阅路径。该能力实现在 src/utils/reject_if_block_timeout.ts记录起始区块号若区块推进数达到web3Context.transactionBlockTimeout则抛出TransactionBlockTimeoutError当 provider 支持订阅且enableExperimentalFeatures.useSubscriptionWhenCheckingBlockTimeout为true时改用newHeads订阅检测超时实验特性。该函数被 try_send_transaction.ts 与 wait_for_transaction_receipt.ts 复用共同构成trySendTransaction→waitForTransactionReceipt的发送-确认链路。4.4.0 又为发送事件补充了TransactionPollingTimeoutError的捕获。3.3 轻量交易与 Gas 边界4.7.0 修复了一个常见场景在checkRevertBeforeSending中若交易未设置data则 Gas 直接设为21000避免对纯转账交易做不必要的估算。4.8.1 则修复了 Geth 新实例在无区块时交易索引的问题。四、交易类型、EIP-1559 与 Gas 定价4.1 默认交易类型从 0 变为 24.3.0 起交易默认使用 type 2EIP-1559 动态费用交易而非 type 0与 1.x 行为保持一致。交易类型判定逻辑位于 src/utils/detect_transaction_type.ts内部定义了0x0、0x1、0x2三类交易的 JSON SchematransactionType0x0Schema、transactionType0x1Schema、transactionType0x2Schema。4.0.1-rc.2 重构了defaultTransactionTypeParser旧实现优先看transaction.hardfork而忽略gasLimit新实现按 EIP-2718 返回正确的交易类型并且当交易属性与transaction.type不兼容时抛出InvalidPropertiesForTransactionTypeError。在 transaction_builder.ts 中交易类型确定后若为0x1或0x2且未提供accessList会自动补accessList: []。4.2 Gas 填充与定价策略fillGas 与 fillGasPrice 分离4.0.1-rc.2 / 4.1.0prepareTransactionForSigning与defaultTransactionBuilder接受可选fillGasPrice标志默认不再填充 gas pricegas limit 默认仍填充。ignoreGasPricing4.10.0populateGasPrice会检查Web3Context.config.ignoreGasPricing为true时不再估算gasPrice见 send_tx_helper.ts。baseFeePerGas 为 0x0 的网络4.7.0当网络返回baseFeePerGas 0x0时改用getGasPrice方法填充maxPriorityFeePerGas与maxFeePerGas兼容无 EIP-1559 的链。这些逻辑分布在 transaction_builder.ts、prepare_transaction_for_signing.ts、get_transaction_gas_pricing.ts 与 send_tx_helper.ts 中。4.3 新增的 Gas 相关 RPC 包装器4.5.0 新增eth.getMaxPriorityFeePerGas方法其包装器在 rpc_method_wrappers.ts 中通过ethRpcMethods.getMaxPriorityFeePerGas调用底层 RPC并对返回的uint按returnFormat格式化。五、data 与 input交易字段规范化CHANGELOG 记录了data/input处理策略的两次重要调整4.0.1-rc.1formatTransaction会将data替换为inputsignTransaction返回的交易对象统一使用gas字段名无论 provider 使用什么属性名isTransactionCall在提供value.input时校验其isHexStrict。4.1.0input与data不再自动互相填充。用户提供哪个属性就格式化并发送哪个属性给 RPC provider只有从 RPC 响应返回的交易对象才同时包含input与data。相关实现见 utils/format_transaction.ts。4.0.1-rc.2formatTransaction不再因为对象同时含data与input且值相同而抛出TransactionDataAndInputError。与之配套的配置项是 4.2.0 引入的contractDataInputFill定义于 web3-core/src/web3_config.ts默认值为data可选data | input | both决定合约方法send、call、estimateGas向 provider 发送时填充data、input还是两者。六、交易回执、区块与订阅的格式化演进6.1 区块字段与 EIP 支持4.0.1-alpha.1修复getBlock在hydrated: true时返回空交易对象的问题。4.6.0getBlock返回值与withdrawalsSchema、blockSchema、blockHeaderSchema补齐 EIP-4844blob、EIP-4895withdrawals、EIP-4788beacon root相关字段Schema 定义见 src/schemas.ts。4.8.2区块内无交易时transactions返回空数组而非undefinedgetTransactionReceipt不再强转为TransactionReceipt返回类型更精确。6.2 newHeads 订阅4.1.0 修复了blockHeaderSchema缺失字段导致newHeads订阅响应缺属性的问题4.1.1 为NewHeadsSubscription的formatSubscriptionResult补充返回类型。订阅实现位于 web3_subscriptions.tsWeb3Eth内置logs、newPendingTransactions、newHeads、syncing四类订阅其中pendingTransactions与newBlockHeaders是 1.x 兼容别名。七、RPC 方法包装器的扩充7.1 createAccessList4.0.1-rc.0对应eth_createAccessList用于 EIP-2930 访问列表预演。包装器见 rpc_method_wrappers.ts内部通过formatTransaction格式化交易调用ethRpcMethods.createAccessList并支持blockNumber参数默认取web3Context.defaultBlock。7.2 signTypedData4.1.0为eth_signTypedData与eth_signTypedData_v4提供统一包装器并新增Web3Eth.signTypedData方法见 rpc_method_wrappers.ts。调用方式形如await eth.signTypedData(address, typedData, useLegacy);其中useLegacy决定走 v1/v4 哪条 RPC。7.3 过滤方法导出4.11.0createNewPendingTransactionFilter、createNewFilter、createNewBlockFilter、uninstallFilter、getFilterChanges、getFilterLogs从Web3Eth与 filtering_rpc_method_wrappers.ts 中导出补齐了传统 filter 工作流。八、错误处理与 revert 原因解析错误类迁移4.0.1-alpha.1web3-eth/src/errors.ts中的错误类迁移至 web3-errors/src/errors/transaction_errors.ts统一错误归类。getRevertReason 移除4.0.1-rc.0该函数不再导出revert 原因解析统一由checkRevertBeforeSending与contractAbi选项承担。相关解析逻辑在 utils/get_transaction_error.ts 与 utils/get_revert_reason.ts 中。九、可配置性与自定义 Schema9.1 customTransactionSchema4.9.0 将web3Context.config.customTransactionSchema透传给formatTransactionvalidateTransactionForSigning也支持{ transactionSchema?: ValidationSchemaInput }。4.10.0 允许getEthereumjsTxDataFrom在自定义 Schema 下返回额外字段。这为接入非标准链/私有链交易字段提供了扩展点。9.2 defaultReturnFormat4.7.0所有带ReturnType参数的方法都支持defaultReturnFormat配合FMT_BYTES/FMT_NUMBER见 web3-types可统一控制返回的字节与数字格式。9.3 TransactionMiddleware4.8.0sendTransaction接受可选的TransactionMiddleware参数Web3Eth提供setTransactionMiddleware/getTransactionMiddleware用于自动注入见 web3_eth.ts。中间件与数据类型从包内导出为交易签名、改写等中间处理链提供机制。十、架构与工程化变迁依赖收敛4.0.1-alpha.1Web3EthExecutionAPI改从web3-types导入RPC 方法改从web3-rpc-methods的ethRpcMethods导入Web3NetAPI改从web3-types导入相关测试随迁至web3-rpc-methods。移除 ethereumjs 依赖4.0.1-rc.1删除ethereumjs/tx与ethereumjs/common交易序列化回归自研实现。hybrid 构建4.0.1-rc.1引入 ESM/CJS 双构建4.0.1-alpha.4 将tsc产物从dist/迁至lib/。Buffer → Uint8Array4.0.1-rc.2全面以Uint8Array替代Buffer提升浏览器兼容性。浏览器 setImmediate polyfill4.0.1-alpha.1引入setimmediate包支持浏览器环境。TypeScript 54.11.1构建链升级至 TypeScript 5。这些工程调整同样体现在 package.json 的build:cjs/build:esm/build:types脚本与依赖清单中。十一、升级与选型建议关注默认行为的改变4.3.0 起默认 type 2 交易、4.1.0 起默认估算填充 gas、4.1.0 起input/data不再自动互相填充——升级时需回归测试交易构造与签名结果。利用新错误类型将 revert 处理迁移到 4.0.1-rc.0 引入的TransactionRevert*系列错误并结合contractAbi解析自定义错误。按需使用中间件与自定义 SchemaTransactionMiddleware与customTransactionSchema为多链、私有链与交易改写场景提供了官方扩展口。过滤方法已补齐如需传统 filter 轮询工作流4.11.0 后可直接使用导出的六个过滤方法。更多模块内行为可继续阅读 README.md 与 CHANGELOG.md 原文并结合 unit 测试 与 integration 测试 验证具体行为。【免费下载链接】web3.jsCollection of comprehensive TypeScript libraries for Interaction with the Ethereum JSON RPC API and utility functions.项目地址: https://gitcode.com/gh_mirrors/we/web3.js创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Atlas 300V 24G推理卡实战:YOLO模型转换与部署全流程解析

Atlas 300V 24G推理卡实战:YOLO模型转换与部署全流程解析

我自己在项目里也折腾过好几块推理卡,从最早的GPU方案到后来为了压低功耗和成本换到国产加速卡,中间踩过的坑确实不少。最近因为一个边缘端项目需要做实时目标检测,手头正好拿到一张 Atlas 300V 24G,网上关于这张卡的争议也挺多&a…

2026/9/22 0:05:50 阅读更多 →
PT 助手 Plus 跨浏览器兼容指南:让一个 Web Extension 在 Chrome / Edge / Firefox 行为一致

PT 助手 Plus 跨浏览器兼容指南:让一个 Web Extension 在 Chrome / Edge / Firefox 行为一致

PT 助手 Plus 跨浏览器兼容指南:让一个 Web Extension 在 Chrome / Edge / Firefox 行为一致 【免费下载链接】PT-Plugin-Plus PT 助手 Plus,为 Microsoft Edge、Google Chrome、Firefox 浏览器插件(Web Extensions),主…

2026/9/22 0:05:36 阅读更多 →
5分钟云函数实战指南:在浏览器里写完、调试并发布一个laf函数

5分钟云函数实战指南:在浏览器里写完、调试并发布一个laf函数

5分钟云函数实战指南:在浏览器里写完、调试并发布一个laf函数 【免费下载链接】laf Laf is a vibrant cloud development platform that provides essential tools like cloud functions, databases, and storage solutions. It enables developers to quickly unle…

2026/9/22 0:07:56 阅读更多 →

最新新闻

3个坑让你的一命呜呼代码跑通:附完整示例

3个坑让你的一命呜呼代码跑通:附完整示例

3个坑让你的一命呜呼代码跑通:附完整示例 刚接手一个老旧的日志解析系统,老板扔来一段从网上抄来的正则匹配代码。我满怀信心地运行,结果直接报错,日志里全是乱码,程序瞬间崩溃,真是一命呜呼。那一刻我才明白,复制来的代码跑不通,往往不是环境问题,…

2026/9/22 0:48:13 阅读更多 →
h5游戏是什么意思:3个实战项目拆解面试高频考点

h5游戏是什么意思:3个实战项目拆解面试高频考点

h5游戏是什么意思:3个实战项目拆解面试高频考点 翻开官方文档,H5游戏的定义藏在第三页的脚注里,翻到第五页就开始讲 Canvas…

2026/9/22 0:48:13 阅读更多 →
搞懂微信身份证实名认证:3个高频面试题与避坑实战

搞懂微信身份证实名认证:3个高频面试题与避坑实战

搞懂微信身份证实名认证:3个高频面试题与避坑实战 昨晚十点,我盯着IDE里那一长串红色的StackTrace,脑子嗡嗡的。 java.lang.RuntimeException: User auth failed…

2026/9/22 0:48:13 阅读更多 →
华为云桌面终端CT3200拆机解析与实战配置指南

华为云桌面终端CT3200拆机解析与实战配置指南

这几年做企业网运维和桌面虚拟化项目,华为云桌面终端CT3200是我经手比较多的设备。它个头不大,干的事却不小——把一台传统办公PC的计算任务全部搬到了云端,终端只负责接入和显示。这篇文章我准备从硬件拆解一路讲到实战配置,把部…

2026/9/22 0:48:13 阅读更多 →
SAP HANA备份恢复的链条思维与实战策略

SAP HANA备份恢复的链条思维与实战策略

1. SAP HANA备份恢复的本质:链条思维在SAP HANA数据库运维领域,我见过太多团队把备份恢复简单理解为"定期生成备份文件"的工作。这种认知偏差在实际恢复场景中往往会带来灾难性后果——当真正需要恢复数据库时,才发现手头的备份文件…

2026/9/22 0:48:13 阅读更多 →
压印底层图解原理:3步读懂Java对象内存与GC机制

压印底层图解原理:3步读懂Java对象内存与GC机制

压印底层图解原理:3步读懂Java对象内存与GC机制 盯着满屏红色的 StackTrace 报错,你是不是只想砸键盘?别慌,这通常是 JVM 内存模型里的“压印”机制在作怪。很多初学者看到 OutOfMemoryError 或…

2026/9/22 0:47:13 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →