8.10 区块链的拼装与挑选

比特币去中心化的共同机制的终究一步是将区块集合至有最大作业量证明的链中。一旦一个节点验证了一个新的区块,它将测验将新的区块衔接到到现存的区块链,将它们拼装起来。

节点保护三种区块:第一种是衔接到主链上的,第二种是从主链上发生分支的(备用链),终究一种是在已知链中没有找到已知父区块的。在验证过程中,一旦发现有不契合规范的当地,验证就会失败,这样区块会被节点回绝,所以也不会加入到任何一条链中。

任何时分,主链都是累计了最多难度的区块链。在一般情况下,主链也是包括最多区块的那个链,除非有两个等长的链而且其中一个有更多的作业量证明。主链也会有一些分支,这些分支中的区块与主链上的区块互为“兄弟”区块。这些区块是有用的,但不是主链的一部分。 保留这些分支的意图是假如在未来的某个时刻它们中的一个延伸了并在难度值上超越了主链,那么后续的区块就会引证它们。在“8.10.1 区块链分叉”,咱们将会看到在相同的区块高度,简直一起挖出区块时,候选链是如何发生的。

当节点接收到新区块,它会测验将这个区块插入到现有区块链中。节点会看一下这个区块的“previous block hash”字段,这个字段是该区块对其父区块的引证。一起,新的节点将测验在已存在的区块链中找出这个父区块。大多数情况下,父区块是主块链的“极点”,这就意味着这个新的区块延伸了主链。举个比方,一个新的区块——区块277,316引证了它的父区块——区块277,315。大部分收到了区块277,316的节点将区块277,315作为主链的极点,衔接这个新区块并延伸区块链。

有时分,新区块所延伸的区块链并不是主链,这一点咱们将在“8.10.1 区块链分叉”中看到。在这种情况下,节点将新的区块增加到备用链,一起比较备用链与主链的难度。假如备用链比主链积累了更多的难度,节点将收敛于备用链,意味着节点将挑选备用链作为其新的主链,而之前那个老的主链则成为了备用链。假如节点是一个矿工,它将开端构造新的区块,来延伸这个更新更长的区块链。

假如节点收到了一个有用的区块,而在现有的区块链中却未找到它的父区块,那么这个区块被以为是“孤块”。孤块会被保存在孤块池中,直到它们的父区块被节点收到。一旦收到了父区块而且将其衔接到现有区块链上,节点就会将孤块从孤块池中取出,而且衔接到它的父区块,让它作为区块链的一部分。当两个区块在很短的时刻距离内被挖出来,节点有或许会以相反的次序接收到它们,这个时分孤块现象就会呈现。

挑选了最大难度的区块链后,一切的节点终究在全网规模内达成共同。跟着更多的作业量证明被增加到链中,链的暂时性差异终究会得到处理。挖矿节点经过“投票”来挑选它们想要延伸的区块链,当它们挖出一个新块而且延伸了一个链,新块本身就代表它们的投票。

彼此竞赛的链之间是存在差异的,下节咱们将看到节点是怎样经过独立挑选最长难度链来处理这种差异的。

8.10.1 区块链分叉

由于区块链是去中心化的数据结构,所以不同副本之间不能总是坚持共同。区块有或许在不一起间抵达不同节点,导致节点有不同的区块链视角。处理的办法是,每一个节点总是挑选并测验延伸代表累计了最大作业量证明的区块链,也便是最长的或最大累计难度的链。节点经过将记录在每个区块中的难度加总起来,得到树立这个链所要付出的作业量证明的总量。只需一切的节点挑选最长累计难度的区块链,整个比特币网络终究会收敛到共同的状况。分叉即在不同区块链间发生的临时差异,当更多的区块增加到了某个分叉中,这个问题便会迎刃而解。

