进阶 docs.web3js.org 2026-10-19 02:32:29 · 17 阅读

第4章 Web3.js 使用指南与 TypeScript 集成实践

Web3.js 库将于 2025 年 3 月 4 日停止维护。有关迁移指南及更多详情,请参阅 Chainsafe 博客 →

使用 TypeScript 库在任意 EVM 链上构建 dApp

npm i web3

深受信赖

为何选择 Web3.js?

Web3.js 创立于 2014 年,是最资深的 web3 库。凭借详尽的文档、活跃的社区和模块化设计,Web3.js 既强大又易用。

借助 Web3.js,你可以: - 将智能合约部署并作为 TS/JS 对象进行交互 - 订阅特定的链上或智能合约事件 - 与以太坊名称服务(ENS)交互 - 创建和导入账户,签署数据和交易 - 从以太坊节点获取区块和状态信息 - 使用为以太坊 dApp 和 web3 包内置助手的工具包

Web3.js 特性

JSON-RPC API 抽象层 简化交互,优化开发者体验。

动态合约类型及完整的 TypeScript API 通过严格的类型检查增强安全性和可靠性。

最高效的 ABI 编码器与解码器 在打包过程中仅包含所需部分,以优化性能。

ESM 和 CJS 模块构建 同时支持 ECMAScript 模块和 CommonJS 模块构建,便于灵活集成到各种项目配置中。

自定义输出格式化器 可将任何返回值格式化为字符串、数字、BigInt 等,灵活处理输出数据。

语言对齐 严格遵循官方以太坊术语。

第一步:导入 Web3 模块。 import {Web3} from "web3";

// 使用 node rpc url 在 sepolia 测试网中设置 provider const web3 = new Web3("https://rpc.sepolia.org"); // 与智能合约交互 const abi = [ { outputs: [ { internalType: "uint256", name: "randomNo", type: "uint256", }, ], name: "generateRandomNumber", stateMutability: "nonpayable", type: "function", }, ] as const; const address = "0xA36432F7B12f160F685717c4Ab12EB883a682810"; // 提供 ABI 和地址,创建一个新的合约对象 const contract = new web3.eth.Contract(abi, address); // 使用 contract.methods 获取值 contract.methods .generateRandomNumber() .call() .then(console.log);

第二步:初始化 Web3 provider。 import {Web3} from "web3"; // 使用 node rpc url 在 sepolia 测试网中设置 provider const web3 = new Web3("wss://sepolia.infura.io/ws/v3/API_KEY");

// 与智能合约交互 const abi = [ { inputs: [ { internalType: "uint256", name: "randomNo", type: "uint256", }, ], name: "RandomNo", type: "event", }, ] as const;

const address = "0xA36432F7B12f160F685717c4Ab12EB883a682810";

// 提供 ABI 和地址,创建一个新的合约对象 const contract = new web3.eth.Contract(abi, address);

// 使用 contract.methods 获取值 const subscription = contract.events.RandomNo() subscription.on("data", console.log); // 每次事件触发时都会产生新值

第三步:开始查询,例如获取当前区块号。 import {Web3} from "web3" // 设置 provider,例如使用 infura const web3 = new Web3("https://rpc.sepolia.org") // 获取以太坊地址的余额 web3.eth.getBalance("0xF8561Dc64E577B0CF53dd3FC11329e80B1A8343e").then(console.log) // 结果:1.000.000 eth // 获取最新区块号 web3.eth.getBlockNumber().then(console.log) // 结果:BigInt(xxx)

用户评价

“在 Chainstack,Web3.js 在开发我们的 RPC API 文档和教程方面发挥了关键作用。其稳健的功能和无缝的集成让我们能够有效展示用例,使开发者能够快速发挥区块链技术的全部潜力。Web3.js 是一个基础性工具,增强了我们支持开发者在多个区块链上构建可扩展和创新应用的能力。”

“为 Web3.js 开发 Namespace ENS 插件的过程非常顺畅。开发者文档简明易读,他们的 SDK 让这一过程更加便捷。此外,DevRel 团队随时提供支持,如有需要总能得到帮助。”

“自 2020 年以来,我们一直依靠 Web3.js 构建 DeFi Saver。由于我们在内部构建了大量自定义基础设施,Web3.js 一直是非常理想的工具。其 API 稳定,为整个技术栈提供了足够的可见性和控制力。该库已有较长历史,周围的工具链也稳定成熟,因此几乎不会出现任何问题。”

评论 (0)