Ethers是什么?
ethers.js 库旨在成为一个完整而紧凑的库,用于与以太坊区块链及其生态系统进行交互。它最初是为与ethers.io一起使用而设计的,后来扩展为一个更通用的库。
ether.js初体验
安装
Ethers 的各种类和函数可以从 @ethersproject 组织下的子包中手动导入,但对于大多数项目来说,伞形包(umbrella package)是最简单的入门方式。
npm install --save ethers
默认下载最新版本包。
引入依赖
Node.js环境
const { ethers } = require("ethers"); // node.js requireimport { ethers } from "ethers";// ES6 or TypeScript
网页浏览器环境
对于快速演示或原型设计,您可以从 CDN 将其加载到Web 应用程序中:
import { ethers } from "https://cdn.ethers.io/lib/ethers-5.2.esm.min.js";// Your code here...
将 ethers 库复制到您自己的网络服务器并自己提供服务通常是更好的做法(出于安全原因)。
常用术语
Provider | Provider(在ethers中)是一个为以太坊网络连接提供抽象的类。它提供对区块链及其状态的只读访问。 |
Signer | 签名者是一个(通常)以某种方式直接或间接访问私钥的类,它可以签署消息和交易以授权网络向您的帐户收取以太币,执行操作。 |
Contract | 合约是一种抽象,表示与以太坊网络上特定合约的连接,因此应用程序可以像使用普通 JavaScript 对象一样使用它。 |
连接以太坊:MetaMask
在以太坊上进行实验和开始开发的最快和最简单的方法是使用 MetaMask,它是一个浏览器扩展,提供以下功能:
- 与以太坊网络的连接(Provider)
- 持有你的私钥并且可以签署东西(Signer)
示例代码如下:
const provider = new ethers.providers.Web3Provider(window.ethereum)const signer = provider.getSigner()
控制台输出的内容:
Web3Provider 包装了一个标准的 Web3 提供程序,它是MetaMask 作为 window.ethereum 注入每个页面的内容。提供者Provider还允许签署交易以发送以太币并支付费用以改变区块链内的状态。为此,我们需要帐户签名者Signer。
连接以太坊: RPC
JSON-RPC API 是另一种与以太坊交互的流行方法,可用于所有主要的以太坊节点实现(例如 Geth 和 Parity)以及许多第三方 Web 服务(例如 INFURA)。它通常提供:
- 与以太坊网络的连接(Provider)
- 持有你的私钥并且可以签署东西(Signer)
示例代码如下:
const provider = new ethers.providers.JsonRpcProvider();const signer = provider.getSigner()
如果您不指定 //url//,则 Ethers 连接到默认值 (即“http://localhost:8545”)
为本地测试方便,这里我使用Ganache客户端来模拟以太坊网络,端口设置为8545。控制台输出的内容:
查询区块链数据
一旦你有了一个提供者,你就有了一个到区块链的只读连接,你可以用它来查询当前状态、获取历史日志、查找部署的代码等等。
基本查询操作如下:
// 查找当前区块号const BlockNumber = await provider.getBlockNumber();console.log(BlockNumber);// 49// 获取当前主账户letprivateKey="642f60dbea64adbda21bd43cf3b5adfd32d35ad0e0f6cee2808db500ab3cd094";let wallet=newethers.Wallet(privateKey, provider);letaccountAddress=wallet.address;console.log('账户地址: ',accountAddress);// 获取账户余额(通过地址或 ENS 名称,如果网络支持)// balance = await provider.getBalance("ethers.eth")const balance = await provider.getBalance(accountAddress);console.log(balance.toString());// 84878281540000000000 Wei// 余额格式化(ether与wei的转换)console.log(ethers.utils.formatEther(balance.toString())); // 84.87828154 Etherconsole.log(ethers.utils.parseEther("1.0")); //1000000000000000000
验证结果:
参考文档:Getting Started