鄙人面的图例中,咱们能够了解网络中发生分叉的过程。图例代表简略的全球比特币网络,在实在的情况下,比特币网络的拓扑结构不是根据地舆方位安排起来的。相反,在同一个网络中彼此衔接的节点,或许在地舆方位上相距遥远,咱们选用根据地舆的拓扑是为了愈加简洁地描绘分叉。在实在比特币网络里,节点间的距离按“跳”而不是依照实在方位来衡量。为了便于描绘,不同的区块被标示为不同的色彩,传达这些区块的节点网络也被标上色彩。

在第一张图(图8-2)中,网络有一个一致的区块链视角,以蓝色区块为主链的“极点”。

图8-2 形象化的区块链分叉事情——分叉之前

当有两个候选区块一起想要延伸最长区块链时,分叉事情就会发生。正常情况下,分叉发生在两名矿工在较短的时刻内,各自都算得了作业量证明解的时分。两个矿工在各自的候选区块一发现解,便当即传达自己的“取胜”区块到网络中,先是传达给邻近的节点而后传到达整个网络。每个收到有用区块的节点都会将其并入并延伸区块链。假如该节点在随后又收到了另一个候选区块,而这个区块又具有相同父区块,那么节点会将这个区块衔接到候选链上。其效果是,一些节点收到了一个候选区块,而另一些节点收到了另一个候选区块,这时两个不同版别的区块链就呈现了。

在图8-3中,咱们看到两个矿工简直一起挖到了两个不同的区块。这两个区块是极点区块——蓝色区块的子区块,能够延伸这个区块链。为了便于盯梢这个分叉事情,咱们设定有一个被标记为赤色的、来自加拿大的区块,还有一个被标记为绿色的、来自澳大利亚的区块。

图8-3 形象化的区块链分叉事情:一起发现两个区块

假设有这样一种情况,一个在加拿大的矿工发现了“赤色”区块的作业量证明解,在“蓝色”的父区块上延伸了块链。简直同一时刻,一个澳大利亚的矿工找到了“绿色”区块的解,也延伸了“蓝色”区块。那么现在咱们就有了两个区块:一个是源于加拿大的“赤色”区块;另一个是源于澳大利亚的“绿色”。这两个区块都是有用的,均包括有用的作业量证明解并延伸同一个父区块。这个两个区块或许包括了简直相同的买卖,只是在买卖的排序上有些许不同。

当这个两个区块传达时,一些节点首要收到“赤色”区块,一些节点收到“绿色”区块。如图8-4所示,比特币网络上的节点关于区块链的极点发生了不合,一派以赤色区块为极点,而另一派以绿色区块为极点。

图8-4 形象化的区块链分叉事情:两个区块的传达将网络分裂了

从那时起,比特币网络中邻近(网络拓扑上的邻近,而非地舆上的)加拿大的节点会首要收到“赤色”区块,并树立一个最大累计难度的区块,“赤色”区块为这个链的终究一个区块(蓝色-赤色),一起疏忽晚一些抵达的“绿色”区块。相比之下,离澳大利亚更近的节点会判定“绿色”区块胜出,并以它为终究一个区块来延伸区块链(蓝色-绿色),疏忽晚几秒抵达的“赤色”区块。那些首要收到“赤色”区块的节点,会即刻以这个区块为父区块来发生新的候选区块,并测验寻觅这个候选区块的作业量证明解。相同地,接受“绿色”区块的节点会以这个区块为链的极点开端生成新块,延伸这个链。

分叉问题简直总是在一个区块内就被处理了。网络中的一部分算力专心于“赤色”区块为父区块,在其之上树立新的区块;另一部分算力则专心在“绿色”区块上。即便算力在这两个阵营中均匀分配,也总有一个阵营抢在另一个阵营前发现作业量证明解并将其传达出去。在这个比方中咱们能够打个比方,假设作业在“绿色”区块上的矿工找到了一个“粉色”区块延伸了区块链(蓝色-绿色-粉色),他们会马上传达这个新区块,整个网络会都会以为这个区块是有用的,如图8-5所示。

图8-5 形象化的区块链分叉事情:新区块延伸了分支

