区块链架构与实现:Cosmos详解
上QQ阅读APP看书,第一时间看更新

前  言

自中本聪发表比特币白皮书以来,数字资产领域经历了几多沉浮。但在瞬息万变中有一点却越来越清晰:比特币底层所依赖的区块链技术在诸多方面可能有着改变世界的潜力。比特币和区块链除完成了数字货币领域“从0到1”的飞跃之外,也为世界带来了无限的想象空间。然而区块链技术想要在社会生活中产生实际影响,需要脚踏实地地实现工程化落地。尽管有着中本聪的“天才”设计,但是比特币凭一己之力显然无法满足不断延展的需求,这就催生了构建新区块链系统的需求。

区块链系统涉及对等网络通信、密码算法、共识协议、证明机制以及经济激励设计等众多学科和领域,构建新区块链系统所面临的技术挑战不可小觑。在迫切的需求和极高的技术门槛之间,早期的区块链从业者选择了通过改造比特币实现代码来搭建具有新特性的区块链系统的技术路线。这种技术路线可以在一定程度上降低技术门槛,但却需要面对比特币实现代码中为了修正自己的逻辑而引入的烦琐细节,并且在这一技术路线下诞生的区块链系统不可避免地延续了比特币的“沉疴”:海量资源消耗、交易处理速度低、交易体验差。

为了解决这些问题,需要重新审视和考量比特币在各个方向的技术选型。随着区块链技术的演进,用PoS机制替代比特币的工作量证明(proof-of-work,PoW)机制以降低资源消耗,用BFT共识协议替代比特币的中本聪共识(Nakamoto consensus)协议以提高交易处理速度、改善交易体验的技术方案得到了区块链社区的广泛认同,逐渐成为构建区块链应用的主流方案。多个备受关注的区块链项目均采纳了该技术方案,例如以太坊2.0、Polkadot以及Cosmos Hub。其中以太坊2.0目前未完成,Polkadot在2020年5月刚完成主网启动,唯有Tendermint团队构建的Cosmos Hub已经上线并平稳运行了两年多的时间,并在2021年2月顺利完成了自启动以来最大的升级——“星际之门”(Stargate)升级计划。得益于PoS机制和BFT共识协议的选用,Cosmos Hub在极大地降低资源消耗的同时也带来了交易体验的“飞跃”。自上线以来,Cosmos Hub的平稳运行也验证了上述技术方案的可行性。

Cosmos Hub虽然在交易处理速度方面相较于比特币有了量级的提升,但依然无法在特性支持和处理速度两个方面同时满足所有的需求。针对这一问题,Tendermint团队提出Cosmos网络的愿景:与其将所有的应用堆叠到一个区块链系统中,不如为每个特定应用构建应用专属区块链系统,并利用跨链通信技术实现区块链系统之间的互联互通。实现该愿景的第一步,便是尽可能地降低构建区块链系统的技术门槛,尽可能地缩短应用专属区块链系统的开发周期。

为了将愿景变成现实,Tendermint团队在Cosmos Hub项目的开发过程构建了一套区块链应用开发框架,基于该开发框架可以快速构建应用专属区块链系统。Cosmos Hub项目的客户端Gaia便是基于该框架构建而来的。该开发框架将区块链系统划分为3层,自下而上分别是对等网络通信层、共识协议层以及应用层。Tendermint Core项目实现了对等网络通信以及共识协议,Cosmos-SDK项目则利用模块化设计的策略为应用层提供了可重用的组件,两个项目之间通过ABCI进行交互。

利用该开发框架构建区块链应用时,开发者无须重新实现对等网络通信以及共识协议,只需要基于Cosmos-SDK项目提供的功能模块定制化实现应用层逻辑即可。相比之前通过分叉或者重写比特币实现代码开发区块链的模式,这可极大地降低区块链应用开发的技术门槛并缩短开发周期。笔者亲身经历过这两种开发模式,也切实感受到Tendermint团队提供的区块链应用开发框架带来的开发体验和交付质量方面的改善。基于这套开发框架,国内外开发者已经构建了丰富的生态,包括Band、Argon等项目。为了实现应用专属区块链系统之间的互联互通,Tendermint团队设计了IBC协议。在Cosmos Hub刚刚完成的“星际之门”升级计划中,IBC协议作为Cosmos-SDK项目的一个功能模块呈现,而这将赋予基于Cosmos-SDK项目构建的应用专属区块链系统跨链通信的能力,从而为实现Cosmos网络的愿景“铺平道路”。

