1.2.4 Cosmos-SDK
大部分的区块链都会有账户管理、交易处理等功能,为了进一步提升区块链构建的效率并缩短开发周期,Tendermint团队构建了Cosmos-SDK,实现了区块链场景中一系列的通用功能模块,如图1-4所示。模块化设计的理念使得开发者既可以复用已有的功能模块,也可以快速构建新的功能模块,以显著提升上层应用的开发效率。
图1-4 Cosmos-SDK的通用功能模块
按照模块实现的功能,可以将Cosmos-SDK目前提供的所有模块划分为以下几类。
- 基础功能:账户管理与交易处理。
- auth模块管理系统中的所有账户。
- bank模块管理链上资产的转移。
- 辅助功能:创世区块管理、链上状态一致性检查等。
- genutil模块管理链的创世区块。
- supply模块负责链上资产总量的管理。
- crisis模块负责所有模块的不变量检查的管理。
- params模块负责所有模块的参数管理。
- 链上治理:基于提案的链上治理与网络升级。
- gov模块负责链上治理机制。
- upgrade模块负责链的升级。
- PoS:链上资产抵押、链上惩罚和奖励。
- staking模块管理链上资产抵押。
- slashing模块负责对验证者的被动作恶行为进行惩罚。
- evidence模块负责对验证者的主动作恶行为进行惩罚。
- mint模块负责链上资产的铸造。
- distribution模块管理区块奖励的分发。
- IBC协议:基于中继机制的跨链协议。
- ibc/core模块负责跨链通信功能。
采用模块化设计理念的同时保证安全性是一个技术挑战。如何防止一个模块的状态被另一个模块恶意更改?遵循对象能力模型(object-capability model)的安全理念(每个模块仅对外暴露必要的功能接口),Tendermint团队设计了一套多样化的存储体系,赋予每个模块单独的存储空间。在此基础之上,Cosmos-SDK也为每个模块设计了守护者(keeper)角色来维护和更新每个模块的状态。每个模块的守护者隐藏了模块内部的具体实现以及存储设计,模块之间的配合通过各个模块的守护者之间的相互调用来完成,可以保证每个模块内部状态只会被本身模块的守护者更新,也就保证了链上状态的一致性。
基于Tendermint Core和Cosmos-SDK,可以按照图1-5所示的方式快速构建应用专属区块链系统。借助于Tendermint共识协议,链上交易处理与确认速度也有了大幅度的提高。与以太坊上的DApp需要去竞争稀缺的公链资源不同,应用专属区块链系统之间无须竞争任何链上资源,每个应用专属区块链系统独享链上的所有资源,而借助ABCI,每个应用专属区块链系统都有完整的链上自治权。笔者自身曾经参与过对照比特币实现代码重新开发比特币现金客户端的项目,也参与过基于Tendermint Core和Cosmos-SDK构建应用专属区块链系统的项目,每次想起解读、修改比特币实现代码的“痛苦”经历,都会感谢Tendermint团队构建的这套区块链开发框架。
图1-5 基于Tendermint Core和Cosmos-SDK快速构建应用专属区块链系统