tendermint是什么,Tendermint

OKX欧易app

OKX欧易app

欧易交易所app是全球排名第一的虚拟货币交易所,注册领取6万元盲盒礼包!

APP下载   官网注册

tendermint是什么,Tendermint

一、什么是POW和POS,二者区别联系

POW:全称Proof of Work,工作量证明。

POS:全称Proof of Stake,权益证明。

这两者都区块链的共识机制,是数字货币的记账方法。

区别是:

1、POW机制:工作量证明机制即对于工作量的证明,是生成要加入到区块链中的一笔新的交易信息(即新区块)时必须满足的要求。在基于工作量证明机制构建的区块链网络中,节点通过计算随机哈希散列的数值解争夺记账权,求得正确的数值解以生成区块的能力是节点算力的具体表现。

2、POS机制:权益证明要求证明人提供一定数量加密货币的所有权即可。权益证明机制的运作方式是,当创造一个新区块时,矿工需要创建一个“币权”交易,交易会按照预先设定的比例把一些币发送给矿工本身。权益证明机制根据每个节点拥有代币的比例和时间,依据算法等比例地降低节点的挖矿难度,从而加快了寻找随机数的速度。

扩展资料:

比特币(BitCoin)的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。

与大多数货币不同,比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算产生,比特币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节安全性。P2P的去中心化特性与算法本身可以确保无法通过大量制造比特币来人为操控币值。

参考资料:百度百科-共识机制

二、Tendermint***共识算法

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

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

Tendermint属于拜占庭容错算法,它针对传统的 PBFT算法做了优化,只需要有两轮投票即可达成共识,目前 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。

我们通过反证法来证明:

假设 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算法的变种)的做法类似。

三、hotstuff是什么意思

HotStuff是一种分布式共识算法,用于区块链网络中实现去中心化的决策过程。它旨在解决传统区块链网络中存在的可扩展性和安全性问题。

HotStuff算法的核心思想是通过多轮投票来达成共识。在每一轮投票中,节点会对自己认为正确的区块进行投票,并将投票结果广播给网络中的其他节点。如果某个区块在连续多轮投票中都获得了超过一定比例的票数,那么该区块就被认为是达成共识的区块,并被添加到区块链中。

与传统的Paxos或Raft共识算法相比,HotStuff算法具有更高的效率和安全性。它采用了“领导者选举”和“视图变更”等机制,确保了在网络不稳定或存在恶意节点的情况下,系统仍然能够快速达成共识。此外,HotStuff算法还采用了加密技术,确保了投票过程的安全性和匿名性。

在实际应用中,HotStuff算法已经被一些区块链项目所采用,如Tendermint和Irisnet等。这些项目通过使用HotStuff算法,实现了更高效、更安全的区块链网络,为数字货币、智能合约等应用提供了强大的基础设施支持。

总之,HotStuff算法是一种高效、安全、可扩展的分布式共识算法,为区块链技术的发展和应用提供了重要的支持。

本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://czxurui.com/jys/148025.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年11月13日
下一篇 2024年11月13日

发表回复

8206
验证码

评论列表(0条)

    暂无评论

ok交易所
已有100万用户加入ok交易所

立即下载