第163篇 笔记-权益证明

一、什么是权益证明

权益证明是一类应用于公共区块链的共识算法,其效果取决于验证者在网络中的经济权益。

在基于工作量证明的公共区块链中算法会奖励那些为了验证交易并创建新区块而解决密码学难题的参与者。在基于权益证明的公共区块链中,一组验证者轮流提议并对下一个区块进行投票,并且每位验证者的投票权重取决于其保证金额的大小(即权益)。

一般来说,权益证明算法如下:区块会跟踪一个验证者集合,并且任何持有该区块链的基础加密资产(如在以太坊中就是以太币)的用户都可以通过发送一笔将以太币锁定为保证金的特殊交易来成为验证者。随后,创建并对新区块达成一致的过程将由当前所有验证者均可参与的共识算法来完成。

共识算法有很多类型,而将奖励分配给参与共识算法的验证者的方式也有很多。因此,权益证明也风格迥异。从算法的角度来看,权益证明主要分为两种,即基于链的权益证明和拜占庭容错(BFT)型的权益证明。

在基于链的权益证明中,共识算法在每个时隙(如每10秒为一个时隙)内伪随机地挑选出一个验证者,并赋予该验证者创建单一区块的权力。新创建的区块必须指向前面的某个区块(通常是位于最长链末端的区块)。因此,随着时间的推移,大多数区块会收敛到同一条不断增长的区块上。

在拜占庭容错型的权益证明中,尽管验证者提议区块的权力是遵照随机分配的,但是决定哪一个区块是规范的这一过程需要通过一个多轮次流程来完成。在这个流程中,每个验证者在每一轮都会给某个特定的区块进行投票。并且在流程结束后,所有(诚实且在线)验证者都会就这个区块是否应该添加到链上达成一致。需要注意的是,这些区块可能会以链的形式连接在一起。其关键区别在于,对一个区块的共识可以仅限于这个区块本身,而与后续的链的长度和大小无关。

二、权益证明的优点

简而言之,优点如下:

  1. 不需要为了 保护区块链而消耗大量电力。

  1. 由于没有庞大的电力消耗,就没有太多必要为了保持网络中参与者的积极性而发行大量新币。从理论上来说,发行量甚至可能会成为负数。一部分的交易费用将被销毁,因此供应量会逐渐减少。

  1. 有助于实现更多采用博弈论机制设计的技术,从而更好抑制中心化卡特尔的形成。此外,即使卡特尔真的形成了,我们也能够阻止它们危害网络。

  1. 因为规模经济不再是一个大问题,因此其中心化风险更低。

  1. 能够通过经济惩罚提高发动各类51%攻击的成本,这种代价相比在工作量证明中要高的多。

三、如何将权益证明纳入拜占庭容错研究中

拜占庭容错研究的许多基本成果都适用于现有的共识算法,包括PBFT这样的传统的共识算法,还有任意形式的权益算法证明,以及经过适当数学建模的工作量证明。

这些关键成果如下:

  1. CAP定理——”如果网络出现分区,那么你只能在一致性和可用性中选择一个,不能二者兼得”。这一定理的直观论证很简单:如果网络一分为二,并且我在其中一半网络中发起一笔交易“发送10个币给A”,同时在另一半网络中发起另一笔交易“发送10个币给B”,这时,要么这个系统无法使用,导致其中一笔甚至两笔交易都无法处理;要么就是系统不一致,从而一半网络只会完成第一笔交易,并且另一半网络只会完成第二笔交易。不要注意的是,CAP定理与可扩展性没有任何关系,该定理同时适用于分片系统和非分片系统。

  1. FLP不可能定理——在异步环境中(即使在正常运行的节点间也无法保证网络的延时上限),我们不可能创造出一种算法来保证,当出现单个故障或不诚实的节点时,网络能在特定的有限时间内达成共识。因此,在T秒内达成共识的概率会随着T的增加呈指数增长,最终趋近于1。这实际上是许多成功的共识算法都会使用的“逃生方案”。

  1. 容错界限——从DLS论文中,我们得知:(1)在部分同步的网络模型(网络延时虽有上限,但无法提前获知其上限值)中运行的协议可以容忍超过1/3的任意拜占庭错误;(2)在异步模型(网络延时没有上限)中运行的最终化协议无法容忍错误;(3)在同步模型(网络延时保证会小于某个已知数)中运行的协议居然能够实现100%的容错,不过要达到这个效果,一旦错误节点大于或等于1/2,错误节点的行为必须要满足某种限制条件。需要注意的是,比起拜占庭模型,已验证的拜占庭模型更值得我们取思考。已验证在这里本质上意味着可以在算法中使用公钥密码学,毕竟公钥密码学在现代已经得到充分严谨的研究,并且成本极低。

