Inevitable

文字所表现出来的美丽、恐惧。。还有率真之类的东西,我觉得在其他事物中还是很难寻得的。

0%

快速搭建主网分叉链(fork mainnet)

区块链开发的体验还是有点差。

随着 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

欢迎关注我的其它发布渠道