上一篇文章介绍了如何使用 Ignite 搭建 Cosmos 区块链以及进行多节点部署。这一篇文章继续我们的目标,搭建 Cosmos + EVM 区块链。
我们第一个目标是:搭建一个可以被公网访问的 Cosmos + EVM 区块链,并部署少量节点。
Cosmos 如何与 EVM 集成呢?Cosmos 官方推出了一个解决方案:https://github.com/cosmos/evm
我原本以为,按照 Cosmos 模块化的设计,EVM 应该就是一个独立的模块,只要在 app.go 上整合上之后就能用 Ignite 启动了,我们可以参考 https://evm.cosmos.network/integrate/to-cosmos-sdk-chain 进行整合。但我做到一半发现 Ignite 生成的代码结构和该文档的完全对不上!(后面发现这个文档是基于 Spwan 框架的,下文会提到)
经过几天的研究,我最终发现这个解决方案和 Ignite 居然不兼容!不兼容的地方至少有以下两点:
${chainName}_${evmChainID}-${version},比如 cosmos_262144-1。但是 Ignite(SPN)支持的 ChainID 格式必须全部为小写字母,不能出现下划线或者数字,而且这无法通过修改 Ignite 代码进行兼容,因为这个限制的逻辑是写在 SPN 网络里的,是由 Ignite 维护的也就是说,**我们第一周做的事情全部白费**了….当然,我们如果投入足够多的精力,还是能让他们兼容起来的,但很显然,我们已经没有这种精力了。
我继续调研了一段时间,发现原来 Cosmos 还有另一个脚手架工具:Spawn(https://github.com/rollchains/spawn)。但这个框架仍非常早期,文档、参考资料和生态极其不完善,唯一的优点是提供了一键搭建 Cosmos + EVM 区块链的指令…然并卵,他不提供像 Ignite 那样快速启动一条区块链的功能。
因此,我们只能通过自己写脚本的方式来让我们能够像 Ignite 那样快速启动区块链。
为了简单起见,我暂时使用 cosmos/evm 来搭建我们的区块链。该仓库的 v0.1.0 Tag 上有一个 example_chain (https://github.com/cosmos/evm/tree/v0.1.0/example_chain),这个工程里面提供了一个完整的启动本地区块链节点的脚本:https://github.com/cosmos/evm/blob/v0.1.0/example_chain/local_node.sh,我亲测了一遍,这个脚本**居然是直接能跑通并且确实能成功连接上 Metamask 的**!—— 本节结束!🎊