Ethers.js 是一个轻量级的 JavaScript 库,专为与以太坊区块链及其智能合约交互而设计。它提供了一系列功能,从基本的以太坊钱包管理到与智能合约的复杂交互。以下是 Ethers.js 库的一些基本使用方法:
前端使用:
步骤 1: 安装 Ethers.js
首先,在你的前端项目中安装 Ethers.js。如果你使用 npm 或 yarn,可以这样做:
npm install ethers
或者
yarn add ethers
步骤 2: 导入 Ethers.js
在你的JavaScript文件中导入Ethers.js:
import { ethers } from 'ethers';
如果你不使用模块打包器,可以在 HTML 中通过 CDN 引入:
<script src="https://cdn.ethers.io/lib/ethers-5.0.umd.min.js"></script>
步骤 3: 连接到以太坊钱包
大多数现代 DApps 使用 MetaMask 或其他以太坊钱包扩展来与区块链交互。首先,检查用户的浏览器是否安装了 MetaMask,并请求连接:
let provider;
if (typeof window.ethereum !== 'undefined') {
provider = new ethers.providers.Web3Provider(window.ethereum);
try {
// 请求用户授权
await provider.send("eth_requestAccounts", []);
} catch (error) {
console.error("用户拒绝了访问");
}
} else {
console.log('请安装MetaMask!');
}
步骤 4: 与智能合约交互
要与智能合约交互,你需要合约的 ABI 和地址。创建合约实例:
const contractABI = [/* ... */];
const contractAddress = "0x...";
const contract = new ethers.Contract(contractAddress, contractABI, provider.getSigner());
调用合约方法:
// 调用只读方法
const value = await contract.readOnlyFunction();
// 发送交易
const tx = await contract.stateChangingFunction(arg1, arg2);
await tx.wait();
步骤 5: 监听事件
如果你的合约产生了事件,可以这样监听这些事件:
contract.on("EventName", (arg1, arg2, event) => {
console.log(arg1, arg2, event);
});
后端使用:
安装 Ethers.js
在 Node.js 项目中,您可以使用 npm 来安装 Ethers.js:
npm install ethers
连接到以太坊网络
首先,创建一个提供者(Provider)以连接到以太坊网络。这可以是 Infura、Alchemy 或其他 JSON-RPC API 提供者:
const { ethers } = require('ethers');
// 连接到以太坊主网
const provider = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY');
创建和管理钱包
使用私钥或助记词创建新的钱包,或从现有的钱包导入:
// 从私钥创建钱包
const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY', provider);
// 从助记词创建钱包
const mnemonic = 'radar blur cabbage chef fix engine embark joy scheme fiction master release';
const walletFromMnemonic = ethers.Wallet.fromMnemonic(mnemonic);
walletFromMnemonic.connect(provider);
与智能合约交互
要与智能合约交互,您需要合约的 ABI 和地址:
const contractABI = [/*... ABI ...*/];
const contractAddress = '0x...'; // 合约地址
const contract = new ethers.Contract(contractAddress, contractABI, provider);
// 如果需要发送交易,需要连接一个有签名能力的钱包
const contractWithSigner = contract.connect(wallet);
发送交易
通过智能合约发送交易来更改区块链上的状态:
const tx = await contractWithSigner.someFunction(arg1, arg2);
const receipt = await tx.wait();
读取数据
读取区块链上的数据,这不会产生交易:
const data = await contract.someViewFunction();
监听事件
监听智能合约的事件:
contract.on("SomeEvent", (arg1, arg2, event) => {
console.log(arg1, arg2, event);
});
错误处理
处理可能发生的错误,例如交易失败或网络问题。
注意事项
- 安全性:永远不要在客户端代码中暴露私钥。
- Gas 和交易费用:确保钱包中有足够的以太币来支付交易费用。
- 网络连接:确保连接到正确的以太坊网络(主网、测试网或私有网)。
Ethers.js 提供了一个简洁且功能强大的接口来与以太坊区块链进行交互,使其成为开发去中心化应用(DApps)的一个受欢迎的选择。