Exonum平台是构建区块链解决方案的领先开源框架。它是拜占庭式的容错算法,专注于效率合安全性,不需要您的区块链来“挖掘”块。
以下是我们的共识算法的不同之处。
求解一个共识算法
区块链是一种数字分布式数据账本,以区块链的形式组织起来。只有在下列情况下才有可能向链中添加新块:a)网络成员节点就相同的建议块达成协议;b)建议的块是准确的。
要做出此决定,节点需要遵循规则。这些规则还允许网络管理员评估成员节点的活动。
简而言之:需要一种共识算法,以确保对等网络成员能够对新的账本状态达成一致意见(换句话说,对区块链中的新块的内容达成联合决策)。
比特币区块链的普遍算法是工作量证明(PoW)算法。在这里,确定参与者(矿工)执行的新块的复杂计算工作,以及他为此获得的报酬,保证了网络当前状态的正确性。PoW算法为系统的正常运行提供了经济保证。PoW、PoS证明及其混合形式的下一个主要替代方案也提供了通过投资或花费参与者自己的物质资源达成共识的机会。在这种情况下,人们认为,即使不是完全无利可图,不公平的活动至少也会变得极其昂贵。
然而,尽管比特币被认为是目前存在的最可靠的分布式系统,但它和它的替代品都没有从根本上解决拜占庭式节点行为的问题。拜占庭将军的故事大家都知道,所以我们就不解释了。就本文而言,我们的意思是试图为任何“拜占庭节点行为”(即任何故意恶意的、旨在破坏或完全停止共识算法操作的活动)找到一个解决方案。
当在私有区块链网络中处理这个问题时,您必须用数学方法表示协商一致的属性。这是通过在网络中创建严格的行为规则来实现的,与PoW和其他基于经济的协商一致算法相比,这些算法几乎不需要自发地运行。其中一些基于数学的共识(特别是拜占庭容错共识(BFT))有一个明确的算法,可以选择提出新块建议的领导节点。
共识算法还必须考虑到区块链中可能出现的常见问题,即:节点与网络失去连接(网络参与者之间的通信失败)、节点没有在任意时间点运行(断开连接)以及节点工作时的不正确。所有这些问题都描述了节点的“拜占庭行为”。此外,不影响在区块链中采用新块的最大允许异常数取决于网络及其处理器/节点的属性。例如,网络中节点之间通信的同步。
20世纪80年代的经典研究表明,要在包含拜占庭行为节点的异步网络中实现共识性的稳定运行是不可能的。网络中诚实的成员将无法区分拜占庭节点和不活跃的节点(所谓的“FLP Impossibili”),为了保证系统对上述故障的稳定性,必须至少部分同步。同时,为了正确工作,共识算法至少应该具有以下属性:
· 活跃性-在有限的时间内随时接受新区块进入链条的能力。换句话说,每个节点最终都会决定下一个块;
· 一致性-网络中所有节点上的基本状态的标识。换句话说,最终,关于下一个块的所有诚实节点的决策将是相同的。
如果我们说到共识算法是专门应用于区块链的,那么另一个特性就变得很重要。这就是审查阻力,这意味着缺乏对交易的审查,这是区块链共识的一个特定特征。它防止节点故意只为块选择某些交易,而将其他交易留在未经确认的交易池中。
基于相同的研究结果,对于一个已知节点数量的网络,最优的是一个抵抗拜占庭节点行为的算法模型。在具有部分同步节点的网络中,该模型最多可以容忍网络中三分之一的恶意(拜占庭式)成员。
鉴于我们的目标和Exonum框架的目标,我们选择这个模型来形成我们的共识算法。
总之,我们设计的共识算法能够确定网络中每个诚实成员的行为,在这种情况下,大多数成员的行为都是诚实的,有些成员的行为可能是任意的。
我们需要设计一个诚实节点对传入事件(来自其他节点的消息)的响应方案。这些反应包括发送适当的响应消息或“意识到”某个决定已经由网络做出。这决定了区块链的日常操作。
达成共识的关键门槛: 2/3对1/3的选票
共识算法的基本操作有两个步骤。首先,某个验证器节点(参与协商一致的节点)提出一个新的块建议,并在网络中的所有节点之间进行广播。其次,其余的验证器节点为这个提议投票(“赞成”/“反对”)。
当其中一个节点首先从其他验证器接收到一定数量的相同响应时,该决策对整个网络有效。
与现实世界中这一进程最接近的类比是总统选举的情况。这是在两位候选人之间做出的选择。选民的数量是有限的,有些人可能会投给一个候选人,有些人会投给另一个候选人。
在非拜占庭系统(例如,Cassandra)中,当提案获得超过50%的选票时,就会被认为是做出了决定。由于每个成员只投票一次,其余的选票不计算在内。值得一提的是,由于投票的数量与网络参与者的数量一致,因此在这种情况下不需要确定选民。
然而,在拜占庭系统中情况就不同了。在这里,投票是公开的,即每个人都知道成员的身份。然而,只要我们假设某些节点可能以任意方式运行,我们就会面临许多问题。拜占庭节点可以通过忽略投票过程来破坏投票过程,或者向不同的成员发送关于其决策的不同数据。事实上,这种情况类似于选举中的选票造假。基于50%以上多数投票的决定违反了系统一致性的性质。这是因为现在选票的数量(或选票的数量)不等于选民的数量(网络中的节点数量)。
在这种情况下,节点在某个时间点上没有系统状态的统一视图。而系统本身并没有一个单独的中心来收集和沟通最终的决定。因此,拜占庭共识的问题不在于选择的正确与否,而在于:
· 整个系统必须对最终结果达成一致决定。
· 只要至少有一些网络成员有兴趣这样做,最终的结果必须是可以达到的。
让我们来确定网络中诚实验证器的临界质量,它将允许系统达成共识并接受区块链中的新块。
假设我们有' h '诚实的验证器节点和' f '(错误的)拜占庭节点,那么验证器的总数是' N = h + f '。如上所述,所有验证器都为两个提名候选人中的一个投票。每个人都从投票过程中的其他成员那里收集选票。每个人都可以根据阈值规则来决定谁是赢家。规则说:数量的选票获胜的候选人必须“≥α* N”、“α”的范围从“0”到“1”。例如,绝对多数选票时达到“α> 1/2”。
在投票结束时,每个验证器独立决定哪位候选人获胜。值得注意的是,验证器可能无法做出决策。例如,如果太少的验证器广播了他们的投票,就会发生这种情况。这可能会发生,特别是因为拜占庭验证器可以向不同的诚实验证器广播不同的投票,或者完全跳过投票。
为了避免这种情况,在我们的推理中,我们必须观察两个条件:
1. 诚实的验证器应该能够做出选择,即使没有拜占庭节点的参与。这意味着即使拜占庭节点有意跳过投票,共识性算法的活性也得到了保留。这种情况可以通过下列不等式表示:“h≥α* N ';
2. 投票给少数诚实验证者的替代方案不能克服"α* N”的门槛。也就是说,即使拜占庭节点有意且一贯地将一名候选人的选票广播给一些诚实的验证者,并且投票给第二个候选人 ,也保留共识算法的一致性属性 - 其余为诚实验证。让我们将这种情况表达如下:'[h / 2] = f [= = N',其中"{h / 2}"是数字"h / 2"的整数部分。
解1和2的不等式,我们得到:
h f > 2,
α> 2/3,
N≥3f + 1
因此,网络中允许正确一致操作的拜占庭节点的最大数量是验证器总数的' <1/3 '。
这个结果很容易验证。假设所有拜占庭节点都决定投票两次。他们向一些诚实的验证者广播一个候选人的投票,并向其余诚实的验证者广播第二个候选人的投票。如果拜占庭节点的数量是验证器总数的1/3,那么根据投票结果得到的投票总数将是4/3。因此,只投票一次(2/3)的诚实节点的数量将恰好占总投票数的50%。这样,为了获得大多数诚实投票并达成共识,诚实节点的数量至少应该是验证器总数的“2/3 +1”。
共识算法的阶段
在现代区块链操作中,用户对系统速度和性能的期望很高。经典的算法解决方案没有提供这些特性。我们回顾了其他几个升级的替代方案,但是它们也不能完全满足我们的研究团队,因为这些算法不能满足专家对框架的所有要求。因此,我们开发了自己的算法。
Exonum的共识算法依赖于inTendermint提出的一些思想。然而,它包含了许多特性,使它有别于Tendermint和其他用于基于区块链的解决方案的一致算法。
下面我们将讨论Exonum共识算法的机制。一般来说,计划如下:
达成一致意见的过程首先由一个领导节点(一个领导者)形成一个必须添加到区块链的交易列表(创建一个建议)。领导者是通过一个单独的算法来选择的。根据我们的算法,领导者每轮都会改变。然后,将提案通过网络广播到验证器节点(验证器)。
验证器检查接收到的消息是否与序列化格式相对应。如果出现错误,节点将完全忽略接收到的消息。例如,验证器忽略向区块链中间添加块或复制已存在事务的建议。如果一切就绪,那么投票阶段就开始了。
提案获得验证者2/3以上批准的节点,将失去对其他验证者提案投票的机会,并且无法更改自己的提案。这种状态称为锁的验证。
在领导者从验证器收集到所需的投票数之后,它将批准的交易放入一个块中,并广播一条特殊的消息——precommit。
precommit包含更新后的区块链状态的哈希值,指示节点准备将建议的块添加到区块链。当大多数验证器响应类似的预提交消息时(使用相同的哈希值),块就被添加到区块链中。达成一致意见,并对随后的每个块重复该过程。
为了提高系统的稳定性,验证器之间会周期性地交换和阻塞消息。如果节点缺少任何事务数据,则需要使用前者。后者用于将关于一个事务块的信息传输到一个滞后节点(例如,节点关闭了一段时间)。这允许同步整个网络的工作。
所提出的共识性算法对每个高度都是正确的,即满足了活动性、一致性和抗审查性。共识属性的正式证明可以在我们的白皮书中找到。
性能测试
为了评估Exonum共识性算法的效率,我们检查了区块链如何使用它使用两种配置。这些配置包括一个数据中心和几个地理上分布的数据中心。在测试期间,对不同数量的验证器估计了TPS参数(每秒交易数)。下面的图表显示了使用加密货币的区块链(黑色图表)和使用时间戳的区块链(蓝色图表)中的网络性能变化。
TPS是单个数据中心中验证器数量的函数
本文地址: https://www.xiguacaijing.com/news/baike/2019/10063.html
赞助商