1703866696
区块链技术驱动金融:数字货币与智能合约技术 5.5 挖矿的激励和策略
1703866697
1703866698
我们在这一章花了很多篇幅讨论作为一个矿工的主要挑战:买到好的硬件、找到廉价的电费,然后尽快开始运行,然后期待一些好运气。不过在挑选一个区块开挖之前,每个矿工都需要做一些策略上的选择:
1703866699
1703866700
1.需要包括哪些交易?矿工可以选择将哪些交易放进他的区块里。默认的规则是选择那些交易费比较高的交易。
1703866701
1703866702
2.对哪一个区块进行挖矿运算?矿工可以选择在哪个区块上进行挖矿。默认的做法是在最长的那条区块链上继续挖下去。
1703866703
1703866704
3.在同一高度的多个区块中做选择。如果两个不同的区块在同一时间被宣布发现,这就造成了一个区块的分叉,每个区块都是可以被延续下去的,因为它们都符合最长区块链原则。矿工必须选择其中一个区块接龙下去。默认的做法是选择最先被监听到的那一个区块。
1703866705
1703866706
4.什么时候宣布新的区块?当矿工找到一个有效区块之后,他们要决定什么时候向比特币网络宣布这一个区块。默认做法是立刻宣布,但他们也可以选择等一下。
1703866707
1703866708
矿工其实面临很多决定。每个决定都有一个默认策略,直到这本书撰写之时,绝大多数的比特币客户端都是按照该默认策略运行的。非默认策略也有可能使得挖矿收益更高,很多人积极研究如何找到这样的策略。让我们来看看几种可能有别于默认策略的做法,这些做法可能使得挖矿收益更高。在接下来的内容中,我们假设一个运行非默认策略的矿工掌控一定的比特币网络挖掘市场份额,设为α。
1703866709
1703866710
分叉攻击
1703866711
1703866712
最简单的攻击就是分叉攻击(forking attack),这是一个显而易见的获利方式——重复支付。一个恶意的矿工给一个受害者鲍勃发送了一些比特币来购买其服务和货品。鲍勃等到这笔支付交易被放进了最长链之后,甚至还等到了6个证实的时候确认支付安全之后,才开始发货或者提供服务。
1703866713
1703866714
现在这个矿工开始跳到前一个区块上开始重新挖矿——就是在那个包含他给鲍勃的支付交易区块之前的那一块。在这个分叉的区块链里,他插进了另一个替代交易——或者进行一个双重支付——把那些已经支付给鲍勃的比特币重新发送回自己的地址里(见图5.15)。
1703866715
1703866716
1703866717
1703866718
1703866719
图5.15 分叉攻击
1703866720
1703866721
注:一个恶意的矿工给受害者鲍勃发送了一些比特币来购买其服务和货品。然后这个矿工进行了一个分叉攻击,创建了一个包含冲突交易的更长的分叉,在新的共识链中给鲍勃的支付就变成了无效的交易。
1703866722
1703866723
想要这个攻击成功,被分叉的区块链必须要覆盖当前最长的一条链,一旦这个情况发生,支付给鲍勃的交易就不再存在于共识的区块链里。如果这个矿工掌握占优势的哈希算力的话,也就是说α > 0.5,这种攻击就会成功。也就是说,即使有大量的随机变数,这个分叉最终会变成最长的一条链,也就是正当有效的共识链。甚者,因为这些币已经被用过了(在新的共识链上),这笔支付给鲍勃的交易永远不可能再回到区块链上了。
1703866724
1703866725
51%是必要的吗?如果α > 0.5的话,发动一个分叉攻击是很有可能发生的。但在实际中,用稍低的算力也可以发动一个那样的攻击,因为有类似于网络拥塞之类的其他因素。在主链上挖矿的其他矿工会因为一个正常的原因产生一些过时的区块——因为有网络延时。但是一个中心化的攻击者本身则不会有这个延迟,他可以进行更快速的通信并且生成更少的过时区块,这可能会节省1%甚至更多的算力。
1703866726
1703866727
拥有近乎50%算力的攻击者可能需要花很长时间才可能成功,因为有随机性。算力超过50%越多,攻击就会变得越容易也越有效。人们经常讨论51%的攻击,是因为51%是一个分水岭,超过51%的时候分叉攻击就会成为可能。实际上,这种攻击的成功概率是呈梯度变化的。
1703866728
1703866729
可操作的对策。我们不清楚分叉攻击在现实中是否一定成功。因为大家可以觉察到这个攻击,社区可以对此做出决定,即使分叉链更长也可以拒绝接受。
1703866730
1703866731
攻击和币值(exchange rate)。更加重要的是,这种攻击可以摧毁大家对比特币的信心,比特币的拥有者们就想要把资产转移出去,以至于比特币价格崩溃。因此,虽然一个具有51%算力的攻击者可能会在短期内利用双重支付进行欺骗并获得额外的收益,但是从长期来看,其实他们这么做造成的损失可能更大。
1703866732
1703866733
所以发动这种攻击的人其实是想通过打击信心来摧毁比特币。有点类似于邦德电影里的反派想要对诺克斯堡里的所有的黄金进行辐射污染,使其变得没有价值一样,这类攻击被称为金手指攻击(Goldfinger attack)。这种攻击者的目的可能就是摧毁整个货币,可能是由于他可以通过要么做比特币空头交易,要么拥有大量的竞争货币而获益。
1703866734
1703866735
通过贿赂来进行分叉攻击
1703866736
1703866737
通过购买足够多的矿机来控制大部分的算力,是一件非常困难而且昂贵的任务。但可能还是会存在其他简单的方法来进行分叉攻击:相比直接购买算力以获取超越所有其他人算力的昂贵做法,贿赂那些有能力的矿工来为你来工作也是可能的。
1703866738
1703866739
有几种贿赂其他矿工的方法。其中一个方法是“系统外的”(out of band)——可能找到一些矿工然后直接用现金来贿赂他们。当然一个更加聪明的办法是创建一个新的矿池,然后提供更好的奖励来吸引其他矿工来加入,即使矿池运行可能因此而亏损。虽然这种奖励不可能长期维持下去,但是可以维持足够长的一段时间直到可以发动一个成功的分叉攻击,然后获利。还有一种方法是在你的分叉区块链里留下足够多的“小费”,多到足以让其他矿工离开最长链来加入你的分链,矿工们希望你的链成为最长的链,这样一来他们可以收取你留下的小费。
1703866740
1703866741
不管是哪种贿赂的方式,核心思路都是一样的:有别于直接获得大量算力,攻击者去贿赂那些已经拥有算力的人,让他们帮助自己分叉出另外一条最长的区块链。
1703866742
1703866743
可能矿工们并不愿意去帮助一个攻击者,因为这么做会危害整个货币的价值,而他们已经在此之上投入了相当多的资金和矿机。从另一方面看,虽然矿工们作为一个整体可能希望保持货币的价值,但是他们可能做不到一致行动。个别矿工可能会因为短期利益,将个人利益置于集体利益之上。从经济学的角度来看,那就是个经典的“公地悲剧”了。
1703866744
[
上一页 ]
[ :1.703866695e+09 ]
[
下一页 ]