在比特币世界中矿工的作用是什么?

96
李洪戎
2017.05.30 10:26* 字数 2150

如题。本人技术小白,花了大量时间查阅了比特币的一些资料。虽然不敢说把每个细节都完全搞懂了,不过整体思路和关键部分的主要原理还是搞明白了。

要说矿工的作用就要先讲解比特币世界的运行方式。


其实我们现在的货币发展进程已经到达了虚拟货币的时代。具体方式如图

货币的基础完全依赖于记账者
例如老 张要拿一克金子向老李换一只羊,就一起给二狗子打个电话,说明要将老张名下的一克金子划归老李名下,二狗子拿出账本,看看老张名下是否有一克金子,如果有 就在老账的名下减掉一克,在老李的名下加上一克,这样就完成了支付,此时老李在电话中听到二狗子确认转账完成,就可以放心让老张把羊牵走了。

这样就带来两点问题

1.这个体系完全依赖于账本持有人的个人信用,如果这个人不守规矩,随意篡改账本,那么整个货币系统就会崩溃

2.如果这个人家里失火或者账本失窃,同样也会为整个体系带来毁灭性的打击

而比特币的革命之处在于,它使用的是完全区别于传统记账方式的分布式记账。


现在我们就来看一下中本聪设计的比特币的计账方式是怎样的。

账簿公开机制

中本聪首先说明,要对现有账簿进行如下改造:

1.账簿上不再记载每个账户的余额,而只记载每一笔交易。即记载每一笔交易的付款人、收款人和付款金额。只要账簿的初始状态确定,每一笔交易记录可靠并有时序,当前每个人持有多少钱是可以推算出来的。

2.账簿由私有改为公开,只要任何人需要,都可以获得当前完整的账簿,账簿上记录了从账簿创建开始到当前所有的交易记录。


比特币矿工的工作

由于比特币的去中心化的特点。它是没有一个集中的运算中心的,比特币的清算任务就由比特币矿工担任。

中本聪规定,每笔交易的发起人,不但要将交易单给到收款人,还要同时复制若干份一模一样的交易单投递到每个矿工小组的收件箱里。

矿工小组的人定期到自己的收件箱里把收集到的交易单一并取出来

然后把自己收到的交易单贴到原始账簿上,将这样账簿纸放入编号生成器,打印好编号,一张账簿就算完成了。

然后就是最关键一步,比特币系统会提供一组高难度的数学迷题。矿工要成功的把新的交易单粘贴造历史账户上,需要跟其他的矿工竞争算力。最后由第一个解开数学谜题的矿工得到记账权利, 记账成功后该矿工会得到比特币奖励。比特币网络会自动调整数学问题的难度,让整个网络约每10分钟得到一个合格答案。


总量及发行

由算法规定,比特币总量会持续增长直到达到2100万个。矿工在总量达到1050万之前是每成功完成一次计账的奖励金是50个比特币,当总量达到1050万时(2100万的50%),赏金减半为25个。当总量达到1575万(新产出525万,即1050的50%)时,赏金再减半为12.5个。

根据其设计原理,比特币的总量会持续增长,直至100多年后达到2100万的那一天。但比特币货币总量后期增长的速度会非常缓慢。事实上,87.5%的比特币都将在头12年内被“挖”出来。


确认账簿

当某挖矿小组幸运的生成了一张有意义的账簿,为了得到奖励,必须立刻请其它小组确认自己的工作。

中本聪规定,当某个小组接到其他小组送来的账簿纸时,必须立即停下手里的挖矿工作进行账簿确认。

如果完成了所有验证并全部通过,这个小组就认可了上述账簿纸有效,然后将这张账簿纸并入小组的主账簿,舍弃目前正在进行的工作,后面的挖矿工作会基于这本更新后的主账本进行。


账簿确认反馈

