POW共识机制原理及优缺点
PoW共识机制
POW工作量证明(英文全称为Proof of Work)在比特币之前就已经出现,中本聪在设计区块链的共识机制的时候就是借鉴了POW工作量证明。常见的是利用HASH运算的复杂度进行CPU运算实现工作量确定。
定义
工作量证明(Proof-of-Work,PoW)是一种对应服务与资源滥用、或是阻断服务攻击的经济对策。一般是要求用户进行一些耗时适当的复杂运算,并且答案能被服务方快速验算,以此耗用的时间、设备与能源做为担保成本,以确保服务与资源是被真正的需求所使用。
在一个PoW系统中, 一定会有两个角色, 一个是工作者, 一个是验证者
对于工作者
- 需要完成的工作必须有一定的量,这个量由工作验证者给出。
- 工作者无法自己"创造工作",必须由验证者发布工作。
- 无法找到很快完成工作的办法。
对于验证者
- 可以迅速的检验工作量是否达标。
HashCash
区块链的PoW共识机制, 借鉴了很多HashCash方面的东西, 所以先讲HashCash。
简述
HashCash 最早是用来处理垃圾邮件的,一个垃圾邮件的发送者发一个邮件出去不能花费很多时间, 如果花太多时间,那么和人发邮件就没什么区别, 而要屏蔽这些垃圾邮件, 一个核心的想法就是正确的发送方发的邮件一定要经过一段时间的处理, 而且这个处理是不能很快, 也不能找到捷径, 也就是要有一定的工作量,这样垃圾邮件没有工作量,所以会被抛弃。
那么问题又来了
首先如何产生工作量的方法是什么?, 发送方如何在邮件里添加我已经完成很多工作(也就是工作量证明),第三个就是接收方如何验证工作量?
垃圾邮件处理例子
下面以一个垃圾邮件处理的例子来回答三个问题
在HashCash系统中,发件方向邮箱服务器发送的邮件信息中必须包含一段邮件签名,邮件签名中包含有收件人地址、发件时间和一个数字counter,counter需要使邮件签名满足条件:
利用SHA-1散列算法对邮件签名生成一个160-bit长度的哈希值,该哈希值前20位全为0 。此算法利用了散列算法的不可预测性,SHA-1的碰撞概率决定了算法的安全性。
在目前的认知中,发件方除了穷举尝试,无法很快的找到满足条件的签名串。于是发件方在发送邮件之前的工作就是不断地counter++生成新的邮件签名,然后获取SHA-1哈希值,判断前20位是否全为0,如果不是的话重新生成。而对于邮件服务器而言,只需要做一次SHA-1判断生成的签名是否满足条件即可,完全符合POW易于验证的定义。
算法简介
发送方签名
counter = 0;
while(1) {
//time为时间戳
result = SHA1(mailAdress + time + counter);
if (result.substring(0, 20) == "00000000000000000000") {
break;
}
counter++;
}
sig = mailAdress + time + counter;
服务端验签
if (SHA1(sig).substring(0, 20) == "00000000000000000000") {
return true;
}
由于散列函数的随机性, 每一次hash得到的160位中的每一位是0 或1 的概率相同, 那么要得到这样一个正确的hash值每次哈希成功的概率为1/2^20次方
当哈希成功后把哈希前的值 当做sig 放到邮件里, 接收方通过对sig再做SHA-1哈希,如果前20位为0, 说明是有工作量证明的。
那么上面的问题就能回答了
- 产生工作量的方法是什么?
不断哈希不同的值, 直到哈希值符合一定的条件 - 如何添加工作量证明?
得到符合要求哈希值 的哈希前的值是证明 - 如何验证?
接收方对证明进行哈希, 看是否符合上述条件
区块链如何运用PoW共识机制
刚才说区块链的共识机制就是PoW共识,而且借鉴了很多的HashCash的处理方法, 下面我们就来说说区块链如何进行PoW共识的。
区块的构成
在此之前需要先了解一下区块的构成,
由上图可知区块分为区块头和区块体, 其中区块之间的联系是通过存储父区块哈希联系在一起的。
区块头的各个组成要素:
父区块头哈希值: 前一区块的哈希值,使用**SHA256(SHA256(父区块头))**计算。占32字节
时间戳:该区块产生的近似时间,精确到秒的UNIX时间戳,必须严格大于前11个区块时间的中值,同时全节点也会拒绝那些超出自己2个小时时间戳的区块。占4字节
难度:该区块工作量证明算法的难度目标,已经使用特定算法编码。占4字节
随机数(Nonce):为了找到满足难度目标所设定的随机数,为了解决32位随机数在算力飞升的情况下不够用的问题,规定时间戳和coinbase交易信息均可更改,以此扩展nonce的位数。占4字节
Merkle根:该区块中交易的Merkle树根的哈希值,同样采用SHA256(SHA256())计算。占32字节
PoW证明过程
这也就是俗称的挖矿过程, 找到合适的哈希值
这里不详细说明区块打包过程, 区块通过一定的算法被生成, 当然生成是需要一定的代价的。
区块头里的各个值并不是随机的, 而是由固定的算法得出, Merkle根哈希值就是把交易打包变成一颗Merkle树, 最后得出根的哈希值, 难度值是根据算法不断调整, 要维持出块速率是10分钟出一个块。
下面将给出挖矿过程
首先我们把所有交易打包 生成Merkle树, 计算Merkle根的哈希值, 然后组装区块头, 把区块头不断进行SHA256(SHA256(区块头))操作, 然后判断是否小于网络目标值, 这里其实就是把它变成2进制, 二进制前面有多少位是没有0的, 因为有1的话, 这个十进制的值肯定是很大的, 就不会符合条件。 如果大于这个目标值, 说明前面的位数 没有满足 前多少位为0的条件 哈希不成功, 那么就改变随机数值,组成新的区块头,继续哈希。
这是就是是挖到旷了,其他节点验证的话也简单 只要做一次SHA256(SHA256(验证区块头))来判断。
这是区块链的PoW证明。
PoW优缺点
优点:
去中心化,将记账权公平的分派到其他节点
记账权是通过看节点的PoW, 谁挖矿最快, 谁就能拿到这个矿安全性高,破坏系统需要投入极大的成本
因为获得正确哈希值的概率和算力成正比, 如果没有掌握51%的算力就不能作弊。这样代价要高于诚实挖矿,所以安全性高
缺点
会造成资源浪费
因为挖矿需要大量的哈希运算,需要电力和各种算力资源,而且找到合适的哈希值实际上并没有其他的作用网络性能太低
因为比特币出块的时间是10分钟, 所以交易确认至少需要10分钟,而且目前支持支持每秒7笔交易的速度,不适合商业用处。PoW共识算法算力集中化。
目前挖矿矿池是主力, 算力高的矿池有选择权, 持本人么有参与决定的权利
目前的一些解决方案
参考网址
http://baijiahao.baidu.com/s?id=1596184609683656426&wfr=spider&for=pc
PoS (Proof of Stake)股权证明机制
一个根据用户持有货币的多少和时间(币龄),发放利息的一个制度。现实中最典型的例子就是股票,或者是银行存款。如果用户想获得更多的货币,那么就打开客户端,让它保持在线,就能通过获得“利息”获益,同时保证网络的安全。
DPoS (Delegated Proof of Stake)授权股权证明机制
无人控制的公司发行股份,产生利润,并将利润分配给股东。实现这一切不需要信任任何人,因为每件事都是被硬编码到软件中的。通俗点讲就是:公司股份制,股东持有这些公司的股份,公司为股东产生回报,无需挖矿。
PBFT (Practical Byzantine Fault Tolerance)实用拜占庭容错算法
拜占庭共识算法(Practical Byzantine Fault Tolerance- PBFT)也是一种常见的共识证明。它与之前两种都不相同,PBFT以计算为基础,也没有代币奖励。由链上所有人参与投票,少于(N-1)/3个节点反对时就获得公示信息的权利。
POI (Proof of Importance)
PoI(Proof of Importance)重要度证明共识算法引了账户重要程度的概念,使用账户重要性评分来分配记账权的概率。
POP (Proof of Participation)
这是标准链(CZR)的创新,基于账户参与度的 PoP(ProofofParticipation)算法,POP 将 POI 和DPOS 的思想结合,既能确保对设备的公平性,又拥有社区的共识。
我的解决方案
在传统的区块链技术里面, 共识需要计算哈希值没有什么意义,核心想法就是把计算没有意义的哈希,变成有价值的计算, 其实数学上有一些问题需要大算力才能得到结果, 有一个听过的方案就是不求哈希, 而是把问题变成求最大的素数,或者想很多模拟问题需要大量的计算而且对科学发展有帮助,比如模拟黑洞,模拟银河系,模拟宇宙早期形态,把这些问题当做挖矿指标。
或者其他大算力的问题
大素数分解, 密集线性代数。
或者通过竞标, 向区块链发出问题,以解决此问题当做工作量证明,然后用其算力解决问题,这也是有帮助的。
以上都是单考虑如何让这些算力不浪费这个方面, 还有其他类似于POS等不用大量算力的方法值得去发现。
POW共识机制原理及优缺点的更多相关文章
- 通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 PoS共识机制的变种---Casper
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...
- 区块链共识机制之工作量证明(POW)
像比特币.以太坊.NXT.Bitshares等这些区块链系统,其本质上是一种加密经济组织,它建立在点对点网络上,是去中心化.无管辖的,由密码学.经济学和社会共识来共同维护.这些加密网络因各种原因有着多 ...
- 区块链共识机制(POW、POS、DPOS等)的优缺点
一.POW:工作量证明机制 基本原理: 第一代共识机制,比特币的基础.理解起来,很简单,就是“按劳取酬”,你付出多少工作量,就会获得多少报酬(比特币等加密货币).在网络世界里,这里的劳动就是你为网络提 ...
- (转)区块链共识机制分析——论PoW,PoS,DPos和DAG的优缺点
近期,随着区块链技术在社区中的声音越来越大,业界已经开始从技术角度对区块链进行全方位的解读.作为第一批区块链技术的实现,传统比特币与以太坊在共识机制.存储机制.智能合约机制.跨链通讯机制等领域并没有非 ...
- 区块链共识机制:POW、POS、DPOS、PBFT、POOL
共识机制作为区块链的关键技术之一,在业务吞吐量.交易速度.不可篡改性.准入门槛等等方面发挥重要的作用. 区块链是去中心化的,没有中心记账节点,所以需要全网对账本达成共识.目前有POW.POS.DPOS ...
- (转)从拜占庭将军问题谈谈为什么pow是目前最好的共识机制
我们知道基于区块链技术现在有很多的共识机制,包括不限于POW,POS,DPOS,PBFT……,我先不说为什么我最认可POW,我们先来看看著名的拜占庭将军问题: 拜占庭帝国即中世纪的土耳其,拥有巨大的财 ...
- AJAX工作原理及其优缺点
1.什么是AJAX?AJAX全称为"Asynchronous JavaScript and XML"(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术.它 ...
- 共识机制:AngelToken技术的根基
共识机制是区块链技术的一个核心问题,它决定了区块链中区块的生成法则,保证了各节点的诚实性.账本的容错性和系统的稳健性. 常用的共识机制主要有 PoW.PoS.DPoS.Paxos.PBFT等. 基于区 ...
- [转帖]LCD与LED的区别之背光原理与优缺点对比介绍
LCD与LED的区别之背光原理与优缺点对比介绍 http://m.elecfans.com/article/620376.html 时下液晶面板与液晶电视技术已经达到炉火纯青的境界,并已经成为大屏幕平 ...
随机推荐
- SpringBoot2.x入门教程:引入jdbc模块与JdbcTemplate简单使用
这是公众号<Throwable文摘>发布的第23篇原创文章,收录于专辑<SpringBoot2.x入门>. 前提 这篇文章是<SpringBoot2.x入门>专辑的 ...
- 入门大数据---Hive计算引擎Tez简介和使用
一.前言 Hive默认计算引擎时MR,为了提高计算速度,我们可以改为Tez引擎.至于为什么提高了计算速度,可以参考下图: 用Hive直接编写MR程序,假设有四个有依赖关系的MR作业,上图中,绿色是Re ...
- 利用tox打造自动自动化测试框架
什么是tox tox官方文档的第一句话 standardize testing in Python,意思就是说标准化python中的测试,那是不是很适合测试人员来使用呢,我们来看看他究竟是什么? 根据 ...
- js获得url传过来的参数
function getParam(url) { var arr = url.split('?'); //取?以后 var a ...
- Spring事务处理时自我调用
1.预备知识 aop概念请参考[http://www.iteye.com/topic/1122401]和[http://jinnianshilongnian.iteye.com/blog/141859 ...
- 推荐IT经理/产品经理,常用工具和网站
一. 常用必备工具 1)文档工具 石墨文档,在线协作文档工具 https://shimo.im/ 2) 表格工具 麦客,在线问卷调查工具 http://www.mikecrm.com/ 3)脑图工具 ...
- 郭神的关于git软件和http的文章
https://blog.csdn.net/guolin_blog/article/details/17482095
- sqlite文件的建立和as的应用,
建立目录D:\android_projects\qrscan\app\src\main\assets把数据库文件d:\sqlite_files\device.db 拷贝到 D:\android_pro ...
- Django学习路37_request属性
打印元信息,基本上都会打印出来 类字典结构的 key 键 允许重复 get 请求可以传参,但是长度有限制 最大不能超过 2K post 文件上传使用 get 参数 默认放在网址中 post 在 ...
- PHP array_multisort() 函数
实例 返回一个升序排列的数组: <?php$a=array("Dog","Cat","Horse","Bear", ...