Cosmos Hub项目的平稳运行,展示了其PoS机制与BFT共识协议实现的可行性与稳定性。而IBC协议也为区块链行业的跨链通信问题提供了可作为典范的解决方案。因此,Cosmos Hub项目是深入理解BFT共识协议、PoS机制以及IBC协议的原理和实现的绝佳样本。基于Tendermint Core项目和Cosmos-SDK项目,区块链开发者可以专注于应用层逻辑并快速构建应用专属区块链系统以满足多样化的需求。如果你希望了解区块链领域前沿进展,或者希望构建自己的应用专属区块链系统,本书便是为你准备的。

本书特色

虽然基于Tendermint Core项目和Cosmos-SDK项目构建应用专属区块链系统并不需要开发者理解这两个项目的内部原理,但是深入理解开发框架理论原理、架构设计和内部实现方式对于构建稳定的区块链系统很有帮助。掌握一个区块链项目,也有助于读者在面对区块链技术不断演进的过程中不迷失方向,读者可以根据自身需求选取最为恰当的解决方案。

Tendermint Core和Cosmos-SDK两个项目(由于这两个项目提及次数较多,后续文中将省略“项目”二字)仍在快速迭代中,其具体的代码实现仍在不断改进。因此,本书选取了特定版本的Tendermint Core和Cosmos-SDK展开论述,并且着力介绍那些在版本迭代中仍然倾向于保持不变的基本逻辑。其中,Tendermint Core采用0.33.3版本,Cosmos-SDK采用0.38.4版本,IAVL+库采用0.13.3版本,Gaia采用2.0.11版本。

用一本书的篇幅从理论到实现完全拆解Tendermint Core和Cosmos-SDK的每一个方向是不现实的。本书尽力从区块链架构师的角度出发,思考应用专属区块链系统的架构师需要了解该开发框架的哪些方面。在这一原则指导下,撰写本书的基本策略是,在密码算法、共识协议方面,侧重于理论阐述以帮助读者建立关于散列函数、数字签名算法以及Tendermint共识协议的直观认识;在ABCI、可认证数据结构、PoS机制等方面,则深入讲解实现细节,以帮助开发者扫除基于该开发框架构建应用专属区块链系统时的知识盲点。根据这一策略,本书最终呈现出以下特色内容。

  • 密码算法的拆解与图示:深入介绍散列函数以及Merkle树,以比特币挖矿为例展示构造散列碰撞的难度,加深读者对于散列函数安全性的理解;数字签名算法方面,配合大量图示直观地展示椭圆曲线点群的性质,帮助读者建立对于数字签名算法的直观认知。
  • 共识协议的比较与推演:从共识协议的基本概念出发,逐步阐述实用拜占庭容错(practical Byzantine fault tolerance,PBFT)共识协议以及Tendermint共识协议,并通过理论对比展示Tendermint共识协议的改进之处。通过大量图示,帮助读者理解Tendermint共识协议中各种机制存在的必要性。梳理Tendermint Core中采用的提案者轮换选择算法,并完整展示Tendermint Core中的区块结构。
  • 完整阐述ABCI的规范与实现:深入讲解ABCI背后的实现机制,并以Cosmos-SDK中的应用为例,展示ABCI的“威力”——在上层应用中通过PoS机制控制底层共识协议的参与节点。
  • 深入剖析PoS机制的理论与实现:首次完整介绍PoS机制的原理和具体实现,展示Cosmos-SDK中如何通过遵循模块化设计的理念,将纷繁复杂的PoS机制通过正交的功能模块化繁为简并逐一击破,最终形成清晰的工程代码。
  • 系统阐述IBC协议的原理与设计:虽然IBC协议的开发工作仍在快速迭代中,但根据链间标准(interchain standard,ICS)规范以及IBC协议的当前实现已经可以一窥究竟。从Tendermint Core轻客户端的构建出发,带领读者揭开IBC协议的神秘面纱。

