赞
踩
Ethers.js 是一个轻量级的 JavaScript 库,专为与以太坊区块链及其智能合约交互而设计。它提供了一系列功能,从基本的以太坊钱包管理到与智能合约的复杂交互。以下是 Ethers.js 库的一些基本使用方法:
首先,在你的前端项目中安装 Ethers.js。如果你使用 npm 或 yarn,可以这样做:
npm install ethers
或者
yarn add ethers
在你的JavaScript文件中导入Ethers.js:
import { ethers } from 'ethers';
如果你不使用模块打包器,可以在 HTML 中通过 CDN 引入:
<script src="https://cdn.ethers.io/lib/ethers-5.0.umd.min.js"></script>
大多数现代 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!');
- }
要与智能合约交互,你需要合约的 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();
如果你的合约产生了事件,可以这样监听这些事件:
- contract.on("EventName", (arg1, arg2, event) => {
- console.log(arg1, arg2, event);
- });
在 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);
- });
处理可能发生的错误,例如交易失败或网络问题。
Ethers.js 提供了一个简洁且功能强大的接口来与以太坊区块链进行交互,使其成为开发去中心化应用(DApps)的一个受欢迎的选择。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。