Seven讲区块链程序员

Tendermint 简介

2018-04-12  本文已影响8人  __Seven__

简介

Tendermint 是分布式一致性软件。即使有 1/3 的机器叛变了, 也能保证其余机器上的数据一致。容忍机器以任意方式失败的能力, 包括变得恶意, 被称为拜占庭容错 (BFT)。该理论被提出来数十年了,由于 bitcoin 和 ethereum” 区块链技术” 的成功,才变得流行起来。区块链用点对点和加密认证技术组成了一个现代化 BFT 实例。Tendermint 包含了两个主要的组件:区块链共识引擎和通用应用层接口。共识引擎叫 Tendermint Core,确保每一台机器上的交易列表相同。应用层接口名字是 ABCI,提供能为任何语言处理交易的接口。与其他区块链的解决方案(内置的状态机预先打包块)不同,如 ethereum 的基于世界状态树的键值对存储、bitcoin 的脚本语言处理。开发人员可以在任何开发环境下用任何语言通过实现 ABCI 应用层来复制 Tendermint 状态机。

共识算法

Tendermint 是一个易于理解的,大部分模块采用异步通信的,拜占庭容错共识协议。该协议可用一个简单的状态机表示,如下图:


image

协议参加者称为验证节点;他们轮流打包出块并集体对该块打包。在每一个高度上只允许一个块 commit。在一个块无法在该轮被提交的情况下,协议会移动到下一轮,并且新的验证节点会 propose 一个该高度的块。需要两轮投票才能 commit 一个块;这两轮投票我们称为 “pre-vote“ 和 “pre-commit“。在每一轮投票中需要超过 2/3 的验证节点对同一个块 pre-commit 才能最后的块 commit。
验证者在每一轮中 commit 块时会失败,原因如:当前提议者可能离线,或者网络可能很慢。Tendermint 允许跳过验证者,验证者等待一小段时间从 proposer 收到完整的 proposer 块,然后进入下一轮投票。这种对超时的依赖使得 Tendermint 成为弱同步协议,而不是异步协议。然而,协议的其余部分是异步的,验证者只有收到超过 2/3 的投票后才能取得进展。precommit 和 propose 两轮投票机制是一样的。
假设有不到三分之一的验证节点是拜占庭节点,Tendermint 保证不会违反安全性。也就是说,验证节点永远不会在相同的高度提交冲突的块,不会分叉。为此,它引入了一些 “锁定 “规则。一旦验证器预先插入一个块,它将被锁定在该块上,然后,

上一篇下一篇

猜你喜欢

热点阅读