天涯书库 > 区块链:技术驱动金融 > 8.5 权益证明和虚拟挖矿 >

8.5 权益证明和虚拟挖矿

在结束本章之前,我们讨论一下这个想法:用虚拟挖矿(virtual mining)来替代计算力挖矿。虚拟挖矿是指一组不同的挖矿方法但它们都有一个共同的特点——对参与的矿工只要求少量的计算资源。

建立一个封闭挖矿系统

作为一个思想实验,假设比特币或是其他加密数字货币成为全球主要支付手段。矿工起初会拥有一些加密数字货币来购买挖矿设备和支付电耗,以此获取一些新币来作为挖矿的奖励(见图8.3)。这基本上是个消耗资源的过程。

图8.3 比特币挖矿的资源循环

一旦挖矿设备变成了一种商品,并且电力也是一种商品(本来就是),没有矿工有任何优势可以更有效地把他们起初拥有的加密数字货币转化成挖矿奖励。除非有细微的效能差距,挖矿投入最多的矿工将会获得最大的挖矿奖励。

推动虚拟挖矿的基本问题是:如果我们把挖矿设备和能耗这一环节省去,会产生什么结果?毕竟,这个过程主要是用来证明谁在挖矿这件事情上投入最多。为什么不简单地把挖矿“算力”按比例分配给当前所有的持币人?

回忆一下比特币挖矿的初衷是在区块链上建立起一个投票机制,有更多算力的矿工会得到更多的投票权力。因此,我们可以设计一个“投票”系统,选票(投票权力)是由每个人所拥有的当前币量所决定的。

虚拟挖矿的优势

这个方法的优势是显而易见的:它把如图8.3中右边浪费资源的一半去掉了,留下了一个封闭的系统,如图8.4所示。

图8.4 虚拟挖矿的资源循环

除了简单化之外,这个方法会大大减少比特币对环境的影响。它不会把能耗降到零,因为矿工总是会消耗一些计算资源来和网络通信验证,有一些虚拟挖矿方案也要求少量的挖矿计算力。但总体上,比特币里绝大部分的挖矿工作量可以被省去。

虚拟挖矿还可以阻止中心化的发展趋势。因为没有硬件,所以也不必担忧有ASIC的问题。每一个矿工挖矿的效率都和其他人完全一样。任何虚拟矿机所用的解谜算法都是反ASIC的。

这可能是虚拟挖矿最重要的一点。虚拟挖矿可能解决了我们在讨论反ASIC解谜算法时候所遇到的问题,也就是考虑到货币的长期健康,矿工可能不会去投资挖矿设备的生产。任何一个比特币的持有人其实也是这个货币的利益相关者,一个强大的虚拟矿工(比如持有51%或更多的币)是一个非常大的利益相关者。他们有原动力来做对整个系统有利的事,因为这样一来他们所持有的币也会增值。这比“矿工已经投入了大量的挖矿设备,且设备价值会基于未来的币值,所以没有人会进行恶意行为”的说法更有力。

这就是“权益证明”这个名字的来源。除了节省挖矿设备和节省能源之外,可能虚拟挖矿的最大动力,来自这个货币的利益相关者有着强烈的意愿成为这个系统的维护者。

实施虚拟挖矿:点点币

有许多种不同的虚拟挖矿,我们在这里只讨论最常见的几种。我们要强调的是,这些想法还没有被严格地用科学的方法研究过,也没有像比特币的工作量证明一样因为比特币的普遍性而经过实战洗礼。

我们先看一下在2012年启动的点点币(Peercoin),是第一个使用权益证明的另类币。点点币是工作量证明与权益证明的一种混合体,“拥有量”以“币龄”为计价单位。一个特定的还没有被使用交易的输出的币龄,是“这个输出里的币量”与“这个输出里还没有被使用过的区块数量”的乘积。现在,为了挖到一个区块,点点币的矿工也必须像比特币的矿工一样去进行一个SHA-256的解谜运算。但是,这个解谜运算的难度会随着他们想消耗多少币龄调整,消耗越少难度就越低。为了做到这一点,这个区块包括一个特殊的“币拥有量交易”(coinstake transaction),在这个交易里,有些交易被用掉只是为了把它们的币龄重设成零。这些在币拥有量交易中被消耗的币龄总和,决定了工作量证明解谜运算中发现一个有效区块的难度。

