web3.js 1.x 升级 4.x 迁移指南:`web3.*.net` 网络命名空间的破坏性变更与替代方案
区块链Web3【免费下载链接】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点击查看免费下载本文是 web3.js 官方升级指南系列中针对web3.*.net命名空间的迁移说明。web3.js 从 1.x 升级到 4.x 时bzz与shh两个模块被正式废弃导致web3.bzz.net与web3.shh.net下全部网络相关方法不可用。读完本文你将准确掌握本次破坏性变更的具体范围、web3.eth.net与独立web3-net包的推荐用法并通过源码调用链理解getId、isListening、getPeerCount底层对应的 JSON-RPC 方法顺利完成存量代码迁移。背景v1 中net命名空间的分布与 4.x 的收敛在 web3.js 1.x 中网络相关能力查询网络 ID、节点监听状态、连接的 peer 数量曾以多个命名空间暴露包括web3.net、web3.eth.net以及web3.bzz.net、web3.shh.net两组别名。其中bzzSwarm 去中心化存储与shhWhisper 消息协议属于早期生态组件在 4.x 中已不被维护。本次迁移指南位于 docs/docs/guides/15_web3_upgrade_guide/net_migration_guide.md将这一变化归类为Breaking Changes破坏性变更只要代码中仍引用web3.bzz.net.*或web3.shh.net.*在 4.x 下将直接无法调用。// web3.bzz.net is NOT available // web3.shh.net is NOT available破坏性变更清单六个不再可用的方法迁移指南明确列出了受影响的全部方法它们分布在bzz与shh两个命名空间下每个命名空间各三个废弃的调用原功能4.x 状态web3.bzz.net.getId/web3.shh.net.getId获取当前网络 ID不可用bzz、shh已废弃web3.bzz.net.isListening/web3.shh.net.isListening检查节点是否在监听 peer不可用bzz、shh已废弃web3.bzz.net.getPeerCount/web3.shh.net.getPeerCount获取已连接的 peer 数量不可用bzz、shh已废弃需要特别注意的是本指南只针对bzz/shh下的net命名空间。web3.eth.net与独立的web3-net包并未被移除它们正是官方推荐的迁移目标后续章节给出完整用法。迁移目标一使用web3.eth.net命名空间对于已经引入web3聚合包的工程最直接的迁移方式是把web3.bzz.net.*/web3.shh.net.*替换为web3.eth.net.*三个方法的签名与语义保持一致。从 packages/web3-net/src/index.ts 的示例可知典型用法import { Web3 } from web3; const web3 new Web3(Web3.givenProvider || ws://some.local-or-remote.node:8546); // 获取当前网络 ID返回 BigInt await web3.eth.net.getId(); // 5777n // 获取连接的 peer 数量返回 BigInt await web3.eth.net.getPeerCount(); // 0n // 检查节点是否在监听 peer返回 boolean await web3.eth.net.isListening(); // true三个关键要点返回类型变化4.x 默认以bigint返回getId与getPeerCount的数值示例中的5777n、0n这与 1.x 默认返回string或number的行为不同迁移时需要注意类型适配。provider 形态Web3.givenProvider优先读取注入的 provider未提供时回退到 WebSocket 地址与 1.x 的web3.currentProvider概念对应。命名空间挂载web3.eth.net由web3-eth包挂载Net实例实现web3.eth本身是模块入口见 packages/web3/src/eth.exports.ts 的导出组织。迁移目标二使用独立web3-net包如果工程只需要网络相关能力希望获得更小的依赖面与更好的 tree-shaking 效果官方推荐直接安装独立包packages/web3-net/package.json 中版本为 4.1.0支持 Node 14npm i web3-net # 或 yarn add web3-net之后通过两种方式使用import { Net } from web3-net; const net new Net(https://mainnet.infura.io/v3/YOURPROJID); console.log(await net.getId()); // 网络 ID console.log(await net.getPeerCount()); // peer 数量 console.log(await net.isListening()); // 是否在监听也可以只使用默认导出import Net from web3-net; const net new Net(Net.givenProvider || ws://some.local-or-remote.node:8546); await net.getId();从源码看Net类继承自Web3ContextWeb3NetAPI见 packages/web3-net/src/net.ts因此它天然复用web3-core的请求管理、上下文与 provider 配置体系构造函数可直接接收 HTTP/WebSocket 地址字符串或已注入的 provider 对象。源码级原理从Net方法到 JSON-RPC 调用链理解了迁移目标之后再深入一层看这三个方法在 4.x 中的真实调用链可以帮助你排查问题、自定义返回格式。第一层Net类的公开方法packages/web3-net/src/net.ts 中三个方法都带有returnFormat参数getId、getPeerCount支持isListening除外默认使用this.defaultReturnFormatpublic async getIdReturnFormat extends DataFormat typeof DEFAULT_RETURN_FORMAT( returnFormat: ReturnFormat this.defaultReturnFormat as ReturnFormat, ) { return rpcMethodsWrappers.getId(this, returnFormat); }第二层rpc_method_wrappers的格式化处理packages/web3-net/src/rpc_method_wrappers.ts 负责把 RPC 原始响应按returnFormat格式化。getId与getPeerCount都通过web3-utils的format函数以{ format: uint }规则把链上返回的十六进制数值转换为目标格式默认bigintisListening则透传布尔值export async function getIdReturnFormat extends DataFormat( web3Context: Web3ContextWeb3NetAPI, returnFormat: ReturnFormat, ) { const response await netRpcMethods.getId(web3Context.requestManager); return format({ format: uint }, response as unknown as number, returnFormat); }第三层真正的 RPC 请求最底层由web3-rpc-methods包封装packages/web3-rpc-methods/src/net_rpc_methods.ts通过Web3RequestManager.send发送 JSON-RPC 请求参数为空数组Net方法底层 JSON-RPC 方法返回值语义getId()net_version当前网络 ID十六进制字符串会被格式化为 uintgetPeerCount()net_peerCount已连接 peer 数量十六进制字符串会被格式化为 uintisListening()net_listening节点是否监听 peer布尔值这条调用链表明4.x 中net命名空间的能力并未减弱只是统一了入口与返回格式。你完全可以通过web3.eth.net或web3-net获得与 1.x 相同的网络信息且类型更安全、格式可控。测试验证行为由单元测试锁定仓库为web3-net提供了完整的单元测试可用于验证迁移后的行为是否符合预期。在 packages/web3-net/test/unit/rpc_method_wrappers.test.ts 中通过 mockweb3-rpc-methods断言getId(web3Net, returnType)会以web3Net.requestManager调用netRpcMethods.getId并验证不同returnType下的输出getPeerCount同样验证了 RPC 调用与格式化结果isListening断言其调用netRpcMethods.isListening(web3Net.requestManager)。测试固定了方法 → RPC 方法 → 返回格式的契约迁移后的代码只要通过web3.eth.net.*或Net实例调用即可复用这套已被验证的实现无需担心行为漂移。迁移检查清单对照以下清单逐项确认你的迁移是否完整全局搜索废弃命名空间在代码库中搜索web3.bzz.net.与web3.shh.net.务必全部替换不存在任何降级方案替换为web3.eth.netgetId→web3.eth.net.getId()isListening→web3.eth.net.isListening()getPeerCount→web3.eth.net.getPeerCount()或引入web3-net独立包import { Net } from web3-net按需实例化减小依赖面适配返回值类型getId/getPeerCount默认返回bigint如5777n涉及字符串拼接、JSON 序列化或与number运算的地方需要显式转换如需其他格式可传入returnFormat参数回归验证运行web3-net的单元测试yarn test配置见 packages/web3-net/package.json以及项目自身对网络方法的调用点确认替换后行为一致。完成以上步骤后你的代码将完全脱离已废弃的bzz/shh命名空间进入 web3.js 4.x 的现代 API 体系。更多同级模块的迁移指引如web3_eth_migration_guide.md、web3_utils_migration_guide.md位于 docs/docs/guides/15_web3_upgrade_guide/ 目录下可一并查阅。赞分享区块链Web3【免费下载链接】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点击查看免费下载相关推荐web3.eth 迁移指南从 web3.js 1.x 升级到 4.x 的破坏性变更全解析web3.eth 迁移指南从 web3.js 1.x 升级到 4.x 的破坏性变更全解析 本指南是 web3.js 1.x 升级到 4.x 系列文档的核心部分区块链Web3web3.js 4.x ENS 模块迁移指南从 web3.eth.ens 1.x 升级的破坏性变更与实战改造web3.js 4.x ENS 模块迁移指南从 web3.eth.ens 1.x 升级的破坏性变更与实战改造 本文档面向从 web3.js 1.x 升级到 4区块链Web3web3.js 4.x web3.eth.iban 迁移指南从 1.x 升级的三大破坏性变更与新版 Iban API 详解web3.js 4.x web3.eth.iban 迁移指南从 1.x 升级的三大破坏性变更与新版 Iban API 详解 本篇指南聚焦 web3.js 从区块链Web3上一篇FSPagerView 常见问题解决方案下一篇PermissionsKit 常见问题解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考