ethers.js
ethers.js 是一个用于构建以太坊应用程序的 JavaScript 库。 由于 Conflux eSpace 兼容以太坊,我们可以直接在 Conflux eSpace 中使用这个库。 目前,ethers 有两个主要版本:v6 和 v5。 本教程重点展示如何在 Conflux eSpace 中使用 v6 版本。
本教程涵盖了如何在 Conflux eSpace 中使用 ethers发送交易、与合约交互以及查询链上数据。
安装
mkdir demo && cd demo && npm init -y && npm install ethers
import { ethers } from "ethers";
ethers 提供了几个抽象函数和类供开发者使用:
-
providers
:提供用于连接以太坊网络的抽象函数。 例如,JsonRpcProvider
用于通过HTTP从链上获取数据,WebSocketProvider
用于通过 WebSocket从链上获取数据,以及更常见的浏览器插件BrowserProvider
。 -
signers
: 提供管理账户的抽象函数。 例如,Wallet
通过管理单个私钥来方便交易和消息签名,而HdWallet
则通过助记词生成多个私钥,用于交易和消息签名。 -
contracts
: 提供与合约交互的抽象函数,如Contract
。
使用ethers
Provider
First, we need to use a provider to connect to the Conflux blockchain space.
import { JsonRpcProvider, WebSocketProvider } from "ethers";
// use HTTP
const provider = new JsonRpcProvider("https://evm.confluxrpc.com");
// use WebSocket
const provider = new WebSocketProvider("wss://evm.confluxrpc.com/ws");
const blockNumber = await provider.getBlockNumber();
在通过 JsonRpcProvider 或 WebSocketProvider 连接到 Conflux eSpace 后,我们可以轻松地从链上获取所需的数据和状态。 在这里,您可以找到 Conflux eSpace 官方提供的所有 RPC,但开发者通常更喜欢直接连接到用户的插件钱包。 以下示例将演示如何直接连接到用户的钱包。
import { BrowserProvider } from "ethers";
if (window.ethereum) {
const provider = new BrowserProvider(window.ethereum);
// get addresses from Metamask
const addresses = await provider.send("eth_requestAccounts", []);
// You can also retrieve blockchain data from Metamask.
const balance = await provider.getBalance(addresses[0]);
console.log(`Current address balance is: ${balance.toString()}`);
} else {
console.warn("Please install Metamask");
}
数值
在以太坊中,所有单位都表示为整数。 然而,长数字可能难以阅读和书写。 因此,ethers提供了多种用于处理这些数字的实用功能。 由于Conflux eSpace与以太坊兼容,因此使用这些实用功能也很方便。
// Convert user-provided strings in cfx to wei for a value
const cfx = parseEther("1.0"); // 1000000000000000000n
// Convert gwei to wei
const feePerGas = parseUnits("3.3", "gwei"); // 3300000000n
// Convert a value in wei to a string in cfx to display in a UI
const cfxDisplay = formatEther(cfx);
//// Convert a value in wei to a string in gwei to display in a UI
const feePerGasDisplay = formatUnits(feePerGas, "gwei");