内容简介

  • 第1章介绍区块链开发面临的技术挑战,并概述Tendermint团队通过Tendermint Core的分层设计、Cosmos-SDK的模块化设计以及IBC协议给出的解决方案。
  • 第2章介绍Tendermint Core中依赖的密码学算法,包括散列函数、Merkle树以及项目支持的多种数字签名算法。在介绍数字签名算法时,着重介绍数字签名算法所依赖的底层数学结构椭圆曲线点群的性质,而非具体的运算规则,以帮助读者建立对于椭圆曲线点群的直观认识。
  • 第3章从分布式系统的基本概念出发,逐步介绍PBFT共识协议以及Tendermint共识协议,并比较两者异同以帮助读者理解Tendermint共识协议相较于PBFT共识协议的理论改进。随后介绍Tendermint团队提出的提案者轮换选择算法,对于这一算法的深入理解有利于在区块链系统运维中理解系统行为。最后介绍在分层设计以及Tendermint共识协议的影响下Tendermint Core中的区块结构,这是理解Tendermint Core架构的第一步。
  • 第4章着重描述Tendermint Core的架构设计。利用抽象出来的反应器、转换器等基本概念,Tendermint团队干净、利落地完成了Tendermint Core的架构设计,并配合大量利用统一建模语言(unified modeling language,UML)绘制的类图,帮助读者理解Tendermint Core的内在机理。
  • 第5章详细描述Tendermint团队为了实现区块链系统的分层设计而抽象出来的ABCI。ABCI用简单、清晰的接口定义解耦了底层共识协议以及上层应用逻辑,并且仍然支持上层应用的深度定制。对ABCI的深入理解是基于Tendermint Core开发应用专属区块链系统的必要提前。为了帮助理解,本章以分布式键值数据库的实现为例展示如何基于ABCI进行应用开发。
  • 第6章介绍Cosmos-SDK的架构设计,重点介绍为了支持上层应用的模块化设计而引入的诸多设计。应用专属区块链系统的核心任务是根据既定的规则保证上层应用状态的一致性,本章也因此着重描述Cosmos-SDK所采用的可认证数据结构——IAVL+树,以及Cosmos-SDK中的存储器设计,这是理解后续具体应用模块的基本前提。
  • 第7章介绍Cosmos-SDK中的基本功能模块,包括负责账户与交易、链上资产转移、创世交易、链上参数管理、链上资产总量追踪、链上状态一致性检查、链上治理、节点升级等的模块。
  • 第8章从PoS的基本原理开始,逐步引出Cosmos-SDK中的PoS机制设计,并逐步深入链上资产抵押、被动作恶惩罚、主动作恶惩罚、链上资产铸造以及链上奖励分发等机制的设计和实现。
  • 第9章从Tendermint Core轻客户端的构建原理入手,介绍IBC协议的原理和设计。为了保证IBC协议的通用性,ICS规范以最小功能接口的方式规范了轻客户端、连接、信道等概念。本章深入介绍这些基本概念以及在这些概念的相互配合下完成一笔跨链转账的基本流程。
  • 第10章从Cosmos Hub的客户端Gaia的实现和启动流程方面,介绍利用Tendermint Core和Cosmos-SDK开发应用专属区块链系统的基本流程。此外还从区块链系统中一笔交易和一个区块的完整生命周期切入,串联起全书内容,帮助读者融会贯通所有内容。

致谢

区块链行业的诸多同人在本书筹备工作中反馈了大量有益的建议,显著提升了本书的质量。感谢深圳兰宇网络科技有限公司密码算法工程师侯文平、Matrixport资深研发工程师张秀宏、上海万向区块链股份公司区块链开发工程师朱冰心、火币公链事业部技术专家何畅彬、华为终端安全架构师方习文、鹏城实验室助理研究员黄正安、Matrixport资深研发工程师韩天乐和韩元超、Matrixport区块链开发工程师姚永芯和刘浩然、比原链研究工程师林浩宇等人在百忙之中审阅初稿。感谢Matrixport CTO 姜家志、ViaBTC集团合伙人江志华在本书撰写过程中提供大力支持。为了编写本书,牺牲了很多陪伴家人的时间,感谢家人的理解与支持。感谢人民邮电出版社异步社区的编辑们,你们的认真负责保证了本书的质量。

温隆 贾音

2020年11月于北京