压币再挖矿?PoSW如何同时利用PoW和PoS长处并化解51%攻击

ETC被曝遭受51%攻击后,已经超过24个小时,目前攻击仍然在进行,损失的金额已经超过百万美元,还在不断增加。还有消息称有神秘矿池掌握了ETC网络56%的算力。如今,区块链市场热度下降,即便是一些著名项目,也有算力下降情况发生。在众多项目挖矿所需硬件条件一致的情况下,调动更大算力挤占非主流货币空间谋取利润成了可能,这也成为了新的安全隐患。那么,目前算力较低、规模较小的项目,如何能够保障自己的项目在足够去中心化和算力不高的前提下,能免于51%攻击?QuarkChain创始人兼CEO周期针对这个问题写作了专题文章,阐述了其新研究的PoSW共识。

包含权益的工作量证明

一、简介

目前,在基础公链中得到广泛使用的共识机制主要是工作证明(POW)和权益证明(POS)及他们各自的衍生共识(如,代表权益证明DPOS)。自从中本聪在比特币的白皮书中提出POW共识以来,经过10年的运行POW已经证明了自身所具有的安全性和可靠性。然而,它也暴露出交易处理速度慢,能源使用效率低等弱点。POS共识可以提高系统的能源使用效率,但是它也面临着一些还未完全解决的安全问题,如:nothing-at-stake(分叉链无成本的攻击),stake grinding(操纵链上权益选择随机数)和远程攻击等。为了弥补POW和POS各自的不足并充分发挥他们的长处,DASH和Decred等项目提出了混合POW/POS的新共识。DASH鼓励用户通过押1000 Dash(达世币)来设置MasterNode(主节点),在主节点采用InstantSend方案,可以满足交易中的即时支付需求。然而,DASH仍然面临著名的51%双花攻击的威胁。在Decred的系统中,每一个由POW共识产生的块必须由多个权益人签名之后才能被添加到链上。这样一来,只要权益人本身足够的分散,Decred网络可以具备更好的安全性(更好的抵抗51%攻击)。

在本文中,我们提出了一种新的混合共识:包含权益的工作量证明(POSW)。其基本思路是,如果一个矿工想将其所有的哈希算力用于挖矿(假设其具有网络Y中所有算力的P%),那么他必须持有并抵押跟P%等量的Y通证。这意味着,如果有人要实施双花攻击,攻击者除了需要掌握超过全网50%以上的算力之外,还需要抵押全网足够的通证[1][2]。此外,运营一个矿池的成本将会更高,因为矿池的所有者在扩大算力规模的时候还需要不断的获取网络通证(从另一个角度看则避免了中心化)。

二、共识模型

假设矿工的算力为h_i(哈希每秒),则POSW公式为:
公式中h’_i 表示i矿工的有效算力,H’是全网的全部有效算力, s_i是i矿工抵押的通证量, f(s_i) 是i矿工算力的发挥效益百分数,我们命名为额度。f(x)函数有以下特性:
  • f(x)是一个非递减函数
  • f(x)是一个非超可加函数,即f(x) + f(y) <= f(x + y)。这确保矿工不能够通过把自己的通证分成多个小份来获得更多的额度。
该函数的一个简单的例子就是min(alpha * s_i / S, 100%)函数,S是该通证的流通总量。Alpha是系统常数来调节压币的数目。为了便于理解本共识算法,在下面的讨论中我们将使用这个简单min(x)函数来讨论。

公式(1)中呈现了一个线性规划问题,可用线性规划求解器在多项式时间内进行有效地求解。为了更好地理解这个模型,让我们讨论一些实例:假设有四个矿工,每个矿工都具有相同的算力(例如25h/s),而矿工们所占的通证百分比不同,分为:5%,10%,25%,60%。假设alpha=2,那么公式(1)可以变成:
求解公式(2)之后,我们得到h’_1 = 7.14286, h’_2 = 14.2857, h’_3 = 25, h’_4 = 25, H’ = 71.4286(单位为h/s),每个矿工对网络贡献的有效算力的百分比则为:10%, 20%, 35%, 35%。

以上结果告诉我们:
  • 即使所有的矿工都有相同的算力,他们的有效算力会受到抵押通证量的限制。这鼓励缺乏通证的矿工去获得更多通证,以便发挥自身的全部算力。
  • 总有效哈希算力可能低于总哈希算力。这意味着如果对手没有足额的通证,拥有足够通证的矿工更容易挖矿。
  • 在这种情况下,双花攻击需要51%的有效算力和1/alpha的通证,才能创建并维持一个由攻击者单独挖掘的分叉。
  • 通过调整alpha,我们可以根据具体情况调整奖励系统使其更有利于拥有算力矿工或权益的拥有者(持有通证且愿意抵押的人)。
  • 也有可能发生如下情况,矿工没有足够的权益,而通证的拥有者不想挖矿。这个问题类似于纯POS系统中的验证者不工作的情况。如果发生该情况,由于此时网络的算力很低,从经济角度将激励权益拥有者挖矿获取收益。但权益拥有者可能会做出反经济的行为,为了进一步避免这种情况,我们可能会允许矿工(在没有(足够)权益的情况下)生产区块,但区块生产的难度必须比其他有权益的矿工更高(例如,设计β倍高于有足够权益的矿工,其中β可能为2、5、10)。
  • 与POW相比,建设POSW的矿池需要更大的成本。因为矿主为了有效地发挥算力,矿池需要不断的获取网络中的额度。相比之下,运行一个相当规模的纯POW矿池,大部分投入都在算力上,其他的运行成本几乎可以忽略不计。
