先大致浏览一遍 流程概述,这里以 aggregation-bank
项目为例。
以太坊公共网络,对应的链叫做主链,或以太坊公链,对应的 Chain ID 是 1,与主网进行交互需要连接到一个矿工节点,可以通过 infura.io 或者 alchemy.com 运行一个自己的矿工节点。
由 hardhat node
命令启动的本地网络,对应的链叫做私有链,对应的 Chain ID 和节点的连接信息由项目配置指定。私有链可以通过 fork 主链来运行,相当于是从主链的某个区块开始进行了一次硬分叉,该区块之前的历史区块和主链完全相同,新产生的区块只在本地网络中。
独立于主网的公共网络,比如 Ropsten/Kovan/Rinkeby 等,对应的链叫做测试链,因为也是公共网络,每个链都有自己固定的的 Chain ID,测试链的矿工不以收益为目标。本项目不需要用测试网络。
特指使用 ethers.js 库来部署合约,调用合约方法或者进行转账的 JavaScript 脚本。
这篇文档里“地址”和“钱包”等价于“公钥”。
针对合约一般说“地址”或者“合约地址”,也叫合约账户(Contracts Account);针对个人账户一般说“用户公钥”或者“钱包地址”,这里特指用 privateKey 生成的 publicKey,也叫外部账户(EOA, External Owned Account)。
hardhat@^2.4.0
: 配置本地开发环境,运行以太坊节点ethers@^5.2.0
: 使用 JavaScript 连接以太坊节点,发送交易或调用合约chai@^4.3.4
: 测试框架,让测试脚本可读性更高,hardhat 默认支持hardhat-deploy@^0.7.10
: 对 hardhat 的 deploy 进行扩展,让合约部署和访问更加方便@nomiclabs/hardhat-ethers@^2.0.2
: 对 ethers 进行了一些扩展,方便在 hardhat 环境使用