区块链tendermint 区块链技术定制开发

皕利分享 431 0

本篇文章给大家谈谈区块链tendermint,以及区块链技术定制开发对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

Tendermint 简介

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

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

协议参加者称为验证节点;他们轮流打包出块并集体对该块打包。在每一个高度上只允许一个块 commit。在一个块无法在该轮被提交的情况下,协议会移动到下一轮,并且新的验证节点会 propose 一个该高度的块。需要两轮投票才能 commit 一个块;这两轮投票我们称为 “pre-vote“ 和 “pre-commit“。在每一轮投票中需要超过 2/3 的验证节点对同一个块 pre-commit 才能最后的块 commit。

验证者在每一轮中 commit 块时会失败,原因如:当前提议者可能离线,或者网络可能很慢。Tendermint 允许跳过验证者,验证者等待一小段时间从 proposer 收到完整的 proposer 块,然后进入下一轮投票。这种对超时的依赖使得 Tendermint 成为弱同步协议,而不是异步协议。然而,协议的其余部分是异步的,验证者只有收到超过 2/3 的投票后才能取得进展。precommit 和 propose 两轮投票机制是一样的。

假设有不到三分之一的验证节点是拜占庭节点,Tendermint 保证不会违反安全性。也就是说,验证节点永远不会在相同的高度提交冲突的块,不会分叉。为此,它引入了一些 “锁定 “规则。一旦验证器预先插入一个块,它将被锁定在该块上,然后,

umee币上市怎么一直跌

受市场宏观调控的影响,市场环境不景气,导致一直跌。

Umee 是一个跨链 DeFi 枢纽,可在区块链之间互连。作为基础层 DeFi 协议,可以在 Umee 之上构建广泛的应用层协议生态系统。Umee 区块链使用 Tendermint Proof of Stake 共识协议与 Cosmos 生态系统、以太坊网络、侧链架构、第二层扩展解决方案和替代基础层协议促进即时互操作性。

Tendermint 共识算法

分布式一致性算法一般可以分为两类区块链tendermint:拜占庭容错和非拜占庭容错。

非拜占庭容错算法如 Paxos, Raft 等在当前区块链tendermint的分布式系统中已经广泛使用区块链tendermint,而拜占庭容错算法的实际应用范围相对来说小很多(特别是在区块链问世之前)。

Tendermint 属于拜占庭容错算法,它针对传统的 PBFT 算法做区块链tendermint了优化,只需要有两轮投票即可达成共识,目前 Tendermint 算法主要应用在区块链系统中,这篇文章就从原理上来介绍 Tendermint 的共识机制。

关于 Tendermint 算法的完整描述在 这里 。

这里先介绍一下算法的流程,理解了算法流程之后,再来阐述该算法的安全性证明 (Proof of Safty) 和活性证明 (Proof of Liveness)。

下面这张图是 tendermint 状态转换图

算法主要有 NewHeigh - Propose - Prevote - Precommit - Commit 一共 5 个状态(阶段)。

上述每个状态都被称为一个 Step,首尾的 NewHeigh 和 Commit 这两个 Steps 被称为特殊的 Step,而中间加粗体的三个 Steps 则被称为一个 Round,是共识阶段,也是也是算法的核心原理所在。

需要注意的是,一个块的最终提交(Commit)可能需要多个 Round 过程,这是因为有许多原因可能会导致当前 Round 不成功(比如出块节点 Offline,提出的块是无效块,收到的 Prevote 或者 Precommit 票数不够 +2/3 等等),出现这些情况的话,解决方案就是移步到下一轮,或者增加 timeout 时间)。

这里,还要介绍一个重要概念:PoLC,全称为 Proof of Lock Change,表示在某个特定的高度和轮数(height, round),对某个块或 nil (空块)超过总结点 2/3 的 Prevote 投票集合,简单来说 PoLC 就是 Prevote 的投票集。

Tendermint 中有两种类型的节点,Validator 节点和 Non-Validator 节点,顾名思义,只有 Validator 节点会参与共识投票,而普通节点作为 Non-Validator 节点,不参与共识投票,只协助传递状态或向 Validator 节点发送交易请求。

