2.Provider类

111 阅读2分钟

学习资料:

RPC服务商:ethereum.org/zh/develope…

学习内容

  1. 认识 Provider 类,知道它是什么?

  2. 通过 RPC 连接快速连接到以太坊网络

  3. 通过 Provider 实例读取以太坊链上的一些数据

    1. getBalance(读取钱包余额)
    2. getNetwork(读取当前连接到网络)
    3. getBlockNumber(读取当前的区块高度)
    4. getGasPrice(查询当前 Gas 的价格)
    5. getFeeData (查询当前建议的 Gas 价格)
    6. getBlock (查询指定区块信息)
    7. getCode (查询指定合约的源码)

什么是 Provider 类

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

RPC 是什么?

在以太坊上开发的Dapp应用(链下)需要与区块链(链上)交互。早期,以太坊上的基础设施很少,开发者需要在本地部署以太坊节点来完成链下和链上的交互,非常麻烦,且耗时数日。

RPC在链下、链上之间搭了一座桥,让两者的交互变的简单。它为用户提供对以太坊和IPFS网络的即时、可扩展的API访问。开发者在服务商portalInfuraSettleMint、等)官网注册后,就可以免费申请的以太坊API KEY,就可以利用Infura的节点与区块链交互。

代码

1.通过连接 RPC 创建Provider实例

const providerETH = new ethers.providers.JsonRpcProvider(mainNetWork);

2. 利用创建的 provider 实例读取链上的一些数据

  • 读取某个地址的钱包余额
const balance = await providerETH.getBalance('vitalik.eth')
console.log('V神的钱包余额', ethers.utils.formatEther(balance))
  • 读取当前的 provider 连接到哪个条网络
const mainNetWorkInFo = await providerETH.**getNetwork**()
const testNetWorkInFo = await providerTest.**getNetwork**()
console.log('主网信息', mainNetWorkInFo)
console.log('测试网信息', testNetWorkInFo)
  • 读取当前的区块高度
const blockNumber = await providerETH.getBlockNumber()
  • 查询 gas 的价格
const gasPrice = await providerETH.getGasPrice()
console.log('当前 gas 价格', gasPrice.toNumber())
  • 查询区块信息
const block = await providerETH.getBlock(blockNumber)
console.log('block',block)
  • 查询指定区块高度下的合约源代码,如果当前没有合约被部署, 将返回 0x
const contract = await providerETH.getCode('registrar.firefly.eth')
console.log('contract',contract)