pow怎么使用,pow怎么念

  

  最近有很多读者反馈,期待看到更多简单易懂的区块链科技内容。因此,獐鸽决定做一个“人对人的区块链技术”系列,用人们能理解的方式把它晦涩难懂的技术知识介绍给大家。本期獐鸽将从区块链最重要的共识机制入手,为您一一介绍。   

  

  本文先写最著名的POW(工作证明),中文名字叫:工作量证明,是比特币目前使用的共识机制。   

  

     

  

  什么是共识机制?   

  

  在开始之前,我们应该先了解什么是共识机制。顾名思义,共识机制就是让一群人通过一定的规则达成共识。   

  

  比如最近的龟鸽年会上,两个小伙伴同时猜中了歌名。最后谁能拿下这一轮的小奖,就可以通过共识机制解决问题。   

  

  最简单的办法就是让别人投票,谁的票数多,A还是B,谁就赢。这是一种共识机制。(但显然,这种方式是不公平的。如果A是美女,B是IT男,在一个全是IT技术男的团队里,比如龟鸽,美女显然有胜算优势。)   

  

  有什么公平便捷的办法?再来一轮是个好主意,但有一种更公开透明的方式:掷骰子。通过相同概率的随机数来决定胜负。   

  

  回到正题,了解了什么是共识机制之后,相信大家不会再问什么是POW,而是POW是一种什么样的规则,解决什么问题。   

  

   POW解决了什么问题?   

  

  POW解决的第一个问题,也就是说,谁来记账(打包并赢得奖励)。   

  

  在区块链中,为了保证数据不被篡改,会对数据进行打包和链接——可想而知,把几个文件压缩成一个压缩包或者放到一个加密文件夹中,然后分发给其他人,需要耗费计算机性能和时间。   

  

  在比特币网络中,只有这个打包链条的“人”/节点才能获得比特币奖励。   

  

     

  

  POW需要解决的第二个问题:将数据分发给其他人后,可能会出现A同时收到B和C的数据包的问题。到底应该接收B和C谁的数据包,谁的块可以上行,也就是“分叉”。   

  

   POW通过怎样的规则解决这两个问题?   

  

  第一个问题:由谁来记账?   

  

  1.工作量证明   

  

  正如其名称-工作负载证明一样,POW决定谁将打包数据并根据工作负载对其进行链接。   

  

  简单来说,打包的具体操作就是通过哈希核心事务信息、块版本号、前一个块的哈希值、打包时间、计数器,等,生成一个256位的哈希码。很多次。   

  

     

  

  其中,工作量证明中最重要的是计数器是一个无法用公式直接算出的数值,需要穷举,一直在猜测,从而确保所有人都有相同的概率得到这个值。   

  

  这个过程可以作为一个例子。比如现在规定第一个hash值小于20的人可以获得奖励。甲乙双方同时开始猜测。甲猜了1,乙猜了2。两个值哈希后,如果1哈希得到99,2哈希得到19(没有人能提前知道哈希值是多少),那么B赢了。比特币正是通过这样的机制来选择“赢家”。(你可以阅读这篇关于哈希的文章)   

  

  如果不了解hash,可以看看这个例子:POW猜数字的过程就像掷骰子。没有人知道号码滚动,所以你需要继续尝试。决定胜负的方式是设定条件,比如掷出6就赢,这样对大家都公平,因为掷出6的概率是一样的。   

  

  2.竞争难度   

  

  比特币块每10分钟生成一次,但这个时间是不固定的,因为按照上面的机制,猜对是一个纯概率事件,也就是说有人有可能在几秒钟内猜对。   

  

  为了防止这种情况发生,比特币有一个难度调整,就是对上述规则中的“哈希值小于20”进行调整。如果“小于20”过于简单,那么就把条件设置为“小于1”,这样猜测的难度就大大增加了,猜测所需的平均时间自然也就增加了。   

  

  有没有可能没人猜到?是的,因为哈希值是不确定的,可能会有n个数用尽,永远得不到需要的哈希值。这时候你可以通过比特币预留的“留言板”添加任何内容,还可以重新排完数字再猜。   

  

  秉承人类说话技巧的精神,以骰子为例,规定飞行棋第一步只需掷出6即可。如果大家运气都不好,一直投不出去怎么办?那允许扔1“开后门”,大大降低了游戏难度;同样的,如果运气太好,大家都不停的投6,规定必须连续投两次6才可以走棋。这样通过自由调节规则,整体游戏时间不会太长也不会太短。   

  

     

