什么是Tendermint?
- 一、Tendermint介绍
- 1.1 什么是 Tendermint?
- 1.2 Tendermint 与同类软件对比
- 1.2.1 Zookeeper, etcd, consul
- 1.2.2 比特币、以太坊及其他加密货币
- 1.2.3 其他区块链项目
- 1.3 cosmos与tendermint
- 1.4 总结
- 1.5 参考文档
一、Tendermint介绍
1.1 什么是 Tendermint?
Tendermint 是一种能够为多台机器安全和保证数据一致性复制应用程序的软件。从安全性层面看,分布式系统中即使 1/3 的随机节点即使宕机了,Tendermint 依然能够保证分布式系统正常运行。另外在数据一致性方面,故障的节点能够看到相同的事务日志并计算出相同的状态。安全且保持一致性复制是分布式系统的基本问题, 在很多应用程序中起着关键性的作用,比如货币系统、选举和基础设备编排等系统。
分布式系统需具备容忍节点离线或出错,也就是拜占庭容错。拜占庭容错理论历史悠久,区块链技术落地成功的案例、比如比特币、以太坊的成功促使该理论在计算机领域的实现得以流行。区块链技术着重结合对等网络(P2P) 和密码认证对拜占庭容错加以进化。 交易被批量打包成块,每个块通过加密哈希连接上一个块从而形成链,这也是把该技术命名为 区块链 (BlockChain) 的原因。
Tendermint 包含两个组件: 区块链共识引擎 (blockchain consensus engine)、 通用应用接口(generic application interface) 共识引擎被称为 Tendermint Core ,确保交易记录在任何一个节点都能一致被排序。通用应用接口被称为 应用区块链接口 (Application BlockChain Interface) 简称为 ABCI , 交易能够被任何编程语言处理。大部分区块链和共识方案预先打包内置状态机(比如存储键值对或者通过脚本),而开发者通过 Tendermint 可以对任意编程语言编码的应用实现 BFT 状态机复制, 并且开发环境对开发者也很适合。
Tendermint 以易用、易懂、高性能为设计原则,对各种分布式应用程序都有用。
1.2 Tendermint 与同类软件对比
Tendermint 与两类软件相似。一类是分布式键值对存储软件
,例如 Zookeeper, etcd, 和 consul, 但他们使用了 non-BFT 共识。 另外一类就是区块链技术
。区块链技术包含加密货币,例如比特币和以太坊,还包含非传统类的分布式账本,譬如 Hyperledger 的 Burrow
1.2.1 Zookeeper, etcd, consul
Zookeeper, etcd 和 consul 都是典型的键值对存储和 non-BFT 共识算法的实现。Zookeeper 使用 Zookeeper Atomic Broadcast 版本的 Paxos 算法;etcd 和 consul 使用 比较新和简单的 Raft 共识算法。非拜占庭容错共识实现的分布式集群中,假设包含 3-5 个节点,可以允许一半的节点离线,但是如果出现一个拜占庭错误节点(作恶节点)足以摧毁该分布式系统。
三者都各有特色稍微不同地实现了键值对存储,但都重点围绕着给分布式系统提供基础服务,例如动态配置、服务发现、锁、领导节点选举 (leader-election)
Tendermint 和上述类型的软件本质作用差不错,但有两个重要的不同点:
- 支持拜占庭容错算法,意味着智能容忍三分之一以内的节点错误,这个错误包括任意节点离线和节点作恶
- 独立于特定类型软件,例如键值存储类。而 Tendermint
只是关注任意状态机复制,开发者根据软件需求业务逻辑,例如通过状态机复制实现键值对存储、加密货币乃至分布式电子投票平台等分布式应用。
1.2.2 比特币、以太坊及其他加密货币
Tendermint 诞生于传统的加密货币之后。相比于比特币的工作量证明 (Proof of Work) ,它实现的共识算法更高效和安全。早期的 Tendermint 内置了简单的数字货币并实现了共识功能。 节点需要缴纳保证金,如果作恶保证金就会被没收。Tendermint 实际上也是一种股权证明 (Proof of stake)
加入可股权证明算法之后,Tendermint 演变为区块链共识引擎,允许任何机器都可以加入作为节点的分布式系统。这也意味这 Tendermint 可以作为其他区块链项目即插可用的共识引擎, 替换原有的共识模块。也就是说,举个例子你可以使用 Tendermint 共识运行任何语言实现的以太坊节点源码作为 ABCI 应用(上文提到,最终实现了一种基于股权证明共识以太坊。 事实上,我们基于以太坊实现了上述的 demo
the Cosmos network 共识算法就是内置了 Tendermint
1.2.3 其他区块链项目
- Fabric 采用了与 Tendermint 相似的方法,但是它更偏向于如何管理状态,并要求所有的应用行为能够运行在 docker 容器中,我理解 Fabric 的 chaincode 就像以太坊的智能合约。它基于 PBFT 实现。在 Tendermint
中,可以把这种基于容器的行为作为 ABCI 应用。 - Burrow 实现了以太坊虚拟机和交易机制,并扩展了名字注册 (name-registery),许可权限、原生合约提供多种方式调用区块链接口 (REST 和 JSON-RPC)。 它使用
Tendermint 作为共识引擎,提供的特殊的应用状态(这里的状态由账户、验证人集合、和名字注册)
1.3 cosmos与tendermint
关于Cosmos的介绍详情见下一篇博文。
Tendermint与Cosmos一起存在于一个堆栈中,Cosmos是一个区块链平台,充当调解人并自称为“区块链互联网”;该平台仅在几天前推出了区块链,启动了Cosmos / Tendermint生态系统的实际存在。整个生态系统的运作方式与以太坊类似,只是它更模块化、更灵活、更易于开发。
Cosmos SDK充当生态系统的应用层(类似于以太坊的EVM),而Tendermint代表共识层(BFT容错权益证明共识算法)和网络层(Tendermint Core)。
在Tendermint Core堆栈下连接的共识算法+ p2p网络协议通过生态系统的另一个称为应用程序区块链接口(ABCI)的独立元素连接到Cosmos SDK。
Cosmos SDK是ABCI的基本实现,代表了生态系统的模块化部分;它是一个准系统应用程序层,开发人员可以使用自定义功能进行开发和增强。这使得现有的区块链可以构建基于Tendermint的应用程序,这些应用程序可以连接到生态系统并在彼此之间交换消息和价值。
这就是为什么Tendermint和Cosmos使用“区块链互联网”绰号的原因;整个系统希望成为一个中心,允许不同区块链之间的互操作性。
该项目背后的一家营利性加利福尼亚公司(也称为Tendermint)将上述三个主要元素分开,然后在Tendermint堆栈下连接网络/共识层。
这样做是为了使技术的组件更易于使用和修复,而无需在想要更改某些内容时为整个生态系统进行开发。主要开发人员Jae Kwon饰演Ethan Buchman,他们希望创建一些易于理解,实现和开发的东西,而Tendermint是他们努力的最终结果。
在Tendermint之前,构建区块链需要从头开始构建所有三个层(网络,共识,应用程序)。以太坊通过提供虚拟机区块链来简化这一点,任何人都可以在其上以智能合约的形式部署自定义逻辑。一个问题仍然存在:区块链本身的发展。Tendermint大大简化了这个过程,因为开发人员只需要担心应用程序层。
网络和共识层已经通过Tendermint Core引擎提供;需要做的就是通过选择的编程语言调整ABCI,开发独特的应用程序并开始使用Tendermint的功能。
Tendermint团队通过获取以太坊的代码库,剥离PoW并将最终结果插入其Tendermint Core之上来做这样的事情。这创建了Ethermint,类似以太坊的协议,具有权益证明功能。所有现有的以太坊工具(Truffle,Metamask,…)都与Ethermint兼容,你可以将智能合约移植到那里,而无需任何额外的工作。
我们仍然没有提到的整个等式的一个重要元素是区块链间通信协议(IBC),它对于区块链互操作性非常重要。IBC允许异构链在彼此之间传输价值和数据,最终解锁具有不同应用程序和验证器集的区块链之间的互操作性。
为了避免未来成百上千个区块链可能带来的可扩展性问题,Cosmos提出了一种具有两类区块链的模块化架构:Hubs和区域。
区域是常规的异构区块链,而 Hub 是专门设计用于将区域连接在一起的区块链。当区域与中心创建 IBC 连接时,它可以自动访问(即发送和接收)连接到它的所有其他区域。因此,每个区域只需要使用一组受限制的集线器建立有限数量的连接。
中心还可以防止区域之间的双重支出。这意味着,当区域从中心接收令牌时,它只需要信任此令牌的源区域和中心。第一个中心(Cosmos Hub)几天前已经启动。有些链条不会完全兼容Tendermint;开发人员设想了所谓的挂钩区来处理这个问题。
Tendermint的密码学本身并不是那么先进,ECDSA签名是生态系统中最“奇特”的技术。在最近的发布后直播中提到了BLS签名聚合,零知识证明和Ristretto帐户,但这些似乎都还没有出现。
该技术可用于创建公共和私有链,前者通过PoS运行,后者通过许可节点运行;两个系统都将是BFT。Tendermint Core上的方块可以有一秒钟的区块时间,并被视为立即最终;否则,可以安全地假设网络遭受了33%的攻击(超过三分之一的验证者是恶意的)。
区块链需要具有拜占庭容错能力,即能够容忍潜在的恶意节点,这些节点正在向网络传达虚假状态和消息并危及共识。拜占庭容错系统上的科学很少,因为这个话题在学术界并不受欢迎。
所做的一些研究集中在多达7个节点的小样本网络上;Tendermint开发人员想要一些可以在更高层次上扩展的东西。即使比特币引入了一个能够支持数千个独立节点的系统,该系统也曾经(并且仍然拥有)一个管理域,这大大限制了它的可扩展性。
Kwon和他的合作伙伴设想了一种BFT协议,该协议可以在无许可设置中扩展到数百个节点,并以权益证明(PoS)作为底层安全机制。他们提出了基于BFT的系统,该系统具有我们已经命名的两个关键元素:Tendermint Core,用于达成共识和“八卦”,以及Cosmos SDK作为应用层。
他们的BFT权益证明算法通过使用部分同步网络模型克服了拜占庭将军问题,这意味着对区块进行投票的验证者不需要同时采取行动。这个系统中的区块不是按时间表投票的,也没有确定的大小。
在被认为是“完全同步”的比特币中,我们有一个设定的10分钟时间框架,节点必须寻找,收集,验证和添加交易到区块。对于以太坊,这个时间范围只有15秒。这一切都很好,直到同步性被打破;一些节点可能会脱机并遭受延迟问题,在这种情况下,链可能会停止或分叉。
Tendermint旨在实现一个更集中的模型,该模型拒绝对其以异步方式运行的节点进行这些计时限制。
该协议更加异步:不是每轮花费预定的时间段,而是在超过2/3的节点达成共识后,回合的每个步骤都会进行。这种缺乏同步是部分的,项目将其称为“弱异步”。验证者是众所周知的,可以相互沟通,以协调他们的努力,并确保始终达成网络共识。所有这些都意味着,事实上,他们的网络永远不会分叉。
Tendermint定期重新分配验证者提出区块的权利,以略微缓解该过程集中化的潜在问题。在提出区块后,验证者在多轮确定性过程中投票。
为了扩展这一点,我们需要意识到,在协议的世界里,我们有非确定性和确定性的协议。非确定性协议是我们在完全异步系统中看到的协议。纯异步情况的共识可能依赖于随机预言机,并且通常会产生很高的消息复杂性开销,因为它们依赖于所有通信的可靠广播。
Tendermint通过走确定性路线来避免这种高开销;实际上没有什么是随机的,而是通过定义的数学函数完成的,该函数允许我们做出预测,即协议保证做出决策。
使用 Tendermint,验证器在确定性加权轮循机制格式的帮助下进行轮换。验证者拥有的赌注越多,他们被选为领导者的次数就越多。目前,该协议的上限为一百个验证器,但是,如果需要,团队可能会考虑添加更多验证器。这确保了系统在异步环境中是安全的,并且在弱同步环境中是活跃的。总体而言,共识机制牺牲了一定程度的活性,以实现共识安全性和即时终结性。
1.4 总结
Tendermint是一个有趣的概念,在纸面上看起来和听起来可能比在现实中更复杂。它基本上是互操作性的EOS,与以太坊及其大量克隆项目有很多相似之处。Tendermint的主要目标是解决区块链互操作性问题,它在这个市场上面临着强烈的反对意见。Ark,ICON,Polkadot,AION和类似的项目都有相同的目标,所以谁会脱颖而出还有待观察。
1.5 参考文档
1.区块链 PoS 共识——Tendermint 2.What is Tendermint? How does Tendermint consensus work?