学习
实践
活动
专区
工具
TVP
写文章

比特币:乌合之众的共识(3)

(一)双花:一个币掰成两个花

让我们先考虑一个简单的问题,位于中国的A持有一个比特币,需要支付给商家B。A于是向全网发出这样一个交易信息:

A 转给-> B : 1比特币 (1)

这个时候,A可以通过在美国的一个代理节点在同一时刻向全网广播另外一比一模一样的交易,只是把接受人换成了自己控制的另外一个钱包地址A’,类似于发给自己的马甲,试图冲销前面给B的交易:

A 转给-> A’: 1比特币 (2)

这两个交易消息显然是冲突的。这就是典型的双花问题(double spending),也就是一个币掰成两个花。

上面第一个交易消息需要消耗至少0.3秒才能到达美国,在这0.3秒以内,第二个交易消息很可能已经被北美大部分地方的比特币网络节点收到了。反过来也是,在第二个消息到达中国之前,第一个消息已经被中国及附近的区域的比特币网路节点收到了。这个时候,整个网络上不同区域的节点收到的交易信息是不一样的,而且还是冲突的。当然,过一会儿,这两条矛盾的消息最终会抵达每个比特币节。

因此,在某个时刻,比特币网络中存在:

1)不同节点收到的交易信息是冲突的。

2)同一个节点收到的交易信息也是冲突的

(二)不知对错,合规即可

一个比特币记账节点在面对类似的两个冲突的双花消息的时候怎么办呢?该记录哪一个呢?

比特币将交易记录到区块中,一个区块就相当于账本的一页。这个账本平均每十分钟增加一页最新的交易。凡是记录到账本中的交易,就相当于对交易的确认。

比特币只确保每一页新增加的账本(区块)中的交易互相不矛盾----自身不矛盾。也不会包含与任何一个历史交易相矛盾的交易----与历史不矛盾。也就是说,类似上面双花的形成的两笔交易,不会出现在同一区块中。每一个新增加的区块,里面的交易也不会跟区块链上已有的历史交易形成双花。这样两个双花的交易永远不可能同时被确认。一个确认了,另一个就必然被抛弃。

因此,从一个参与比特币记账的矿工节点的视角来看,当他同时收到上面两个冲突交易消息的时候。他不管这个钱应该付给谁是对的,也没有办法判断。他采取一个最简单的原则,选择一个对自己最有利的一个交易(比如交易费给的多的)。只要保证两个不矛盾计科,一个是打包交易之间不矛盾,另一个是与历史交易不矛盾。

这个特性相对来说就比较好实现了。只要控制每个矿工生成的区块都需要保证是合规的即可。

(三)挖矿:争夺记账权

另外一个问题,不同的比特币记账节点(矿工),记得帐不一样,或者说产生的区块不一样,应该以哪一个为准呢?

答案是,“实力+运气”,竞争出来的。

全球成千上万个矿工竞争性的生成新的区块,谁做的又好又快,大家就以他生成的区块为准。而且奖励给他一个固定数量的比特币,这个数量目前是12.5个比特币,另外还有交易费。这是我们通常说的“挖矿”。

注意这里有些文章写得是从矿工中选出一个来生成最新的区块,这是不严谨的说法。因为被挑选的不是矿工,而是他们生成的区块。

被挑选的标准有两个,一个是好,另一个是快。

“好”的意思是,区块是正确的,不仅包括上面说的两个不矛盾,也包括所有其他比特币规则中对一个合格区块的描述。就是这个区块是符合规则的。这里面的关键是,找一个数字(我们成为挖矿种子数),使得整个区块跟这个数字一起进行一个固定的数学公式运算,得到的结果满足一个特定的格式(前面多少位是0)。

这个结果并没有什么意义,只是为了给大家制造难度,给这些矿工找事情做。因为没有别的办法,每个矿工都只能用最笨的办法,就是一个一个试所有可能的数字,不断修改,直到找到符合标准的那个。

当然,算力强的矿工可以在同样的时间尝试更多的数字,因而有更大的机会先找到那个合适的数字。但是,算力强也不必然一定挖出区块,因为毕竟都是在猜,猜的快未见得一定能比猜的慢的先中奖。

