ethers.js 访问区块链网络

推特@Hita_DAO   DiscordHitaDAO

在使用Ethers.js库访问区块链网络时,你需要先安装Ethers.js库

const { ethers } = require("ethers");

然后创建一个Ethers.js提供者对象,用于与区块链网络进行通信。


提供者 Provider

提供者Provider 是一个连接以太坊网络的抽象,用与查询以太坊网络状态或者发送更改状态的交易。

EtherscanProvider 和 InfuraProvider 提供连接公开的第三方节点服务提供商,无需自己运行任何以太坊节点。

JsonRpcProvider 和 IpcProvider 允许连接到我们控制或可以访问的以太坊节点(包括主网,测试网,权威证明(PoA)节点或Ganache)。

如果你已经有 Web3 应用程序或 Web3 兼容的 提供者Provider (例如 MetaMask 的 web3.currentProvider ),它可以用 Web3Provider 包装来使它与ethers的Provider API 兼容。

在大多数情况下,建议使用默认 提供者Provider , 它同时连接 Etherscan 和 INFURA 。


连接默认的 provider

// 可以使用任何标准网络名称做参数:
//  - "homestead"
//  - "rinkeby"
//  - "ropsten"
//  - "kovan"
//  - "goerli"
let provider = ethers.getDefaultProvider('ropsten');

连接 MetaMask

// 将自动检测网络;
// 如果在MetaMask中更改了网络,则会导致页面刷新。
let provider = new ethers.providers.Web3Provider(web3.currentProvider);

连接第三方提供者

// 可以使用任何标准网络名称做参数:
//  - "homestead"
//  - "rinkeby"
//  - "ropsten"
//  - "kovan"

let defaultProvider = ethers.getDefaultProvider('ropsten');

// ... 或 ...
let etherscanProvider = new ethers.providers.EtherscanProvider('ropsten');

// ... 或 ...
let infuraProvider = new ethers.providers.InfuraProvider('ropsten');

连接 Geth 或 Parity 节点

// 在使用JSON-RPC API时,将自动检测网络

// 默认: http://localhost:8545
let httpProvider = new ethers.providers.JsonRpcProvider();

// 通过定制 URL 连接 :
let url = "http://something-else.com:8546";
let customHttpProvider = new ethers.providers.JsonRpcProvider(url);

// 通过 IPC 命名管道
let path = "/var/run/parity.ipc";
let ipcProvider = new ethers.providers.IpcProvider(path);

连接一个已有的 Web3 提供者

// 使用 Web3 provider 时, 自动检测网络

// e.g. HTTP provider
let currentProvider = new web3.providers.HttpProvider('http://localhost:8545');

let web3Provider = new ethers.providers.Web3Provider(currentProvider);



以下是一个简单的例子,展示了如何使用Ethers.js获取以太坊网络的当前区块数量。

// 异步函数获取区块号
async function getBlockNumber() {
  const blockNumber = await provider.getBlockNumber();
  console.log("当前区块号: ", blockNumber);
}