一切在上一轮挑选“绿色”区块为胜出者的节点会直接将这条链延伸一个区块。可是,那些挑选“赤色”区块为胜出者的节点现在会看到两个链:“蓝色-绿色-粉色”和“蓝色-赤色”。如图8-6所示,这些节点会根据效果将“蓝色-绿色-粉色”这条链设置为主链,将“蓝色-赤色”这条链设置为备用链。这些节点接纳了新的更长的链,被逼改动了原有对区块链的观点,这就叫做链的从头共同。由于“红”区块做为父区块现已不在最长链上,导致了他们的候选区块现已成为了“孤块”,所以现在任何本来想要在“蓝色-赤色”链上延伸区块链的矿工都会停下来。全网将“蓝色-绿色-粉色”这条链辨认为主链,“粉色”区块为这条链的终究一个区块。悉数矿工马上将他们发生的候选区块的父区块切换为“粉色”,来延伸“蓝色-绿色-粉色”这条链。

图8-6 形象化的区块链分叉事情:全网在最长链上从头共同

从理论上来说,两个区块的分叉是有或许的,这种情况发生在因先前分叉而彼此对立起来的矿工,又简直一起发现了两个不同区块的解。可是,这种情况发生的几率是很低的。单区块分叉每周都会发生,而双块分叉则十分罕见。

比特币将区块距离规划为10分钟,是在更快速的买卖承认和更低的分叉概率间作出的妥协。更短的区块发生距离会让买卖清算更快地完结,也会导致愈加频频地区块链分叉。与之相对地,更长的距离会减少分叉数量,却会导致更长的清算时刻。

8.11 挖矿和算力竞赛

比特币挖矿是一个极富竞赛性的职业。自从比特币存在开端,每年比特币算力都成指数增加。一些年份的增加还体现出技能的革新,比方在2010年和2011年,很多矿工开端从运用CPU晋级到运用GPU,从而运用FGPA(现场可编程门阵列)挖矿。在2013年,ASIC挖矿的引入,把SHA256算法直接固化在挖矿专用的硅芯片上,引起了算力的另一次巨大腾跃。一台选用这种芯片的矿机能够提供的算力,比2010年比特币网络的全体算力还要大。

下表表明了比特币网络开端运转后最初五年的总算力:

2009
0.5 MH/秒–8 MH/秒 (16倍增加)

2010
8 MH/秒–116 GH/秒 (14,500倍增加)

2011
16 GH/秒–9 TH/秒 (562倍增加)

2012
9 TH/秒–23 TH/秒 (2.5倍增加)

2013
23 TH/秒–10 PH/秒 (450倍增加)

2014
10 PH/秒–150 PH/秒 到8月停止 (15倍增加)

在图8-7的图表中,咱们能够看到近两年里,矿业和比特币的生长引起了比特币网络算力的指数增加(每秒网络总算力)。

图8-7 近两年的总算力,G次hash/秒

跟着比特币挖矿算力的爆炸性增加,与之匹配的难度也相应增加。图8-8中的相对难度值显示了当前难度与最小难度(第一个块的难度)的比例。

图8-8 近两年的比特币难度值

近两年,ASIC芯片变得愈加密集,特征尺度接近芯片制作业前沿的22纳米。挖矿的利润率驱动这个职业以比通用核算更快的速度开展。现在,ASIC制作商的方针是逾越通用CPU芯片制作商,规划特征尺度为16纳米的芯片。对比特币挖矿而言,现已没有更多腾跃的空间,由于这个职业现已触及了摩尔定律的最前沿。摩尔定律指出核算才干每18个月增加一倍。虽然如此,跟着更高密度的芯片和数据中心的布置竞赛,网络算力持续坚持同步的指数增加。现在的竞赛现已不再是比较单一芯片的才干,而是一个矿场能塞进多少芯片,并处理好散热和供电问题。

8.11.1 随机值升位方案

