工作量证明,英文为proof of work,通过或与计算,计算出一个满足规则的随机数,即获得本次记账权,发出本轮需要记录的数据,全网其他节点验证后一起存储。简单理解就是一份证明,用来确认你做过一定量的工作。就像,本科毕业证用来向企业单位证明你具有怎样的学识,交警通过驾驶证来检验驾车的人是否会开车。

比特币的工作量证明,就是我们俗称的“挖矿”所做的主要工作。比特币白皮书在工作 量证明中解释了工作量证明(POW)的方式:

我们在区块中补增一个随机数,这个随机数要使得该给定区块的随机散列值出现了所需的那么多个0。我们通过反复尝试来找到这个随机数,知道找到为止,这样我们就构建了一个工作量证明机制。只要该CPU耗费的工作量能够满足工作量证明机制,那么除非重新完成相当的工作量,该区块的信息就不可更改。由于之后的区块是链接在该区块之后的,所以想要更改该区块中的信息,就还需要重新完成之后所有区块的全部工作量。

工作量证明系统可以看作是两个步骤,一个是工作,另一个是对工作的证明。这分别对应两个主体,一个是工作者,一个是验证者。系统约定好工作内容,验证者给出工作量,工作者完成工作量,验证者检验工作量是否达标。工作量证明系统设计的需要是达到:工作者需要一定时间才能完成工作,验证者可以瞬间完成检验。

矿工挖矿必须进行“工作量证明”的过程,该过程的计算内容包括三个要素:工作量证明函数,前一个区块及难度系数。工作量证明函数给出了计算方法,前一个区块是这个函数的参数,难度值决定了这个函数的解题需要的工作量。

##工作量证明函数

工作量证明函数焦作SHA256,中文名叫安全散列算法,具体是什么公式,作为前端人士,暂且不去进行代码层级的深入研究。

##前一个区块

每一个区块都是一个特定的数据结构,可以分为两个部分:一个是区块头,二是该区块包含的交易。矿工要计算的工作量就是计算上一个区块的这个区块头部信息的SHA256值。

##工作量证明机制中的难度系数

比特币系统是采用哈希碰撞产生区块的,哈希值的计算结果是一个随机数,没有人能直接控制计算的结果。打一个比方,重复N次掷骰子,每掷一次就可以得出一个6(包含6)以下的数字,但是如果想掷出3以下的数字,取得每个结果时平均都要掷2次才行,也就是说掷出“3以下(含3)”比掷出“6以下(含6)”要难一倍,需要多做一倍的工作量。如果定义“6以下(含6)”这个规则的难度系数是1,那么“3以下(含3)”这个规则的难度系数则为2。在比特币协议中,规定一个256位的整数0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF为难度“1” ,在当时全网算力下大概需要10分钟左右的哈希计算工作量才可以满足小于等于这一规则。

工作量证明POW的优点:

完全去中心化,节点自由进出。

工作量证明POW的缺点:

依赖计算机通过数学运算获取记账权,造成了电力和计算机硬件资源消耗巨大,共识达成的周期较长,不适合商用。

