书名:区块链架构与实现:Cosmos详解
ISBN:978-7-115-56388-0
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 温 隆 贾 音
责任编辑 郭 媛
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
当温隆博士邀请我为这本书作序时,我很吃惊。虽然在过去5年的时间里,我一直致力于研究并推广Cosmos技术,但我仍然不确定是否有人愿意花时间学习这一技术。所以,温隆博士撰写了一本关于Cosmos的书并即将公开出版的消息,给了我极大的鼓舞!
我是Peng Zhong,又名钟昌鹏。我出生于中国,但在美国长大。2010年初,我作为一名自由职业的用户界面(user interface,UI)设计师开启了自己的职业生涯。2014年,Jae Kwon邀请我为 FtNox开发Web前端界面,FtNox是一个新的数字货币交易所,名字模仿了当时最大的数字货币交易所Mt.Gox。FtNox交易所当时并没有上线。但2015年,Jae Kwon创建了基于拜占庭容错(Byzantine fault tolerance,BFT)共识协议的Tendermint Core项目。Jae由此创造了历史,因为Tendermint Core项目将成为区块链业内领先的BFT共识引擎。
2015 年底,我作为第一名员工加入 Tendermint公司,担任公司的首席设计官(chief design officier,CDO),并参与了首个Cosmos钱包和Cosmos区块浏览器的设计与开发。2017年,我们发布了Cosmos白皮书,区块链网络(internet of blockchains)的想法由此诞生。我们的前端开发团队设计和构建了Cosmos众筹平台,并在短短28分钟内筹集了价值1730万美元(约合人民币1.12亿元)的比特币(bitcoin)和以太坊(Ethereum)。
得益于2017年的众筹,我们可以进一步扩大我们的工程师团队,来设计和构建必要的软件和服务,以支持可互操作的、基于权益证明(proof-of-stake,PoS)机制的区块链的启动。这些软件包括Tendermint Core项目、Cosmos SDK项目和跨链通信(inter-blockchain communication,IBC)协议。随后,我们基于该技术栈构建了第一条Cosmos区块链:Cosmos Hub。截至2020年底,Cosmos Hub已经迭代到cosmoshub-3版本,链上原生资产的价值增长远远超出了我们的预期。读者在这本书中可以学习与此相关的所有技术。
2020年5月,我被任命为Tendermint公司的CEO。作为一个拥有UI设计经验和对改进用户体验具有极大热情的人,我致力于让Cosmos成为搭建独立、自主的区块链的首选技术。这意味着我们需要不断地改进Cosmos网站、技术文档以及Cosmos-SDK项目教程,为Cosmos生态搭建更好用的工具,并为Cosmos生态内的创新者提供资助。
区块链仍然是一项崭新的技术,与Web 2.0程序相比,编写去中心化应用(decentralized applications,DApp)是一种全新的范式。然而在这一领域,新技术的文档和指南往往十分缺乏,因为擅长开发的工程师并不一定擅长教学。正因为如此,我很高兴并由衷感谢温隆博士撰写了这本书。我们需要更多这样的优秀内容来吸引开发人员尝试并使用Cosmos-SDK项目和Tendermint Core项目。希望读者能从这本书中有所收获,我十分期待与你们一起搭建更多的下一代分布式金融应用。
Peng Zhong
Tendermint CEO
2020年12月
我记得2018年夏天开始在Tendermint团队工作时,自己既兴奋又有些不知所措。我是一名开源社区的长期贡献者,在我的软件行业生涯中,我面临过各种各样的挑战,并且在许多不同的行业和部门中工作过,包括广告、大数据分析、嵌入式软件和金融市场的预测等。在加入Tendermint团队之前,我已经在许多初创企业和几家全球企业中任职。尽管如此,区块链对我来说仍然是一个全新的“世界”,这里满是新事物和颠覆性技术,以及听起来近乎疯狂的绝妙想法和野心勃勃的项目。其中最令人难以置信的,当然是区块链网络。
在Tendermint团队工作的第一天,团队向我解释了项目计划:构建包含多个模块的软件开发工具包,以便区块链应用开发者可以基于这些模块,轻松构建独立、自主的区块链应用。项目任务非常明确:我们必须让开发者以尽可能轻松的方式构建尽可能多的区块链应用。这些应用(也称为Zone)不仅可以从生态环境友好的Tendermint共识算法所提供的快速最终性(fast finality)中获益,还享有独立、自主的链上治理,并且可以通过IBC协议相互通信。Cosmos-SDK项目致力于完成这一任务。
在过去两年中,开发者构建了不计其数的Cosmos-SDK项目的模块和应用,并启动了众多 Cosmos应用区块链。Tendermint和Cosmos生态系统的成功超出了人们的预期。我们不再是唯一投入时间和资源研究并开发Cosmos技术堆栈模块和协议的团队。这允许我们将一些任务委托给技术纯熟、信誉卓著的合作伙伴,并在更多的方向上扩展我们的工程能力:在继续构建区块链应用开发所需技术基础的同时,我们也开始注重构建以自动化做市商(automated market maker)为代表的分布式金融(decentralized finance)协议,以及以Starport为代表的可以进一步改善开发体验并允许开发者在几分钟之内从零构建Cosmos区块链的开发者工具。
这本书将带你踏上了解构成Cosmos区块链应用的所有技术组件的旅程。这本书首先深入介绍Tendermint Core项目,包括项目的内部组件、密码学算法以及设计准则。最初的Tendermint团队遵循该设计准则开发了区块链应用接口(application blockchain interface,ABCI),这是一套介于任意有限状态机(finite state machine)和底层复制引擎(replication engine)之间的接口。接下来这本书详细介绍Cosmos-SDK项目中的每一个功能模块,以及这些功能模块之间如何和谐地构成PoS机制。基于该机制,最初的Tendermint团队构建了Cosmos Hub网络的客户端Gaia。
这本书作者接受了挑战,用一本书的篇幅为读者全面介绍关于Tendermint Core项目和Cosmos-SDK项目几乎所有需要了解的内容。作者撰写了一本全面深入的手册,如果你想要充分理解Cosmos生态系统基础技术的复杂性,这本书是一本真正的常备手册。我相信通过他们的努力,将会有许多读者精通Cosmos-SDK项目,开发出安全和高性能的区块链应用。
Alessio Treglia
Tendermint工程副总裁
2020年12月
自中本聪发表比特币白皮书以来,数字资产领域经历了几多沉浮。但在瞬息万变中有一点却越来越清晰:比特币底层所依赖的区块链技术在诸多方面可能有着改变世界的潜力。比特币和区块链除完成了数字货币领域“从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机制等方面,则深入讲解实现细节,以帮助开发者扫除基于该开发框架构建应用专属区块链系统时的知识盲点。根据这一策略,本书最终呈现出以下特色内容。
区块链行业的诸多同人在本书筹备工作中反馈了大量有益的建议,显著提升了本书的质量。感谢深圳兰宇网络科技有限公司密码算法工程师侯文平、Matrixport资深研发工程师张秀宏、上海万向区块链股份公司区块链开发工程师朱冰心、火币公链事业部技术专家何畅彬、华为终端安全架构师方习文、鹏城实验室助理研究员黄正安、Matrixport资深研发工程师韩天乐和韩元超、Matrixport区块链开发工程师姚永芯和刘浩然、比原链研究工程师林浩宇等人在百忙之中审阅初稿。感谢Matrixport CTO 姜家志、ViaBTC集团合伙人江志华在本书撰写过程中提供大力支持。为了编写本书,牺牲了很多陪伴家人的时间,感谢家人的理解与支持。感谢人民邮电出版社异步社区的编辑们,你们的认真负责保证了本书的质量。
温隆 贾音
2020年11月于北京
本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。
本书提供5.5节提及的数据库tm-kvstore源代码,如要获得此配套资源,请在异步社区本书页面中单击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。
如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近40年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、测试、前端、网络技术等。
异步社区
微信服务号
中本聪在2008年年底发布的论文“Bitcoin:A Peer-to-Peer Electronic Cash System”标志着比特币(bitcoin)的诞生。2009年,中本聪发布了基于该论文构建的比特币网络,“拉开”了数字货币领域发展的“序幕”。随着对比特币认识的加深,人们逐渐意识到比特币底层的区块链技术可能蕴藏着在诸多方面改变世界的潜力,甚至将其誉为互联网技术中“最具颠覆性”的技术之一。
区块链技术是一种由多方共同维护,并通过密码学、共识协议等机制,在不可信的分布式环境中实现数据的一致性、难以篡改、无法抵赖的电子记账技术。区块链技术带来的以低成本方式在分布式环境中建立信任的机制,催生了新的计算模式和协作模式。其应用场景远超出数字货币领域,正在悄然扩展至包括金融、科技等诸多领域。区块链技术的理念与潜力已经被充分讨论,并得到广泛的共识,然而区块链技术想要真正在社会生活中产生广泛影响,在愿景之外需要脚踏实地地实现工程化落地。
然而由于涉及众多学科,区块链系统的开发颇具挑战,而且以比特币为代表的区块链系统面临着资源消耗巨大、交易体验差、无法互联互通等问题。为了解决这些问题,Tendermint团队构建了以Tendermint Core、Cosmos-SDK以及通用跨链通信(inter-blockchain communication,IBC)协议为核心的一揽子解决方案,并提出了Cosmos网络的构想。
比特币的机制设计为世界带来了无限的想象空间,然而单凭比特币一己之力无法满足由丰富的想象力带来的无限延展的需求。一时间,数字货币领域有太多的需求亟待满足,有太多的创新等待被验证。一方面,基于比特币的源代码按需定制,发布带有新特性的项目一时间成为潮流,这一过程中诞生了Litecoin、Dash、Zcash等项目。另一方面,与日益增长的行业需求形成显著对比的是,比特币的技术演进因无休止的“社区纷争”而逐步放缓。比特币的拥护者由于自身诉求无法得到满足而纷纷“出走”,例如关于区块大小的争议最终引发了“分叉”事件,导致了比特币现金(bitcoin cash)的诞生。
从设计思想的角度来看,中本聪的才华毋庸置疑,但是从软件工程的角度来看,却难以给予比特币实现代码同样的评价。比特币实现代码本身也在不断地被修正以解决各种技术和安全问题,导致人们为了完全理解其实现方式,需要回溯比特币发展的整个历史。因此,通过修改比特币实现代码的方式开发新区块链项目的技术门槛较高,开发效率较低。当然,我们可以借鉴比特币的经验,从头开始重新构建新的区块链项目,以太坊(Ethereum)、Monero等就是基于该策略构建的区块链项目。然而由于涉及对等(peer to peer,P2P)网络通信、密码学技术、共识协议等的广阔技术栈,利用这种策略开发新的区块链项目仍然具有很高的技术门槛和甚至更长的开发周期。
比特币网络的成功运行得益于工作量证明(proof-of-work,PoW)机制、中本聪共识协议(Nakamoto consensus,即累积工作量最大的链为主链)以及经济激励(economic incentive)这3种机制的相互配合,但是算力竞争导致的资源消耗也使得比特币被广泛诟病。另外,PoW机制和中本聪共识协议的交互带来的交易处理速度低、交易确认速度低等问题,也对用户体验的进一步改善和比特币网络的进一步发展造成了影响。比特币的标杆效应导致早期的区块链项目大多数都继承了比特币的PoW等机制,这些项目也都面临着同样的问题。减少资源消耗、提高交易处理速度和交易确认速度等,成为区块链行业新的诉求。要想满足这些诉求,需要新的证明机制和共识协议。
证明机制方面,为了降低资源消耗,模拟公司治理中股东投票机制的权益证明(proof-of-stake,PoS)机制开始被广泛讨论,NXT、BitShares等项目最早开始PoS机制的尝试。然而随着整个行业对PoS机制认识的加深,尤其是无利害攻击(nothing-at-stake)以及长程攻击(long-range attack)等攻击手段的发现,早期区块链项目中部署的PoS机制的安全性值得商榷。值得庆幸的是,随着研究的深入,尤其是惩罚(slashing)、弱主观性(weak subjective)以及解绑周期(unbonding period)等概念的提出,区块链领域的从业者逐步构建了可以在开放网络中部署的安全PoS机制。
共识协议方面,来自分布式系统领域的拜占庭容错(Byzantine fault tolerance,BFT)共识协议,尤其是实用拜占庭容错(practical Byzantine fault tolerance,PBFT)共识协议,替换中本聪共识协议的可能性也被广泛探讨。PBFT共识协议的通信复杂度达到,在解决区块链场景中成百上千个节点之间的共识问题时仍然力有不逮。但是随着Tendermint、HotStuff等共识协议的提出,BFT共识协议在区块链领域中的大规模部署成为现实。此外,这些协议的秒级出块(出块间隔小于10秒)特性可以显著改善用户的交易体验。
以太坊等项目通过链上虚拟机提供的智能合约技术为构建区块链应用提供了另一种选择:与其为每一个应用单独构建一条链,不如利用智能合约技术通过去中心化应用(decentralized application,DApp)的方式构建区块链应用,使开发者可以专注于上层应用的功能实现,无须再操心对等网络通信与共识协议等区块链底层协议。以太坊上DApp生态的繁荣发展,展示了这种技术策略的可行性。然而构建在同一个区块链上的DApp将同时竞争严重受限的底层区块链资源,这就导致整个DApp生态的发展受到底层区块链性能的制约。
为了改进区块链性能,整个行业做出了多种多样的尝试。比特币现金项目通过增大每个区块的容量来提高链上交易处理速度的方式仅能带来有限的速度提高。标榜可以达到百万每秒处理的事务数(transactions per second,TPS)的企业操作系统(enterprise operation system,EOS)项目,则尝试通过牺牲部分分布式特性来提高链上交易速度,但是在实际的运营中网络也遭遇过拥堵。另外以太坊2.0则计划通过分片(sharding)的方式来实现链上交易的并行处理,但是分片方案带来的工程挑战是巨大的(以太坊2.0的开发进度落后于预期)。构建出一条具有足够性能的区块链来承载所有的区块链应用在当下看来似乎是不可能的任务。
需求方面,也没有一个区块链项目可以同时满足所有的需求,多条定位不同、功能迥异的区块链并存不仅是目前的常态,也会是未来区块链行业的发展方向。然而,在区块链项目遍地开花的繁荣景象之下,一个隐忧逐渐显露:由于彼此之间无法通信,这些区块链项目逐渐成为一座座“价值孤岛”。想象一下,如果计算设备之间没有实现互联,就不会有今天繁荣的互联网。区块链之间的互通互联,可以打破不同链之间信息和价值流转的屏障,实现整体大于局部之和的效果。
Vitalik Buterin在“Chain Interoperability”中总结了跨链通信的3种实现机制:散列锁、公证人和中继。基于散列锁的跨链通信机制要求区块链本身支持基于散列的时间锁定机制,在比特币、Algorand等项目中有应用。公证人机制则是相对中心化的方案,方案简单,但依赖可信的第三方。相比之下,基于密码学证明的中继机制是最通用的去中心化跨链方案之一,基于中继机制实现通用的IBC协议是当下区块链领域的研究热点。
参考软件行业的经验,解决开发周期与技术门槛的问题,需要一套完善的区块链应用开发框架,并且要求该框架支持区块链应用的深度定制。BFT共识协议与PoS机制的组合可以解决资源消耗与交易体验的问题,但其实现有着较高的技术门槛,并非每个区块链应用的项目方都有足够的人才储备来实现工程化落地。如前所述,目前看来通过一条区块链在性能和特性两个方面同时满足所有的需求有些不切实际,在当下和可预见的未来都会多链并存,而构建通用的IBC协议的技术挑战也不可小觑。
每一项问题的解决都面临巨大的技术挑战,但这并不妨碍“野心勃勃”的Tendermint团队尝试通过Tendermint Core、Cosmos-SDK等项目的相互配合来一并解决所有问题,如图1-1所示。没有一条区块链可以在性能和特性上同时满足所有的需求,因此Tendermint团队提出了应用专属区块链(application specific blockchain)系统的理念:为每一个区块链应用单独构建一条区块链。为了防止应用专属区块链系统导致价值孤岛的形成,Tendermint团队构建了IBC协议来连接所有的应用专属区块链系统,以构建互联互通的区块链网络。为了降低应用专属区块链系统开发的技术门槛并缩短开发周期,Tendermint团队通过Tendermint Core、Cosmos-SDK提供了区块链应用的开发框架。基于这两个项目构建的区块链应用会自动继承Tendermint共识协议以及PoS机制,而Tendermint共识协议所支持的秒级出块等特性可以显著改善用户体验,PoS机制的采纳则避免了资源的大量消耗。
图1-1 Cosmos网络基础设施
Tendermint Core、Cosmos-SDK以及IBC协议的综合应用,使得构建互联互通的Cosmos网络成为可能。Cosmos意为“宇宙”,如果将每个单独的区块链比作一个星系,而将链上运行的DApp比作星系中的一颗颗恒星,那么Cosmos的寓意便是通过连通所有星系来构建一个万链互联的区块链宇宙世界。简单来说,Cosmos网络通过IBC协议连通相互独立的区块链,每个应用专属区块链系统在Cosmos生态中被称为Zone,所有的Zone都由Tendermint Core驱动,并且可以基于Cosmos-SDK快速构建。
北京时间2019年3月14日上午7时,Cosmos网络的第一个Zone,名为Cosmos Hub的区块链项目的主网正式上线。Cosmos Hub采用PoS机制并支持多种链上资产,其原生链上资产是名为ATOM的通证,可用于参与PoS机制中的链上资产抵押以及链上治理。Cosmos Hub充分吸取了比特币等项目在链上治理方面的经验,设计了一套规则清晰的链上治理方案。借助提案以及提案投票机制,ATOM持有者可以就Cosmos Hub网络的协议升级等事宜达成共识。Cosmos Hub网络的稳健发展关乎所有ATOM持有人的切身利益,可以预见的是ATOM持有人会做出审慎的决策。遵循链上投票过程,根据投票结果和少数服从多数的原则可以保证即使在社区发生分歧时,也可以达成社区共识。
为了确保Cosmos Hub的稳定性以及用户资产的安全性,Cosmos Hub网络分为三阶段启动。
截至目前,Cosmos Hub网络已经完成了“星际之门”(Stargate)升级计划。本次升级中正式启用了IBC协议,使得链间交互成为现实。值得提及的是,任意两个区块链如果想要通过IBC协议进行互操作,只需要与Cosmos Hub建立连接,而无须通过IBC协议直接建立连接。Cosmos Hub在Cosmos网络中扮演着跨链通信中心枢纽的作用,可以降低区块链应用之间跨链互操作的复杂度。任意团队都可以构建额外的Hub网络,Hub网络之间也通过IBC协议进行跨链通信,如图1-2所示。
Tendermint Core以及Cosmos-SDK所带来的区块链开发效率的提升,在短时间内催生了丰富的应用专属区块链系统,包括去中心化预言机项目Band以及去中心化自治组织项目Aragon等。得益于Tendermint共识协议的提出,基于Tendermint Core和Cosmos-SDK构建的应用专属区块链系统,在交易速度与交易体验方面相对于以太坊上的去中心化交易平台有了质的提高和改善。随着IBC协议的成熟和跨链应用的蓬勃发展,这些目前暂时隔离的区块链将会实现互联互通。
图1-2 Cosmos网络
构建互联互通的Cosmos网络的蓝图令人兴奋,但切实构建区块链网络需要直面区块链开发中的诸多技术挑战。为了催生更多的应用专属区块链系统,需要消除区块链领域的创新障碍。针对这一问题,Tendermint团队构建了以Tendermint Core和Cosmos-SDK为核心的区块链开发框架。Cosmos Hub网络的客户端Gaia便是基于Tendermint Core和Cosmos-SDK构建的。Cosmos Hub主网上线以来的平稳运行,展示了Tendermint Core和Cosmos-SDK的可靠性。
Tendermint团队将区块链系统自下而上拆解为3层:对等网络通信层、共识协议层以及上层应用层。区块链系统的3层结构如图1-3所示。Tendermint Core中提供了对等网络通信层与共识协议层的实现,并抽象出区块链应用接口(application blockchain interface,ABCI)来完成共识协议层与上层应用层的互动。
图1-3 区块链系统的3层结构
在这种分层结构中,共识协议层不关心交易的具体内容,而将所有的交易看作简单的字节切片。共识协议完成的主要任务,是在全网就交易的顺序达成共识。与以太坊类似,Tendermint Core要求上层应用状态更新是确定性的过程,即从相同初始状态开始,按照相同顺序处理交易之后,上层应用的状态在全网之间应保持一致。为了确保这种状态更新的一致性,共识协议层在利用区块就交易顺序达成共识之外,也会在区块中包含上层应用状态的“数字指纹”,确保在每个区块开始执行之前,全网对上层应用状态也达成了共识。
前文提到过,PoW 机制与中本聪共识协议带来的大量资源消耗以及效率低下等问题被广为诟病。随着区块链技术的演进,PoS机制与BFT共识协议的组合成为应对该问题的“良方”。然而PBFT共识协议存在通信复杂度大的问题,这导致其无法妥善处理区块链这种大规模分布式系统的情形。Tendermint团队在工程创新之外,也就该问题进行了理论创新:通过改进PBFT共识协议,构造了适用于区块链场景的Tendermint共识协议。基于BFT的Tendermint共识协议,在支撑几百个共识节点的情况下,依然可以实现秒级出块的速度。Tendermint共识协议逐块最终化(finality)的特性,既保证了区块链不会发生比特币或者以太坊中的重组事件,也实现了交易的秒级确认。
Jae Kwon在2014年开始Tendermint共识协议的研发,2015年Ethan Buchman参与进来一同进行相关协议和软件的开发,并最终构建了Tendermint Core的原型系统。BFT共识协议通常要求在执行一轮共识协议之前,要先确定协议的参与者(后文称之为验证者),Tendermint共识协议也不例外。但Tendermint Core并没有硬编码选择验证者的规则,而是通过适当的机制设计以及ABCI,为上层应用保留了更新验证者集合的权利。
Tendermint共识协议在每一轮共识协议执行开始前,都会有一个验证者成为新区块提案者(proposer),提案者通过打包交易构建新的区块,并通过对等网络将区块广播到全网。所有验证者根据收到的信息和自身状态就区块内容进行两阶段投票:预投票(prevote)和预提交(precommit)。Tendermint共识协议执行过程。投票可以投给新构造的区块,表示验证者认同该区块内容;也可以投给空值,表示验证者因为某种原因无法认同该区块的内容。对区块足够多的预投票(超过2/3),可以促使验证者进入下一阶段的投票过程;而针对区块足够多(超过2/3)的预提交,可以促使所有节点提交(commit)该区块。区块被提交之后,Tendermint Core的共识协议层通过ABCI与上层应用互动,完成区块内交易的处理,执行结果也通过ABCI返回给共识协议层。
为了支持上层应用的深度定制,Tendermint Core将共识协议层与上层应用的互动通过ABCI进行了抽象。通过将区块的执行过程合理划分为多个步骤,上层应用甚至可以定制筛选验证者的逻辑,赋予了应用专属区块链系统完全的自主权。基于ABCI开发上层应用,应用只需要实现特定的接口,就可以复用Tendermint Core提供的Tendermint共识协议以及对等网络通信。通过这种方式,应用开发者可以专注于上层应用的开发,由此应用专属区块链系统的开发周期从通常的几年缩短为几个月。
大部分的区块链都会有账户管理、交易处理等功能,为了进一步提升区块链构建的效率并缩短开发周期,Tendermint团队构建了Cosmos-SDK,实现了区块链场景中一系列的通用功能模块,如图1-4所示。模块化设计的理念使得开发者既可以复用已有的功能模块,也可以快速构建新的功能模块,以显著提升上层应用的开发效率。
图1-4 Cosmos-SDK的通用功能模块
按照模块实现的功能,可以将Cosmos-SDK目前提供的所有模块划分为以下几类。
采用模块化设计理念的同时保证安全性是一个技术挑战。如何防止一个模块的状态被另一个模块恶意更改?遵循对象能力模型(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快速构建应用专属区块链系统
Tendermint Core和Cosmos-SDK解决了应用专属区块链系统的开发问题。短时间内Kava、Band、Peg Zone、Aragon等项目的涌现,证实了Tendermint团队所选择的策略的可行性。然而想要真正实现Cosmos网络的愿景,还缺少最后一块“拼图”:IBC协议。目前IBC协议1.0版本已在“星际之门”升级计划中正式发布,随着链间资产转移等跨链应用的蓬勃发展,这些目前暂时隔离的区块链将会互联互通,实现价值的进一步提升,如图1-6所示。
图1-6 基于IBC协议的Cosmos网络
IBC协议的完整协议规范文档参见GitHub仓库cosmos/ics。IBC协议是基于中继机制而逐步推演出的协议,其核心机制的原理是,任意两个希望跨链通信的区块链可以依赖密码学证明技术向对方链证明自身链上发生了特定的事件。两条链之间的网络通信通过中继者(relayer)完成。一个问题是,如果中继者恶意篡改网络消息,是否会危及IBC协议的安全性?答案是否定的。由于有密码学证明技术提供安全性保证,被中继者恶意篡改过的消息无法通过验证。
读者如果对于比特币轻客户端有所了解,可以注意到IBC协议与比特币轻客户端机制之间的相似性。轻客户端(light client)通常运行在移动电话等计算资源受限的环境中,通常仅存储少量的必要数据,因此其也不具备验证所有交易的能力。为了向轻客户端证明链上的一笔交易的真实性,通常需要提供这笔交易的密码学证明。借助自身存储的信息,轻客户端可以检验证明的合法性。通过IBC协议进行跨链通信的两条链,可以粗略地理解成,在链自身的应用逻辑之外,两条链分别在自己的链上构建了关于对方链的轻客户端,并据此验证跨链数据的真实性。
基于PoW机制和中本聪共识协议的理念,比特币轻客户端仅需要存储区块头信息即可。比特币的PoW机制、中本聪共识协议以及80字节的区块头,使得存储和验证区块头无须耗费太多的资源。但是PoS机制、Tendermint共识协议以及分层设计带来的Tendermint Core中区块头复杂度的增大,导致验证所有区块头需要耗费可观的计算资源,也为构建轻客户端带来不可小觑的技术挑战。然而对PoS机制和Tendermint共识协议的深入研究发现,看似更难以驾驭的轻客户端,实际上可以通过简洁、高效的方式构建,这使得在链上构建其他区块链的轻客户端成为现实,也为IBC协议的构建奠定了坚实的基础。
本章介绍了区块链开发中面临的诸多技术挑战,并简要概括了由Tendermint团队所构建的以Tendermint Core、Cosmos-SDK以及IBC协议为核心的区块链系统开发框架。基于该开发框架,快速构建应用专属区块链系统成为可能。Cosmos Hub自上线后的平稳运行,证实了该开发框架可靠的质量。Cosmos Hub是深入理解BFT共识协议、PoS机制以及IBC协议的绝佳样本。
Tendermint Core提供了对等网络通信层以及共识协议层的实现,并通过ABCI完成共识协议层与上层应用之间的交互。ABCI的抽象支持应用的深度定制,赋予了应用专属区块链系统完全的自主权。Cosmos-SDK项目基于模块化设计的策略为应用层提供了可重用的组件,可以进一步提升应用专属区块链系统的开发效率。与通过分叉或者重写比特币实现代码形式开发区块链系统的模式相比,这种模式可极大地降低区块链应用开发的技术门槛并缩短开发周期。基于这套开发框架,国内外开发者已经构建了丰富的应用专属区块链系统,包括Kava、Band、Peg Zone、Aragon等。随着IBC协议的开发完成和上线,这些应用专属区块链系统将迎来真正的互联互通,也将使得Cosmos网络的构想成为现实。