打字猴:1.703868921e+09
1703868921 区块链技术驱动金融:数字货币与智能合约技术 [:1703863970]
1703868922 区块链技术驱动金融:数字货币与智能合约技术 10.4 另类币的夭折与共同挖矿
1703868923
1703868924 本节和下节将继续讨论比特币和另类币的技术相关性,而暂时搁置文化、政治和经济因素。
1703868925
1703868926 另类币的夭折
1703868927
1703868928 截至2015年,比特币的哈希算力让所有任何其他另类币相形见绌。事实上,存在几个势力强大的矿工或者矿池,他们控制的挖矿能力高于所有其他另类币的挖矿能力总和。这样的矿工或者矿池,可以轻松攻击一个小的另类币(如果他们也用和比特币一样的SHA-256挖矿谜题),通过制造赝品和大规模混乱,最终毁了该另类币。我们称这种现象为另类币的夭折。
1703868929
1703868930 用宝贵的挖矿算力去攻击其他货币,并且得不到明显的金钱回报,为什么会有人这么做?以2012年盘旋币(CoiledCoin)被攻击为例:比特币矿池Eligius的总管认为,盘旋币是个骗局,会对整个加密货币的生态系统产生冲击。所以,Eligus将其挖矿资源全部用在盘旋币上,制造出的区块链把盘旋币几天的交易给对冲掉,同时挖了一条很长的空区块链。这造成了其他盘旋币用户无法再使用盘旋币的服务,也就无法再产生任何新的交易。在盘旋币经历了短暂的攻击后,用户放弃了盘旋币,它从此销声匿迹。在这个案例,以及其他类似的另类币夭折的案例里,攻击者都是出于金钱以外的动机而发动攻击的。
1703868931
1703868932 共同挖矿
1703868933
1703868934 如果一个另类币复制了比特币的源代码但是没有做任何修改,按道理在这个另类币上的挖矿是有排他性的。也就是说,你可以去试图找挖矿谜题的答案从而找到一个有效的区块链,但是只能给另类币或者比特币,不能一石二鸟。你可以把你的挖矿资源在比特币和另类币上做分配,你甚至可以在多种另类币上分配资源而且随时调整配置,但是你无法让挖矿资源同时服务于多种货币。
1703868935
1703868936 在这种具有排他性挖矿的条件下,网络效应会使很多另类币无法实现自我增强式的循环发展。如果你开发了一个新的另类币并成功说服当前的比特币矿工加入你的另类币体系,为此,他们必须停止比特币的挖矿,也就意味着他们会立刻产生相关损失。因此,他们没有动力加入你的另类币体系,也就意味着你的另类币很可能只有很低的哈希算力,也就很容易被其他比特币矿工攻击并夭折。
1703868937
1703868938 是否可以设计出这样一种另类币,它可以允许同时在该币和比特币上进行挖矿?为了达到这个目的,则必须创造出包含比特币和该另类币相互交易的区块链,以使这些交易在两个区块链均有效。设计可使比特币的交易出现在其区块里的另类币,这个并不难,我们可以设计任何想要的另类币的规则。但反过来却很难。如何把另类币的交易放入比特币区块链上?第3章和第8章已经介绍了如何把任意数据放在比特币的区块里,但是这样做会遇到比特币特有的带宽限制,即其数据传输量非常有限。
1703868939
1703868940 然而还是有巧妙的办法:虽然不能把另类币的交易内容放进比特币的区块里,但是可以把另类币的交易概要以哈希指针的形式放入比特币区块中。找一个可以在每一个比特币区块里放入一个哈希指针的办法很容易。具体来说,回想一下本书曾经提过每个比特币区块都有一个特殊的交易,称为币基交易,也就是矿工创建新的区块所得的比特币奖励。这种交易的输入脚本(scriptSig)区域没有任何内容,因此可以用来存储任意数据(当然也不需要对币基交易进行签名认证,因为没有任何前序交易)。所以在一个共同挖矿的另类币体系里,挖矿的任务就是去计算一类特殊的比特币区块,币基交易的输入脚本区域存有指向另类币区块的哈希指针。
1703868941
1703868942 这个区块现在可以身兼二职:对比特币客户端来说,其与任何其他比特币区块没有区别,除了在币基交易中多了一个可以被比特币忽略的哈希值。另类币的用户知道如何解读这个区块:忽略比特币的交易,只看在币基交易中的哈希值所指向的另类币的交易。值得注意的是,这种设计不需要比特币做任何改变,但是需要另类币能够兼容比特币,并且允许共同挖矿。
1703868943
1703868944 如果另类币支持共同挖矿,那么我们希望很多比特币的矿工也参与进来,因为这不需要花任何额外的哈希算力。只需要增加少量的运算资源去处理区块和交易,以及矿工需要知道和了解这个另类币,就能去花费精力来挖矿了。假如25%的比特币矿工的哈希算力同时在挖另类币的矿,这说明,平均25%的比特币含有指向另类币的指针,也就意味着,在另类币体系里,每隔40分钟才能产生一个新的另类币。而更糟糕的是,当另类币还在自我发展,并且只有小部分的比特币矿工参与的时候,产生一个新区块需要几个小时甚至几天,这种局面实在让人无法接受。
1703868945
1703868946 有没有办法确保参与共同挖矿的另类币的区块,能按照稳定的速度产生?或者说,我们是否可以设定区块产生的速度或高或低,但与比特币中多少比例的人参与共同挖矿无关?答案是肯定的。奥妙在于,虽然另类币的挖矿任务和比特币一样,但是挖矿的目标不同。另类币体系计算的目标和困难程度和比特币体系中的目标和困难程度都没有关系。就如比特币可以调整其计算目标使每个区块按平均每分钟产生10个的速度一样,另类币也可以调整自己的目标使区块在另类币体系也以每10分钟或其他固定值产生一个。
1703868947
1703868948 这意味着,另类币的目标值要远远小于比特币的目标值。部分,甚至是大部分另类币的区块将不会被有效的比特币区块的指针指引到。但是这并不会带来问题,你只需要把比特币区块链和另类币区块链看成是两个平行并列的数据链,只是偶尔有从比特币指向另类币的指针,详见图10.5所示。在图示的例子中,60%的比特币矿工同时也挖另类币的矿,另类币大约5分钟产生一个。这意味着另类币的挖矿难度系数是比特币的60%×5/10=30%。图中40%的比特币区块没有包含指向另类币的哈希指针。
1703868949
1703868950
1703868951
1703868952
1703868953 图10.5 共同挖矿
1703868954
1703868955 注:图中显示了比特币和另类币的区块链,以及它们之间的相互作用。
1703868956
1703868957 相反,每个有效的另类币都是比特币挖矿的结果,但是在所有满足另类币的挖矿算法结果中,只有30%能达到比特币的要求。对于另外70%满足另类币要求却无法满足比特币要求的区块,另类币的网络需要验证这些区块是否真的符合解决挖矿的谜题。最直接的方法是向比特币相邻区块和另类币区块进行广播。更聪明的方法,是只广播比特币相邻区块的标题部分和比特币区域中包含币基交易的二进制证明。
1703868958
1703868959 虽然很罕见,另类币的谜题也可能比比特币更难。由于大部分另类币希望产生区块的速度要快于每10分钟一个,这种情况不常见。当然如果希望放慢速度的话,也很容易做到。这种情况下,你就会看到有些矿工挖到比特币,希望这些也能成为另类币,但是部分比特币区块,在另类币网络中,由于达不到更高的难度要求而被拒绝。
1703868960
1703868961 最后需要指出,任意数量的另类币都可以同时和比特币共同挖矿,每个矿工都可以自由选择任意另类币共同挖矿。在这样多种另类币组合共同挖矿的情况下,币基交易的输入脚本本身就是一个指向多种另类币的二叉哈希树结构。注意这种结构的复杂性,因为确认包含另类币交易需要确认以下几点:(1)二叉哈希树包含这个另类币的证明;(2)二叉哈希树证明包含币基交易输入脚本,而且里面包含另类币的哈希值;(3)二叉哈希树证明比特币区块或者附近区块有币基交易的输入脚本。
1703868962
1703868963 共同挖矿和安全
1703868964
1703868965 共同挖矿是一把双刃剑。正如本书讨论过的,它可以使一个另类币更易实现自我增长的循环发展,通过增加总算力从而提高其抗攻击能力。这种情况下,想通过购买算力去破坏另类币的恶意竞争对手就需要付出巨大的前期投资。
1703868966
1703868967 另一方面,有人可能会认为这是一个安全假象。因为恶意竞争对手可以通过共同挖矿来产生比特币,收回一部分前期投资,同时,使攻击另类币的边际成本变得很小。把恶意竞争者看成规模很大的比特币矿工,也许更易于理解。事实上,前文提到的夭折的盘旋币,就是允许共同挖矿的。攻击者矿池Eligius和参与攻击者并不需要停止比特币挖矿就可以展开攻击。事实上,矿池的参与者甚至都不知道他们的计算资源被用于攻击另类币。
1703868968
1703868969
1703868970 另类币的挖矿谜题趋势
[ 上一页 ]  [ :1.703868921e+09 ]  [ 下一页 ]