区块链开发的体验还是有点差。
随着 Defi 的发展,智能合约开始相互调用。这给开发和测试带来了一定的难度。我们可以在本地搭建测试链,然后部署需要调用的外部合约。也可以直接使用测试网络,调用部署上面的外部合约。这两种方法都很麻烦。对于第一种方法,如果需要重置环境,那么我们每次都要重新部署外部合约。对于第二种方法,不是所有的合约都部署到了测试网络,而且有些测试网络上的合约和主网会有所区别。
最简单的方法就是我们从主网分叉一条链进行本地开发和维护。需要重置时,就重新进行分叉。这样测试环境基本和主网就是一摸一样了。
Truffle Team
这是 Truffle Teams。他们支持 Sandbox 功能。用户可以一键搭建一条从主网分叉的链。这条链运行在云端,我们只需要通过 RPC 进行调用即可。免费用户至多拥有一个沙盒。
Sandbox 的好处在于即开即用,链运行在云端,适合团队协作。坏处在于没有日志,无法追踪新产生的交易。如果忘记了新部署的合约地址,那么就得重新部署一遍。
Ganache
Ganache-cli 也支持从主网进行分叉。可能这就是 Truffle Team 用的产品吧。使用之前我们需要有一个 Provider。可以是 Infura,也可以用不需要注册的 cloudflare-eth。运行起来也很方便,而且支持了更多的自定义选项。ganache-cli --fork https://mainnet.infura.io/v3/{infura_project_id}@{block_number}
或ganache-cli -f https://cloudflare-eth.com/ -m "clutch captain shoe salt awake harvest setup primary inmate ugly among become" -i 999 -u 0x9759A6Ac90977b93B58547b4A71c78317f391A28
f
provider。m
助记词。前十个地址有 100ETH。i
网络 ID。u
地址拥有写入权限,不需要知道私钥。
启动了测试链之后,我们可以在终端看到最新的交易信息等。此测试链可以用于 Remix,Truffle,Hardhat。 由于我们用 Ganache-cli 启动测试链,我们没法使用 Ganache GUI。
Hardhat
这个跟 Ganache-cli 差不多。相关源代码。
原理
不用担心分叉主网作为测试链会占很多内存。这些方法都不会将主网信息全部下载到本地,最多进行缓存,加快处理速度。所有关于主网的信息,我们都会通过 Provider 进行查询,只有新的区块会保存在本地。
参考
Testing on Mainnet with Jest, Ganache, and Uniswap
Testing your smart contract with existing protocols: Ganache fork - EthereumDev
Ethereum development environment for professionals by Nomic Labs