“快“的意思是整个网络中最早被生成的区块,将被全网认可为挖出的最新的区块。当然,这里生成的区块必须要满足上面“好”的标准。

因此,所有人都在全力的运算。因为花了这么大的代价来求得一个被选择的机会,必须不能犯错误。否则就会前功尽弃。

(四) 记账权

每个矿工在生成区块的时候,有三个重要权力:

1)在交易的第一笔把发行的比特币给自己,区块中所有的交易费也给自己。

2)选择哪些交易被纳入区块。

3)选择目前比特币的区块链上最长链的最后一个区块作为自己区块的父亲区块。

对于第一个发行费而言,这是一个固定选项。每个矿工都会发行费和交易费转入自己的钱包地址,作为自己的收入。

对于第二点而言,如前所述,在同一时刻,每个节点能看到的未被确认的交易有很多,而且很有可能不一样,所以每个矿工生成的区块里面包含的交易可能是不一样的。交易纳入区块是,作为一个理性的矿工,一定会从合规的交易中选择交易费高的那些交易打包到区块中。否则自己生成的区块要么不合格,要么没有自己利益最大化。虽然没有第三方在比特币网络中对矿工打包区块进行监督和检查,但如果一个不合格的区块打包出来,会没有其他矿工认可的。

对于第三点而言,每个区块都必须要选择一个父区块,选择的标准是当前最长的链上的最后一个区块。这本质上是对之前已经生成的区块的认可和下注,因为你需要选择父区块必须是正确的和最新的,也就是区块链里面最长的那条链的最后一个区块。而且这个认可是有机会成本的,因为一个区块只能有一次选择父区块的机会。

(五)记账权会不会被滥用

矿工们既然有权力记账,在区块中写入转账交易,这个全力会不会被滥用呢?

答案当然是,不会!

矿工生成的区块中,第一个交易就是先给自己12.5个比特币以及本区块所有的交易费,随后才是其他交易。如果这个区块因为任何原因没有获得合法性,这个奖励也就同样没有合法性了。值得注意的是,矿工挖矿得到的这笔巨款,需要等到这个区块被99个区块确认后才能动用。

在这段时间内,这个区块会经过很多很多考验。

首先,这个新出的区块的其他节点,除了羡慕嫉妒恨以外,就是立即验证这个块是不是合法,如果合法,同时也是目前就立刻马上停下手里的工作,以这个区块为父区块,开始构造下一个区块。因为区块链已经增长了一个区块了,链的末端已经变长了。原来的父区块已有了孩子,变成了爷爷区块。

当然,如果有人认为这个区块不合法。那他可以直接不理会,还继续之前的工作。因为规则是清晰的,哪怕有一部分人串通起来,坚持认为这个区块合法。大部分未被收买的矿工,仍然会沿着之前最后一个合法区块往下延伸。只要被收买和串通矿工算力没有超过50%,合法的区块生长速度就会超过非法的,最终将非法区块作废掉,因为比特币的规则是最长合法链条作为主链。因此,矿工如果串通的话,会面临一个巨大的风险和机会成本。

同时,每一次大家在竞争再下一个区块的记账权,选择父区块,都在进行选择,都是对父区块所在的链的审视和评估。因此,比特币区块链上的交易数据,是经过比特币网络上所有矿工的不断审视和评估。这些审视和评估都是花费巨大的算力代价,冒着失去巨额奖金的风险进行的。没人会拿这个开玩笑的,毕竟用钱和代价表达的意见是靠谱的。

考虑这些选择和评价自己又要经历99轮的被选择和评价,因此我们可以以很大的概率认为,比特币的记账权不会被滥用。这也是为什么在过去的9年多时间,乌合之众的比特币网络能够顺利的形成共识,运行良好。

尾声

中本聪设计的比特币网络共识机制,将如此大规模的一群互不相识、没有任何信任、甚至没有人群边界的乌合之众组织起来形成一个协作体系,管理着超过千亿美元资产的价值存储和转移,却没有一个个人或组织作为中心负责。这本身就是区块链技术的妙处所在。笔者虽然体会到一二,但仍然感觉未能表达通透,下来仍会继续学习,继续输出。谢谢阅读。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180413G1ODUV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券