2012年以来,比特币挖矿开展出一个处理区块头根本结构限制的方案。在比特币的早期,矿工能够经过遍历随机数(Nonce)取得契合要求的hash来挖出一个块。难度增加后,矿工常常在测验了40亿个值后仍然没有出块。可是,这很简单经过读取块的时刻戳并核算经过的时刻来处理。由于时刻戳是区块头的一部分,它的改动能够让矿工用不同的随机值再次遍历。当挖矿硬件的速度到达了4GH/秒,这种办法变得越来越困难,由于随机数的取值在一秒内就被用尽了。当呈现ASIC矿机并很快到达了TH/秒的hash速率后,挖矿软件为了找到有用的块,需求更多的空间来贮存nonce值。能够把时刻戳延后一点,但将来假如把它移动得太远,会导致区块变为无效。区块头需求一个新的“差异性”的信息来历。处理方案是运用coinbase买卖作为额定的随机值来历,由于coinbase脚本能够贮存2-100字节的数据,矿工们开端运用这个空间作为额定随机值的来历,答应他们去探究一个大得多的区块头值规模来找到有用的块。这个coinbase买卖包括在merkle树中,这意味着任何coinbase脚本的改动将导致Merkle根的改动。8个字节的额定随机数,加上4个字节的“规范”随机数,答应矿工每秒测验296(8后面跟28个零)种或许性而无需修正时刻戳。假如未来矿工能够测验一切的或许性,他们还能够经过修正时刻戳来处理。相同,coinbase脚本中也有更多额定的空间能够为将来随机数的扩展做准备。

8.11.2 矿池

在这个激烈竞赛的环境中,个体矿工独立作业(也便是solo挖矿)没有一点时机。他们找到一个区块以抵消电力和硬件本钱的或许性十分小,以至于能够称得上是赌博,就像是买菜票。就算是最快的消费型ASIC也不能和那些在巨大机房里具有数万芯片并靠近水电站的商业矿场竞赛。现在矿工们协作组成矿池,聚集数以千计参与者们的算力并共享奖赏。经过参加矿池,矿工们得到全体回报的一小部分,但一般每天都能得到,因此减少了不确定性。

让咱们来看一个详细的比方。假设一名矿工现已购买了算力合计6,000GH/S,或6TH/S的设备,在2014年8月,它的价值大约是1万美元。该设备运转功率为3千瓦(KW),每日耗电72度,每日均匀本钱7或8美元。以现在的比特币难度,该矿工均匀每155天或5个月或许solo出一个块。假如这个矿工确实在这个时限内挖出一个区块,奖赏25比特币,假如每个比特币价格约为600美元,能够得到15,000美元的收入。这能够掩盖整个时刻周期内的设备和电力本钱,还剩下大约3,000美元的净利润。可是,在5个月的时刻周期内能否挖出一个块主要靠矿工的运气。他有或许在五个月中得到两个块然后赚到十分大的利润。或许,他或许10个月都找不到一个块,然后遭受经济损失。更糟的是,比特币的作业证明(POW)算法的难度或许在这段时刻内明显上升,依照现在算力增加的速度,这意味着矿工在设备被下一代更有用率的矿机替代之前,最多有6个月的时刻取得效果。假如这个矿工加入矿池,而不是等候5个月内或许呈现一次的暴利,他每周能赚取大约500-700美元。矿池的常规收入能帮他随时刻摊销硬件和电力的本钱,而且不用承担巨大的危险。在7到9个月后,硬件仍然会过期,危险仍然很高,但在此期间的收入至少是定时的和牢靠的。

矿池经过专用挖矿协议协调成百上千的矿工。个人矿工在树立矿池账号后,设置他们的矿机衔接到矿池服务器。他们的挖矿设备在挖矿时坚持和矿池服务器的衔接,和其他矿工同步各自的作业。这样,矿池中的矿工共享挖矿使命,之后共享奖赏。

成功出块的奖赏付出到矿池的比特币地址,而不是单个矿工的。一旦奖赏到达一个特定的阈值,矿池服务器便会定时付出奖赏到矿工的比特币地址。一般情况下,矿池服务器会为提供矿池服务收取一个百分比的费用。