对于挖矿小组来说,当账簿送出去后,如果后面有收到其他小组送来的账簿,其“上一页账簿编号”为自己之前送出去的账簿,那么就表示他们的工作成功被其他小组认可了,因为已经有小组基于他们的账簿继续工作了。此时,粗略的说可以认为已经得到了50个比特币。

另外,任何一个小组当新生成有效账簿或确认了别的小组的账簿时,就将最新被这个小组承认的交易写到公告牌上,那么收款人只要发现相关交易被各个小组认可了,基本就可以认为这笔钱已经到了自己的账上,后面他就可以在付款时将钱的来源指向这笔交易了。


因为比特币网络是分布式记账的。所以它的账本没有可能被黑客完全攻击。而且因为所有人都有记账的权利,也很难有人能私自篡改。

但因为计算权利是由算力竞争来决定,这就提供了一种攻击比特币网络的可能性。

51%攻击。

先让我们回到矿工们的计账和确认方式上,因为挖矿小组是并行工作的,因此完全可能出现这样的情况:某小组收到两份不一样的账簿页,它们都基于当前这个小组的主账簿的最后一页,并且内容也都完全合法。

关于这种情况,中本聪说:小组不应该以线性方式组织账簿,而应该以树状组织账簿,任何时刻,都以当前最长分支作为主账簿,但是保留其它分支。

举个例子,某小组同时收到A、B两份账簿页,经核算都是合法的,此时小组应该将两页以分叉的形式组织起来,如上图所示
黑色表示当前账簿主干。此时,可以随便选择一个页作为当前主分支,例如选择A
此时如果有一个新的账簿页是基于A的,那么这个主干就延续下去
如果这个主干一直这么延续下去,表示大家基本都以A为主干,B就会被遗忘。但是也有可能忽然B变成更长了


那么我们就需要将B分支作为当前主干,基于这个分支进行后续工作。

从局部来看,虽然在某一时刻各个小组的账簿主干可能存在不一致,但大方向是一致的,那些偶尔由于不同步产生的小分支,会很快被淹没在历史中。

51%攻击,就是在掌握了比特币全网51%以上的计算能力的之后。先让其他的矿工进行工作,等受害者完成了交易之后再通过计算力的优势,覆盖掉原先分支。

先假设有一个攻击者拥有10个比特币,他准备将这笔钱同时支付给两名受害者A和B,并都得到承认。

第一步,攻击者准备从受害者A手里买10比特币的黄金,他签署交易单给受害者A,转10个比特币给受害者A。
第二步,这笔交易在最新的账簿页中被确认,并被各个挖矿小组公告出来。受害人A看到公告,确认比特币到账,给了攻击者10个比特币等值的黄金。

第三步,攻击者找到账簿,从包含刚才交易的账簿页的前一页做出一个分支,生成更多的账单页,超过刚才的分支。由于此时刚才攻击者制造的分支变成了主干分支,而包含受害者A得到钱的分支变成了旁支,因此挖矿组织不再承认刚才的转账,受害者A得到的10比特币被取消了。

第四步,攻击者可以再次签署交易单,将同一笔钱支付给受害者B。受害者B确认钱到账后,支付给攻击者等值黄金。

至此,攻击者将10个比特币花了两次,从两名受害者那里各购得等值黄金。攻击者还可以如法炮制,取消与受害者B的转账,将同一笔钱再支付给其他人。。。。。。

中本聪给出的解决方案是,建议收款人不要在公告挂出时立即确认交易完成,而是应该再看一段时间,等待各个挖矿小组再挂出6张确认账簿,并且之前的账簿没有被取消,才确认钱已到账。


比特币达到2100万枚之后

等账簿达到6,930,000页后,新生成账簿页就没有奖励了。到时,矿工的收益会由挖矿所得变为收取手续费。例如,你在转账时可以指定其中1%作为手续费支付给生成账簿页的小组,各个小组会挑选手续费高的交易单优先确认。

随笔
Web note ad 1