初始状态下(创世块),高度为 0, 此时,系统会基于 Round Robin 原则来选出一个 Validator(每个 Validator 都有一定的 Voting Power),由这个 Validator 打包一个新的 Block, 并向所有节点发出 Proposal,剩余的 Validator 节点对该 Proposal 进行投票,最终达成共识。

以下,分阶段来阐述各个阶段:

当上一轮 Commit 结束,就会出现新高度,这是就需要进入下一轮共识了,也就是说,这就是新一轮共识过程的开始,这时候需要选出一个 Proposer。选择算法是 Round Robin,基于他们的 Voting Power(上一轮的选中的 Validator 节点会把其 Voting Power 值减去 Total Voting Power,也就是说上一轮的 Validator 在这一轮,其 Voting Power 会变成负数)。

在 Propose 节点开始的时候,该轮指定的 proposer 需要通过 gossip 广播一条 proposal 到所有的 peers。如果此时这个 proposer 被锁在上一轮的某个 block 上,那么它就直接 propose 那个 block,同时包含一条 proof of lock 的信息。

Validator 节点收到 propose 信息之后就进入 Prevote 投票阶段。投票时,如果 Validator 被锁在之前一个 block 上,那么还是给之前那个 block 投 prevote 票,否则就投当前的 block。同时,它会继续收集对这个 block 的 prevote 投票,等轮到他 propose 的时候打包进 PoLC。

注意:

如果自己有 Lock-Block,这时又收到一个新的针对另外一个块的 PoLC,并且满足LastLockRound PoLC-Round 当前 Round,则解锁 Lock-Block。

如果 timeout 期间没收到 proposal,或者收到的 proposal 是无效的,那么就投 nil 票。

在 Prevote 阶段不会锁住任何 block。

Prevote 超时或者收到的 Prevote 的 nil 票超过 2/3 时,就进入 Precommit 阶段。

如果此时收到了 +2/3 的 prevote 投票,就广播一条 precommit 投票,同时, 把自己锁在当前的 block 上(把之前的都释放掉) 。一个节点一次只能锁在一个块上。

如果收到 +2/3 的 nil 投票,那么就释放锁。

当一个节点锁在一个 block 上的时候(有 PoLC) ,它会将 LastLockRound 置为当前 Round,并对这个块投 Precommit 票。

如果有针对 nil 票的 PoLC,则解锁并且对 nil 投 Precommit 票;否则的话保持 Lock-Block 不变,并投 nil 。

如果在 timeout 期间内,没有收到对某个块的足够的 +2/3 投票(prevote 或者 nil 都行),那么就什么也不干。

最终,如果一个节点收到了 +2/3 的 precommit 投票,就进入 Commit 阶段。否则,继续进入下一轮的 Propose 阶段。

Commit 阶段是一个特殊阶段,有两个并行的条件必须满足:

At any time during the consensus process if a node receives more than 2/3 of commits for a particular block, it immediately enters the Commit step if it hadn’t already. Thus there are two ways to enter the Commit step. A commit-vote for a block at round R counts as prevotes and precommits for all rounds R0 where R R0 . Commit-votes are gossipped to neighboring peers in the background re-gardless of the current round or step。

At any time during the consensus process if a node is locked on a block from round R but receives a proof-of-lock for a round R0 where R R0 , the node unlocks.

Tendermint 的安全性就是说,在对高度为 H 的块达成共识之后,不可能会出现新的高度为 H 的块,也就是说 Tendermint 保证不会分叉,保证不会分叉的主要角色就是 Lock-Block。

先看下wiki对于安全性证明的描述:

Assume that at most -1/3 of the voting power of validators is byzantine. If a validator commits block B at

round R, it's because it saw +2/3 of precommits at round R. This implies that 1/3+ of honest nodes are still

locked at round R' R. These locked validators will remain locked until they see a PoLC at R' R, but this

won't happen because 1/3+ are locked and honest, so at most -2/3 are available to vote for anything other

than B.

翻译:

假定有最多小于总结点 1/3 的拜占庭节点。如果一个节点在第 R 轮提交一个块,则表明此节点在第 R 轮收到大于 2/3 的针对此块的 Precommit 投票。这也就意味有

