ethers.js 访问区块链网络
在使用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); }