目标:
- 第一个程序
HelloVitalik
:查询V神的ETH
余额,并输出在console
中。
ethersJs 与web3js 对比
- 与更早出现的
web3.js
相比,它有以下优点: - 代码更加紧凑:
ethers.js
大小为116.5 kB,而web3.js
为590.6 kB。 - 更加安全:
Web3.js
认为用户会在本地部署以太坊节点,私钥和网络连接状态由这个节点管理(实际并不是这样);ethers.js
中,Provider
提供器类管理网络连接状态,Wallet
钱包类管理密钥,安全且灵活。 - 原生支持
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>";
为方便用户快速接入以太坊网络降低使用门槛使用 第三方服务商 接入以太坊网络。
const mainUrl = '输入自己在第三方平台创建的url'
const provider = new ethers.providers.JsonRpcProvider(`${mainUrl}`);
我们可以利用Provider
类的getBalance()
函数来查询某个地址的ETH
余额。由于ethers
原生支持ENS
域名,我们不需要知道具体地址,用ENS
域名vitalik.eth
就可以查询到以太坊创始人豚林-vitalik的余额。
const balance = await provider.getBalance(`vitalik.eth`);
我们从链上获取的以太坊余额以wei
为单位,而1 ETH = 10^18 wei
。我们打印在console
之前,需要进行单位转换。ethers
提供了功能函数formatEther
,我们可以利用它将wei
转换为ETH
。
console.log(`ETH Balance of vitalik: ${ethers.utils.formatEther(balance)} ETH`);