区块链 || PoW共识机制的学习

注:本文章通过阅读讨论工作量共识在垃圾邮件的使用的 Proof-of-Work-Proves-Not-to-Work-version-0.2 文章以及博客知乎上关于 PoW 机制的讨论完成。

原理:

首先 PoW 是一种共识机制,处于区块链架构的共识层中。上次作业的学习中有了解到区块链的核心优势之一就是能够在决策权高度分散的去中心化系统中使得各节点高效地针对区块数据的有效性达成共识。而要达成共识就要采用我们通常所说的共识机制,其中 PoW 就是一种最常见的共识机制(比特币中的挖矿)。在比特币挖矿中各节点贡献自己的计算资源来竞争解决一个难度可动态调整的数学问题, 成功解决该数学问题的矿工将获得区块的记账权, 并将当前时间段的所有比特币交易打包记入一个新的区块、按照时间顺序链接到比特币主链上. 比特币系统同时会发行一定数量的比特币以奖励该矿工, 并激励其他矿工继续贡献算力。

所以其核心思想是通过引入分布式节点的算力竞争来保证数据一致性和共识的安全性。比特币系统中, 各节点 (即矿工) 基于各自的计算机算力相互竞争来共同解决一个求解复杂但验证容易的 SHA256 数学难题 (即挖矿), 最快解决该难题的节点将获得区块记账权和系统自动生成的比特币奖励. 该数学难题可表述为: 根据当前难度值, 通过搜索求解一个合适的随机数 (Nonce) 使得区块各元数据的双 SHA256 哈希值小于或等于目标哈希值。一般说来, PoW 共识在区块链系统中实现过程如下:

  • 先定义一个固定的 256 位长度初始数,比如:长度为 256 位字符 0000…0001 (32 字节,64 字符)
  • 设置难度系数值,比如:如果难度系数定义为前面 4 个 0,即 16 位长度(0000 0000 0000 0001 = 4 个字符 = 2 个字节)。
  • 按照难度系数值进行移位操作,将 Hash 工作量值扩大,向左移(256-难度系数 N 位)比如:将初始数 0000…0001 向左移(256-16 位)得到:0000 0000 0000 0001 0000 …0000。
  • 将随机数 Nonce 递增加 1 再加上区块头(Block Header)Hash 值拼接,然后进行 SHA256 Hash 运算。
  • 将计算结果值与当前难度系数目标值作对比,如果当前计算值大于难度系数条件 值,即继续递增 Nonce 值再进行下一次的 SHA256 Hash 运算,直到计算出的结果 Hash 值少于目标值,则才认为解题成功,此次的工作量证明完成并获得记账权,然后进行对 交易区块进行打包确认并广播给全节点,并从 Coinbase 中获得 gas 奖励。
    Ps: 如果要求 Hash 值前面的 N 位 0 越大,即它的计算难度就越大,每增加一位 0,它 的计算次数就变得高出很多倍,当要求计算难度值前 N 位要求为 7 位是 0 的时候,它 的计算次数就达到 5.6 亿次,所以工作量非常大,如果作弊那是几乎不可能。

优缺点:

优点:

1)算法简洁,很容易实现。
2)答案唯一且容易验证,节点间无需交换额外信息,容易达成共识。
3)公平性好,将记账权公平的分派到其他节点。矿工能够获得的币的数量,取决于挖矿贡献的有效工作。
4)安全性高,破坏系统需要投入极大的成本,如果想作弊,要有压倒大多数人的算力(51%攻击)。因为作弊要付出一定成本,作弊者就会谨慎对待了。在比特币 PoW 机制中,由于获得计算结果的概率趋近于所占算力比例,因此在不掌握51%以上算力的前提下,矿工欺诈的成本要显著高于诚实挖矿,甚至不可能完成欺诈(由于概率过低)。

缺点:

