Synopsis

本文旨在深入分析 Cosmos SDK 中已经实现的 IBC 源码,对其已经实现或部分实现的语义并结合 ICS 文档 Cosmos IBC 链间通信协议剖析 ,剖析其背后的跨链设计思想,真正了解 Cosmos,了解跨链。

在十一月初,Cosmos 在 Chain Reaction 会议中进行了一段代码演示,演示了如何使两条亮通过 IBC 建立链接,并完成资产跨链交易。这是首次发布的较为完整的跨链流程的演示。虽然 IBC 还并未完全实现仍处在开发阶段,关于应用层以及激励等语义还未实现,但我们可以在演示版本的 SDK 中看到 ICS 文档中提及的关键标准的部分实现,由此可以窥见 IBC 由 ICS 标准的设定到落地的实施细节。相关代码及 hands-on 请参考 IBC Hands-on / IBC 快速上手

本文会从几个核心 ICS 子协议出发,通过标准解读加源码分析的方式,对 IBC 进行分析。

文中所示代码取自 cosmos-sdk@v0.34.4 发行版本。

Cosmos Code Convention

以 cosmos-sdk 构建的项目代码有自己的项目结构和约定。例如,应用逻辑相关的模块的代码会放到./x/ 目录下。不论是应用模块还是 SDK 内置的诸如 authbankgov等核心功能模块,还是正在开发的 ibc 模块,他们本质上都是可插拔的模块,不论是 cosmos-sdk 源码还是 gaia 亦或是其他基于 cosmos-sdk 所构建的包含应用链的代码,这一套约定都是通用的。

所以对于 cosmos-sdk 来说,其本身是ibc 协议的实现,所以我们要找的ibc 模块的实现的入口是./x/ibc

在跳进代码细节之前,了解如何阅读和编写基于 cosmos-sdk 构建的代码是很有必要的。 Cosmos SDK 快速建链

Architectural Overview

在 cosmos-sdk 的 ibc-alpha 特性分支上,已经完成的 IBC 代码目录如下:

其中,

ICS 02 Client