矿工可以在最初用很大的计算力和一些很少的拥有量来挖矿,但是可以用公式来设定难度:当一些币龄被消耗后,找到有效区块会变得十分容易。这个运算型解谜的效果主要是为了保证,在有两个矿工尝试消耗同样大小币龄的情形下,这个过程仍然是随机的。

许多其他的虚拟挖矿另类币方案使用了略微不同的设计,包括NxT、BitShares、BlackCoin和Reddcoin。在这些设计方案里,一定数量的币被消耗用于使运算型解谜变得极为简单,这使得解谜运算不再是挖矿过程中最主要的挑战。

权益的其他形式

有两种混合模式值得探讨:

● 权益证明。最简单的权益证明模式是使那些拥有大量币控制权的矿工挖矿更加容易。这类似于点点币的币量和币龄混合证明,只是在这个模式中不考虑币龄。这个模式的劣处是,不像点点币那样每次成功获得有效区块之后重置币龄,最有钱的参与者总是可以最容易地挖矿。

● 储量证明。在这个模式里,当一个矿工用一些货币来铸造一个区块的时候,这些货币针对一定数量的区块被冻结。这可以被想象成币龄的一个镜像:这个系统奖励那些希望在未来一段时间不消费的矿工,而不是那些在过去一段时间内不使用货币的矿工。在上述两种情况下,矿工的收入来自因为不能使用货币去做其他事情的机会成本。

无利害关系问题

虚拟挖矿是科研的前沿领域,还有许多未解的问题。即使有一些加密数字货币已经启动并且使用了虚拟挖矿,它们都面临和比特币一样的压力,即防御有目的性的攻击者。

虚拟挖矿有一个常见的漏洞,被称为“无利害关系问题”(nothing-at-stake problem)或者“股权粉碎攻击”(stake-grinding attacks)。假设一个有着小于50%的币拥有量的攻击者,尝试制造一个有k个区块的分叉,如同我们在前面讨论过的,这样的分叉攻击有着相当高的失败概率。在传统挖矿里,一个失败的攻击有着很高的机会成本,因为矿工本可以在挖掘的过程中赚得奖励,而不是浪费挖掘资源在失败的攻击上。

但在虚拟挖矿里,这个机会成本并不存在。一个矿工可以既在当前最长的区块链上挖矿,同时又可以进行一个创建分叉的尝试。如果分叉成功,则会消耗掉大量的筹码;如果失败,这个失败的记录不会出现在最长的区块链上。因此,理性的矿工也会不断地尝试分叉攻击。

对于这个问题,有一些不同的解决办法。大多数的虚拟挖矿方案都积极地使用检查点来防御长分叉攻击。但是正如之前讨论过的,这有点和去中心化的共识协议概念背道而驰了。

分叉攻击和检查点

当你下载比特币核心钱包软件时,有几个硬编码的检查点,或者过去区块的拼接。这样做的根本目的是让首次下载区块链更加顺利。如果没有检查点,其他节点可以使用伪造的(但有效的)区块和分支来冲击你。对于当今的攻击者来说,在低区块高度产生有效的谜题解决方案是非常简单的,那就是接近起源区块,因为初始阶段的难度相对较低。你最终会发现这些区块不在最长的有效分支上(更精确地来说,不在最高总体难度的有效分支上),但你必须浪费资源来做这件事情。

有些另类币,特别是虚拟挖矿计划,已经采取了以检查点作为防御分支攻击的强大形态。节点会从指定检查节点收到检查点的常规更新,该更新由指定的私钥签发。节点会放弃与检查点冲突的分支。这种机制使得检查点的运作方,尤其是另类币的创建者,能从分叉和“转回”区块中选择胜出者。这种设计非常有趣,但是已不是去中心化一致认可的协议。

以太坊(Ethereum,一个在2015年启动的另类币,我们将在第10章中详细讨论),建议了一个称为“Slasher”的方法来惩罚尝试进行分叉攻击的矿工。在Slasher方案中,使用筹码去挖矿需要用私钥对当前区块进行签名,来应对那些进行作弊的交易,如果矿工曾经使用相同的筹码去签署两个不连续的区块链(不是前后关系),Slasher允许其他矿工可以在区块链上输入这两个签名作为作弊的证据,并且拿走一部分筹码以作为奖励。虽然看起来这个方案非常有效,但是协议本身非常复杂,还没有被实际部署。

