在区块链开发领域web3.js 是连接 JavaScript 应用与 EVM 兼容区块链如以太坊的核心工具库它封装了与区块链节点交互的复杂逻辑让开发者无需深入底层协议就能轻松实现钱包对接、链上数据查询、智能合约交互等核心功能。本文将从零基础入门逐步深入到进阶实战带你系统掌握 web3.js从新手成长为合格的区块链开发者。本文适配 web3.js v4 版本当前最新稳定版结合 2026 年区块链开发主流场景同步更新兼容性技巧与最佳实践全程搭配可直接运行的代码示例兼顾理论与实操无论是前端开发者转型 Web3还是零基础入门区块链都能快速上手。一、入门读懂 web3.js 核心基础必学1.1 什么是 web3.jsweb3.js 是一套基于 JavaScript/TypeScript 的开源库用于与以太坊及 EVM 兼容区块链的节点进行交互支持 HTTP、WebSocket、IPC 等多种连接方式是构建去中心化应用DApp的核心工具之一。简单来说web3.js 的作用就是“翻译官”——将开发者编写的 JavaScript 代码转化为区块链节点能识别的指令实现链上数据的读写与交易的发起。核心定位Web2 前端连接“中心化服务器”而 Web3 前端通过 web3.js 连接“区块链节点”核心工作是实现钱包对接、合约调用、链上数据展示这也是 web3.js 与传统 JavaScript 库的核心区别。1.2 核心前置知识无需深入理解即可学习 web3.js 前无需精通区块链底层但需掌握以下基础概念否则后续实操会寸步难行区块链基础去中心化、不可篡改的分布式账本由多个节点共同维护数据按区块链式存储核心特性包括透明可查、匿名性、不可篡改。以太坊生态了解以太坊账户外部账户 EOA 与合约账户、智能合约链上可自动执行的代码相当于 Web3 的“后端服务”、Gas 费链上操作的手续费支付节点算力成本、ABI智能合约的“接口说明书”前端调用合约的核心依据、RPC 节点连接前端与区块链的“桥梁”。钱包基础私钥/助记词用户资产控制权核心绝对保密、公钥/地址公开标识用于接收资产、数字签名用户通过私钥签名交易证明操作权限主流钱包如 MetaMask小狐狸是开发必备工具。JavaScript 基础掌握 ES6 语法、Promise/async-await、模块化CommonJS/ES Module了解 Node.js 与 npm 包管理这是 web3.js 实操的基础。1.3 web3.js v4 核心特性2026 重点web3.js v4 相比旧版本做了大幅优化更贴合当前开发需求核心特性包括模块化设计支持按需安装子包如仅安装合约交互模块 web3-eth-contract减少不必要的依赖提升项目性能。双模块化支持同时兼容 CommonJSCJS和 ES ModuleESM两种导入方式适配不同项目架构。类型安全原生支持 TypeScript提供完整的类型定义减少开发中的类型错误。兼容 EIP-1193 标准可与 MetaMask 等符合该标准的钱包无缝集成简化钱包对接流程。高效编码采用原生 BigInt 处理大整数替代旧版本的 BigNumber 库优化 ABI 编码解码效率。二、入门实操环境搭建与首次链上调用这一部分是新手入门的核心全程实操跟着步骤走就能完成第一次与区块链的交互。重点开发阶段优先使用测试网如 Sepolia、Holesky避免主网 Gas 费损耗同时安装必备调试工具。2.1 开发环境准备3步搞定步骤1安装 Node.js 与 npmweb3.js 依赖 Node.js 环境推荐安装 Node.js 16 版本兼容 v4 版本最佳安装完成后自动自带 npm 包管理器。验证安装打开终端输入以下命令显示版本号即安装成功node -vnpm -v步骤2安装 web3.js创建项目文件夹初始化 npm 项目然后安装 web3.js。支持两种安装方式按需选择方式1安装完整 web3.js 库适合新手无需考虑子包使用 npmnpm install web3使用 yarnyarn add web3方式2按需安装子包适合生产环境减少依赖体积仅安装合约交互模块npm install web3-eth-contract仅安装账户管理模块npm install web3-eth-accounts步骤3安装必备辅助工具MetaMask 钱包Chrome/Edge 浏览器插件用于测试账户管理、交易签名开发必备。测试网代币在测试网 faucet水龙头领取测试 ETH用于支付测试网 Gas 费如 Sepolia 水龙头。区块浏览器Etherscan对应测试网版本用于查询交易、合约、地址状态调试必备。RPC 节点推荐使用公共 RPC 节点如 https://eth.llamarpc.com或注册 Infura/Alchemy 获取专属 RPC 接口提升连接稳定性。2.2 首次调用连接区块链查询区块信息完成环境搭建后编写第一个 web3.js 代码实现“连接区块链节点 → 查询当前区块高度”全程复制即可运行。步骤1创建测试文件index.js新建 index.js 文件导入 web3.js 并初始化 Web3 实例配置 RPC 节点// 方式1ES Module 导入推荐适用于现代项目import { Web3 } from ‘web3’;// 方式2CommonJS 导入适用于旧项目// const { Web3 } require(‘web3’);// 初始化 Web3 实例连接公共 RPC 节点以太坊测试网/主网均可const web3 new Web3(‘https://eth.llamarpc.com’);// 定义异步函数查询当前区块高度链上数据查询为异步操作需用 async-awaitasync function getBlockNumber() {try {// 调用 web3.eth.getBlockNumber() 方法获取当前区块高度const blockNumber await web3.eth.getBlockNumber();console.log(‘当前区块链高度’, blockNumber);return blockNumber;} catch (error) {console.error(‘查询失败’, error.message);}}// 调用函数执行首次链上查询getBlockNumber();步骤2运行代码查看结果终端进入项目文件夹执行以下命令node index.js若输出类似“当前区块链高度18850576”的结果说明已成功连接区块链首次调用完成注意若出现连接失败检查 RPC 节点地址是否正确或更换其他公共 RPC 节点如 https://rpc.sepolia.org 用于 Sepolia 测试网。三、基础进阶核心 API 实操入门→熟练web3.js 的核心能力的是通过 API 与区块链交互这一部分将讲解最常用的 API 模块涵盖“链上数据查询、钱包账户管理、交易发送”每一个 API 都搭配完整代码示例可直接复用。3.1 链上数据查询只读操作无 Gas 费这类操作无需用户签名无需支付 Gas 费主要用于查询链上公开数据是 DApp 中最基础的功能如展示账户余额、区块信息、交易详情。3.1.1 查询账户余额使用 web3.eth.getBalance() 方法查询指定地址的 ETH 余额返回值为 wei 单位需转换为 ETH 单位async function getAccountBalance(address) {try {// 查询余额wei 单位1 ETH 10^18 weiconst balanceWei await web3.eth.getBalance(address);// 转换为 ETH 单位保留4位小数const balanceEth web3.utils.fromWei(balanceWei, ‘ether’);console.log(地址 ${address} 的余额${balanceEth} ETH);return balanceEth;} catch (error) {console.error(‘查询余额失败’, error.message);}}// 测试查询以太坊创始人 Vitalik 的地址余额示例地址getAccountBalance(‘0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045’);3.1.2 查询区块详情使用 web3.eth.getBlock() 方法查询指定区块的完整信息包括区块内的交易、时间戳、矿工地址等async function getBlockDetails(blockNumber) {try {// 获取区块详情参数为区块号可传 ‘latest’ 表示最新区块const block await web3.eth.getBlock(blockNumber || ‘latest’);console.log(‘区块详情’, {区块号: block.number,时间戳: new Date(block.timestamp * 1000).toLocaleString(), // 转换为本地时间交易数量: block.transactions.length,矿工地址: block.miner});return block;} catch (error) {console.error(‘查询区块失败’, error.message);}}// 测试查询最新区块详情getBlockDetails();3.1.3 查询交易详情使用 web3.eth.getTransaction() 方法通过交易哈希查询指定交易的详情async function getTransactionDetails(txHash) {try {const transaction await web3.eth.getTransaction(txHash);if (!transaction) {console.log(‘未找到该交易’);return null;}console.log(‘交易详情’, {交易哈希: transaction.hash,发送地址: transaction.from,接收地址: transaction.to,交易金额: web3.utils.fromWei(transaction.value, ‘ether’) ’ ETH’,Gas 价格: web3.utils.fromWei(transaction.gasPrice, ‘gwei’) ’ gwei’});return transaction;} catch (error) {console.error(‘查询交易失败’, error.message);}}// 测试传入任意交易哈希可从 Etherscan 复制getTransactionDetails(‘0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef’);3.2 钱包账户管理核心实操web3.js 提供了账户创建、私钥导入、签名等功能用于管理用户钱包账户注意测试环境可使用随机生成的账户生产环境需严格保管私钥避免泄露。3.2.1 创建随机账户使用 web3.eth.accounts.wallet.create() 方法创建测试用随机账户包含地址、私钥// 创建包含1个随机账户的钱包const wallet web3.eth.accounts.wallet.create(1);// 提取账户信息地址、私钥const account wallet[0];console.log(‘随机创建的账户’, {地址: account.address,私钥: account.privateKey, // 生产环境绝对不能泄露公钥: account.publicKey});安全警告随机生成的账户仅适用于测试环境生产环境应使用安全的密钥管理方案如硬件钱包私钥一旦泄露资产将无法找回。3.2.2 导入现有账户通过私钥使用 web3.eth.accounts.wallet.add() 方法通过私钥导入已有的账户用于后续交易签名// 替换为你的测试私钥仅测试用不要用主网私钥const privateKey ‘0x50d349f5cf627d44858d6fcb6fbf15d27457d35c58ba2d5cfeaf455f25db5bec’;// 导入账户到钱包const importedAccount web3.eth.accounts.wallet.add(privateKey);console.log(‘导入的账户地址’, importedAccount.address);3.3 交易发送写操作需 Gas 费这类操作会修改链上状态如转账、调用合约写方法需要用户签名支付 Gas 费是 Web3 开发的核心功能之一。以下示例实现 ETH 转账操作。async function sendTransaction(fromAddress, toAddress, amountEth) {try {// 1. 转换金额为 wei 单位区块链只识别 weiconst amountWei web3.utils.toWei(amountEth, ‘ether’);// 2. 构造交易对象const txObject {from: fromAddress, // 发送地址需导入钱包或由 MetaMask 签名to: toAddress, // 接收地址value: amountWei, // 转账金额weigas: 21000, // 转账默认 Gas 限制简单转账固定为21000gasPrice: await web3.eth.getGasPrice() // 获取当前 Gas 价格};// 3. 发送交易需导入私钥或通过 MetaMask 签名const receipt await web3.eth.sendTransaction(txObject);console.log(‘交易发送成功’, {交易哈希: receipt.transactionHash,区块号: receipt.blockNumber});// 可通过交易哈希在 Etherscan 上查询交易状态return receipt;} catch (error) {console.error(‘交易失败’, error.message);}}// 测试使用导入的账户发送 0.001 ETH需确保账户有测试币sendTransaction(importedAccount.address, // 发送地址导入的账户‘0xa3286628134bad128faeef82f44e99aa64085c94’, // 接收地址示例‘0.001’ // 转账金额ETH);注意若未导入私钥sendTransaction 方法会报错此时需结合 MetaMask 等钱包进行签名后续实战部分会讲解。四、精通进阶智能合约交互核心难点智能合约是 Web3 应用的核心web3.js 提供了完善的 API 用于与智能合约交互读方法、写方法这是从“入门”到“精通”的关键一步。以下以 ERC-20 代币合约最常用的合约标准为例讲解完整交互流程。4.1 核心前提获取合约 ABI 与地址与智能合约交互必须具备两个核心信息合约地址合约部署在区块链上的唯一标识如 USDT 合约地址0xdAC17F958D2ee523a2206206994597C13D831ec7。合约 ABI应用二进制接口相当于“合约的接口说明书”定义了合约的方法、参数、返回值web3.js 通过 ABI 解析合约功能实现调用。获取方式可从 Etherscan 上查询已部署的合约如 USDT 合约页面复制 ABI 和合约地址也可通过 Remix IDE在线合约开发工具编写、部署合约获取 ABI 和地址。4.2 合约实例化使用 web3.eth.Contract() 方法传入 ABI 和合约地址创建合约实例后续所有交互都通过该实例进行// 1. 合约 ABI以 ERC-20 代币合约为例简化版const erc20Abi [{“inputs”: [{“name”: “_to”, “type”: “address”}, {“name”: “_value”, “type”: “uint256”}],“name”: “transfer”,“outputs”: [{“name”: “”, “type”: “bool”}],“type”: “function”},{“inputs”: [{“name”: “_owner”, “type”: “address”}],“name”: “balanceOf”,“outputs”: [{“name”: “”, “type”: “uint256”}],“type”: “function”},{“name”: “symbol”,“outputs”: [{“name”: “”, “type”: “string”}],“type”: “function”}];// 2. 合约地址示例USDT 合约地址可替换为测试网合约地址const contractAddress ‘0xdAC17F958D2ee523a2206206994597C13D831ec7’;// 3. 实例化合约const contract new web3.eth.Contract(erc20Abi, contractAddress);4.3 调用合约读方法无 Gas 费合约读方法如查询余额、代币符号不会修改链上状态无需签名无需支付 Gas 费使用 contract.methods.方法名().call() 调用。// 1. 查询代币符号如 USDT、ETHasync function getTokenSymbol() {try {const symbol await contract.methods.symbol().call();console.log(‘代币符号’, symbol);return symbol;} catch (error) {console.error(‘查询失败’, error.message);}}// 2. 查询指定地址的代币余额async function getTokenBalance(address) {try {// 调用 balanceOf 方法返回值为 wei 单位需转换为代币单位const balanceWei await contract.methods.balanceOf(address).call();// ERC-20 代币默认小数位为18位转换为代币单位const balanceToken web3.utils.fromWei(balanceWei, ‘ether’);console.log(地址 ${address} 的代币余额${balanceToken});return balanceToken;} catch (error) {console.error(‘查询余额失败’, error.message);}}// 测试调用getTokenSymbol();getTokenBalance(‘0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045’);4.4 调用合约写方法需 Gas 费合约写方法如代币转账、铸造 NFT会修改链上状态需要用户签名支付 Gas 费使用 contract.methods.方法名().send() 调用。// 实现 ERC-20 代币转账async function transferToken(fromAddress, toAddress, amountToken) {try {// 1. 转换金额为 wei 单位ERC-20 代币默认18位小数const amountWei web3.utils.toWei(amountToken, ‘ether’);// 2. 调用 transfer 方法发送交易const txReceipt await contract.methods.transfer(toAddress, amountWei).send({ from: fromAddress }); // 发送地址需导入钱包或 MetaMask 签名console.log(代币转账成功, { 交易哈希: txReceipt.transactionHash, 区块号: txReceipt.blockNumber }); return txReceipt;} catch (error) {console.error(‘转账失败’, error.message);}}// 测试转账 1 个代币需确保发送地址有足够的代币和测试 ETH 支付 Gas 费transferToken(importedAccount.address, // 发送地址‘0xcf185f2F3Fe19D82bFdcee59E3330FD7ba5f27ce’, // 接收地址‘1’ // 转账金额代币单位);4.5 合约事件监听进阶智能合约会触发事件如转账事件 Transferweb3.js 可监听这些事件用于实时更新 UI如用户转账后实时显示余额变化。支持查询历史事件和实时订阅事件。// 1. 查询历史转账事件指定区块范围async function getPastTransferEvents() {try {const pastEvents await contract.getPastEvents(‘Transfer’, {fromBlock: 18850576, // 起始区块号toBlock: ‘latest’ // 结束区块号latest 表示最新区块});console.log(‘历史转账事件’, pastEvents);return pastEvents;} catch (error) {console.error(‘查询历史事件失败’, error.message);}}// 2. 实时订阅转账事件实时监听新的转账function subscribeTransferEvents() {// 订阅 Transfer 事件const subscription contract.events.Transfer();// 监听事件触发subscription.on(‘data’, (event) {console.log(‘新转账事件’, {发送地址: event.returnValues.from,接收地址: event.returnValues.to,转账金额: web3.utils.fromWei(event.returnValues.value, ‘ether’)});});// 监听错误subscription.on(‘error’, (error) {console.error(‘事件监听错误’, error.message);});}// 测试调用getPastTransferEvents();subscribeTransferEvents();性能提示HTTP Provider 不支持实时事件订阅建议使用 WebSocket Provider如 wss://eth.llamarpc.com/ws以获得最佳体验。五、精通实战搭建一个简单 DApp综合应用结合前面的知识点搭建一个简单的 DApp 前端页面实现“连接 MetaMask 钱包 → 查询 ETH 余额 → 发送 ETH 转账”综合运用 web3.js 核心 API完成从理论到实战的落地。5.1 项目结构简单前端项目web3-dapp-demo/├─ index.html # 前端页面├─ index.js # web3.js 核心逻辑└─ package.json # 项目依赖5.2 编写前端页面index.htmlWeb3.js DApp 演示Web3.js DApp 演示连接 MetaMask 钱包请先连接钱包查询 ETH 余额查询余额余额-- ETH发送 ETH 转账发送转账交易状态--## 5.3 编写 web3.js 核心逻辑index.js // 全局变量 let web3; let currentAccount;// 页面加载完成后初始化window.addEventListener(‘load’, async () {// 检查浏览器是否安装 MetaMaskif (window.ethereum) {// 初始化 web3 实例使用 MetaMask 提供的 Providerweb3 new Web3(window.ethereum);// 监听钱包账户变化window.ethereum.on(‘accountsChanged’, (accounts) {currentAccount accounts[0];updateWalletInfo();});// 监听网络变化window.ethereum.on(‘chainChanged’, () {window.location.reload(); // 网络变化后刷新页面});} else {alert(‘请安装 MetaMask 钱包后再使用’);}// 绑定按钮事件document.getElementById(‘connectWallet’).addEventListener(‘click’, connectWallet);document.getElementById(‘queryBalance’).addEventListener(‘click’, queryBalance);document.getElementById(‘sendTx’).addEventListener(‘click’, sendTransaction);});// 1. 连接 MetaMask 钱包async function connectWallet() {try {// 请求用户授权连接钱包const accounts await window.ethereum.request({ method: ‘eth_requestAccounts’ });currentAccount accounts[0];updateWalletInfo();alert(‘钱包连接成功’);} catch (error) {console.error(‘钱包连接失败’, error.message);alert(‘钱包连接失败请重试’);}}// 更新钱包信息显示function updateWalletInfo() {const walletInfo document.getElementById(‘walletInfo’);if (currentAccount) {// 隐藏地址中间部分保护隐私const shortAddress currentAccount.slice(0, 6) ‘…’ currentAccount.slice(-4);walletInfo.textContent 当前连接账户${shortAddress};} else {walletInfo.textContent ‘请先连接钱包’;}}// 2. 查询 ETH 余额async function queryBalance() {if (!currentAccount) {alert(‘请先连接钱包’);return;}try {const balanceWei await web3.eth.getBalance(currentAccount);const balanceEth web3.utils.fromWei(balanceWei, ‘ether’);document.getElementById(‘balanceInfo’).textContent 余额${balanceEth.slice(0, 8)} ETH;} catch (error) {console.error(‘查询余额失败’, error.message);alert(‘查询余额失败请重试’);}}// 3. 发送 ETH 转账async function sendTransaction() {if (!currentAccount) {alert(‘请先连接钱包’);return;}const toAddress document.getElementById(‘toAddress’).value;const amount document.getElementById(‘amount’).value;if (!toAddress || !amount) {alert(‘请填写接收地址和转账金额’);return;}try {// 验证接收地址格式if (!web3.utils.isAddress(toAddress)) {alert(‘接收地址格式错误’);return;}// 转换金额为 wei 单位const amountWei web3.utils.toWei(amount, ‘ether’);// 构造交易对象const txObject {from: currentAccount,to: toAddress,value: amountWei,gas: 21000};// 发送交易由 MetaMask 签名const txHash await window.ethereum.request({method: ‘eth_sendTransaction’,params: [txObject]});document.getElementById(‘txInfo’).textContent 交易已发起哈希${txHash.slice(0, 10)}...;// 等待交易确认const receipt await web3.eth.waitForTransactionReceipt(txHash);if (receipt.status) {document.getElementById(‘txInfo’).textContent 交易成功哈希${txHash};// 重新查询余额queryBalance();} else {document.getElementById(‘txInfo’).textContent ‘交易失败’;}} catch (error) {console.error(‘交易失败’, error.message);alert(‘交易失败’ error.message);}}5.4 运行 DApp 并测试安装依赖终端执行 npm install web3确保 web3.js 已安装。运行项目使用 Live Server 打开 index.htmlVS Code 插件或直接双击 index.html 打开浏览器。测试流程连接 MetaMask 钱包 → 查询 ETH 余额 → 填写接收地址和转账金额 → 发送转账 → 查看交易状态。注意测试时需使用测试网如 Sepolia确保账户有测试 ETH避免主网资产损失。六、精通必备常见问题与最佳实践避坑指南在 web3.js 开发中经常会遇到各种问题这一部分整理了 2026 年开发中最常见的问题、解决方案及最佳实践帮助你避坑提升开发效率。6.1 常见错误及解决方案错误1ReferenceError: Can’t find variable: BigIntReact 环境原因React 环境中未支持 BigInt 类型而 web3.js v4 大量依赖 BigInt 处理大整数。解决方案安装依赖yarn add --dev rn-nodeifyyarn add big-integer在项目根目录创建 shim.js 文件添加 polyfill 代码if (typeof BigInt ‘undefined’) {global.BigInt require(‘big-integer’);}在应用入口文件如 App.js顶部引入import ‘./shim.js’;错误2TypeError: Cannot read property ‘prototype’ of undefinedReact Native 环境原因React Native 的 Hermes 引擎与 web3.js 存在兼容性问题。解决方案安装依赖yarn add react-native-quick-cryptocd ios pod install使用默认导入方式引入 web3.jsimport Web3 from ‘web3’;错误3交易发送失败提示“insufficient funds”原因账户余额不足包括转账金额 Gas 费或 Gas 限制设置过低。解决方案确保账户有足够的测试 ETH调整 Gas 限制简单转账设为 21000合约交互设为 50000-100000。错误4合约调用失败提示“invalid address”原因合约地址错误或 ABI 与合约不匹配或账户未授权。解决方案检查合约地址是否正确确认 ABI 与合约一致若为合约授权操作先执行授权方法。6.2 最佳实践2026 最新环境隔离使用虚拟环境或容器技术隔离不同项目的 web3.js 依赖避免版本冲突推荐使用 nvm 管理 Node.js 版本。按需导入生产环境优先使用子包导入如 web3-eth-contract减少项目体积提升加载速度。类型安全使用 TypeScript 开发利用 web3.js 原生的类型定义减少类型错误提升代码可维护性。安全防护私钥绝不硬编码在代码中生产环境使用硬件钱包或密钥管理服务避免使用随机生成的账户用于生产环境。性能优化高频查询场景实现缓存机制和批量请求策略实时事件监听使用 WebSocket Provider避免频繁调用 RPC 节点。错误处理完善错误处理机制对 RPC 错误、交易失败、钱包授权拒绝等场景进行友好提示提升用户体验。七、进阶学习从精通到资深掌握以上内容后你已经具备 web3.js 开发的核心能力要成为资深开发者可进一步学习以下内容web3.js 高级 API批量请求、自定义 Provider 实现、签名验证、ENS 域名解析等。其他 Web3 库学习 viem、wagmiReact 生态首选、ethers.js 等库对比不同库的优劣根据项目需求选择。智能合约开发学习 Solidity 语言掌握合约编写、部署、调试深入理解 ABI 原理实现更复杂的合约交互。Layer2 开发了解 Arbitrum、Optimism、Polygon 等 Layer2 网络适配 Layer2 环境的 web3.js 开发解决主网 Gas 费高、速度慢的问题。生态工具集成集成 The Graph链上数据索引、IPFS去中心化存储、RainbowKit钱包连接 UI等工具提升 DApp 功能和体验。实战项目开发完整的 DApp如 NFT mint 平台、DeFi 借贷前端积累项目经验解决实际开发中的复杂问题。八、总结web3.js 是 Web3 开发的入门必备工具本文从“基础认知→环境搭建→核心 API→合约交互→实战项目→避坑指南”系统覆盖了从入门到精通的全知识点适配 2026 年最新的 web3.js v4 版本搭配可直接运行的代码示例帮助你快速上手。学习 web3.js 的核心是“多实操、多踩坑、多总结”建议从简单的链上查询开始逐步深入到合约交互和 DApp 开发同时关注区块链生态的最新动态如 Layer2 发展、新的合约标准不断更新自己的知识体系。最后web3.js 虽然功能强大但它只是 Web3 开发的一部分结合智能合约、钱包、Layer2 等知识才能成为一名合格的 Web3 开发者。祝你在 Web3 的道路上稳步前行解锁更多去中心化应用的可能性参考资源web3.js 官方文档https://docs.web3js.org/web3.js 项目地址https://gitcode.com/gh_mirrors/we/web3.jsChainSafe web3.js v4 系列课程覆盖 14 个核心模块适合各水平开发者。Etherscanhttps://etherscan.io/查询合约、交易、地址Remix IDEhttps://remix.ethereum.org/在线合约开发、部署、调试