科学家对工作量证明进行了严谨的分析,并把它归类为一种依赖于同步网络模型的算法。我们可以建立一个由接近无穷数量的节点组成的网络模型,其中每个节点代表非常小的算力单位,并且单个节点在特定时间内创建一个区块的可能性很低。在这一模型下,如果不存在网络延时,那么协议将有50%的容错率。在实际观察中,以太坊网络的容错率约为46%,比特币网络的约为49.5%。但是,如果网络延时等同于出块时间,那么协议的容错率将下降到33%。随着网络延时趋于正无穷,容错率将趋近0。

权益证明共识简直就是为拜占庭容错共识而生的,因为所有验证者的身份都是已知的(即稳定的以太坊地址),并且网络还会追踪验证者集合的总规模。权益证明研究有两条总路线:一条着眼于同步网络模型,而另一条着眼于部分异步网络模型。基于链的权益证明算法几乎一直依赖同步网络模型,并且这些算法的安全性可以通过在这些模型中进行形式化证明,从而证实其与工作量证明算法的安全性相似。

四、无利害关系是什么,如何解决

在许多早期(基于链的)权益证明算法中,它们只为产出区块提供奖励,而没有实施惩罚措施。这实际上造成了很不幸的结果:在出现多条链相互竞争的情况下,验证者会受到经济利益的驱使在每条链上都构建区块,以确保得到奖励。

在工作量证明中,这么做需要将算力一分为二,因此会影响收益。

鉴于此,如果所有参与者都唯利是图,即使没有攻击者,区块链也可能无法达成共识。如果存在攻击者,那么攻击者只需要拥有比无私节点(这些节点只会在原链上押注)更多的算力,无需理会理性节点(这些节点同时在原链和攻击者链上押注)。相比之下,在工作量证明中,攻击者必须拥有比无私节点和理性节点都要多的算力。

有人认为权益所有者为了保护自身的投资价值,会有动力取采取正确的行为,并且只在最长的链上押注。然而,这种说法忽视了这种动力所存在的公地悲剧问题:每一个权益所有者可能只有1%的概率成为关键角色(如果他们参与发动攻击,那么攻击就会成功;如果他们诚实行事,那么攻击就会失败),因此贿赂者会说服他们参与这场攻击,并且保证自己只需要他们代币的1%。因此,总的贿赂加起来只占所有保证金总量的不到1%。此外,该论点意味着任何零出错情况都不会是稳定均衡,因为如果出错率为0,那么每个人都不可能成为关键角色。

解决这个问题,有两种策略

1.对在多条链上同时创建区块的验证者的惩罚:将行为不端的证明(即两个冲突的已签名区块头)纳入区块链,之后再扣除行为不端的验证者的保证金。这一做法改变了激励结构。

这一算法本身也有缺陷,包括要求节点频繁在线以保证区块链的安全,以及存在理性验证者串谋的风险。但如果这些风险被认为是可接受的,那么这个算法还算有效。

2.惩罚在错误的链上创建区块的验证者。也就是说,如果存在两条竞争链,即A和B,那么验证者在B链上创建区块,其可以在B链上得到+R奖励,但这一区块头也可以包含在A链中,在A链上该验证者将需要缴纳-F的罚款(F可能等于R),这就改变了经济计算模式。

直觉上而言,我们可以把工作量证明中的经济学复制到权益证明中。在工作量证明中,在错误的链上创建区块的行为同样会收到惩罚,只不过这种惩罚在外部环境中是隐形的:矿工必须花费额外的电力并且获得或租用额外的硬件。在权益证明中,我们只是让惩罚更加明确。这一机制的一大弊端是,它给验证者所带来的风险稍微更多一些(尽管这种影响会随着时间被逐渐消除)。它的优点在于,参与者不需要提前知道验证者是谁。

这展示了基于链的算法是如何解决无利害关系问题的。

五、BFT型权益证明算法如何运作

BFT型(部分同步的)权益证明算法允许验证者通过发送一种或多种类型的签名信息来对区块进行投票,并且详细规定了两大规则。

  1. 最终化条件:规定什么特定的哈希值可以被认定为最终化。

  1. 削减条件:规定什么时候特定的验证者可以被认定是行为不端(如同时为多个冲突的区块投票)。

如果某个验证者出发了其中一条规则,那么他们所有的保证金都会被没收。

一组合适的削减条件必须具备两大重要特性。

  1. 可问责的安全性。相互冲突的hash1和hash2(即hash1和hash2不同,且相互间没有衍生关系)同时被最终敲定,那么至少有1/3的验证者违反了削减条件。

  1. 貌似合理的活性。除非有1/3以上的验证者违反了削减条件,否则只要有2/3以上的验证者就可以敲定某个值。

如果能够拥有满足上述特性的削减条件,那么我们就可以以经济激励的形式来鼓励参与者发送信息,并让他们从经济最终化中受益。

