[4. 工作量证明]
Proof-of-Work,简写为POW,是共识机制的一种。由于比特币的使用,也是最早的共识机制。POW由于其拼算力(进行无意义的哈希碰撞)也是比特币被诟病的一个主要原因。区块链后续的发展也出现了POS、DPOS等其他的共识机制。
The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits.
[译] 工作量证明引入了对某一个固定值哈希后的扫描工作,比如被SHA-256哈希,并且要求哈希值以多个0开头。
[注] 哈希运算,如这里的SHA-256是会产生256个比特的字符的哈希值。并且如上一节所述,哈希运算是单向的。举例,如果比特币要求以0B00开头(即以二进制前两个比特为0开头)的一个哈希值对应的原字符。这个要求显然有很多对应的值,因为后面的254个比特没有要求。但是我们也无法反向的推导出对应的什么字符能够解析出这个值。
所以,如何进行解决这个问题呢?很简单,暴力破解,或者说遍历。即我不进行推导。我只是进行每个每个字符的测试。直到运气好,计算的字符恰好满足比特币的要求,则我就完成了这个工作量的证明。也就有了构建区块的权利,然后能够获得比特币奖励,就是后面要讲的挖矿。
【问题】POW为什么耗电巨大?
【解答】因为上述的过程有利益存在(挖矿能够创造出比特币,并且还有交易中的交易费)。所以,挖矿的人就随着比特币价格的上涨,越来越多。从而挖矿工具也不断的升级(这里就要说到本节后面提到的计算难度调节的原因),从CPU挖矿到显卡挖矿,到FPGA挖矿,到专用芯片挖矿,到加入矿池挖矿等等不断演进。同时由于算力的提升(比特币的难度越来越高,算力需求也越来越大),单个矿机的耗电量也上升。一般的CPU算力只有400KHash/s左右,即一秒可以进行40万次哈希计算,如果我们用电脑玩游戏之类的,机箱尚且由于CPU扇热(耗电多,热量大,电能转化为热能),就不论下面这些矿机的GHASH/s的算力的设备了。
![](https://img.haomeiwen.com/i2564562/2e89b7ea49a0f353.png)
举个现实的例子:一个同学用三台矿机挖矿有半年,电费就有两万元人民币左右。
To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases.
[译] 为了补偿日益增长的硬件速度(摩尔定律)和参与网络节点随着时间的变化,工作量证明的难度由通过移动平均目标的方法来确定,即保持每个小时出块速度一致的一个方向。如果算力快速增长,工作量证明也快速增长。
[注] 由于比特币要求每10分钟出一个块,即完成一个工作量证明。所以,由于网络算力的起伏,出块的时间也会有起伏。所以,为了维持每10分钟出一个块的目标,每一个小时工作量证明的难度就会调整一次来平衡出块的时间。
那么,什么是计算难度呢?举一个简单的不是很恰当的例子:比特币的工作量证明是要求一副洗好牌(完全随机的)中按照顺序抽出一个要求的序列。例如你抽第一张牌,第一张牌是红桃A,之后把红桃A放回,洗好牌再抽,再抽到红桃A,连续三次就算完成工作量证明。
那么这个的概率是多少呢?(包含大王小王共54张,则概率为1/54/54/54,即平均需要157464次会出现一次)。那么如果要求连续4次红桃A的概率呢?平均需要54^4才会出现一次。也就是说我调节连续出现红桃A的次数就很容易来调节器概率。并且这个概率是指数级减小的,也就是算力要求也是指数级增加的。因此,比特币的工作量证明,也就只需要调节哈希值的前面的比特的内容就很容易调节算力的难度。
[疑问] 这个难度调节会有固定的规律吗?比如连续的0。如果是这样挖矿能不能在暴力破解的时候进行一些后续难度的哈希值的保存。比如显示的要求是开始20个比特是0,接下来是开始21个比特是0、开始22个比特是0。我提前在暴力破解的时候遇到了,就记录?
或者运气好,我找到了开头开始22个比特是0,那么我用一个数字就能来证明前面的两个工作量?
[解答]
显然现实中没有这个漏洞,那么其原因自己猜测一下
可能的情况1:工作量不是这样的规律,因为如果这个规律下去,则256个工作量的要求。那么如果是其他的规律呢?比如开头的几个比特就按照自然数进行要求。如0,1,2,3这样下去,就不会存在难么容易用光的情况。
可能的情况2:
(1) 由于难度每增加一点,则算力要求就成指数级增长。这种跳过中间的难度,直接计算出后面的难度个概率比直接计算前面的难度的概率要低得多的多。
(2) 即使运气好,碰到了后面的难度,其难度调节的规律也不一定存在。
(3) 即使碰到了后面的难度,如果一直等那个难度,也可能丧失其他的前面难度的机会。
这个问题更像是挖矿软件的设计问题了。如何高效的满足工作量证明。是单纯的暴力破解,还是在暴力破解的基础上加入一些存储的机制来进行优化。或者是比特币挖矿的难度调节机制就不会留下矿机挖矿优化的空间。
网友评论