>3.工作验证

  

历经千辛万苦,我们终于猜对了值,但别人凭什么相信?需要通过验证。

  

即我们将数据打包好,发送给别人,其他人不会直接存到自己的区块链里,他们会先检查一遍,其中包括各种格式、值的范围、签名对不对等等。

  

还有一项检查内容就是这个计数器,检查者会把收到的数据内容再哈希一遍,看看我们这个数字有没有猜对,如果哈希完后发现这个哈希值符合本轮的规则,那么他们就会承认你的工作,并将这个区块存进他们自己的区块链文件夹里,随后就开始下一轮的“猜数字游戏”。

  

第二个问题:出现分叉如何处理?

  

1.默许临时分叉,继续运行

  

现在假如A和B几乎同时猜中了这个数字,他们将自己打包好的数据包向全网广播,其他人到底该“听”谁的?

  

遇到这种情况,比特币系统不会作出任何反应,即保持原规则,C先收到A,那么就接受A的数据;D先收到B,就接受B的数据。大家继续沿着自己当前的区块链进行下一轮猜数字游戏。

  

  

当下一轮只有C猜中了,C将数据广播给全网,此时,A、B、D都会接受C的数据,因为根据只承认最长链的规则,C此时的区块链是最长的,ABD都比它短一个区块,因此,ABD会同意用C的区块链覆盖自己的区块链。

  

  

2.达成共识

  

这样,一开始的争议就不存在了,即前一轮A和B的较量中,A获得了胜利。而B和D的数据库将回滚,B的奖励也会被清除,等于B和D在那一轮之后的工作全都白费了。

  

此外,假如连续两轮、三轮都有人同时猜对数字也没关系,因为猜数字完全是随机性事件,随着游戏轮数的增加,总会有决出胜负的那一轮。(以掷骰子为例脑补)

  

  

典型漏洞

  

先说一个前提,POW通过随机数的方式在特定情况下解决了公平竞争记账权的问题,但在现实情况中,一个人可以拥有多个设备。

  

因此,POW并不是绝对公平,A可以通过购买多个设备,在1秒内猜10次数字;而B如果只有1台设备,那么他1秒只能猜1次,显然这是不公平的。

  

不过这也就是为什么POW使用者越多越安全的原因――如果有1000万人使用基于POW的应用,每人一台设备,那么恶意攻击者至少需要500万台以上的设备或非常先进的设备才能实现攻击(即攻击者猜中的概率高于其他人),攻击后的收益与如此高昂的攻击成本相比,简直不值一提。

  

漏洞1:

  

算力垄断攻击:只要想要作恶的人拥有足够的“算力”,即他们的设备够多够快,凭借这个优势,即便他们第一、第二轮没有猜中,但根据概率来讲,他们的算力够强,那么猜中的概率也越大,迟早他们会成为最长链,从而把别人的区块链完全覆盖。51%攻击即源自于此,当作恶者的算力大于诚实者时,哪怕只多了1%,按照概率,作恶者的计划迟早会得逞。

  

漏洞2:

  

自私挖矿:当自己挖出新区块时,不对外宣布,而是继续悄悄地算下一个区块。如果自己已经连续算出了好几个区块,而别人刚刚把第一个块算出,那么自己把已有的区块发出去,就能把别人的数据覆盖,让别人的工作成果全部付之一炬;

  

  

(示意图1)

  

如果自己第二块还没挖出,别人第一块已经算出来了,那么就赶紧把自己的第一块发出去,造成“分叉”,即让部分人先接受自己的区块,让他们一起帮忙挖第二块,而自己由于第一块早就已经算完,提前开始挖第二块,按照概率来讲,先挖出第二块的可能性也比别人高得多。

  

  

(示意图2)

  

  

优劣对比

  

优势:规则简单、竞争公平透明,去中心化,使用者越多越安全。

  

劣势:效率低下,算力资源浪费较大,使用者少几乎没有安全性。

  

总结:适用信任成本高、交易量较小、使用人数多的场景;也可搭配其他共识机制,解决少量对“公平”要求较高的交易。

相关文章