先大致浏览一遍 流程概述,这里以 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)。

开发工具和文件结构

项目需要用到的库