使用 Node.js 与 Web3.js 连接
2026-05-12
想象一下,你想要与以太坊区块链进行互动,不管是用来写智能合约,还是与去中心化应用(DApp)进行相关操作。这里,Node.js 和 Web3.js 这对组合就派上用场了。Node.js 是一个能够帮助你快速构建高效、可扩展的网络应用程序的后端JavaScript环境,而 Web3.js 是一个与以太坊区块链进行交互的 JavaScript 库。
在开始之前,确保你有以下这些东西。首先,你需要安装 Node.js。可以从 Node.js 的官方网站上下载和安装最新版本。安装完成后,打开你的终端,输入 node -v 和 npm -v 来验证是否安装成功。
接下来你需要安装 Web3.js。打开终端,运行这个命令:npm install web3。这个库会帮助你与以太坊区块链进行各种交互。我们的环境现在准备好了,可以开始写代码了。
现在我们来写个脚本,连接到以太坊节点。你可以使用任何以太坊提供的公共节点,例如 Infura,或者自己搭建一个节点。如果你选择 Infura,你要去它的网站申请一个 API 密钥。
接下来,创建一个名为 index.js 的文件,输入以下内容:
const Web3 = require('web3');
// 使用 Infura 的 API
const web3 = new Web3(new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'));
async function run() {
const blockNumber = await web3.eth.getBlockNumber();
console.log('最新区块号: ', blockNumber);
const block = await web3.eth.getBlock(blockNumber);
console.log('块的信息: ', block);
}
run();
记得把 YOUR_INFURA_PROJECT_ID 替换为你从 Infura 获得的实际密钥。然后在终端里运行 node index.js,你应该能看到最新的区块号和对应的块信息。
连接到以太坊后,当然不能忘了你的地址。在 Web3.js 中,获取账户信息很简单。这里我们可以通过钱包连接来获取账户,也可以简单地使用一个已有的地址进行查询。
以下代码示范了如何查询一个特定地址的余额:
const address = '0x你的以太坊地址';
async function getBalance() {
const balance = await web3.eth.getBalance(address);
console.log('账户余额: ', web3.utils.fromWei(balance, 'ether'), 'ETH');
}
getBalance();
将 0x你的以太坊地址 替换为你自己的以太坊地址,然后运行这个函数,你就能看到你的余额了。
发送交易这个环节大家一定会感到非常兴奋。你终于可以通过代码把以太坊从一个地址发送到另一个地址了。但是,发送交易前需要注意的是,你必须拥有发送地址的私钥。保持你的私钥安全,切勿泄露哦。
这段代码展示了如何发送一笔交易:
const senderAddress = '0x你的以太坊地址';
const privateKey = '你的私钥';
const receiverAddress = '0x接收的以太坊地址';
const value = web3.utils.toWei('0.1', 'ether'); // 发送 0.1 ETH
async function sendTransaction() {
const nonce = await web3.eth.getTransactionCount(senderAddress);
const transaction = {
to: receiverAddress,
value: value,
gas: 2000000,
gasPrice: await web3.eth.getGasPrice(),
nonce: nonce,
chainId: 1 // Mainnet
};
const signedTransaction = await web3.eth.accounts.signTransaction(transaction, privateKey);
const receipt = await web3.eth.sendSignedTransaction(signedTransaction.rawTransaction);
console.log('交易成功: ', receipt.transactionHash);
}
sendTransaction();
请根据自己的情况修改变量,发送交易时一定要实事求是哦,不要因为一时兴起就把所有以太坊都发出去。
会用 Web3.js 与以太坊区块链交互之后,你还需要了解如何与智能合约进行交互。智能合约是一种自动执行的合约,其条款被直接写入代码中。假设你想调用某个已经部署在以太坊上的智能合约。
首先,你需要获取到合约的 ABI 和地址。ABI 就是应用程序二进制接口,可以理解为告诉你智能合约允许你做什么的一个接口。
然后你可以使用以下代码来调用智能合约的功能:
const contractAddress = '智能合约地址';
const abi = [/* 合约的 ABI */];
const contract = new web3.eth.Contract(abi, contractAddress);
async function callContractFunction() {
const result = await contract.methods.你的方法名().call();
console.log('合约返回结果: ', result);
}
callContractFunction();
在这里,你可能会对 ABI 的获取过程充满疑惑。通常可以在 Etherscan 或合约的文档中找到。只要把合约的地址复制粘贴进去,找到 ABI 部分就可以了。
在开发过程中,错误是不可避免的。Web3.js 会给你提供一些错误信息,弄清楚它们能帮助你更快地排查问题。常见的错误有网络连接失败、节点不可用、无效的交易等。如果捕获到异常,可以使用 try...catch 的方法:
async function runWithCatch() {
try {
const blockNumber = await web3.eth.getBlockNumber();
console.log('最新区块号是: ', blockNumber);
} catch (error) {
console.error('出现错误: ', error);
}
}
runWithCatch();
这能让你的代码在出错时不会直接崩掉,而是优雅地处理异常。调试的时候千万别急,慢慢来,仔细查找错误的来源。
很多人可能会问,使用哪个以太坊节点?如果你是初学者,使用 Infura 是个不错的选择,因为它简单、快捷。有时候我都懒得搭建自己的节点。不过,如果你想要更深入的了解,以后可以试试自己搭建一个节点,这样对理解区块链的工作原理会很有帮助。
选择节点时,也要考虑到它的稳定性和速度。免费节点有时候会因为流量问题导致连接不稳定。付费的节点一般会更快且稳定,但在学习阶段,免费的就足够了。
在这个过程中,有很多工具和资源可以帮助你快速上手。比如,Solidity 是一种编写智能合约的语言,而 Remix 是一个可在线编写和测试合约的 IDE。还有像 Etherscan 这样的工具,可以用来查看以太坊的区块链数据,超方便的。
另外,很多社区和论坛都在讨论与以太坊相关的技术,像 Reddit、Stack Overflow 等都是好去处。在这里你可以与其他开发者交流,向他们请教问题,分享自己的经验。这绝对能让你少走很多弯路。
现在,你已经通过 Node.js 和 Web3.js 学会了如何与以太坊区块链交互。虽然这篇文章并没有覆盖所有的细节,但这已经是一个不错的起点了。随着你对这些工具的深入使用,你会发现更多的可能性。
继续探索,继续实践,别怕犯错,每一次错误都是一次进步的机会。希望你能在区块链的世界里玩得开心!如果有任何问题,随时问我哦!