【进阶篇 三】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,并请求连接:

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)的一个受欢迎的选择。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中关村老李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值