在区块链应用开发中,与以太坊网络的交互是核心环节,Web3.js 是以太坊官方提供的 JavaScript API 库,它让开发者能够通过浏览器或 Node.js 环境与以太坊节点通信,实现账户查询、交易发送、智能合约交互等功能,本文将详细介绍如何使用 Web3.js 连接以太坊节点,涵盖环境准备、连接方式、代码示例及常见问题解决,助你快速上手 Web3.js 开发。

环境准备:安装 Web3.js

在连接以太坊节点之前,首先需要安装 Web3.js 库,根据开发环境的不同,安装方式略有差异:

浏览器环境(CDN 引入)

如果在前端项目中使用 Web3.js,可通过 CDN 直接引入最新版本,在 HTML 文件的 <head><body> 标签中添加以下代码:

<script src="https://cdn.jsdelivr.net/npm/web3@4.10.0/dist/web3.min.js"></script>

引入后,全局对象 window 上会挂载 Web3 实例,可直接通过 window.Web3 使用。

Node.js 环境(npm 安装)

如果是后端(Node.js)项目,或需要更灵活的模块化管理,可通过 npm 安装:

npm install web3

安装完成后,在代码中通过 requireimport 引入:

const Web3 = require('web3'); // CommonJS 方式
// 或
import Web3 from 'web3'; // ES Module 方式

连接以太坊节点的核心方式

以太坊节点是区块链网络的数据中转站,开发者需要通过 RPC(Remote Procedure Call)端点与节点通信,Web3.js 支持多种连接方式,以下是常见场景的实践方法。

连接本地节点(如 Geth 或 Parity)

如果你在本地运行了以太坊节点(如通过 Geth 或 Parity 启动),可直接通过本地 RPC 端点连接。

步骤 1:启动本地节点

以 Geth 为例,启动一个同步以太坊主网的节点(默认 RPC 端口为 8545):

geth --http --http.addr "0.0.0.0" --http.port "8545" --http.corsdomain "*"
  • --http:启用 HTTP-RPC 服务
  • --http.addr "0.0.0.0":允许任何 IP 访问(开发环境可用,生产环境需限制)
  • --http.corsdomain "*":允许跨域请求(前端开发时需配置)

步骤 2:Web3.js 连接本地节点

const Web3 = require('web3');
// 创建 Web3 实例,传入节点 RPC 地址
const web3 = new Web3('http://localhost:8545');
// 验证连接是否成功
web3.eth.getBlockNumber().then(console.log).catch(console.error);

如果连接成功,控制台会输出当前以太坊网络的最新区块号(如 19000000 左右,具体取决于同步进度)。

连接远程节点(Infura 或 Alchemy)

本地节点同步速度慢且需要高性能设备,开发时更推荐使用第三方远程节点服务(如 Infura、Alchemy),它们提供稳定的 RPC 端点,无需同步全量数据,适合快速开发。

步骤 1:获取 RPC 端点

以 Infura 为例:

  1. 访问 Infura 官网,注册并创建新项目;
  2. 选择网络(如 Mainnet、Ropsten 测试网等),获取项目 ID;
  3. 拼接 RPC 端点格式:https://<网络名称>.infura.io/v3/<项目 ID>
    • 主网:https://mainnet.infura.io/v3/YOUR_PROJECT_ID
    • Ropsten 测试网:https://ropsten.infura.io/v3/YOUR_PROJECT_ID
    • 配图