关于POW机制及POW难度调节机制
工作量证明,英文为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难度调节机制的更多相关文章
- 区块链共识机制:POW、POS、DPOS、PBFT、POOL
共识机制作为区块链的关键技术之一,在业务吞吐量.交易速度.不可篡改性.准入门槛等等方面发挥重要的作用. 区块链是去中心化的,没有中心记账节点,所以需要全网对账本达成共识.目前有POW.POS.DPOS ...
- Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL
Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL http://www.ibm.com/developerworks/c ...
- [转]Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL
转载地址:https://www.cnblogs.com/MYSQLZOUQI/p/4233630.html 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱 ...
- cocos2d-x 源代码分析 : EventDispatcher、EventListener、Event 源代码分析 (新触摸机制,新的NotificationCenter机制)
源代码版本号来自3.x,转载请注明 cocos2d-x 源代码分析总文件夹 http://blog.csdn.net/u011225840/article/details/31743129 1.继承结 ...
- C#中的WinForm的消息机制简述,及消息机制下Invoke,和BeginInvoke的使用和区别
在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔:对.net事件的看法. 一.为什么Control类提供了Invoke和Begin ...
- python的代码块缓存机制,小数据池机制。
同一代码块的缓存机制 在python中一个模块,一个函数,一个类,一个文件等都是一个代码块. 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其 ...
- PHP的垃圾回收机制(开启垃圾回收机制后的优缺点是什么)
PHP的垃圾回收机制(开启垃圾回收机制后的优缺点是什么) 一.总结 一句话总结: 拿时间换空间:针对内存泄露的情况,可以节省大量的内存空间,但是由于垃圾回收算法运行耗费时间,开启垃圾回收算法会增加脚本 ...
- 基于SLF4J的MDC机制和Dubbo的Filter机制,实现分布式系统的日志全链路追踪
原文链接:基于SLF4J的MDC机制和Dubbo的Filter机制,实现分布式系统的日志全链路追踪 一.日志系统 1.日志框架 在每个系统应用中,我们都会使用日志系统,主要是为了记录必要的信息和方便排 ...
- 区块链共识机制(POW、POS、DPOS等)的优缺点
一.POW:工作量证明机制 基本原理: 第一代共识机制,比特币的基础.理解起来,很简单,就是“按劳取酬”,你付出多少工作量,就会获得多少报酬(比特币等加密货币).在网络世界里,这里的劳动就是你为网络提 ...
随机推荐
- BCB6 使用TZCompressionStream压缩
最近由于项目需要涉及到解压第三方公司的数据,在此做一下记录环境部署和使用方法,免得以后忘记. 对方公司的数据是通过TCompressionStream 压缩之后,存到数据库中,采用的 ...
- Oracle自动化安装脚本-part02-亲试ok
此为网络配置文件 network.conf [PUBLIC-IP] IP-LIST:192.168.7.198,192.168.8.221 HOSTNAME-LIST:mysql-198,RAC2 ...
- python yaml文件内容的读取
示例: (1)host_header.yaml 文件中的内容 host: https://testapp.goodiber.com/v2/ #dev1的测试环境域名 #请求接口的请求头中的共用参数 ...
- hbase实践之flush and compaction
本文主要涉及flush流程,探讨flush流程过程中引入的问题并阐述2种解决策略,最后简要说明Flush执行策略. 对于Compaction,本文主要探讨Compaction要解决的本质问题以及由Co ...
- js.map文件意义(转)
什么是source map文件 source map文件是js文件压缩后,文件的变量名替换对应.变量所在位置等元信息数据文件,一般这种文件和min.js主文件放在同一个目录下. 比如压缩后原变量是ma ...
- 冒泡排序之javascript
冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字 ...
- SIGAI机器学习第八集 数据降维1
讲授数据降维原理,PCA的核心思想,计算投影矩阵,投影算法的完整流程,非线性降维技术,流行学习的概念,局部线性嵌入,拉普拉斯特征映射,局部保持投影,等距映射,实际应用 大纲: 数据降维问题PCA的思想 ...
- php中的print函数
php print函数怎么用? 定义和用法 print() 函数输出一个或多个字符串. 注释:print() 函数实际不是一个函数,所以您不必对它使用括号. 提示:print() 函数比 echo() ...
- Win7下如何安装切换jdk7和jdk8
一.安装好JDK1.7和1.8. 二.配置环境变量: 1. 创建三个JAVA_HOME.JAVA7_HOME,存放JDK7的安装路径.JAVA8_HOME,存放JDK8的安装路径.JAVA_HOME, ...
- vue中修改第三方组件的样式不生效
问题 在使用element-ui时,有时候想要修改组件内的样式,但不成功,例如 <div class="test"> <el-button>按钮</e ...