1)挖矿造成大量的资源浪费,目前 bitcoin 已经吸引全球大部分的算力,其它再用 Pow 共识机制的区块链应用很难获得相同的算力来保障自身的安全。这让依据算力公平分配奖励的机制,演变为了对矿机算力的大举投入。
2)网络性能太低,需要等待多个确认,容易产生分叉,区块的确认共识达成的周期较长(10 分钟),现在每秒交易量上限是 7 笔( visa 的平均每秒交易量上万,支付宝峰值接近 9 万),不适合商业应用。
3)PoW 共识算法算力过于集中化,慢慢的偏离了原来的去中心化轨道。从比特币扩容之争可以看到,算力高的大型矿池是主人,而持币的人没有参与决定的权利,比特币分叉出很多子叉,即将失去“去中心化”的标签。

对存在的问题的解决:

由于 PoW 存在着很多需要改进的缺点,感觉很重要一点就是资源消耗量过大。于是针对此问题提出 PoS 共识, PoS 共识本质上是采用权益证明来代替 PoW 中的基于哈希算力的工作量证明, 是由系统中具有最高权益而非最高算力的节点获得区块记账权. 权益体现为节点对特定数量货币的所有权, 也就是币龄. 币龄是特定数量的币与其最后一次交易的时间长度的乘积, 每次交易都将会消耗掉特定数量的币龄。采用 PoS 共识机制的系统在特定时间点上的币龄总数是有限的, 长期持币者更倾向于拥有更多币龄, 因此币龄可视为其 PoS 系统中的权益. 此外, PoW 共识过程中各节点挖矿难度相同, 而 PoS 共识过程中的难度与交易输入的币龄成反比, 消耗币龄越多则挖矿难度越低. 节点判断主链的标准也由 PoW 共识的最高累计难度转变为最高消耗币龄, 每个区块的交易都会将其消耗的币龄提交给该区块, 累计消耗币龄最高的区块将被链接到主链. 由此可见, PoS 共识过程仅依靠内部币龄和权益而不需要消耗外部算力和资源, 从根本上解决了 PoW 共识算力浪费的问题, 并且能够在一定程度上缩短达成共识的时间, 因而比特币之后的许多竞争币均采用 PoS 共识机制。

以上摘抄自区块链论文中 PoS 的介绍,从中可以看出采用 PoW 机制的数字货币不是理想状态的数字货币,因为它们的安全性不直接与使用者相关,而是要通过矿工这个媒介。在这种情况下,PoW 机制对于 51%攻击有潜在隐患,攻击者并不需要拥有比特币,如果要做 51%攻击,所需要的花费跟挖矿难度相关而不是直接跟比特币价格相关。而在 PoS 机制下,进行 51%攻击的代价更高,因为想要进行51%攻击的话,你得拥有 51%的货币——这东西越值钱,攻击的成本就越高。但这也就意味着存在另一个问题,也就是常说的无利益攻击问题:对于 PoS 共识机制的货币,你越有钱,作恶付出的代价就越大;然而对于没有钱的人,作恶代价很小,所以一些作恶行为对他们而言是有益的。

针对以上问题又出现了 Casper Pos 共识,Casper PoS 是一种基于保证金的经济激励共识协议。协议中的节点,作为“锁定保证金的验证人”,必须先缴纳保证金(这一步叫做锁定保证金)才可以参与出块和共识形成。Casper 共识协议通过对这些保证金的直接控制来约束验证人的行为。具体来说就是,如果一个验证人作出了任何 Casper 认为“非法”的事情,他的保证金将被罚没,出块和参与共识的权利也会被取消。保证金的引入解决了无利益攻击。也就是经典 PoS 协议中做坏事的代价很低的问题,现在有了代价,而且被客观证明做错事的验证人将会付出这个代价。

针对背离去中心化思想的解决方案,以太坊选用的 PoW 算法是线性内存困难的。该算法被设计成算出一个 nonce 值需要大量的内存和带宽。即使是超高速计算机,也无法在需要大量的内存和带宽的条件下同时计算出多个 nonce 值。这减少了中心化的风险,为节点创建一个公平竞争的环境。

猜你喜欢

转载自blog.csdn.net/perry0528/article/details/83546174