PoW工作量证明

链客 · · 955 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。
图片描述

PoW是Proof of Work的缩写,即工作量证明的意思。在《拜占庭将军问题》中介绍过,比特币系统中引入了“工作量”的概念,有意降低了信息传递的效率,让矿工必须完成一定的工作量,才能够在全网广播消息。

(孩子第一次为我的文章配图,厉害吧)

以工地的搬砖任务为例,一群工人们(矿工)向火车的车皮(区块)里搬砖,每个工人身边都有一个集装箱,这个集装箱与火车车皮一样大,正好能够装满1000块砖。

工人们只能往集装箱里搬砖,谁先装满集装箱,就把这个集装箱放到车皮里,领取12.5元的工钱(实际上并不是马上拿走,100节车皮之后才能真正取走)。只有第一个搬完的工人能够获得奖励,在这个集装箱放入车皮的同时,其他工人的集装箱里也装了一些砖头了,全部作废,重新搬砖,继续投入到下一节车皮的竞争中。

比特币世界里的矿工(工人)也是这样辛苦,这里的矿工是一堆安装了专门芯片的电脑,它们的工作就是进行HASH计算(准确讲是SHA256,高级搬砖工作),谁先算完,写入一个新区块(车皮),得到奖励的12.5个BTC(发行新币),其它矿工则白忙活,继续进行下一轮的竞争。

因为电脑的计算速度太快,所以要安排上亿次的HASH计算,保证有矿工在10分钟左右能够完成任务。这种工作量,既是一种发行货币的过程,也是一种验证其他人交易的过程,从而保证了整个比特币系统的安全性。

简化的计算过程

假设我有一个区块信息是“abcde",要在其后面补一个随机数,使得HASH结果以0开头。我在“区块链生存训练”饭团里介绍过HASH的作用,HASH的加密特性使得原始数据即使发生极其微小的改变,得到的结果也有巨大不同。

所以我只能一个数一个数地尝试,一直试到随机数5的时候,此时的字符串为”abcde5",SHA256的HASH结果为051f2f...d7b9e1,以0开头,我找到了一个解,我就可以把"abcde5"加到新区块上,拿走12.5个BTC。

区块链正如其名,是一个区块与另一个区块链接起来而成的,一个区块中用于参与工作量计算的主要有三部分数据(为了说明HASH计算的工作量,我对整个计算过程进行了极大地简化,更详细的细节请自行参考《精通比特币》):

1)父区块HASH:用于指向父区块,当一个区块一个区块地链接起来后,想篡改一个区块,会影响子区块,再会影响孙区块,从而带来指数级的巨大计算量,从而使篡改几乎不可能。

2)交易信息指纹:一个区块内通常有几百笔的交易信息,也用HASH算法产生一个指纹(准确地讲是Merkle树,以后再介绍),只占用32个字节。

3)随机数nonce:矿工所做的事就是找这个nonce,通过不断地尝试变化这个nonce,进行上亿次的HASH计算,得到满足要求的结果。

假设父区块HASH为“abc",交易HASH值为”de",不断变化nonce,计算HASH值,假设nonce=5时,满足工作量目标(以一个0开头,这个术语以后再解释),获得到了全球共享大账本的记账权,然后将这个区块广播出去。

其它矿工收到这个区块后,首先要进行验证,验证别人是不是经过了大量计算并满足目标,而这个验证的计算量则非常非常小,0.001秒都不用。

就像前面说的搬砖一样,搬1000块砖的过程非常辛苦,但其它工人只需扫一眼就知道他是否完成了工作量(因为1000块砖正好装满一个集装箱),其它工人一看集装箱放到了车皮上(产生了新区块),则放弃当前的一箱砖,开始新一轮的工作(下一区块的竞争)。

小结:

工作量证明既用于发币,也是验证交易的有效性,保证比特币的安全
计算过程中不断调整nonce,要进行数亿至万亿次的HASH运算
先完成计算的获得记账权,写入一个新区块,向外广播
其它矿工只用非常非常少的计算量就可以完成验证
竞争失败的矿工,取得最新区块信息,开始新一轮竞争
我在5月23日开办了“区块链生存训练”饭团,现在成员超过180人,已经讲解了众多概念:比特币地址、Block区块、区块链、确认、Mining挖矿、矿工费、HASH哈希、矿工、工作量证明、私钥、公钥、交易、钱包、PressOne、ICO等等,并且饭团内还有热烈的讨论。有人预测区块链将是未来的价值互联网的基础协议,想要活在未来,就要尽早学习这些内容。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:链客

查看原文:PoW工作量证明

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

955 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传