在十一月初,Cosmos 在 Chain Reaction 会议中进行了一段代码演示,演示了如何使两条亮通过 IBC 建立链接,并完成资产跨链交易。这是首次发布的较为完整的跨链流程的演示,虽然 IBC 还并未完全实现仍处在开发阶段,在视频中也仅展示了一个 happy pass,但至少,它让我们看到我们离“万链互联”又更近了一步。

https://www.youtube.com/watch?v=DeMhlEck3E0

随后,笔者在 Gaia 项目中找到了相关的 IBC Demo 文档,并在本地成功地跑了起来,后文为对文档的翻译和注解,同时对部分命令稍微进行了一些优化,以适配本地开发环境。

tw-bc-group/ibc-demo

IBC 跨链交易 Demo

这个演示分支是存在与 Gaia 项目中的,如果是第一次运行 Gaia,请确保本地 Go 开发环境是可工作的。

项目依赖

拉取代码和编译二进制文件:

git clone git@github.com:cosmos/gaia
cd gaia
git checkout cwgoes/ibc-demo-fixes
make install
gaiad version
gaiacli version

测试网环境设置

创建临时测试目录,创建测试链 ibc0ibc1

cd ~ && mkdir ibc-testnets && cd ibc-testnets
gaiad testnet -o ibc0 --v 1 --chain-id ibc0 --node-dir-prefix n
gaiad testnet -o ibc1 --v 1 --chain-id ibc1 --node-dir-prefix n

修改默认的 gaiad 和 gaiacli 配置

gaiadgaiacli 是我们通过编译之后自动安装到 Go 可执行文件目录下的 Gaia 客户端,其中gaiad 是全节点客户端,gaiacli 是轻节点客户端。

通过运行如下命令,修改链的默认配置,使得两条链可以在本地同时跑起来:

# Configure the proper database backend for each node and different listening ports
sed -i "_back" 's/"leveldb"/"goleveldb"/g' ibc0/n0/gaiad/config/config.toml
sed -i "_back" 's/"leveldb"/"goleveldb"/g' ibc1/n0/gaiad/config/config.toml
sed -i "_back" 's#"tcp://0.0.0.0:26656"#"tcp://0.0.0.0:26556"#g' ibc1/n0/gaiad/config/config.toml
sed -i "_back" 's#"tcp://0.0.0.0:26657"#"tcp://0.0.0.0:26557"#g' ibc1/n0/gaiad/config/config.toml
sed -i "_back" 's#"localhost:6060"#"localhost:6061"#g' ibc1/n0/gaiad/config/config.toml
sed -i "_back" 's#"tcp://127.0.0.1:26658"#"tcp://127.0.0.1:26558"#g' ibc1/n0/gaiad/config/config.toml
gaiacli config --home ibc0/n0/gaiacli/ chain-id ibc0
gaiacli config --home ibc1/n0/gaiacli/ chain-id ibc1
gaiacli config --home ibc0/n0/gaiacli/ output json
gaiacli config --home ibc1/n0/gaiacli/ output json
gaiacli config --home ibc0/n0/gaiacli/ node <http://localhost:26657>
gaiacli config --home ibc1/n0/gaiacli/ node <http://localhost:26557>

配置两条链的私钥,使得n0n1 同时出现在两条链上。