1.HelloVitalik

334 阅读1分钟

目标:

  • 第一个程序HelloVitalik:查询V神的ETH余额,并输出在console中。

ethersJs 与web3js 对比

  1. 与更早出现的web3.js相比,它有以下优点:
  2. 代码更加紧凑:ethers.js大小为116.5 kB,而web3.js为590.6 kB。
  3. 更加安全:Web3.js认为用户会在本地部署以太坊节点,私钥和网络连接状态由这个节点管理(实际并不是这样);ethers.js中,Provider提供器类管理网络连接状态,Wallet钱包类管理密钥,安全且灵活。
  4. 原生支持ENS

注意点:

可以选择本地写代码或者使用playcode是一个在线编译javascript的平台。playCode 比较方便,不需要考虑网络问题。本地代码会收网络环境影响(需要科学上网)配置很麻烦。

代码:

// 导入依赖包文件,playcode 免费账户不能下载依赖、所以使用 CDN 资源
import { ethers } from "<https://cdn-cors.ethers.io/lib/ethers-5.6.9.esm.min.js>";
// 通过第三方服务商连接到以太坊网络中去,
// 在ethers中,Provider类是一个为以太坊网络连接提供抽象的类,它提供对区块链及其状态的只读访问。我们声明一个provider用于连接以太坊网络。ethers内置了一些公用rpc,方便用户连接以太坊:(但是我使用公共的访问不了)
const mainUrl = '<https://mainnet.infura.io/v3/aef97f954f70449d98f680bccaa7f0e1>'
const provider = new ethers.providers.JsonRpcProvider(`${mainUrl}`);
// 创建一个方法
const main = async () => {
  // 以利用Provider类的getBalance()函数来查询某个地址的ETH余额。由于ethers原生支持ENS域名,我们不需要知道具体地址,用ENS域名vitalik.eth就可以查询到以太坊创始人豚林-vitalik的余额
    const balance = await provider.getBalance(`vitalik.eth`);
    // 而1 ETH = 10^18 wei。我们打印在console之前,需要进行单位转换。ethers提供了功能函数formatEther,我们可以利用它将wei转换为ETH
    console.log(`ETH Balance of vitalik: ${ethers.utils.formatEther(balance)} ETH`);
}
main()

代码分析

1.导入 ethersJS

playcode平台上,免费账号不能安装外部库。我们可以直接从ethers的CDN导入

import { ethers } from "<https://cdn-cors.ethers.io/lib/ethers-5.6.9.esm.min.js>";

2**. 连接以太坊网络**

为方便用户快速接入以太坊网络降低使用门槛使用 第三方服务商 接入以太坊网络。

关于什么是Infura

const mainUrl = '输入自己在第三方平台创建的url'
const provider = new ethers.providers.JsonRpcProvider(`${mainUrl}`);
  1. 获取v神地址的ETH余额

我们可以利用Provider类的getBalance()函数来查询某个地址的ETH余额。由于ethers原生支持ENS域名,我们不需要知道具体地址,用ENS域名vitalik.eth就可以查询到以太坊创始人豚林-vitalik的余额。

const balance = await provider.getBalance(`vitalik.eth`);
  1. 转换单位后在console中输出

我们从链上获取的以太坊余额以wei为单位,而1 ETH = 10^18 wei。我们打印在console之前,需要进行单位转换。ethers提供了功能函数formatEther,我们可以利用它将wei转换为ETH

console.log(`ETH Balance of vitalik: ${ethers.utils.formatEther(balance)} ETH`);