参加矿池的矿工把搜索候选区块的作业量切割,并根据他们挖矿的奉献赚取“比例”。矿池为赚取“比例”设置了一个低难度的方针,一般比比特币网络难度低1000倍以上。当矿池中有人成功挖出一块,矿池取得奖赏,并和一切矿工依照他们做出奉献的“比例”数的比例分配。

矿池对任何矿工开放,不管巨细、专业或业余。一个矿池的参与者中,有人只要一台小矿机,而有些人有一车库高端挖矿硬件。有人只用几十度电挖矿,也有人会用一个数据中心消耗兆瓦级的电量。矿池如何衡量每个人的奉献,既能公正分配奖赏,又防止做弊的或许?答案是在设置一个较低难度的前提下,运用比特币的作业量证明算法来衡量每个矿工的奉献。因此,即便是池中最小的矿工也常常能分得奖赏,这足以鼓励他们为矿池做出奉献。经过设置一个较低的取得比例的难度,矿池能够计量出每个矿工完结的作业量。每当矿工发现一个小于矿池难度的区块头hash,就证明了它现已完结了寻觅效果所需的hash核算。更重要的是,这些为取得比例奉献而做的作业,能以一个核算学上可衡量的办法,全体寻觅一个比特币网络的方针散列值。成千上万的矿工测验较小区间的hash值,终究能够找到契合比特币网络要求的效果。

让咱们回到骰子游戏的比喻。假如骰子玩家的方针是扔骰子效果都小于4(全体网络难度),一个矿池能够设置一个更简单的方针,核算有多少次池中的玩家扔出的效果小于8。当池中的玩家扔出的效果小于8(矿池比例方针),他们得到比例,但他们没有赢得游戏,由于没有完结游戏方针(小于4)。但池中的玩家会更常常的到达较简单的矿池比例方针,规则地赚取他们的比例,虽然他们没有完结更难的赢得竞赛的方针。

时不时地,池中的一个成员有或许会扔出一个小于4的效果,矿池取胜。然后,收益能够在池中玩家取得的比例基础上分配。虽然方针设置为8或更少并没有赢得游戏,可是这是一个衡量玩家们扔出的点数的公正办法,一起它偶然会发生一个小于4的效果。

相同的,一个矿池会将矿池难度设置在确保一个独自的矿工能够频频地找到一个契合矿池难度的区块头hash来赢取比例。时不时的,某次测验会发生一个契合比特币网络方针的区块头hash,发生一个有用块,然后整个矿池取胜。

8.11.2.1 保管矿池

大部分矿池是“保管的”,意思是有一个公司或许个人经营一个矿池服务器。矿池服务器的一切者叫矿池管理员,一起他从矿工的收入中收取一个百分比的费用。

矿池服务器运转专业软件以及协调池中矿工们活动的矿池采矿协议。矿池服务器一起也衔接到一个或更多比特币彻底节点并直接访问一个块链数据库的完好副本。这使得矿池服务器能够替代矿池中的矿工验证区块和买卖,缓解他们运转一个完好节点的担负。关于池中的矿工,这是一个重要的考量,由于一个完好节点要求一个具有最少15-20GB的永久贮存空间(磁盘)和最少2GB内存(RAM)的专用核算机。此外,运转一个完好节点的比特币软件需求监控、保护和频频晋级。由于缺乏保护或资源导致的任何宕机都会伤害到矿工的利润。关于很多矿工来说,不需求跑一个完好节点就能采矿,也是加入保管矿池的一大优点。

矿工衔接到矿池服务器运用一个采矿协议比方Stratum (STM)或许 GetBlockTemplate (GBT)。一个旧规范GetWork (GWK) 自从2012年底现已根本上过期了,由于它不支撑在hash速度超越4GH/S时采矿。STM和GBT协议都创建包括候选区块头模板的区块模板。矿池服务器经过聚集买卖,增加coinbase买卖(和额定的随机值空间),核算MERKLE根,并衔接到上一个块hash来树立一个候选区块。这个候选区块的头部作为模板分发给每个矿工。矿工用这个区块模板在低于比特币网络的难度下采矿,并发送成功的效果返回矿池服务器赚取比例。