大于1/3 的诚实节点在第 R’ (R' R)轮仍然锁定在这个块上(因为大于 2/3 的 Precommit 投票必定包含大于 1/3 诚实节点的 Precommit 投票)。只有当遇到针对另一个

块的 PoLC 时才会解锁,但是在 R' 轮是不可能有针对某个块的 PoLC,因为已经有大于 1/3 的诚实节点已经锁定在这个块上,所以就不可能有对另外一个块大于 2/3

的 Prevote 投票。

下面给出较为详细的证明过程,假设高度为 H 的块 b 在第 R 轮达成共识。给出如下条件:

需要证明, 当 x 个节点 commit 之后,剩余(也就是 y + z)的没有 Commit 块 b 的节点不会对另外一个块达成共识。

也就是说需要证明:y + z - z0 2/3,假设所有的拜占庭节点都对 b 投了 Precommit,则满足:x + y + z0 2/3。

简而言之,要从 x + y + z0 2/3 证明 y + z - z0 2/3。

区块链tendermint我们通过反证法来证明:

假设 y + z - z0 2/3,也就是在第 r 轮之后有可能造成分叉,则:

x + y + z - z0 2/3 + x = 1 - z0 2/3 + x = x + z0 1/3。

而上面我们提到了,因为x节点已经 Commit 块 b,则 x + y + z0 2/3,且 y 1/3,则说明 x + z0 必须大于1/3。由此证明,y + z - z0 1/3 成立,在第 R 轮之后无法对另一个块达成共识,也就不可能出现分叉。

活性证明相对来说就要简单一些,假设多于 1/3 的节点分别 Lock 在不同的块上,则在 Prevote 阶段的条件保证最终 round 较小的会 unlock,而且 proposal 的超时时间会随着轮数的提高而提高。

在证明安全性的过程中提到,有可能会有部分节点由于没有收到足够的 Precommit 投票导致无法 commit,这个时候可以通过同步来使各个节点的状态尽量保持一致,在wiki中提到一个 JSet 和 VSet 的概念,当节点已经 commit 时,就可以广播一条消息携带 VSet 给其他节点,其他节点验证对于块的 commit 是否有效。这一点其实和 bft-raft (另外一个拜占庭容错算法,Raft 算法的变种)的做法类似。

Tendermint详解

摘要

您熟知并喜爱的区块链有一个相当严格的结构。作为一名开发人员,在这种情况下您有两种选择:在受限的环境中构建应用程序,或者进行代码分叉并创建自己的链。然而,创建自己的链并非易事——您还需要启动网络并决定所使用的共识机制。

Tendermint是用来启动区块链的开源软件,让您可以用任何语言编写应用程序。更厉害的是,它可以与其他区块链进行通信。

创建加密货币或区块链网络需要投入大量工作,远远不止于初始化数据库。它需要在安全性、去中心化和可扩展性之间为激励和权衡取得微妙的平衡。

有些团队已经 探索 了一系列不同的方法,来构建最强大的区块链生态系统,这也在情理之中了。在这篇文章中,我们将详细了解其中一种方法:Tendermint。

如果您对区块链有所了解,就会感觉Tendermint的大部分内容都似曾相识。在深入研究之前,我们首先回顾一些关键概念。

Tendermint是一种 区块链堆栈 。比特币和以太坊等同样也是区块链堆栈。请记住,这并非只关乎区块链数据库本身,还关乎节点的对等网络、它们如何相互作用,以及您通过交易和智能合约可以做到的事情。其目标是在即便不信任其他任何人的情况下,让所有人都统一一种 状态 (比如数据库的快照)。

在很大程度上,如今的主要区块链已经想出了达成这一点的“秘籍”。然而,它们通常依赖于 一体化架构 :这是一个软件工程概念,意味着组件相互连接且相互依赖。您不能从中取走一部分,然后插入到别的架构中。

如果您想保证灵活性,一体化架构并非理想的选择。在相反类型的模型(具有 模块化架构 )中,您可以在不必担心破坏任何架构的情况下调整单个组件。对于一体化架构,您在升级单个组件时必须确保每个组件保持兼容。

现在,我们理解了其中的差别,可以继续来了解Tendermint协议。

您可能已经知道,比特币最大的创新之处在于它解决了所谓的 拜占庭将军问题 。在这里我们不会详细讨论这个问题(如果您感兴趣,请参阅我们关于拜占庭容错的文章)。您只需要知道,它详细说明了参与者必须在分布式环境中进行通信的场景。

这些参与者不知道其他人是否在撒谎,也不知道他们之间发送的消息是否被篡改。即便存在这些问题,如果参与者可以针对一组事实达成一致,则系统会被认为存在 拜占庭容错 。

显然,在去中心化的环境中,正确把握这一点至关重要。不具有拜占庭容错的加密货币并不能真正发挥作用——您需要某种中心化组织进行协调,这就与目的背道而驰。如果很多数字货币一样,比特币通过使用工作量证明(PoW)共识算法来解决这个问题。

我们已经了解一体化/模块化架构之间的区别,也知道去中心化加密货币网络需要具有拜占庭容错能力。接下来我们谈谈我们通常在区块链中看到的三层架构: 应用 层、 共识 层和 网络 层。

共识层和网络层是让网络节点相互通信并尽量就一组事实达成一致的地方。应用层则可让您自行进行操作——好比以太坊的去中心化应用程序和智能合约或者比特币中的自定义交易。

然而,Tendermint是公司的名称(由最初撰写白皮书的开发人员Jae Kwon创立),而Tendermint Core是这家公司正在开发的实际软件。更具体地说,这款软件有两个主要组件:核心共识引擎(Tendermint core)和应用程序接口(ABCI)。

Tendermint Core是一个能够实现容错的系统。本质上,它是一台大型分布式计算机,可在同一时间向每个人显示相同的状态。只要至少三分之二的参与者是诚实的,一切就会顺利进行。但几乎每个区块链都是这样的,难道不是吗?它究竟有什么特别之处?

首先,Tendermint Core使用的共识机制是权益证明(PoS)。每个周期从一组验证者中选择一个随机节点。随后,该节点必须提出下一个区块(在所谓的 循环 系统上进行)。如果其他验证者对它满意,就会添加新的区块,并更新链。结果可以即时确定——与比特币或以太坊不同,它不需要等待确认来确保您的交易有效。

别着急,它还有其他特色!Tendermint Core采用模块化架构,应用层与共识层和网络层分离。简而言之,这意味着您可以将自己的应用程序层插入到堆栈中,而无需担心繁杂的激励机制或共识算法。

这对终端用户来说并不值得大惊小怪。但对于开发人员来说,能够利用现有框架就意味着他们可以直接构建应用程序,而无需建立整个网络。来自区块链的数据可以通过管道传输到集成层,让开发人员可以用任何语言编写软件。

神奇的事情发生在所谓的应用程序区块链界面(或简称ABCI)上。您可以把它想象成树莓派电脑上的GPIO引脚。您可将各种第三方组件连接到这些引脚,从LED到精心设计的植物洒水系统。ABCI以类似的方式定义了区块链以及在区块链上运行的应用程序之间的边界。

应用程序接口和共识机制的分离为分布式应用程序提供了更大的灵活性,可以将任何编程语言合并到它们的业务逻辑当中。

您只需要看看Ethermint这个具体示例就可以知道它的用处:Ethermint采用了以太坊代码库,删除了工作量证明机制,并将以太坊虚拟机建立在Tendermint之上。

这使得一些有趣的操作成为可能。首先,以太坊开发人员可轻松将他们的智能合约移植到新引擎上,或者使用Solidity语言编写新的合约。除了提供以太坊功能之外,Ethermint还可作为以太坊权益证明,让我们一睹Casper在以太坊2.0中实现的样子。

“区块链互联网”的承诺吸引了许多人使用Tendermint协议。互操作性是加密货币领域期待已久的一个补充,因为它意味着数百个单独的区块链将变得交叉兼容。

目前,Cosmos SDK已投入大量工作,Cosmos SDK是一个开源框架,让任何人都能创建特定于应用程序的公共或私有区块链。随后,这些区块链可以通过所谓的Cosmos Hub接入更广泛的Cosmos网络,并在那里与其他区块链进行交流。

很多热门的项目已经使用Cosmos SDK来构建,比如BSC、KAVA、Band Protocol、Terra和IRISnet。

作为一个区块链引擎,Tendermint已经引起了加密货币领域众多利益相关者的注意,包括开发人员和终端用户。

写到这里,本文关于区块链tendermint和区块链技术定制开发的介绍到此为止了,如果能碰巧解决你现在面临的问题,如果你还想更加了解这方面的信息,记得收藏关注本站。

标签: #区块链tendermint

  • 评论列表

留言评论