1703868020
1703868021
不同于Scrypt算法的案例,如果k2足够大,并没有一种可行的类似于时间内存的权衡方案。如果矿工仅仅在本地存储了一半的FM,并且k2=20,那么在他们找到一个不需要从网络中取回任何文件区块的临时随机数之前,他们必须要尝试100万次,降低一定量的存储负担会以计算量指数型增长为代价。当然,由于k2梅克尔树路径要在所有的路径中被传输和校验,如果k2设得太大,也会使运算变得非常低效。
1703868022
1703868023
k1的设定也可以有所权衡。更小的k1意味着矿工需要更少的本地存储空间,因此这种挖矿就更加民主化(更多的人可以参与)。然而,这也意味着,大量的矿工即使有能力提供更大的存储空间,他们也没有动力去存储多于k1个F区块。
1703868024
1703868025
同样,这是一个对完整的永久币做了细微简化的方案,但是对我们理解整个设计的关键部分来说是足够的了。最大的应用挑战,当然是找到一个合适的大文件,这个文件要有一定的重要意义,同时也是公共的,需要保存多个备份。如果F文件本身随着时间的推移会发生变化,或者随着时间的变化而调整难度,这样会使方案变得更加复杂。
1703868026
1703868027
长期的挑战和经济意义
1703868028
1703868029
总结一下本节内容,有效工作量证明是一个非常自然的目标。考虑到一个好的共识机制所需要的其他解谜算法,实行起来也有相当大的挑战。即使如此,至少本文所举的两个案例——质数币和永久币——在技术上是可行的,虽然它们也都有一些技术方面的缺陷(主要都是需要更长的时间去验证解谜结果)。此外,对比在比特币挖矿中动辄数百万美元的投入以及大量电力的消耗,这两种加密数字货币的应用都对社会公益有一些贡献。
1703868030
1703868031
有效工作量证明是否应该是纯公益的,有一个有趣的经济学方面的争议。在经济学中,公益的意思是非排他性的,也就是说所有人都可以参与使用,并且是非竞争性的,对公益的其他用途不应该影响其本身的价值。一个经典的例子就是灯塔。
1703868032
1703868033
我们这里所讨论的案例,比如蛋白质折叠(protein folding)[2],就不是一个纯公益的项目,因为有一些公司(比如大的制药公司)可以从中获利。实质上,这些机构挖矿的成本会相对变低,因为它们可以获取其他人无法获得的额外利益。
1703868034
1703868035
[1]大约有500万人参加这个计划,包括译者本人。——译者注
1703868036
1703868037
[2]蛋白质折叠问题被列为“21世纪的生物物理学”的重要课题,它是分子生物学中心法则尚未解决的一个重大生物学问题。——译者注
1703868038
1703868039
1703868040
1703868041
1703868043
区块链技术驱动金融:数字货币与智能合约技术 8.4 不能外包的解谜算法
1703868044
1703868045
我们现在再看一下对于替代挖矿解谜的另一个设计重点:防止矿池的产生。我们在先前的第5章里谈到,大部分的比特币矿工都会加入一个矿池,而不是独立挖矿。这就造成了少量矿池拥有绝大部分挖矿算力的现象。由于每个矿池都有一个中心化的管理方,有些人担心这其实违反了比特币去中心化的核心设计原则,会危害到比特币的安全性。
1703868046
1703868047
拥有大部分算力的矿池显然是一个问题,任何一个中心化管理的矿池可能会实施一套自定义的挖矿策略,然后用它来攻击网络。这种矿池也是黑客们攻击的目标,因为通过攻击矿池可以迅速地控制大量的挖矿算力。矿池管理员也可能会删改交易或是强迫收取更高的交易费。矿池中拥有大多数矿工,意味着大部分矿工都没有运行一个完全有效节点。
1703868048
1703868049
有意思的是,这些担忧有着现实世界的影子,比如选票。在美国和其他许多国家,出售选票是非法的。加入一个被一方控制的矿池,和在比特币的共识协议里出售你的选票有点类似。
1703868050
1703868051
矿池的技术要求
1703868052
1703868053
回忆起来,矿池看起来是一个突然发生的现象。并没有证据显示,中本聪在比特币的最初设计中考虑过矿池的概念。在互相不信任的个体之间运行一个有效率的矿池,这样的事情在最初的几年里看起来不太现实。
1703868054
1703868055
正如我们在第5章所看到的,矿池通常会指定一个管理员,他有一个大家都知道的公钥。每一个加入的矿工还是按照往常一样进行挖矿,然后递交“近似”或者“部分”答案给矿池管理员,这些答案在低级别难度的时候可能就是一个有效答案,通过这种做法来证明他们做了多少工作量。当矿池中的某一个参与者找到了一个有效区块的时候,这个管理员会按照每个人所提交的工作量的占比来分配奖励。虽然有很多种不同的分配方式,但是所有矿池都遵循这个基本模式。
1703868056
1703868057
正因为如此,矿池的存在依赖于比特币的两大技术特征。第一,一个矿工很容易通过提交工分来证明(概率上)他所做的工作量。不管实际上找到一个有效区块是多么困难,通过设定一个足够低的合格工分的临界值,矿工可以容易地证明他们在任意精度的工作量。考虑到我们需要解谜题目可以在任意难度上被创造出来,这个问题看起来很难改变。
1703868058
1703868059
第二,矿池成员可以容易地向管理员证明,他们遵守规则并且通过实际运算来寻找有效区块,然后矿池会作为一个整体接受奖励。这是行得通的,因为这个矿池的公钥是被写进币基交易,并包括在区块里的梅克尔树上。即使一个矿工找到了一个有效区块,甚至只是一个近似区块(也叫工分),他也无法改变整个矿池的公钥,而成为新铸币的接受者。
1703868060
1703868061
“区块丢弃”攻击(block-discarding attack)
1703868062
1703868063
矿池的这种设计有一个弱点:没有办法来确保矿工在找到有效区块的时候一定会提交给管理员。假设有一个矿池成员对一个大型矿池不满,他可以正常地参与挖矿然后提交工分,但他在找到一个有效区块(可以让整个矿池获得奖励)的时候,并没有告诉管理员而是直接把它丢弃掉。
1703868064
1703868065
这个攻击降低了整个矿池的挖矿能力,因为攻击者的工作量并没有实际贡献到挖矿中去。但是这个矿工依然会收到奖励,因为他看起来也在不断地提交工分,只是运气不好没有找到有效的区块。如果这个矿池的奖励设计方案是收入中性的(也就是所有的挖矿奖励都被分发到每个参与者),那样的话这个攻击会让这个矿池亏损。
1703868066
1703868067
这种攻击被称作民间攻击或者是蓄意破坏攻击,这也被认为是一种蓄意破坏,因为这个攻击看上去对攻击者和矿池都是不经济的、代价不菲的。这个攻击者本身也会遭受损失,因为他所丢弃的有效区块将会使他放弃他应该有的一部分奖励回报。当然,这个攻击者还是会由于其他一些挖矿解密算法而获利。
1703868068
1703868069
看起来一个理性的矿工不会采用这种策略,因为他会有所损失而不会得到任何实际的回报。但(令人惊讶的是)在某些情况下,这个策略是可以有利可图的,我们在下文有所讨论。但是无论如何,我们想要设计一个全新的挖矿解谜算法,以确保这种策略永远都是有利可图的(以抵抗矿池的存在)。
[
上一页 ]
[ :1.70386802e+09 ]
[
下一页 ]