文章目录
参考:Ethers极简入门: 1. HelloVitalik (6行代码)
ethers.js 开源库
ethers.js是一个完整而紧凑的开源库,用于与以太坊区块链及其生态系统进行交互。如果你要写Dapp的前端,你就需要用到ethers.js。
与更早出现的web3.js相比,它有以下优点:
- 代码更加紧凑:ethers.js大小为116.5 kB,而web3.js为590.6 kB。
- 更加安全:
- Web3.js认为用户会在本地部署以太坊节点,私钥和网络连接状态由这个节点管理(实际并不是这样);
- ethers.js中,Provider提供器类管理网络连接状态,Wallet钱包类管理密钥,安全且灵活。
- 原生支持ENS。
HelloETH
环境和测试代码
安装 NodeJs,然后把 NodeJs 安装目录添加到系统变量,以便使用包管理工具 npm
。
安装 ethers.js 库:
npm install --save ethers
安装命令部分回显:
+ [email protected]
added 45 packages from 4 contributors and audited 45 packages in 11.32s
IDEA 创建 NodeJS 项目,在项目根目录创建 JS 目录,在该目录下新建 HelloETH.js
文件。
使用WTF的测试代码:(未找到ethers库则使用IDEA安装一下)
let ethers = require('ethers');
const provider = ethers.getDefaultProvider();
const main = async () => {
const balance = await provider.getBalance(`vitalik.eth`);
console.log(`ETH Balance of vitalik: ${
ethers.utils.formatEther(balance)} ETH`);
}
main()
在 IDEA 的 NodeJS 项目中直接运行 HelloETH.js 文件,效果如下:
涉及的重点代码
在ethers中,Provider类是一个为以太坊网络连接提供抽象的类,它提供对区块链及其状态的 只读
访问。
由于和区块链交互不是实时的我们需要用到js的async/await语法糖。每次和链交互的调用需要用到await,再把这些这些用async函数包裹起来,最后再调用这个函数。
报错
node下无法使用import:SyntaxError: Cannot use import statement outside a module
参考文章:
- 【解决SyntaxError: Cannot use import statement outside a module问题】
- SyntaxError: Cannot use import statement outside a module报错原因和解决方法
Node.js已经实现了99%的ES6新特性,采用的却是CommonJS规范,使用require引入模块,使用module.exports导出接口,所以使用 require()
导入模块:
let ethers = require('ethers');
疑惑
NodeJS脚本运行后不会自动退出-暂不解决
但使用 process.exit(0)
后虽然进程会退出,但 console.log() 函数并没有打印信息到控制台。
临时方案:先手工中止脚本把。