写这篇文章的主要动机源于 Cosmos 主网上线,虽然人们对于跨链技术是否是区块链的未来而争论不休,但我坚信跨链是区块链走向未来的必经之路。
想要了解 Cosmos,首先要了解 Tendermint, 它是 Cosmos 的重要组成部分,也是整个 Cosmos 生态的基础 (这篇文章我们不谈论 Cosmos,只谈 Tendermint)。
概念性的讲,Tendermint 是一种能够为多台机器安全和保证数据一致性复制应用程序的软件。而简单来说,Tendermint 是一个通用的区块链开发框架,它主要包括两部分:共识引擎 (Tendermint Core) 和 ABCI(Application Blockchain Interface)协议。Tendermint Core 被称为 Tendermint 核心模块,确保相同的交易在每个机器中都按照相同的顺序被记录下来。ABCI 让交易可以被任何编程语言编写的程序处理。
如果你觉得现在的内容太抽象,我们尝试从简单的内容谈起
共识算法的演进
共识算法是每个区块链网络的关键要素,每一个分布式容错系统都有一个核心问题,如何保证「在不能相互信赖的前提下,创造一个可信任的系统」?我们需要一套可靠的共识协议来保证区块链世界的宏观安全。众所周知的共识算法像工作量证明 (PoW)以及权益证明 (PoS),前者代表为 Bitcoin、Ethereum,但在极端资源耗尽,环境可持续等条件下,PoS 逐渐成为区块链从业者着重选择并研究的课题,Ethereum 也在向这方面发展。
2011 年 BitcoinTalk 论坛权益证明 (PoS) 的概念组织了一场讨论。最初的 PoS 共识类代币,像点点币,实现结果的并不理想。而第一个将 BFT (拜占庭容错) 研究应用到 PoS 公链环境中的正式 Tendermint 的创造者 Jae Kwon。
Tendermint 共识机制
Tendermint 采用 PBFT + PoS 作为共识机制。相较于比特币工作量证明(BFT + PoW),它实现的共识算法更高效和安全。下图是一个简单的状态机,它展示了这套共识机制的运作规则:
协议中的参与者叫着「验证者」 (Validator), Tendermint 在创世的时候把 Validator 设定为 100 个。网络中的每一个 Validator 都维护了一份区块链的全拷贝,并且用公钥来识别 Validator 的身份。这些 Validator 轮流对交易区块进行提议,并对这些区块进行投票出块,每一个块占据一个“高度”(height)。并且每轮投票都需要 Validator 用相应的私钥进行签名,这样如果出现问题,就可以找到对应为此负责的 Validator。
由于一些原因可能导致出块失败,例如:当前提议者可能离线了,或者网络非常慢。如果失败,Tendermint 允许其他 Validator 证实一个 Validator 应该被跳过,协议就会开始下一轮的提交,并且一个新的 Validator 会继续提交那个高度的区块。要想成功提交一个块,需要有两个阶段的投票:“预投票”(pre-vote)和“预提交”(pre-commit)。在同一轮提交中,只有超过 ⅔ 的验证人对同一个块进行了预提交,这个块才能被提交到链上。⅔ 既是拜占庭容错的下限,也是 Tendermint 共识系统的安全阈值。如果 ⅓ 或更多的验证者离线或脱机,网路就会停止运行。假设少于 ⅓ 的验证者是拜占庭,Tendermint 保证安全永远不会被破坏,也就是说,验证者(⅔ 以上)永远不会在同一个高度提交冲突的区块。因此,基于Temdermint的区块链永远不会分叉。
Tendermint 的不足之处
Tendermint 是使用一种确定的循环协议方案来选出提议者的;该协议不具备随机性。提议者是根据投票权和验证者被选次数的堆排序算法选出的。攻击者只能通过添加或删除权益来干预协议,但这种干预不能立即生效,因为验证者在系统中移除或者添加权益所需的时间很长。尽管如此,攻击者就可以有更长的时间提前计划好如何操纵提议者的选择。
我们上边还提到,Tendermint 允许 Validator 可以被跳过(就是轮到一个 Validator 出块的时候但是此 Validator 没出块)。Validator 在移到下一轮投票之前等待一小段时间来接收提议者(此轮出块的验证者)提出的整个区块。这种对超时的依赖让 Tendermint 成为一个弱同步协议,而不是一个异步协议。在系统效率上虽然较 PoW 共识机制有很大的提高,但仍有待改善。同时,Tendermint 虽然依靠额外协议管理方法来与寡头垄断验证者进行对抗。但还是无法有效阻止「卡尔特形式」的发生。
最后
本文借鉴参考了很多资料,笔者也在学习过程中,有不当之处还望指出。关于 Tendermint 可探讨之处很多,不是这一篇文章可以概括的,我们以后找机会接着聊。
参考资料:
1.《共识算法的比较:Casper vs
Tendermint》https://ethfans.org/posts/consensus-compare-casper-vs-tendermint
2.《干货
| 理解权益证明安全模型的原理》 https://ethfans.org/posts/understanding-the-basics-of-a-proof-of-stake-security-model
3.
《Cosmos 上线诸王了,但是“为什么跨链“依然有待探寻》https://mp.weixin.qq.com/s/az2XnCJDdMi3LrukKY3ypQ
4.《Tendermint:
共识概览》 https://blog.csdn.net/simple_the_best/article/details/77198837
5.
《干货丨区块链中的随机数》https://ethfans.org/posts/35994