用户登陆
正在加载
Tendermint拜占庭共识算法框架浅析
互联网 · 2019-06-14 15:21:54

写这篇文章的主要动机源于 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),它实现的共识算法更高效和安全。下图是一个简单的状态机,它展示了这套共识机制的运作规则:

blob.png


协议中的参与者叫着「验证者」 (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

免责声明:
本网站所提供的所有信息仅供参考,不构成任何投资建议。用户在使用本网站的信息时应自行判断和承担风险。币界网不对用户因使用本网站信息而导致的任何损失负责。用户在进行任何投资活动前应自行进行调查和研究,并谨慎决策。币界网不对用户基于本网站信息做出的任何投资决策负责。用户在本网站发布的任何内容均由其个人负责,与币界网无关。
免责声明:本网站、超链接、相关应用程序、论坛、博客等媒体账户以及其他平台和用户发布的所有内容均来源于第三方平台及平台用户。币界网对于网站及其内容不作任何类型的保证,网站所有区块链相关数据以及其他内容资料仅供用户学习及研究之用,不构成任何投资、法律等其他领域的建议和依据。币界网用户以及其他第三方平台在本网站发布的任何内容均由其个人负责,与币界网无关。币界网不对任何因使用本网站信息而导致的任何损失负责。您需谨慎使用相关数据及内容,并自行承担所带来的一切风险。强烈建议您独自对内容进行研究、审查、分析和验证。
s_logo
App内打开