一个比特币是怎么来的?这一节我们会得到答案。
本系列历史文章列表
从零开始区块链:对等网络与电子现金是什么?——比特币经典论文研读 (1)
从零开始区块链:如何防止一笔钱花两次?——比特币经典论文研读 (2)
从零开始区块链:如何证明计算机的工作量?——比特币经典论文研读 (3)
7.工作量证明(2)
接第3篇的铺垫,这里就很好理解了。
(1) 比特币采用SHA256的标准做哈希运算,平均的工作量与0比特位的数量指数级增长。
(2) 为了时间戳的考虑,在计算每一个块的哈希值的时候,增加了一个随机数(nonce)。随机数每次加1,生成哈希值,检查是否满足前缀是若干个0的要求。CPU需要做大量计算才能得到满足要求的解。如果要块的内容修改,那就需要重新计算,找到满足条件的哈希值。这里面引用的就是哈希的细节敏感特性,当你修改了内容,哈希值就变化了
(3) 工作量证明还解决了一个“集体决策”的“大多数”问题。在网络中,到底用什么来代表“大多数”?如果用一个IP地址代表一票,那有很多IP地址的人可以操纵结果。于是作者采用了“一个CPU一票”的方式来代表大多数的意见。因为链的生成是需要工作量的,于是最长的那一条链,必然就拥有最多的工作量,也就是代表大多数人的意见。而工作量其实就是由CPU来计算的,于是这样就落实了一个CPU一票的精神。这里作者的逻辑就是,选择一个相对有难度的指标,计算工作量,然后把大多数人的工作量攒在一起,这就形成了一个共同的意见。不过作者没有料到的时,现在也有很多人拥有大量的CPU,而且不止是CPU,已经有专门的芯片了……
(4) 如果大部分的CPU算力在好人手里,那大家齐心协力一起算,工作的积累就会很快,链的增长速度超过其他链。如果要修改一个过去的块,攻击者要把这个块之后的其他所有块都重新做一遍。作者在后面会证明,随着链的增长,成功概率不断减小。你可以理解为:历史的潮流浩浩荡荡,如果你要逆潮流而动,那你要比潮流还更有能量。
(5) 综合考虑,块增加的速度会不断调整,如果增加速度太快了,计算工作量的难度会增加。
工作证明这部分就结束了。我有两点感想:
(1) 你是否发现,在阅读论文的时候,如果你基础工作打得扎实,哪怕需要花费一些时间,但是效果是可以复利到的。比如昨天用了很大的篇幅探讨HashCash,弄清楚基本情况以后,再探讨工作量证明反而简单了。
(2) 中本聪在设计比特币的时候,就是想用CPU分散的方式,构造没有人能操纵的结果。但是比特币发展至今,越来越多的算力掌握在少数人的手里,这倒也是有意思的事情。现在所谓的挖矿其实就是算出哈希值的隐喻表达。
(3) 基于工作量证明的机制有些人认为过于浪费资源,于是有新的机制开发出来,不需要进行挖矿工作,这个以后再议。
8.网络
这部分内容讲了比特币网络运行的基本规则:
(1) 所有交易全网广播。
(2) 每个节点把新交易纳入一个块中。
(3) 每个节点计算对应块的工作量证明,就是找到那个哈希值。
(4) 如果有节点算出了哈希值,即完成了工作量证明,就全网广播。
(5) 如果有一个块所有的交易有效,并且没有出现双花的情况,节点接受这个块。注意前面说过每个节点会有所有的网络交易,而且每个交易有签名可以验证。
(6) 节点认可一个块的方式,就是把这个块当成上一个块,继续寻找下一个块的工作证明。下一个块数据字段里面有一个“前一块哈希值”就把认可的哈希填进去。
除此之外还有其他几个要点:
(1) 节点只认网络中最长的那个链条作为正确的结果,然后继续延长这条链。
(2) 如果在同一时间,同时有两个节点发现了新的不同块,广播出去,那么有的节点先收到第一个,有的先收到第二个,怎么办?该干嘛干嘛。继续在先收到的块上挖矿,但是保存另外一个分支。等到下一个块出现的时候,总会有一个变得更长,那就到那个时候,换到更长的块上去。
(3) 不要担心丢包的问题,缺的总是可以通过各种方式补上。
9.激励机制
激励机制一直是P2P网络研究的重点问题[14,15]。只要是去中心化,就会面对激励机制问题。为什么?因为你让很多人干原来一个中心就能干的事情,一个是我为什么要做这些事情,对我有什么好处?二是,如果参与的人多,搞小动作的人就会出现。激励机制的出现就是设计了一套体系,来激励大家好好干,别搞事。
P2P网络原先设计的是“我为人人,人人为我”的原则,但是,由于经常会出现部分节点“搭便车”的情况,网络运行并没有设计的那样好。比如在BT下载里面,就会有“吸血鬼”的节点,只从其他节点下载,却从来或者很少上传。这样最后就会出现社会科学里说的“公地悲剧”[16]。
公地悲剧指的是,在共享资源的系统中,每个人根据自己的利益最大化独立行事,但是却最后这些行为却导致和共同利益相反的结果。在P2P网络中,如果吸血节点越来越多,那最后这个网络就会出现拥塞以及崩坏。在社会环境下,每个工厂都对外排放污水,最后生态环境破坏,没有人逃得掉。
比特币里的激励机制如何设计?
(1) 块内第一个交易,由块创始人产生一个新的币。这样可以激励节点参与到P2P网络的维护中,也可以把新发行的币流通到市场中。因为在比特币的场景下,没有中央权威机构发行货币。这样一来,网络中出现的币,以恒定的速度发行,就像黄金矿工挖出黄金一样;只不过比特币消耗的是电能与CPU的算率。
(2) 激励机制还包括交易手续费。如果交易的输出值小于输入值,那么这个差价就是交易费,算在包含这笔交易的块下。而一旦币进入流通以后,激励就主手续费为主,而且可以不受通胀影响。
(3) 激励机制让节点选择做一个诚实的节点,不干坏事。因为如果一个攻击者组织了超过诚实节点的算力,就面临这个选择:要么选择用于欺诈其他所有人,于是可以把花的钱盗回来;要么就是用来生成新的币。不过算下来,应该还是造新币划算,因为既然已经有一半以上的算力,其实自己可以赚到超过其他所有人更多的钱,按照规则行事,对自己有利;否则把整个网络搞坏,自己留一堆币,也没有用了。
所以比特币的激励机制就是用“币”这个方式,简单直接地对节点进行激励。这个激励效果有多好?因为知道挖矿可以赚得比特币,现在有专门的人从事矿机的生产与制造,已经形成了相当规模的产业。如此看来,激励效果相当之好……
总结下来,这一节就两个主要议题:
(1) 比特币通过哈希碰撞的方式进行挖矿
(2) 比特币作为一种激励手段鼓励节点参与到网络运行中
参考文献
[14] Ma R T B, Lee S C M, Lui J C S, et al. An incentive mechanism for P2P networks, 2004[C].
[15] Zhang K, Antonopoulos N, Mahmood Z. A Review of Incentive Mechanism in Peer-to-Peer Systems, 2009[C].Oct.
[16] Hardin G. The tragedy of the commons[J]. Journal of Natural Resources Policy Research, 2009,1(3):243-253.
网友评论