Home 以太坊PoS设计
Post
Cancel

以太坊PoS设计

最近在看 PoS,会陆续更新两篇文章,一篇介绍 PoS 设计思想,一篇看下 PoS 源码。

这是第一篇,内容主要来源于以太坊 GitHub 上的《Proof of Stake FAQ》,这篇文章里面 V 神介绍了很多设计思想,很好的一篇文章,但是看起来比较吃力,涉及了很多概念,目前只看完了一部分,就先总结下这部分,这篇文章会不断更新。

有理解错误的地方,欢迎留言指正。

PoS 介绍

权益证明(PoS)是一类应用于公共区块链的共识算法,取决于验证者在网络中的经济权益。一组验证者轮流提议并票决下一个区块,而每位验证者的投票权重取决于其保证金额的大小(即权益)。

PoS 的优势

  • 不需要为了保护区块链而消耗大量电力(例如,比特币和以太坊预计每天要在共识机制的电力和硬件上耗费超过100万美元的成本)。

    这个是目前 PoW 算法被诟病的一个主要问题,这个问题不只是导致资源浪费,还因为门槛过高,还导致了中心化问题,这个对于区块链来说,是致命的。

  • 由于权益证明避免了高电耗,就没有太多必要为了保持网络中参与者的积极性而发行很多新代币。从理论上来说,甚至有可能变为负发行量,其中一部分交易费被“烧掉(burned)”,因此供应量会逐渐减少。

    我觉得为了保持货币价值稳定,供应量多少应该和承载的价值匹配,但是如果资源浪费导致多发行货币,就不应该。

  • 权益证明有助于实现更多采用博弈论机制设计的技术,从而更好地抑制中心化卡特尔式机构的形成,如果这种机构确实形成了的话,也能够阻止它们危害网络。
  • 降低中心化风险,因此规模经济不会造成太大问题。你不会因为负担得起更好的大批量矿机而获得与投入资金不成比例的收益,在PoS中,1000万美元投资带给你的收益就是100万美元投资的整整十倍。

    虽然都是有钱,但是一个是投入到了矿机中,一个是投入到了区块链中,这两者有很大不同,投入区块链本身的人更不容易作恶。

  • 能够采用经济处罚,这让发动各种形式的51%攻击所要付出的代价比在工作量证明中高出许多。

    扣除保证金

PoS 的两种类型:

  • chain-based proof of stake 共识算法在每个时段内伪随机地选择一个验证者(例如,每10秒钟为一个时间段),赋予该验证者出块的权力,新创造的区块必须跟在之前的某个区块(通常是位于最长链的末端的区块)后面。因此,随着时间的推移,大多数区块会填加到同一条区块链上,使之不断增长。

    选择一个验证者,出的块就是最终的区块。

  • BFT-style proof of stake 虽然提议区块的权力会随机分配给验证者,但是决定哪一个区块是“合法的”要通过一个多轮过程来完成。每个验证者在每一轮都会给某个特定的区块投出一票,在这个多轮过程的最后,所有(诚实并联网的)验证者会就是否将这个区块添加到链上做出最终决定。要注意的是这些区块可能仍然链接在一起,其关键区别在于对一个区块的共识可以仅限于这个区块本身,与它后面的那条链的长度和大小无关。

    选择一些验证者,每个验证者都出区块,经过多轮的投票,选出最终的一个区块。

在 CAP (后面会说)中,工作量证明算法和基于区块链的权益证明算法选择了可用性而非一致性,然而拜占庭容错型共识算法更青睐一致性,Casper 采用的混合模型虽然偏向可用性,却又尽可能地实现一致性。

无利害关系

在之前的 PoW 和 PoS 算法里,仅有创建的奖励,但是没有惩罚措施,在出现多条区块链相互竞争的情况下,会激励验证者在每条链上都创造区块,以确保获得奖励。

这个在 PoW 中虽然也存在,但是因为分开挖矿分散算力,所以情况不明显。但是在 PoS 就不一样了,这个也导致了“权益粉碎攻击”。

在以太坊的设计里,增加了惩罚措施,对同时出块的验证者,扣除部分保证金。

在 PoW 里,惩罚其实也是存在的,只不过是隐性的,矿工必须花费额外的电力并且获得或租用额外的硬件。

验证者选择机制和权益研磨

在任何基于区块链的权益证明算法中,都需要某种机制,来随机从当前活跃验证者集合中选择能够产生下一个区块的验证者。

“权益研磨” 是一种攻击类型,在这种攻击中,验证者通过执行一些计算或者采取某些其他措施使得随机性更偏向他们(也就是说,让他们有更大概率成为产生下一个区块的验证者)。

区块链上使用的是一般是伪随机,随机源取自前一个区块的签名、hash或验证者,但是这些都给了攻击者可乘之机,通过反复生成签名、hash或跳过产生区块,能够控制下一个验证者。

一种解决方式是,让验证者合作产生随机数。

Casper 的 51% 攻击

