拓冰建站拓冰建站
首页 / 资讯中心 / 正文

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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门