当前位置:   article > 正文

【进阶篇 三】Ethers.js 库的使用

ethers.js

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,并请求连接:

  1. let provider;
  2. if (typeof window.ethereum !== 'undefined') {
  3. provider = new ethers.providers.Web3Provider(window.ethereum);
  4. try {
  5. // 请求用户授权
  6. await provider.send("eth_requestAccounts", []);
  7. } catch (error) {
  8. console.error("用户拒绝了访问");
  9. }
  10. } else {
  11. console.log('请安装MetaMask!');
  12. }

步骤 4: 与智能合约交互

要与智能合约交互,你需要合约的 ABI 和地址。创建合约实例:

  1. const contractABI = [/* ... */];
  2. const contractAddress = "0x...";
  3. const contract = new ethers.Contract(contractAddress, contractABI, provider.getSigner());

调用合约方法:

  1. // 调用只读方法
  2. const value = await contract.readOnlyFunction();
  3. // 发送交易
  4. const tx = await contract.stateChangingFunction(arg1, arg2);
  5. await tx.wait();

步骤 5: 监听事件

如果你的合约产生了事件,可以这样监听这些事件:

  1. contract.on("EventName", (arg1, arg2, event) => {
  2. console.log(arg1, arg2, event);
  3. });

后端使用:

安装 Ethers.js

在 Node.js 项目中,您可以使用 npm 来安装 Ethers.js:

npm install ethers 

连接到以太坊网络

首先,创建一个提供者(Provider)以连接到以太坊网络。这可以是 Infura、Alchemy 或其他 JSON-RPC API 提供者:

  1. const { ethers } = require('ethers');
  2. // 连接到以太坊主网
  3. const provider = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY');

创建和管理钱包

使用私钥或助记词创建新的钱包,或从现有的钱包导入:
 

  1. // 从私钥创建钱包
  2. const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY', provider);
  3. // 从助记词创建钱包
  4. const mnemonic = 'radar blur cabbage chef fix engine embark joy scheme fiction master release';
  5. const walletFromMnemonic = ethers.Wallet.fromMnemonic(mnemonic);
  6. walletFromMnemonic.connect(provider);

与智能合约交互

要与智能合约交互,您需要合约的 ABI 和地址:

  1. const contractABI = [/*... ABI ...*/];
  2. const contractAddress = '0x...'; // 合约地址
  3. const contract = new ethers.Contract(contractAddress, contractABI, provider);
  4. // 如果需要发送交易,需要连接一个有签名能力的钱包
  5. const contractWithSigner = contract.connect(wallet);


 

发送交易

通过智能合约发送交易来更改区块链上的状态:

  1. const tx = await contractWithSigner.someFunction(arg1, arg2);
  2. const receipt = await tx.wait();

读取数据

读取区块链上的数据,这不会产生交易:

const data = await contract.someViewFunction();

监听事件

监听智能合约的事件:

  1. contract.on("SomeEvent", (arg1, arg2, event) => {
  2. console.log(arg1, arg2, event);
  3. });

错误处理

处理可能发生的错误,例如交易失败或网络问题。

注意事项

  • 安全性:永远不要在客户端代码中暴露私钥。
  • Gas 和交易费用:确保钱包中有足够的以太币来支付交易费用。
  • 网络连接:确保连接到正确的以太坊网络(主网、测试网或私有网)。

Ethers.js 提供了一个简洁且功能强大的接口来与以太坊区块链进行交互,使其成为开发去中心化应用(DApps)的一个受欢迎的选择。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号