【阿菜做实践】利用ganache-cli本地fork以太坊主链分叉
前言
Fork主网意思是模拟具有与主网相同的状态的网络,但它将作为本地开发网络工作。 这样你就可以与部署的协议进行交互,并在本地测试复杂的交互。不用担心分叉主网作为测试链会占很多内存。这些方法都不会将主网信息全部下载到本地,最多进行缓存,加快处理速度。所有关于主网的信息,都会通过 Provider 进行查询,只有新的区块会保存在本地。
所需要用到的工具,具体的安装过程在这篇文章中就不展开,请读者自行安装:
- ganache-cli
- remix
- matemask
- alchemy
Fork以太链分叉
首先,去alchemy
申请一个账号,获取alchemy provider
,如下图所示。
然后在ganache-cli
的github上可以找到他的参数调用方法:https://github.com/trufflesuite/ganache-cli-archive
其中关于fork分叉的描述为:
-f or --fork: Fork from another currently running Ethereum client at a given block. Input should be the HTTP location and port of the other client, e.g. http://localhost:8545. You can optionally specify the block to fork from using an @ sign: http://localhost:8545@1599200.
我们可以采用以下命令在本地fork以太坊分叉
ganache-cli --fork {alchemy provider}@{block number}
结果如下,现在已经成功fork了以太坊在区块13730855
时候的分叉
交互
根据cmd中最后一行给出的地址127.0.0.1:8545
,将fork下来的分叉链添加到matemask上,其中链ID
matemask建议为1337
。
然后在cmd中挑选一个账户(初始金额为100ETH),将其添加到matemask的账户列表中。
账户添加完成后,打开remix
,当账户连接到ganache-cli链上时,选择injectd Web3
。
在matemask上进行连接。
连接成功,现在可以通过remix来操作账户与ganache-cli链进行交互了
随机挑选一位幸运儿进行转账测试,成功!接下来就可以开始你的测试之旅了!
注意事项
当采用infure
作为provider
,会在进行交互阶段报错Project ID does not have access to archive state
。
解决方法:https://hardhat.org/hardhat-network/guides/mainnet-forking.html#project-id-does-not-have-access-to-archive-state
"Project ID does not have access to archive state"
When using Infura without the archival add-on, you will only have access to the state of the blockchain from recent blocks. To avoid this problem, you can use either a local archive node or a service that provides archival data, like Alchemy (opens new window).
言简意赅就是:用Alchemy
作为provider
。
最新文章
- 如何让win10实现关机确认-暂没确认
- 401. Binary Watch
- 转载:JProfiler远程监控LINUX上的Tomcat过程细讲
- console.log 被重写覆盖以后如何恢复
- Failed to run the WC DB work queue associated with 错误的解决
- DOS系统功能调用表(INT 21H)
- 12100 Printer Queue(优先队列)
- Resharper上手指南
- Android07-Android广播
- SQL Server-聚焦NOLOCK、UPDLOCK、HOLDLOCK、READPAST你弄懂多少?(三十四)
- 利用LinkedList生成一副扑克牌
- 【Android Developers Training】 96. 运行一个同步适配器
- Web前端框架与移动应用开发第八章
- DeskMini无传统机械键盘与鼠标接口的情况下使用U盘安装系统经验总结
- Python读文本文件
- mysql完整版
- route命令使用
- springmvc+spring+mybatis+maven项目构建
- 【Java面试题】60 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
- Redis设计与实现 (一): 简单动态字符串
热门文章
- postman调试工具介绍及常用的快捷键收集
- [源码解析] PyTorch 分布式(7) ----- DistributedDataParallel 之进程组
- Java数组声明
- idea配置MyBatis
- 31、下一个排列 | 算法(leetode,附思维导图 + 全部解法)300题
- .NET 5的System.Text.Json的JsonDocument类讲解
- 洛谷 P5279 - [ZJOI2019]麻将(dp 套 dp)
- annovar 注释除人类以外的SNP
- 【shell】循环将字符串写入数组中?
- SQL-用到的数据库语句总结