8.11.2.2 P2P矿池

保管矿池存在管理人做弊的或许,管理人能够运用矿池进行两层付出或使区块无效。(拜见“8.12 共同进犯”) 此外,中心化的矿池服务器代表着单点故障。假如由于回绝服务进犯服务器挂了或许被减慢,池中矿工就不能采矿。在2011年,为了处理由中心化形成的这些问题,提出和实施了一个新的矿池挖矿办法。P2Pool是一个点对点的矿池,没有中心管理人。

P2Pool经过将矿池服务器的功用去中心化,完成一个并行的相似区块链的体系,名叫比例链。一个比例链是一个难度低于比特币区块链的区块链体系。比例链答应池中矿工在一个去中心化的池中协作,以每30秒一个比例区块的速度在比例链上采矿,并取得比例。比例链上的区块记录了奉献作业的矿工的比例,而且承继了之前比例区块上的比例记录。当一个比例区块上还完成了比特币网络的难度方针时,它将被播送并包括到比特币的区块链上,并奖赏一切现已在比例链区块中取得比例的池中矿工。实质上说,比起用一个矿池服务器记录矿工的比例和奖赏,比例链答应一切矿工经过相似比特币区块链体系的去中心化的共同机制盯梢一切比例。

P2Pool采矿方法比在矿池中采矿要复杂的多,由于它要求矿工运转空间、内存、带宽充足的专用核算机来支撑一个比特币的完好节点和P2Pool节点软件。P2Pool矿工衔接他们的采矿硬件到本地P2Pool节点,它经过发送区块模板到矿机来模仿一个矿池服务器的功用。在P2Pool中,独自的矿工创建自己的候选区块,聚合买卖,十分相似于solo矿工,可是他们在比例链上协作采矿。P2Pool是一种比独自挖矿有更细粒度收入优势的混合办法。可是不需求像保管矿池那样给管理人太多权力。

最近,在集中式矿池现已接近发生51%进犯的忧虑下,P2Pool的比例增加明显。(拜见拜见“8.12 共同进犯”)P2Pool协议的进一步开展有望去除对完好节点的需求,这将使去中心化采矿更简单。

8.12 共同进犯

比特币的共同机制指的是,被矿工(或矿池)企图运用自己的算力实行欺骗或损坏的难度很大,至少理论上是这样。就像咱们前面讲的,比特币的共同机制依赖于这样一个前提,那便是绝大多数的矿工,出于自己利益最大化的考虑,都会经过诚笃地挖矿来维持整个比特币体系。可是,当一个或许一群具有了整个体系中很多算力的矿工呈现之后,他们就能够经过进犯比特币的共同机制来到达损坏比特币网络的安全性和牢靠性的意图。

值得注意的是,共同进犯只能影响整个区块链未来的共同,或许说,最多能影响不久的曩昔几个区块的共同(最多影响曩昔10个块)。而且跟着时刻的推移,整个比特币块链被篡改的或许性越来越低。理论上,一个区块链分叉能够变得很长,但实践上,要想完成一个十分长的区块链分叉需求的算力十分十分大,跟着整个比特币区块链逐渐增加,曩昔的区块根本能够以为是无法被分叉篡改的。一起,共同进犯也不会影响用户的私钥以及加密算法(ECDSA)。共同进犯也不能从其他的钱包那里偷到比特币、不签名地付出比特币、从头分配比特币、改动曩昔的买卖或许改动比特币持有纪录。共同进犯能够形成的仅有影响是影响最近的区块(最多10个)而且经过回绝服务来影响未来区块的生成。

