第四章比特币链块工作量证明原理及矿工挖矿过程

假设如果我们有一个可信任的中央服务器, 那么实现这个系统是一件很简单的事情; 就按照需求所描述的去编写代码即可,把状态记录在中央服务器的硬盘上。 然而,与比特币一样,我们试图去建立一个去中心化的货币系统, 所以,我们需要把状态转移系统和一致性系统结合起来,以确保每个人都同意这交易的顺序。比特币的去中心化的一致性处理进程要求网络中的节点连续不断的去尝试对交易进行打包,这些被打成的包就称为“区块”。 这个网络会故意的每隔 10 分钟左右就创建一个区块, 每一个区块里都包含一个时间戳,一个随机数,一个对上一个区块的引用 ,和从上一个区块开始的所有交易的列表。随着时间的推移,这会创建一个持久的,不断增长的区块链,这个区块链不断的被更新,使其始终代表着最新的比特币总账的状态。  
比特币工作量证明原理

关于比特币工作量证明的区块链技术实现

在这个范例中,用来验证一个比特币区块是否有效的算法如下:

  1. 检查其引用的上一个区块是否存在并且有效.
  2. 检查这个区块的时间戳是否大于上一个区块的时间戳 并且小于 2 小时之内
  3. 检查这区块上的工作证明是否有效.
  4. 让 S[0] 成为上一个区块的最末端的状态. 假设 TX 是这个区块的交易列表,且有 n 个交易。 做 for 循环,把 i 从 0 加到到 n-1, 设置 S[i+1] = APPLY(S[i],TX[i]) 如果任何一个应用(APPLY)返回错误,则退出并且返回。
  5. 返回 true,并且把 S[n] 设置成这个区块最末端的状态。  

从本质上说,区块中的每一个交易都必须提供一个有效的状态,从交易执行前的标准状态到执行后的一个新的状态。 注意,状态并没有以任何方式编码进区块中;它纯粹是一个被验证节点所记住的抽象,并且它只能用来被从创世区块起的每一个区块进行安全的计算,然后按照顺序的应用在每一个区块中的每一次交易中。此外,请注意矿工把交易打包进区块的顺序是很重要的; 如果一个区块中有 2 个交易 A 和 B,B 花了一个由 A 创建的 UTXO, 那么如果 A 比 B 更早的进入区块,那么这个区块将是有效的,不然就是无效的。

在上述列出的验证条件中,“工作证明” 这一明确的条件就是每一个区块的 2 次 SHA256 哈希值, 它作为一个 256 位的数字,必须小于一个动态调整的目标值, 截止到本文写作的时间,该动态调整的值的大小大约是 2 的 187 次方。这样做的目的是为了让创建区块的算法变难, 从而,阻止幽灵攻击者从对它们有利的角度出来,来对区块链进行整个的改造。因为 SHA256 被设计成一个完全不可预测的伪随机函数, 这创建一个有效区块的唯一的方法只有是不断的尝试和出错, 不断对随机数进行递增,然后查看新的哈希值是否匹配。

按照当前的目标值 2 的 187 次方,这个网络在找到一个有效的区块前,必须进行 2 的 69 次方次的尝试; 一般来说,每隔 2016 个区块,这个目标值就会被网络调整一次 ,因此网络中平均每隔 10 分钟就会有一些节点产生出一个新的区块。为了补偿这些矿工的计算工作, 每一个区块的矿工有权要求包含一笔发给他们自己的 12.5BTC(不知道从哪来的)的交易。另外,如果任何交易,它的总的输入的面值比总的输出要高,这一差额会作为“交易费用”转给矿工。顺便提一下,对矿工的奖励是比特币发行的唯一途径,创世状态中并没有比特币。

为了更好的理解挖矿的目的,让我们来检测一下,当恶意攻击发生时会发生什么. 由于比特币的底层的加密区块链技术众所周知是安全的,所以这攻击者的目标将是比特币系统中的某个部份,那就是没有被密码直接保护的:交易的次序。攻击者的策略其实很简单:

  1. 发送 100 BTC 到一个商人,以兑换一些商品 (最好是快速交易的数字商品)
  2. 等待商品的发货
  3. 创建另一个交易,发送同样的 100 BTC 给自己
  4. 尝试让网络相信他发给他自己的那个交易是最新出现的。  

一旦步骤 (1)发生, 几分钟后,一些矿工就会把这个交易打包进一个区块, 假设声明该区块编号是270000. 大约一个小时后, 在那个区块之后又会有新增的五个区块添加到区块链中, 这五个区块都间接的指向了那个交易,从而“确认”了那交易是真的。在这一刻,商家接收到了货款,并且发出了商品; 因为我们假设是一个数字商品,所以攻击者能立刻就收到货。现在攻击者创建另一个交易,向他自己的另一个账户发送这 100 BTC 。如果这个攻击者只是简单的释放了这个交易,那么这个交易将不会被执行; 矿工将会尝试运行 APPLY(S,TX) ,注意那个 TX 消耗一个在以太坊状态中已经不存在的 UTXO。因此,这个攻击者创建了一个比特币区块链的“分支” , 开始挖取区块 270000 的另一个版本,这个版本指向同样的区块 269999 作为一个父亲,但是用这新的交易替换了旧的。因为这区块的数据是不同的 , 这就需要为相关的区块重新做工作证明。 此外,这个攻击者的新的版本的区块 270000 有一个不同的哈希,所以这已存在的区块 270001 到 270005 不会指向它; 因此, 这原来的链和这攻击者的新链是完全独立的。区块链的规则是:在分支中最长的区块链链将会变成真正的链,所以合法的矿工将会继续在 270005 这条链上工作,同时攻击者自己一个人单独的工作在新版本的 270000 这条链上。为了让攻击者他自己的区块成为最长,他需要的计算能力比其他网络的总和还要多(“51%攻击”)。
比特币的区块依赖之前所有区块的哈希。一个拥有巨大计算能力的攻击者可以重新设计工作的证明(PoW),并最终获得大量的比特币。

参考资料:
1、比特币的工作原理
2、比特币工作原理浅析
3、比特币挖矿机

免责声明:本文由信比特作者原创文章,不构成投资建议,请谨慎对待。

版权声明:信比特作者保留原创权利。文章为作者独立观点,转载请注明出处

原文链接:http://www.bitpoa.com/BlockchainCollege/45.html

生成海报
收藏

相关推荐

比特币的未来:从看涨到看跌的12种情况

前言:没有人知道比特币会发生什么。不是怀疑者,不是信徒,甚至是中本聪。没有水晶球。加密领域的许多最敏锐的头脑都怀有这种不确定性,他们大体上同意我们只是不知道。也许那是魅力的一部分。 ...

比特币正在帮助勒索软件行业

前言:我们生活在一个世界里,无偿金钱的第二种后果(例如更多地使用勒索软件)已经显而易见。智能手表制造商Garmin,以色列保险公司Shirbit,电子产品制造商Foxconn,宾夕法尼亚州的特拉华县 ...

为什么硅谷没有得到比特币(图文)

前言:在比特币存在的最后十二年中,硅谷一直误解了比特币,由于他们认可了愚蠢的想法甚至更糟的骗局,导致了许多值得纪念的时刻。硅谷的两个主要参与者是科技公司和风险投资(VC,又称投资者)。高科技公司生产我们大家都使用的产品,而风险投资人则为他们的努力提供资金。 ...

0 条评论

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

第四章比特币链块工作量证明原理及矿工挖矿过程