六、经济最终化

经济最终化的意思是,一旦某个区块被敲定下来,或者更普遍地说,一旦验证者签署的特定类型的信息的数量足够多,那么在未来的任意时刻,想要让规范的历史记录包含冲突区块,只有在很多人愿意为此消耗大量资金的情况下才能够实现。如果一个节点认为某个区块满足了该条件,那么他们就能从经济层面来断定:这个区块将会成为所有节点都认同的规范历史的一部分。

经济最终化有两种风格。

  1. 如果有足够数量的验证者已经签署了类似于“我同意如果区块B没被包含在链中,那么我将损失X作为惩罚”这种形式的加密经济学声明,那么我们就可以从经济层面认为这个区块已经最终化。这实际上向客户端保证了要么(a)B是规范链的一部分,要么(b)验证者消耗大量资金只为了诱骗客户端认为B确实是规范链的一部分。

  1. 如果有足够数量的验证者已经签署了支持区块B的信息,那么我们就可以从经济层面认为这个区块已经最终化。并且,如果有人从数学角度证明,在相同的定义下,某个不等于B的区块B’也能够达到最终化,那么验证者将损失一大笔资金。如果客户端发现了这种情况,并且也对这条链进行了验证,这时有效性和最终性将作为分支在规范的分叉选择规则中获得优先权的充分条件。由此,客户端可以保证:(a)B是规范链的一部分,或者(b)验证者消耗一大笔资金生成了一条同样可以达到最终化的冲突链。

实现最终化的两种方式来源于针对无利害关系问题的两个解决方案:通过对押注错误的区块以及同时押注多个冲突的区块实施惩罚来实现最终化。第一种方式的主要优点在于,其对轻客户端更加友好并且更加容易推断。第二种方式的主要优点在于(a)其简单直接地说明了诚实的验证者不会收到惩罚,以及(b)破坏因子对诚实的验证者更加有利。

以太坊计划遵循第二种方式,不过有可能再添加一个链上机制,使验证者能够自愿选择签署第一种方式的最终化信息,从而使轻客户端更加高效。

七、如何选择验证者

在权益证明机制中,需要在当前活跃的验证者集合中随机算则可以生成下一个区块的验证者。如果当前活跃的验证者有A(持有40Eth)、B(持有30Eth)、C(持有20Eth)和D(持有10Eth)组成,那么你希望下一个区块创建者为A的概率为40%,为B的概率为30%......以此类推(在具体实践中,你希望随机选择出来的是一个验证者序列,而不是某个单一的验证者。如此一来,如果A缺席,那么在一段时间后,就会有后来者依次进行替补,但这并没有改变根本问题)。

权益粉碎是指验证者通过执行一定计算或采取其他步骤来尝试让随机性对自己更加有利。

  1. 在有些区块链中,验证者可以通过搜寻各种参数的组合并找到特定的参数来提高自己生成有效区块的概率。这是一种粉碎攻击。

  1. 在一个现在已经废弃的实现方案里,第N+1个区块的随机性取决于第N个区块里的签名。这种方法使得验证者可以重复地产生新的签名,直到他们找到一个能获取下一个区块的特殊签名,并从此永久控制系统。

  1. 在有些区块链中,第N+1个区块的随机性取决于产生第N个区块的验证者,这种方法使得验证者可以通过跳过一个产生区块的机会来影响随机性。这种做法的机会成本等同于被跳过的区块奖励,但有时候新的随机种子可以让验证者在接下来的数十个区块中获得高于平均数量的区块。

问题1和2中的问题比较容易解决,一般的方法是要求验证者先存入一定的底层币,并且避免使用可以被轻易操纵的信息作为随机性的源数据。

解决问题3有几种主要的策略:

  1. 第一种是使用基于秘密分享或者确定性阈值签名方案,并让验证者共同产生随机值。除非大多数验证者串通,否则这些方案足以对所有操纵行为保持健壮性。

  1. 第二种是使用加密经济学方案,即验证者是先提交某些信息(即公布sha3(X)),然后必须在区块中发布X。此后X被添加到随机池中。这种方案理论上会遭到2中攻击,(a)在提交时操纵X,以及(b)选择性地避免公开区块(成本为一个区块的奖励)。

  1. 大多数信标方案,即基于之前的通过某种信标生成的N个随机数字中每个位所对应的值的大多数来决定生成新的随机数字。

八、权益证明可以用在私有链和联盟链吗

一般来说是可以的。

任何权益证明算法都可以被用作私有链和联盟链的共识算法。唯一的变化是挑选验证者集合的方式会有所不同:在私有链或联盟链中,其一开始会由一组经过大家同意且信任的用户担任验证者,接着再由这个验证者集合投票决定是否加入新的验证者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wonderBlock

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值