共同进犯的一个典型场景便是“51%进犯”。幻想这么一个场景,一群矿工操控了整个比特币网络51%的算力,他们联合起来打算进犯整个比特币体系。由于这群矿工能够生成绝大多数的块,他们就能够经过成心制作块链分叉来完成“两层付出”或许经过回绝服务的方法来阻挠特定的买卖或许进犯特定的钱包地址。区块链分叉/两层付出进犯指的是进犯者经过不承认最近的某个买卖,并在这个买卖之前重构新的块,然后生成新的分叉,继而完成两层付出。有了充足算力的确保,一个进犯者能够一次性篡改最近的6个或许更多的区块,然后使得这些区块包括的本应无法篡改的买卖消失。值得注意的是,两层付出只能在进犯者具有的钱包所发生的买卖上进行,由于只要钱包的具有者才干生成一个合法的签名用于两层付出买卖。进犯者只能在自己的买卖上进行两层付出进犯,但当这笔买卖对应的是不可逆转的购买行为的时分,这种进犯便是有利可图的。

让咱们看一个“51%进犯”的实践事例吧。在第1章咱们讲到,Alice 和 Bob 之间运用比特币完结了一杯咖啡的买卖。咖啡店老板 Bob 愿意在 Alice 给自己的转账买卖承认数为零的时分就向其提供咖啡,这是由于这种小额买卖遭受“51%进犯”的危险和顾客购物的即时性(Alice 能当即拿到咖啡)比起来,显得微乎其微。这就和大部分的咖啡店对低于25美元的信用卡消费不会费时费力地向顾客索要签名是一样的,由于和顾客有或许撤销这笔信用卡付出的危险比起来,向用户索要信用卡签名的本钱更高。相应的,运用比特币付出的大额买卖被两层付出的危险就高得多了,由于买家(进犯者)能够经过在全网播送一个和实在买卖的UTXO一样的假造买卖,以到达取消实在买卖的意图。两层付出能够有两种方法:要么是在买卖被承认之前,要么进犯者经过块链分叉来完结。进行51%进犯的人,能够取消在旧分叉上的买卖记录,然后在新分叉上从头生成一个相同金额的买卖,然后完成两层付出。

再举个比方:进犯者Mallory在Carol的画廊买了描绘伟大的中本聪的三联组画,Mallory经过转账价值25万美金的比特币与Carol进行买卖。在等到一个而不是六个买卖承认之后,Carol放心地将这幅组画包好,交给了Mallory。这时,Mallory的一个同伙,一个具有很多算力的矿池的人Paul,在这笔买卖写进区块链的时分,开端了51%进犯。首要,Paul运用自己矿池的算力从头核算包括这笔买卖的块,而且在新块里将本来的买卖替换成了另外一笔买卖(比方直接转给了Mallory的另一个钱包而不是Carol的),然后完成了“两层付出”。这笔“两层付出”买卖运用了跟原有买卖共同的UTXO,但收款人被替换成了Mallory的钱包地址。然后,Paul运用矿池在假造的块的基础上,又核算出一个更新的块,这样,包括这笔“两层付出”买卖的块链比原有的块链高出了一个块。到此,高度更高的分叉区块链替代了原有的区块链,“两层付出”买卖替代了本来给Carol的买卖,Carol既没有收到价值25万美金的比特币,本来具有的三幅无价之宝的画也被Mallory白白拿走了。在整个过程中,Paul矿池里的其他矿工或许自始至终都没有觉察到这笔“两层付出”买卖有什么异样,由于挖矿程序都是自动在运转,而且不会时时监控每一个区块中的每一笔买卖。

为了防止这类进犯,售卖大宗产品的商家应该在买卖得到全网的6个承认之后再交给产品。或许,商家应该运用第三方的多方签名的账户进行买卖,而且也要等到买卖账户取得全网多个承认之后再交给产品。一条买卖的承认数越多,越难被进犯者经过51%进犯篡改。关于大宗产品的买卖,即便在付款24小时之后再发货,对买卖双方来说运用比特币付出也是便利而且有用率的。而24小时之后,这笔买卖的全网承认数将到达至少144个(能有用下降被51%进犯的或许性)。

