Ether.js-Provider 提供器

Provider类

Provider类是对以太坊网络连接的抽象,为标准以太坊节点功能提供简洁、一致的接口。在ethers中,Provider不接触用户私钥,只能读取链上信息,不能写入,这一点比web3.js要安全。

除了之前介绍的默认提供者defaultProvider以外,ethers中最常用的是jsonRpcProvider,可以让用户连接到特定节点服务商的节点。

jsonRpcProvider

首先,你需要去节点服务商的网站注册并创建API Key
后续笔记所采用的都是来自Alchemy的API Key

链接公开节点

你还可以在Chainlist网站找到各个链的公开节点。
在找到合适的rpc之后,可以利用ethers.JsonRpcProvider()方法来创建Provider变量,该方法以节点服务的url链接作为参数。
在下面这个例子中,我们分别创建连接到ETH主网和Sepolia测试网的provider:

// 利用公共rpc节点连接以太坊网络
// 可以在 https://chainlist.org 上找到
const ALCHEMY_MAINNET_URL = 'https://rpc.ankr.com/eth';
const ALCHEMY_SEPOLIA_URL = 'https://rpc.sepolia.org';
// 连接以太坊主网
const providerETH = new ethers.providers.JsonRpcProvider(ALCHEMY_MAINNET_URL)
// 连接Sepolia测试网
const providerSepolia = new ethers.providers.JsonRpcProvider(ALCHEMY_SEPOLIA_URL)

利用Provider读取链上数据

Provider类封装了一些方法,可以便捷的读取链上数据:

  1. 利用getBalance()函数读取主网和测试网Vitalik的ETH余额(测试网目前不支持ENS域名,只能用钱包地址查询):
// 1. 查询vitalik在主网和Sepolia测试网的ETH余额
console.log("1. 查询vitalik在主网和Sepolia测试网的ETH余额");
const balance = await providerETH.getBalance(`vitalik.eth`);
const balanceSepolia = await providerSepolia.getBalance(`0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045`);
// 将余额输出在console(主网)
console.log(`ETH Balance of vitalik: ${ethers.utils.formatEther(balance)} ETH`);
// 输出Sepolia测试网ETH余额
console.log(`Sepolia ETH Balance of vitalik: ${ethers.utils.formatEther(balanceSepolia)} ETH`);

在这里插入图片描述

  1. 利用getNetwork()查询provider连接到了哪条链,homestead代表ETH主网:
// 2. 查询provider连接到了哪条链
console.log("\n2. 查询provider连接到了哪条链")
const network = await providerETH.getNetwork();
console.log(network);

在这里插入图片描述

  1. 利用getBlockNumber()查询当前区块高度:
// 3. 查询区块高度
console.log("\n3. 查询区块高度")
const blockNumber = await providerETH.getBlockNumber();
console.log(blockNumber);

在这里插入图片描述

  1. 利用getTransactionCount()查询某个钱包的历史交易次数。
// 4. 查询 vitalik 钱包历史交易次数
console.log("\n4. 查询 vitalik 钱包历史交易次数")
const txCount = await providerETH.getTransactionCount("vitalik.eth");
console.log(txCount);

在这里插入图片描述

  1. 利用getFeeData()查询当前建议的gas设置,返回的数据格式为bigint。
// 5. 查询当前建议的gas设置
console.log("\n5. 查询当前建议的gas设置")
const feeData = await providerETH.getFeeData();
console.log(feeData);

在这里插入图片描述

  1. 利用getBlock()查询区块信息,参数为要查询的区块高度:
// 6. 查询区块信息
console.log("\n6. 查询区块信息")
const block = await providerETH.getBlock(0);
console.log(block);

在这里插入图片描述

  1. 利用getCode()查询某个地址的合约bytecode,参数为合约地址,下面例子中用的主网WETH的合约地址:
// 7. 给定合约地址查询合约bytecode,例子用的WETH地址
console.log("\n7. 给定合约地址查询合约bytecode,例子用的WETH地址")
const code = await providerETH.getCode("0xc778417e063141139fce010982780140aa0cd5ab");
console.log(code);

在这里插入图片描述

参考资料

WTF-Ethers
ether.js 中文文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值