第0章 引言
比特币挖矿是矿工帮用户记账的过程,也是系统发行比特币的过程,成功挖到矿的矿工将会获得系统给出的区块奖励。这个过程很重要,矿工投入资金去挖矿动力就是来源于区块奖励和交易手续费。
那比特币系统是凭借什么来评价区块奖励和交易手续费该归属于哪个矿工呢?
第1章 黄金最初归属于挖黄金的人
如果你对一块金块进行追根溯源,你去问它第一个人类对它拥有的所有权是怎么获得的?
这是个很简单的问题,谁去挖矿、冶炼成黄金就归谁。当然这里涉及到打工、老板、公司、矿场的等等产权问题。更准确的答案是冶炼得到的黄金归矿场所有人所有。
但我们还是可以把这个答案抽象一下,黄金最初的所有权是归为之“劳动”的人所有。(不要死抠这个“劳动”是打工仔,还是老板的资本性投入,为了更快速地了解知识我们必须适当的时候放弃了解细枝末节。)
其实用“付出劳动”来衡量所有权这是现实生活普遍适用的一个规律。这也是一个公认为公平合理的设定。但这个规律有两个难点,从而导致现实生活的复杂性。
第一个难度是“劳动”本身很难准确定义。因为要解决的问题很复杂,就比如挖黄金,需要太多的专业化技能,需要大量的合作,还需要大量的资本投入。因为定义和量化“劳动”本身太复杂了,导致的所有权确权是很困难的。这也是为什么我们现实生活中到处感到不平等的原因,因为我们都会觉得自己的劳动比别人重要。
第二个难度是如何评估劳动很困难。任何公司想找到一个行之有效的KPI考核都是非常难的。
现在如果我们要设计一套货币发行系统,把“付出劳动”即获得“所有权”作为发行的基本原则,那你一定要克服上术两个困难。
第2章 工作量证明
工作量证明,英文是proof of work,在比特币世界又经常被称为POW。简单来说就是一份证明,用来确认你做过一定量的某种工作。
现实生活当中含有大量的这种工作量证明的案例,比如一本毕业证就可以让你向用人单位证明你大概有什么样的学识;交警通过驾驶证来检验开车的人是否会开车。
在计算机世界里,工作量证明机制在垃圾邮件防范和拒绝服务攻击识别上都有应用,主要用于阻止网络上的恶意攻击。比特币系统设计里这是用来设计成挖矿系统。
工作量证明系统可以看成是两个步骤,一个是工作;另一个是对工作的验证。这分别对应两个主体,一个是工作者;另一个是验证者。
系统约定好工作内容,验证者给出工作量,工作者完成工作量,验证者检验工作量是否达标。工作量证明的设计需要达到:工作者是一定要花费一定的时间才能完成工作,但验证者却可以瞬间完成检验。
回到第一章提到的问题,如何设计一套货币发行系统?
比特币的发行是通过挖矿来完成的,全网平均十分钟挖出一个区块,系统就发行12.5BTC(最初是50BTC,每挖出21万个区块奖励就减半,现在经过了两次减半,变成了12.5BTC)奖励给成功挖到区块的矿工。
那系统如何来识别谁挖到了区块呢?这个过程就是通过工作量证明来实现的。
矿工为了挖到区块必须进行“工作量证明”过程,这个计算的内容包含三个要素:工作量证明函数、前一个区块及难度值。工作量证明函数是给出了计算方法,前一个区块是这个函数的参数,难度值决定了这个函数的解题需要的计算工作量。
比特币里的工作量证明函数叫SHA256,中文名叫安全散列算法。具体是什么数学公式我们先不用管了,就简单想象成一个函数表达式f(x)吧。
比特币的区块是一个特定数据结构,里面填充了一些数据,可分为两部分,一是区块头,二是该区块包含的交易。下面的表格就是区块的数据结构。
表中红色加粗的字段就是区块头,矿工要计算的工作量就是计算上一个区块的这个区块头部信息的SHA256值。具体的数学公式我们还是不管,我们可以将这个区块的头部信息想象为参数x,SHA256想象为函数f,矿工就是要解这个f(x)的值。从这里我们也知道了,矿工其实就是专门计算这种SHA256值的集中电路芯片,或者直接叫CPU。
难度就是这个函数f(x)函数的一个参考答案,这个答案就是上表中的“难度目标”。这个难度约束了计算f(x)这个函数的难易程度,也就是决定了一个矿工为了挖到一个区块需要完成的计算量。这个难度目标是值就是衡量矿工的计算结果是否达标的标准答案。
矿工从网络上拿到最新的区块头部信息,头部信息里的最后一个字段是nonce,初始值为0,矿工就是要不停地调整这个nonce值来将这个头部信息作为参数去计算f(x)的函数值,每算一次就和难度目标值进行对比,如果满足了条件就挖矿成功。
那比特币系统里的工作量证明的过程就是这样的:
1.矿工在网络中拿到最新一个区块的头部信息;
2.将拿到的头部信息作为参数,将nonce值从零开始,去计算其双重SHA256值(SHA256(SHA256(头部信息)));
3.如果算出的答案不符合要求,则将nonce值增加一个单位,再算;
4.直到计算出符合难度目标的答案,就挖到一个区块。也就能拿到比特币系统给它发的12.5BTC的区块奖励。
所以挖矿的本质就是找到一个使最新区块头部信息的SHA256值满足难度目标值条件的nonce值。就目前来说,每成功挖到一次区块,一个矿工就需要尝试几十亿次的nonce值。
因为这个SHA256函数设计的很巧妙,矿工不可能“智能预测”到代入哪一个nonce值就能够计算得出满足条件的函数值,唯一的办法就是不停地试。因为除了nonce值外,区块头部信息的其它字段都是确定的,所以挖矿的本质就是寻找一个符合条件的nonce值。
第4章 结束语
比特币的工作量证明机制明确通过数学的方式给出了“工作内容”、“工作量”,以及评价方式。把“付出劳动”即获得“所有权”,通过数学的方式模拟了出来,这是最公平的一种所有权分发机制。这也是为什么我们说比特币是最公平的货币发行机制。
嗯,我们又了解到一个概念。
比特币是由一系列概念和技术作为基础构建的系