(未来币NXT白皮书)
Transactions as Proof-of-Stake
作者:丹尼尔·拉里默
翻译:没有昵称的张Sir
dlarimer@invictus-innovations.com2013年11月28日
摘要
权益证明(POS)所蕴含的概念是:区块链应该由那些在其中具有经济利益的人进行保障。本文介绍了一种新的方法——通过每一笔交易销毁的币天数(coin days)来实现权益证明,以替代目前由工作量验证(Proof-of-Work)提供绝大部分保障的方式。在以往的权益证明系统中,只有部分节点进行权益证明计算,我们提出的新方法则可以使生成交易的所有节点为网络安全做出贡献。我们推测,这样的网络对目前已知的针对比特币或点点币(Peercoin)的攻击将具有免疫力。
背景
权益证明这个概念最初引入时是作为一种手段来对抗已知的比特币网络攻击的,尤其是51%攻击。
现有的权益证明体系,如点点币,是基于“证据区块”的,在“证据区块”中,矿工必须达成的目标与销毁币天数是负相关的。拥有点点币的人必须选择成为权益证明的挖矿人并在一段时间内贡献他们的一部分币来保护网络。
点点币的发明者们认识到,这种形式的权益证明是不足的,因此他们采用权益证明和工作量验证同时保护网络的混合动力系统。随着工作量验证难度的增加,区块的回报会减少,这自然会抑制工作量验证的挖矿量。
尽管使用了权益证明,点点币仍然依赖于权益证明的“挖矿”,这就内在地限制了可用于通过权益证明来保护网络的人数和货币供给比例。对权益证明的挖矿给出的奖励是对其权益平均1%的回报,这与目前支付给工作量验证的矿工的8%通胀相比起来相形见绌。
点点币并不仅仅在于其提出的权益证明系统。点点币还运用了各种形式的签名块,以及与交易规模成比例的签名者随机选择等机制。点点币是市场上唯一完全采纳这些构想的电子货币。
尽管点点币取得了成功,但其对权益证明的应用并未完全解决双重支付或拒绝服务的问题。最终,网络仍然由工作量验证来进行保障,仍然有可能计算出秘密的替代链条进行双重支付。政府这样的角色仍然可以获得足够的哈希算力来战胜超过51%的权益证明区块和所有的工作量验证区块。点点币取得的成绩仅仅是在网络攻击方式没有改变的情况下增加了攻击网络的成本。
在关于加密货币和挖矿的大多数文献中,研究重点主要集中在货币分布和保护网络不受到垄断性哈希算力的攻击方面。挖矿奖励被视为购买“安全”的必要费用,一般理论认为挖矿越多越好。现有的权益证明系统继承了这种思路,对在权益证明基础上“挖矿”的人进行支付。
在本文中,我们将重点研究挖矿在安全和货币创造之外更重要的作用。这个作用就是以去中心化的方式来决定谁将会公布下一个区块。一个纯粹的权益证明机制必须决定几千个计算机中的哪一个将生成并发布下一个区块。这些区块出现的固定时间间隔必须足够大,以使网络能够在每个区块之间达成共识。
在一个中心化的系统中,生产或广播区块是没有成本的,可以直接指定一台计算机每隔几分钟发布区块就可以了。但在一个去中心化的系统中,发布区块的机会应该广泛分散开来。因为制作和广播区块的成本基本为零,仅仅几美分的区块奖励就足以激励这种行为。
去中心化系统所面临的挑战是找到一种方法,来限制每隔几分钟最多有一或两个节点来广播区块。我们将提出一个不依赖于挖矿的解决方案。
工作量验证提供安全的原因
如果我们要从一个区块链的安全模式中移除工作量验证,那么我们必须充分理解工作量验证所提供的安全的性质,而且要找到一个合适的替代品。在比特币网络中用于查找哈希值的计算能力是非常高的。高水平的哈希算力可以作为在一个特定区块链中总投资的代表(proxy)。一个理性的个体通常假设最大的投资代表了对真相的多数共识。
这个假设使得攻击者有机可乘,有可能滥用人们对此机制的信任来执行几种已知的攻击,包括双重支付、拒绝服务,和自私挖矿。所有这些攻击操作都基于秘密替代链的创造。去中心化的哈希算力通过提高假冒链的生成成本来保障安全。有了这个安全模型,安全成本和网络攻击成本之间就有了直接的对应关系。
服务拒绝攻击也许是网络上最具破坏性的,而双重支付攻击则可能是有利可图的。这两种攻击扰乱网络的运行,因而减损货币的价值。一个希望加密货币合法化且将其纳入控制的政府可以在任何私人机构都无利可图的水平上挖矿,从而实现垄断,使国家能够任意过滤交易。
如果我们替换工作量验证,那么替换品必须能够防止假冒链被轻易生成。让我们来看看使用哈希算力生产假冒链的关键。双重消费和自私挖矿的前提是攻击者要有一个秘密的比公众链更长的替换链。阻止这些攻击只需使在货币供应量不足50%的情况下生产这些秘密链的可能性为零。
服务拒绝攻击不需要秘密区块链。为了防止这种攻击,最长区块链的选择必须基于一个工作量验证之外的其他机制。
基于权益证明的交易
网络上的每一笔交易在网络中都有内含的权益证明。交易的发起者希望网络接受这笔交易,交易的接受方则会根据网络是否已经接受了该交易来决定是否发货。很显然,买方卖方的利益都与网络的健康安全息息相关。毕竟,如果交易无法按预期执行,这个网络就是无价值的。一个运作良好的网络在每个区块都有几千笔的交易。这说明有几千个利益相关者都可以为网络的安全做出贡献。
币天数代表一个特定的币距最后一次在网络上交易的时间。在给定的时间点,只存在有限的币天数,它们在那些长期持有大量货币结余的人手中持续增加。所以币天数可被视为在网络中权益的代表(proxy)。每当这些币有交易时,币天数即被销毁,因此不能被重复使用。
为了在工作量验证系统中成功实施51%攻击,攻击者必须隐藏自己的替代链。一旦他们从第一次支付中锁定利润,它们就可以广播较长的秘密链,使原来的交易失效。自私挖矿攻击中也需要隐藏算出的区块,自私挖矿攻击在拥有远低于51%的哈希算力时也可能是有效的。
为了防止这种行为,我们必须阻止矿工保有秘密区块链。如果广播的每一笔交易都包含最新区块的哈希值,而且区块链执行这样的规则:交易的权益证明只能被记在该区块所构成的区块链上,这样的话就没有人能够建立秘密区块链以影响(leverage)公众链中交易的币销毁天数。
现在,交易提交到某个公众链,最佳的区块链可以通过总销毁币天数来衡量,而不是通过总的工作量来衡量。
比特币工作量验证VS权益证明的安全性对比
截至2013年11月,每个比特币价值约1000美元,总市值约为 120亿美元。每个区块支付矿工25个BTC,价值25,000美元。一个有效的市场将会使一个区块的挖矿成本逐渐接近25,000美元。攻击者若要发起一个强力的双重支付攻击,他们必须在网络产出6个区块的同时秘密产出7个区块。这意味着在60分钟内的耗电成本达到175000美元,这还不算消耗如此多电量的一次性资本成本。一旦攻击者拥有所需的资本,网络即遭到有效的破坏,攻击者可以不断地干扰网络。
比特币网络价值120亿美元、每年产出50,000个区块,在这个网络的权益证明系统中,若要求所有的钱每年至少移动一次,则每个区块平均要花费24万美元来销毁成比例的币天数。平均而言,攻击者必须积累足够的币天数来建立一个秘密链,以销毁7个区块上价值168万美元的币天数。一旦攻击完成,攻击者则必须等待一年后才可以再次利用他们的168万美元资本尝试进行第二次攻击。
攻击两个网络的成本取决于获取和部署足够多的ASIC芯片以消耗175000美元电量的成本,同时要考虑到ASIC芯片可连续使用,可能抵消成本而产生显著利润。
基于工作量验证的安全还有一点:对于大多数加密货币而言,挖矿回报随着时间的推移是逐步下降的。当这种情况发生时,保障网络的花费相对于网络的价值开始下降。例如,假设比特币的价值没有改变,当挖矿奖励下降50%时,网络的安全性也会同比例下降。难度调整后网络的价值必须增至240亿美元才能维持与今天同等级别的安全。
在权益证明制度中,网络的安全性将随着网络价值的增加而同时增加。由此可见,长远来看,权益证明相比工作量验证可以提供更高数量级的安全。比特币网络每年支付超过14亿美元用于保障网络的工作量验证。这笔费用直接用来支付电费成本,并没有产生额外的社会价值。而权益证明能够以零成本实现更高的安全性。
偶然的双重支付攻击
存在这样一种可能性,某人积累了大量的币天数,然后用这些币天数成功执行一次双重支付攻击,除非网络采取保护措施。在讨论建议的保护措施之前,我想首先谈一谈一次成功的双重支付攻击所产生的经济后果。
首先,攻击者只能以匿名的方式双重支付自己的资金来获取利润。如果攻击者非匿名地通过双重支付偷取了较大数额的货币,他将面临严重的盗窃犯罪指控。攻击必须选好时间点,因为在任何时候,其他玩家都有可能随机地产出高于平均水平的权益证明,这样双重支付就会失败。最后,如果一个大的双重支付攻击确实发生了,那么网络上的每一个人都会知道,理论上他们可以相互合作,将更多的权益证明增加至原来进行双重支付的那个较弱的链。
不同于工作量验证系统,大的利益相关者的一些诚实的节点很容易成为区块链安全的保卫者。当他们看到一个双重支付的攻击时,他们可以用自己的积蓄在数分钟内粉碎该攻击。在一个工作量验证系统中,诚实节点已经向网络贡献出了一切,没有能力去遏制明显的双重支付攻击。
大型的区块链分叉是比较罕见的,特别是在网络基础设施没有受到任何重大干扰的情况下。因此,除非这个权益证明链的确相当长,否则最活跃、连接最全面的节点不应该自动切换到这个链。尝试发起的双重支付将被整个网络所监测、发布,并有可能忽略。
最后,考虑到双重支付攻击的成本,以及这样的攻击所导致的币值大幅降低,还有匿名发起大规模双重支付的难度,结论很清楚:攻击者若成功,其资产贬值损失会超过他们的所得。
任何持币人都不会为一些小事而尝试发起双重支付。因此,我认为对于大多数普通交易而言,双重支付是不太可能发生的,双重支出导致的损失也将是很小的。此外,攻击者每年只能执行一次双重支付。
比特币网络中的确认时间完全取决于发现区块的矿工,这里则有所不同,希望加速交易确认的人可以通过自己的币天数来实现加速。大宗交易也可以分成多个部分,由后面的部分确认前面的部分。
总的来说,如果你在交易时了解你的客户,而且金额较大时等待更长的时间,那么就可以很容易地使双重支付的可能性降为0。
离线交易
离线交易不一定能够在签署时间访问区块头。因此,他们在签署时间将无法验证当前的区块头。对交易而言的币天数仅仅是那些包含在交易中的输出和区块头之间的币天数。
从少数分叉链中迁出交易
在现有的区块链设计中,交易相对独立于包含它们的区块。倘若真出现了一个分叉链,当网络重新连接时,交易便可以从少数链迁移到大众链。唯一无效的交易是那些基于少数分叉链币基(coinbase)交易的交易。正是由于这个原因,比特币网络规定币基交易在经过120个区块确认后才可以花费出去。
在实践中,长于几个区块的分叉是很罕见的。从实用角度出发,正常确认时的6个区块已足以防备分叉链。目前的建议是:若发现分叉链,则停止一切交易,直到少数网络能够重归大众网络,否则就可能成为双重支付攻击的受害者。
在我们的方法中,从少数分叉链迁移出的交易将不增加销毁的币天数。这将确保分叉链不会要求个人重新发起交易。
去中心化的区块生成和广播
此时已经很清楚,权益证明已足以识别最佳链,并提供更好和更便宜的网络安全。摒弃挖矿后,去中心化的网络需要一种新的方法来就下一步添加什么区块来达成共识。在一个成熟的网络中,交易可以以每秒12次的速度产生,而网络的传播可能会延迟60多秒。这意味着,销毁更多币天数的新区块,其产生速度要超过其传播速度。如果没有挖矿,就没有抽签机制来每10分钟选择一个节点,该节点被赋予包括(或不包括)该区块交易的权力。
网络必须要有一种方法来调节交易和区块的产生速度。参照比特币调整难度的方式来调整每个区块的最低费用就可以实现这一点。这些费用会将交易量降低到所需要的数率,而且延迟建立第一候选区块的时间,但是,一旦第一候选区块构建成功,额外的候选区块仍会以比第一区块传播速度更快的速度产生。
下一个挑战是,当所有节点都可以产生新的区块时怎样决定由谁来广播。我们建议,销毁区块里所有交易的最多币天数的单个输入的所有者成为唯一的可以广播该区块的人。这个人将签署区块头并广播该区块。如果其他人想来竞争,他们就必须销毁更多的币天数,这将有效提高获得生成该区块权利的成本,并在此过程中增加每个区块的安全。
为了激励节点在实现该功能时包括尽可能多的交易,拥有尽可能多的权益证明,而且尽可能快,广播者赚取的那部分交易费用应与他们销毁的币天数成正比。
当一个区块已经积累了很多交易,且已付出很多费用,但缺乏大量的币天数时,一个大的利益相关者可以利用该机会通过给自己花钱而获得可观的费用,同时声称其拥有最大的权益证明输入。这样做之前,她应该仔细考虑是否会有其他玩家‘出价’更多,而且建立一个更好的区块来获得费用。
我们觉得,有充分的机会来发展特种算法,这种算法通过用区块生产者的权益来保障网络,从而为区块生产者赚取一些收入。这些算法亦可能对观察到的双重支付进行防卫,捍卫网络安全。
交易的速度可能会维持在每秒12个,随着输入数量的增加,一个区块中的新个体输入能够比其他所有输入销毁更多币天数的频率会越来越低。这提供了一个自然而独特的选择节点来签署区块的方式。考虑到交易额的大小,他们在所赚取的费用和交易验证中有既得利益。事实上,如果他们不签署该区块,而且也没有更大的输入,那么这个交易就会被强制从区块中移除,这样第二大输入就可以成为最大输入并签署区块。实际上,这个机制上创建了产生一个区块的时间上限,而交易费用则设置了一个下限。
结论
在本文中,我们提供了一种简化的权益证明算法,这种算法允许网络的所有用户参与防卫,抵御攻击,保障网络的安全性。任何人私藏一个含有比公开交易台账更多销毁币天数的区块链在经济上应该是不可行的。该技术在不需挖矿的前提下解决了51%攻击和自私挖矿攻击,并且还能抵御双重支付攻击。
因为权益证明可以消除挖矿奖励的必要,他们也消除了对通胀的需要,同时也避免了工作量验证带来的能源浪费。在不断增长的区块链世界里,工作量验证带来的安全在没有合作挖矿时变得零散,而合作挖矿也有自己的费用。有了本文中实现权益证明的新方法,就不再需要合作挖矿,可以不用危及任何单个链的潜在安全即可支持无限数量的区块链。