这里的 51% 只是个概念,并不是一定是 51% 算力。主要有下面集中攻击形式:

  • 确定性回滚。就是因为同时出现的两个区块导致的分叉。通过社交共识来解决硬分叉。

    就是在社交媒体上,大家达成共识,选择一条分叉。。

  • 拒绝区块活性。算力大于 34% 的验证者就可以拒绝添加更多的区块,这会导致永远不会有新的区块被添加。

    有两种解决方式:协议自动轮换验证者集合,并处罚旧的验证者;通过硬分叉的方式。

  • 屏蔽攻击。算力大于 34% 的验证者还可以拒绝添加某个他们不喜欢的某些交易类型的区块,可以干涉某些应用等。也有两种解决方式:协议拒绝明显在屏蔽交易的区块;通过硬分叉的方式。

总结下就是,代码识别或者硬分叉解决

资本锁定成本

这里主要是对比了 PoW 和 PoS,PoW 依赖硬件并且大量消耗能源,所以在考虑到摩尔定律(导致硬件升级)、电费的情况下,投资的很大部分被消耗在这些上面,还是之前说的问题,投资被无意义的浪费掉了,而且门槛越来越高,中心化问题也就越来越严重。而 PoS 是稳定的收益,这点上优势很明显。

一些概念

  • CAP 定理 分布式系统的难点是各个节点的状态同步,一个基本定理就是 CAP,即 C、A、P 无法同时做到。

    • C,Consistency,一致性。在不同节点读到的是一致的数据,也就是各个节点完全同步。
    • A,Availability,可用性。只要收到请求,服务器就必须给出回应。
    • P,Partition tolerance,分区容错,指区间通信可能失败。

    一般认为 P 总是成立的。那么这个定理实际上说的就是 C 和 A 无法同时做到。

    为什么无法做到?要保证一致性,在一个节点写的时候,就必须锁定其他节点,在同步完成之后,才能解锁。但是在锁定期间就无法保证可用性。

  • FLP 不可能定理 在异步环境中(即,即使在正常运行的节点之间,也无法控制网络延时上限),不可能创造出一种算法,在出现单个故障或不诚实的节点之时,确保能在任和特定的有限时间内达成共识。

  • 拉斯维加斯算法 蒙特卡罗算法:采样越多,越接近最优解。找到的可能不是最优,但是每次都能找到。 拉斯维加斯算法:采样越多,越有可能找到最优解。找到的肯定是最优解。

    在共识算法中指,该算法每轮都有一定的概率达成共识,因此在T秒内达成共识的概率会随着T的增加呈指数增长并向1趋近;这实际上是许多成功的共识算法都会使用的“应急之策”。

  • 卡特尔式机构 生产同类商品的企业为了获取高额利润,从而达成一个同盟,控制商品产量和价格,使竞争性市场变成了一个垄断市场。

  • 自私挖矿 挖到一个区块,并不马上公布,而是继续挖下一个,这样浪费了其他人的算力。如果有人公布了新块,那么他也要马上公布新块,并通过女巫攻击来抢先让他们偷挖的区块得到网络的承认。

    • 需要拉拢其他不诚实的节点,因而需要提供给他们额外的回报,让他们优先确认自己的区块。
    • 通过代码隐藏一个区块也是一个技术门槛
    • 为了第一时间发现别人公布了区块,那么网络必须非常好

    这些因素,导致有可能输掉了区块竞争,导致收益不稳定,得不偿失,所以这个还是一个争议问题。

  • 女巫攻击

    恶意节点可以分裂出来多个节点,这样冗余备份就没有作用。 应对方式:

    • PoW,通俗点就是必须要能干活,需要有计算能力,这样攻击成本就很高。
    • 基于第三方的身份认证
    • 纯分布式的身份认证,每加入一个新节点需要获得当前网络中可靠节点的认证。
  • 公地悲剧

    典型的例子是牧场理论:

    公共草地上,有一群牧羊人,每一个牧羊人都想要多获利一些,所以某个牧羊人就带了大量的羊来放牧,虽然他知道过度放牧,草地可能会承受不住。但他依然获利了,而后所有的牧羊人都跟进,所以草地牧草耗竭,悲剧因而发生了。 关键性是牧羊人获得了所有的利益,但是资源的亏损却是转嫁到所有牧羊人的身上。这种例子在现实中真的是很多。

参考

权益证明 FAQ (中文),https://ethfans.org/posts/Proof-of-Stake-FAQ-new-2018-3-15

权益证明 FAQ (英文),https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQs

CAP 定理, http://www.ruanyifeng.com/blog/2018/07/cap.html

FLP 不可能定理,https://yeasy.gitbooks.io/blockchain_guide/content/distribute_system/flp.html

蒙特卡洛与拉斯维加斯算法,https://blog.csdn.net/hejun_haitao/article/details/52588423

权益证明设计哲学,https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51

This post is licensed under CC BY 4.0 by the author.
Contents