一个终极的防御攻击方式可能存在,就如同我们在传统挖矿方案中看到的,矿工可以简单地没有足够的动力去进行攻击,因为即使攻击成功,也会危害整个系统并使得他们所拥有的筹码贬值。

虚拟挖矿的其他弱点

虚拟挖矿还有其他两个弱点值得提及。第一,在某种形式的虚拟挖矿方案中,即使“股权粉碎攻击”不存在,也可能使得某些类型的攻击变得容易,因为挖矿“蓄力”(save up)是可能的。例如,大量的币可以被积蓄起来,直到可以进行一次剧烈的挖矿变化使得分叉成为可能。即使是某个类似于Slasher这样严禁同时在两个区块链上挖矿的系统上,也是可能的。为了防止这样的攻击,点点币限制了币龄参数不能超过90天。

第二,如果虚拟挖矿中的某个矿工获得了51%的筹码,他可以通过只在他的区块上挖矿的方式永远保持这个优势,基本上也就意味着可以控制整个区块链。如果有新的筹码和交易费从区块奖励中产生,那个拥有51%的矿工也会抢去这些奖励,这会让他的筹码慢慢接近100%。在传统挖矿模式中,即使有一个51%的矿工存在,永远可能存在拥有更大算力和更低能耗的其他矿工出现,并且会减少最大矿工的市场份额。在虚拟挖矿里,很难避免这个问题。

虚拟挖矿有可能真的成功吗

在比特币的主流社区里,虚拟挖矿是有争议的。有一个说法是,系统的安全性必须建立在真正的资源消耗上,也就是动用真正的电脑硬件和消耗电能去进行解谜运算。如果这个理论成立,工作量证明上的能源耗费可以被看成是系统的安全费用。但这个论点还没有被证明,就像虚拟挖矿的安全性也没有被证明一样。

总结来说,人们想改变比特币挖矿解谜算法的很多方面,这也是研究与创新的重点区域。到目前为止,还没有一个替代方案具备理论健全性和实用性。例如,即使Scrypt算法在另类币中很受欢迎,但是也没有做到真正的反ASIC,而且其用途也还不清楚。当然,替代的解谜算法完全有可能在未来获得更大的成功。毕竟,比特币本身也经历了数十年的不断失败的尝试与发展,才最终成为一个既有很好的设计理念又有相当的实用性的加密数字货币。

延伸阅读

定义刚性内存功能和建议范本的论文是:

Percival, Colin.“Stronger Key Derivation via Sequential Memory-Hard Functions,” 2009.

您可以通过如下网址阅读:

https://www.bsdcan.org/2009/schedule/attachments/87_scrypt.pdf.

关于内存范围(memory-bound)功能的早期论文包括:

Abadi, Martin, Mike Burrows, Mark Manasse, and Ted Wobber.“Moderately Hard, Memory-Bound Functions.” ACM Transactions on Internet Technology 5(2), 2005.

Dwork, Cynthia, Andrew Goldberg, and Moni Naor.“On Memory-Bound Functions for Fighting Spam.” In Advances in Cryptology—Crypto 2003 . Berlin: Springer, 2003.

关于Cuckoo Cycle proposal的研究包括:

Tromp, John.“Cuckoo Cycle: A Memory-Hard Proof-of-Work System.” IACR Cryptology ePrint Archive, 2014.

您可以通过以下网址阅读:

https://eprint.iacr.org/2014/059.pdf.

关于永久币的介绍请参阅:

Miller, Andrew, Ari Juels, Elaine Shi, Bryan Parno, and Justin Katz.“Permacoin: Repurposing Bitcoin Work for Data Preservation.” In Proceedings of the 2014 IEEE Symposium on Security and Privacy , 2014.

您可以通过如下网址阅读:

http://research.microsoft.com/pubs/217984/permacoin.pdf.

讨论不同的哈希函数和SHA-3竞争的论文是:

Preneel, Bart.“The First 30 Years of Cryptographic Hash Functions and the NIST SHA-3 Competition.” In Topics in Cryptology—CT-RSA,2010 . Berlin: Springer, 2010.

关于不可外包谜题的介绍是:

Miller, Andrew, Elaine Shi, Ahmed Kosba, and Jonathan Katz.“Nonoutsourceable Scratch-Off Puzzles to Discourage Bitcoin Mining Coalitions.” In Proceedings of the 22nd ACM Conference on Computer and Communications Security , forthcoming.