关于POW机制及POW难度调节机制的更多相关文章

  1. 区块链共识机制:POW、POS、DPOS、PBFT、POOL

    共识机制作为区块链的关键技术之一,在业务吞吐量.交易速度.不可篡改性.准入门槛等等方面发挥重要的作用. 区块链是去中心化的,没有中心记账节点,所以需要全网对账本达成共识.目前有POW.POS.DPOS ...

  2. Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL

    Linux 线程实现机制分析 Linux 线程实现机制分析  Linux 线程模型的比较:LinuxThreads 和 NPTL http://www.ibm.com/developerworks/c ...

  3. [转]Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL

    转载地址:https://www.cnblogs.com/MYSQLZOUQI/p/4233630.html 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱 ...

  4. cocos2d-x 源代码分析 : EventDispatcher、EventListener、Event 源代码分析 (新触摸机制,新的NotificationCenter机制)

    源代码版本号来自3.x,转载请注明 cocos2d-x 源代码分析总文件夹 http://blog.csdn.net/u011225840/article/details/31743129 1.继承结 ...

  5. C#中的WinForm的消息机制简述,及消息机制下Invoke,和BeginInvoke的使用和区别

    在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔:对.net事件的看法. 一.为什么Control类提供了Invoke和Begin ...

  6. python的代码块缓存机制,小数据池机制。

    同一代码块的缓存机制 在python中一个模块,一个函数,一个类,一个文件等都是一个代码块. 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其 ...

  7. PHP的垃圾回收机制(开启垃圾回收机制后的优缺点是什么)

    PHP的垃圾回收机制(开启垃圾回收机制后的优缺点是什么) 一.总结 一句话总结: 拿时间换空间:针对内存泄露的情况,可以节省大量的内存空间,但是由于垃圾回收算法运行耗费时间,开启垃圾回收算法会增加脚本 ...

  8. 基于SLF4J的MDC机制和Dubbo的Filter机制,实现分布式系统的日志全链路追踪

    原文链接:基于SLF4J的MDC机制和Dubbo的Filter机制,实现分布式系统的日志全链路追踪 一.日志系统 1.日志框架 在每个系统应用中,我们都会使用日志系统,主要是为了记录必要的信息和方便排 ...

  9. 区块链共识机制(POW、POS、DPOS等)的优缺点

    一.POW:工作量证明机制 基本原理: 第一代共识机制,比特币的基础.理解起来,很简单,就是“按劳取酬”,你付出多少工作量,就会获得多少报酬(比特币等加密货币).在网络世界里,这里的劳动就是你为网络提 ...

随机推荐

  1. c信号量操作demo

    #include <stdio.h> #include <string.h> #include <sys/ipc.h> #include <sys/sem.h ...

  2. 【Jenkins】忘记admin密码,可以用此方法帮你解决

    突然有一日发现自己忘记了jenkins的管理员密码,因为我一直登录的是另外一个非管理员账户.如果出现必须要使用管理员账户操作的,比如用户管理那里的,必须要管理员账号吧,这就尴尬了. 很方的我打开安装j ...

  3. vim 操作命令大全

     转子:https://www.cnblogs.com/yangjig/p/6014198.html 和 https://blog.csdn.net/u010956473/article/detail ...

  4. uni-app之tabBar的自己配置

    1.因为产品相关的的权限,需要配置不同的导航,这时候需要自定义导航.分离出来的就是一个小的组件.(tabBar.vue) 此处暂时用的html插入的代码,能粘贴到vue文件即可. <templa ...

  5. 如何DIY个性PE

    前言:有时候在网络上能找到很不错的PE(无忧启动论坛),但是有时候PE的功能仍不能满足自己的需要(软件过旧,缺少某些功能),这时候就显得自己DIYPE的重要性 需要的工具: WIMTOOL(必备) 软 ...

  6. mybatis+redis实现二级缓存

    在网上看了很多资料,发现例子都是千篇一律的相互复制.而且,使用的都是jedis的客户端..我这里使用的是redistemplate类实现. 缓存的原理..实现cache类接口,当哪个类需要缓存的时候, ...

  7. csv测试类。用起来,就是那么简单。每个单元格都是以逗号分隔

    package com.hyxt.wxpay.util; import java.io.File; import java.util.ArrayList; import java.util.List; ...

  8. Ubuntu 执行 apt-get install &#215;&#215;&#215; 报错

    执行apt-get install fcitx时,报如下错误 grub-pc E: Sub-process /usr/bin/dpkg returned an error code (1) 通过执行下 ...

  9. 023_STM32之PID算法原理及应用

    (O)关于程序BUG说明,看最后面的红色字体,视频和源代码中都没有说明 (一)PID控制算法(P:比例 I:积分 D:微分) (二)首先先说明原理,使用的是数字PID算法,模拟PID算法在计算机这样的 ...

  10. 为什么说Redis是单线程的?

    一.前言 近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”.什么是“热数据和冷数据” ,复杂一点的会问到缓存雪崩.缓存穿透.缓存预热.缓存更新.缓存降级等问题,这些看 ...