共同进犯中除了“两层付出”进犯,还有一种进犯场景便是拒肯定某个特定的比特币地址提供服务。一个具有了体系中绝大多数算力的进犯者,能够轻易地疏忽某一笔特定的买卖。假如这笔买卖存在于另一个矿工所发生的区块中,该进犯者能够成心分叉,然后从头发生这个区块,而且把想疏忽的买卖从这个区块中移除。这种进犯形成的效果便是,只需这名进犯者具有体系中的绝大多数算力,那么他就能够持续地干涉某一个或某一批特定钱包地址发生的一切买卖,然后到达回绝为这些地址服务的意图。

需求注意的是,51%进犯并不是像它的命名里说的那样,进犯者需求至少51%的算力才干发起,实践上,即便其具有不到51%的体系算力,依然能够测验发起这种进犯。之所以命名为51%进犯,只是由于在进犯者的算力到达51%这个阈值的时分,其发起的进犯测验简直肯定会成功。实质上来看,共同进犯,就像是体系中一切矿工的算力被分成了两组,一组为诚笃算力,一组为进犯者算力,两组人都在争先恐后地核算块链上的新块,只是进犯者算力算出来的是精心构造的、包括或许除掉了某些买卖的块。因此,进犯者具有的算力越少,在这场决逐中取胜的或许性就越小。从另一个角度讲,一个进犯者具有的算力越多,其成心发明的分叉块链就或许越长,或许被篡改的最近的块或许或许受其操控的未来的块就会越多。一些安全研究安排运用核算模型得出的结论是,算力到达全网的30%就足以发起51%进犯了。

全网算力的急剧增加现已使得比特币体系不再或许被某一个矿工进犯,由于一个矿工现已不或许占据全网哪怕的1%算力。可是中心化操控的矿池则引入了矿池操作者出于利益而实施进犯的危险。矿池操作者操控了候选块的生成,一起也操控哪些买卖会被放到新生成的块中。这样一来,矿池操作者就具有了除掉特定买卖或许两层付出的权力。假如这种权力被矿池操作者以奇妙而有节制的方法乱用的话,那么矿池操作者就能够在不为人知的情况下发起共同进犯并获益。

可是,并不是一切的进犯者都是为了利益。一个或许的场景便是,进犯者只是是为了损坏整个比特币体系而发起进犯,而不是为了利益。这种意在损坏比特币体系的进犯者需求巨大的投入和精心的方案,因此能够幻想,这种进犯很有或许来自政府资助的安排。相同的,这类进犯者或许也会购买矿机,运营矿池,经过乱用矿池操作者的上述权力来实施回绝服务等共同进犯。可是,跟着比特币网络的算力呈几何级数快速增加,上述这些理论上可行的进犯场景,实践操作起来现已越来越困难。近期比特币体系的一些晋级,比方旨在进一步将挖矿操控去中心化的P2Pool挖矿协议,也都正在让这些理论上可行的进犯变得越来越困难。

毫无疑问,一次严峻的共同进犯事情势必会下降人们对比特币体系的决心,从而或许导致比特币价格的跳水。可是,比特币体系和相关软件也一直在持续改进,所以比特币社区也势必会对任何一次共同进犯快速做出呼应,以使整个比特币体系比以往愈加稳健和牢靠。

==目录==

简介
前言
第1章 介绍
第2章 比特币的原理
第3章 比特币客户端
第4章 密钥、地址、钱包
第4章 高档密钥和地址
第5章 买卖
第6章 比特币网络
第7章 区块链
第8章 挖矿与共同
第8章 区块链分叉、矿池、共同进犯
第9章 竞赛币、竞赛块链和应用程序
第10章 比特币安全

附录1 买卖脚本的操作符、常量和符号
附录2 比特币改进协议
附录3 pycoin库、ku程序和tx买卖程序
附录4 sx工具下一些的命令

本文原链接: http://zhibimo.com/read/wang-miao/Mastering-Bitcoin/Chapter08.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注