三、实现

在本节中,我们将演示如何构建一个类似的POSW实现,并通过仿真计算测试其性能。首先,我们可以通过计算矿工在最近一段时间窗口中生成的块的数量来估计在高度为i的块上该矿工的有效算力百分比:
公式(3)中W是时间窗口的长度,c_i是第i个块的区块奖励地址(i块生产者的地址),求和算出由同一个矿工开采出来的块数。

为了实施POSW,该实现要求对于高度为i的块,矿工生成的有效区块必须满足以下条件:
其中s_i是c_i矿工在第i号区块的余额。

公式(4)提出了具体要求:
  • 假设总有效算力在该窗口期是恒定的,我们可以通过增加窗口期大小来提高对每个矿工有效算力百分数的估计精度。我们将在模拟环节中研究窗口大小对算力百分比估计结果的影响。
  • 为避免矿工在窗口期间将额度转移到另一个地址(该矿工更换了挖矿地址),挖矿者地址中的权益在窗口期内是不能变更的。
四、模拟结果

我们将通过模拟数据来评估POSW实现的性能。模拟器有以下输入参数:
  • 每个矿工哈希算力(单位为h/s)
  • 时间窗口大小
  • 根据矿工具有的权益其最多能产生的块数
  • 模拟的出块数
生成每个块经历了如下过程:模拟器先检查每个矿工在最近时间窗口中生成的块的数量并与其额度作比较之后检查资格,排除不满足公式(4)的矿工,然后在剩余矿工考虑算力加权后随机选择的块生产者。模拟代码可以在: https://github.com/quarkchain/pyquarkchain/blob/master/quarkchain/experimental/proof_staked_work.py中找到。除非另有说明,本文中模拟的块数默认为100K。

POSW模拟结果1:矿工具有不同额度但有相同的算力

我们继续讨论前面提过的例子,假设矿工权益分别为5%,10%,25%,60%,alpha=2,窗口大小为128,各自的额度为10%、20%、50%、100%。模拟结果显示每名矿工实际生产的区块块百分占比为:

矿工1:9.07%
矿工2:18.62%
矿工3:36.23%
矿工4:36.08%

模拟结果显示,矿工生产区块的情况与预期数据(10%、20%、35%、35%)很接近。矿工1和矿工2的百分比略低于预期,这是因为时间窗口太小,因此计算有效算力的粒度太粗。我们进一步研究了窗口大小的影响,以下列出了不同窗口大小的结果:
很明显,通过增加窗口大小,每个矿工生产的块的百分比更接近预期。

如果我们允许当矿工的算力超出了其额度时以更高的难度(以β,beta为系数)继续挖矿,会是怎么样的情况呢?下表汇总了不同β值的情况(假设时间窗口大小=256):
当beta=2时,允许拥有少量额度的矿工生产更多的块(相对于其额度来说),当beta=5时,矿工产块占比接近beta=inf的情况。

POSW模拟结果2:矿工具有不同算力但有相同的额度

在这一小节中,我们模拟了5位矿工拥有不同的算力的情况。假设他们的算力分别为100、200、400、800、1600(单位为h/s),但他们都有相同的权益(20%),设定alpha=2,窗口大小任然为256。他们的额度也是相同的,都是40%。每名矿工实际生产块的百分比模拟结果为:

矿工1:4.01%
矿工2:8.09%
矿工3:16.22%
矿工4:32.51%
矿工5:39.18%

相比预期结果(4%、8%、16%、32%、40%),掌握最多算力的矿工的占比略小于预期值。

下表进一步总结了使用各种beta和windows大小=256生成的块的百分比:
在这种情况下,当beta=2时,矿工生产的块的百分比非常接近beta=inf。

五、总结

在本文中,我们介绍了一种新的共识机制,包含权益的工作量证明(POSW)。为了使矿工的算力最大程度的发挥出来,矿工必须获得与其在全网算力占比相应的通证。我们建立了一个线性规划模型来描述POSW共识,并提出了一种简单的近似实现。我们建立了一个模拟器来验证所提出的实现的性能,并表明该实现可以产生与线性规划模型非常接近的结果。

说明
  1. 在我们QuarkChain的构建中,因为网络的安全性主要由根链来提供的,所以POSW将主要部署在根链上,以进一步提升网络的安全性。
  2. 作为未来计划的一部分:我们会要求每个在分片上工作的矿工,同时抵押QKC和该分片的原生通证(可选)。即:每个分片都有一个本地原生通证,在该分片工作的矿工必须将相应的本地通证进行抵押以进行挖矿。