区块链在中国(4):比特币的工作量证明

比特币需要每个block(区块)证明在创建它们的过程中投入了足够都的工作量,从而确保那些想篡改历史区块信息的恶意节点必须要付出更多工作量的代价,而不是只是修改一条记录那么简单——工作量证明。
将区块链在一起(hash相连相扣)使得只修改一个交易而不修改所有后续交易成为不可能。

工作量证明(Proof-of-Work)

使用SHA-256对一个value进行hash,看结果是否拥有所要求数量的前导零,比如我们要求hash得到的值为 0000……,拥有四个前导零。在比特币中,我们是对一个block进行SHA-256哈希,为此我们将一个nonce加入到block中,你可以理解为这个nonce是一个值可以变得整数,这样我们就可以不断递增这个nonce,直到整个block的hash结果拥有所要求的前导零。
区块链在中国(4):比特币的工作量证明_第1张图片

有人想恶意篡改某一个block上的交易信息,因为这是一个前后相接的区块链,他就不得不把该block之后的所有区块都以他恶意篡改后的block为基准重新计算一遍,代价巨大。与一IP一票不同(恶意攻击者如果掌控大量IP发放权十分危险),比特币是一CPU一票的机制,意味着算力拥有决定权,网络中以最长的那条区块链为合法链,它代表着最大的工作量证明。如果网络中大多数(51%以上)的算力由诚实节点掌控,那么这些诚实节点产生的合法链会增长的最快,超过任何一条与之竞争长度的链,进而防止恶意发生。正如前面所说,如果一个攻击者要修改过去的某一个block,他需要重新做这个block以及它之后所有block的工作量证明,然后需要赶上并超过那条由诚实节点们打造的合法链。但是随着合法连继续添加新的block,该攻击者追上的可能性是指数下降的。

交易网络

  1. 新的交易被广播给所有的节点
  2. 每一个节点将该交易纳入一个block中
  3. 每个节点开始了自己这个block的工作量证明工作,它们都希望能够出一份难度大的工作量证明,这样好让全网接受和信服
  4. 当某个节点完成了自己的工作量证明,就会广播自己的这个block给其他所有节点
  5. 收到这个block的节点会判断这个block中的所有交易是否合法和是否已经发生过,如果合法并且没有发生过,就接受这个block
  6. 节点接受这个block后就会以这个block的hash为前一个hash继续去挖接下来的block

节点们总是认为最长的链为合法的链,并努力去扩大这条链。如果两个节点同时广播出各自挖出的block,其他节点以自己最先收到的block为准开始自己的挖矿,但同时会保留另一个block。所以就会出现一些节点先收到A的block并在其上开始挖矿,同时保留着B的block以防止B的block所在的分支日后成为较长的分支。直到其中某个分支在下一个工作量证明中变得更长,之前那些在另一条分支上工作的节点就会转向这条更长的。

交易的广播没有必要让所有的节点都收到,只要其中很多节点收到就可以,收到的节点致力于block的挖矿。而block的广播也同样能容忍丢失,即没有必要所有的节点都必须收到,如果一个节点没有收到这个block,当它收到下一个block的时候会意识到它错过了这个block,并主动请求这个遗失的block。

区块

一般比特币网络会使得每生成2016个区块的耗时在两周,即每十分钟生成一个区块,如果时间短于两周,难度会增长,如果超出了两周,难度会递减,因此无论整个网络中的挖矿能力多强,每十分钟只会产生一个新区块。比特币的区块由区块头和该区块所包含的交易列表组成,区块头的大小为80字节,由4字节的版本号、32字节的上一个区块的散列值、32字节的Merkle Root Hash、4字节的时间缀(当前时间)、4字节的当前难度值、4字节的随机数组成。区块包含的交易列表则附加在区块头后面。我们仅对区块头进行哈希。
区块链在中国(4):比特币的工作量证明_第2张图片

隐藏在背后的不利原理

如果每个人都是可信并且为他人着想的好人,其实这个世界就会很简单,不会有这样那样的约束,但现实是我们需要制定一套又一套的法律和规约来让这个复杂的社会安全运作,不失控。比特币网络也是如此,每个节点本质上都会存在潜在的道德问题,因此达成共识就会变得很困难,总会有恶意节点为了自身利益而搞破坏。

生物学上有一个原理叫做不利原理(the Handicap Principle),该原理可以帮助我们解释工作量证明的过程。这个原理说,当两只动物有合作的动机时,它们必须很有说服力地向对方表达善意。为了打消对方的疑虑,它们向对方表达友好时必须附上自己的代价,使得自己背叛对方时不得不付出昂贵的代价。换句话说,表达方式本身必须是对自己不利的。

比特币的工作量证明很好的利用了不利原理解决了一个自己网络里的社会问题:产生一个新区块是建立在耗时耗力的巨大代价上的,所以当新区块诞生后,某个旷工要么忽视它,继续自己的新区块寻找,要么接受它,然后接着它再继续自己的更新区块的挖掘。显然前者是不明智的,因为在比特币网络里,以最长链为合法链,这个旷工选择忽视而另起炉灶,就不得不说服足够多的旷工沿着他的路线走,相反要是他选择接受,不仅不会付出额外的辛苦,而且照样可以继续自己的更新区块的挖矿,只利不害,而且这属于全网成员在遵守一个不成文的规定,对之后该旷工自己发现新区块更有利,不会再出现你走你的我走我的,是一个全网良性建设。比特币通过不利原理约束了节点行为,十分伟大,因为这种哲学可以用到如今互联网建设的好多方面,比如防垃圾邮件、防DDoS攻击,我们有理由相信,互联网或者分布式网络系统与现实的社会运作有着千丝万缕的联系,正因为如此,区块链的发展并不是冥冥之中的产物。

你可能感兴趣的:(BlockChain)