比特币共识pow
A. 常见的共识算法介绍
在异步系统中,需要主机之间进行状态复制,以保证每个主机达成一致的状态共识。而在异步系统中,主机之间可能出现故障,因此需要在默认不可靠的异步网络中定义容错协议,以确保各个主机达到安全可靠的状态共识。
共识算法其实就是一组规则,设置一组条件,筛选出具有代表性的节点。在区块链系统中,存在很多这样的筛选方案,如在公有链中的POW、Pos、DPOS等,而在不需要货币体系的许可链或私有链中,绝对信任的节点、高效的需求是公有链共识算法不能提供的,对于这样的区块链,传统的一致性共识算法成为首选,如PBFT、PAXOS、RAFT等。
目录
一、BFT(拜占庭容错技术)
二、PBFT(实用拜占庭容错算法)
三、PAXOS
四、Raft
五、POW(工作量证明)
六、POS(权益证明)
七、DPOS(委任权益证明)
八、Ripple
拜占庭弄错技术是一类分布式计算领域的容错技术。拜占庭假设是由于硬件错误、网络拥塞或中断以及遭到恶意攻击的原因,计算机和网络出现不可预测的行为。拜占庭容错用来处理这种异常行为,并满足所要解决问题的规范。
拜占庭容错系统是一个拥有n台节点的系统,整个系统对于每一个请求,满足以下条件:
1)所有非拜占庭节点使用相同的输入信息,产生同样的结果;
2)如果输入的信息正确,那么所有非拜占庭节点必须接收这个信息,并计算相应的结果。
拜占庭系统普遍采用的假设条件包括:
1)拜占庭节点的行为可以是任意的,拜占庭节点之间可以共谋;
2)节点之间的错误是不相关的;
3)节点之间通过异步网络连接,网络中的消息可能丢失、乱序并延时到达,但大部分协议假设消息在有限的时间里能传达到目的地;
4)服务器之间传递的信息,第三方可以嗅探到,但是不能篡改、伪造信息的内容和验证信息的完整性。
拜占庭容错由于其理论上的可行性而缺乏实用性,另外还需要额外的时钟同步机制支持,算法的复杂度也是随节点的增加而指数级增加。
实用拜占庭容错降低了拜占庭协议的运行复杂度,从指数级别降低到多项式级别。
PBFT是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制。PBFT要求共同维护一个状态。需要运行三类基本协议,包括一致性协议、检查点协议和视图更换协议。
一致性协议。一致性协议至少包含若干个阶段:请求(request)、序号分配(pre-prepare)和响应(reply),可能包含相互交互(prepare),序号确认(commit)等阶段。
PBFT通信模式中,每个客户端的请求需要经过5个阶段。由于客户端不能从服务器端获得任何服务器运行状态的信息,PBFT中主节点是否发生错误只能由服务器监测。如果服务器在一段时间内都不能完成客户端的请求,则会触发视图更换协议。
整个协议的基本过程如下:
1)客户端发送请求,激活主节点的服务操作。
2)当主节点接收请求后,启动三阶段的协议以向各从节点广播请求。
[2.1]序号分配阶段,主节点给请求赋值一个序列号n,广播序号分配消息和客户端的请求消息m,并将构造PRE-PREPARE消息给各从节点;
[2.2]交互阶段,从节点接收PRE-PREPARE消息,向其他服务节点广播PREPARE消息;
[2.3]序号确认阶段,各节点对视图内的请求和次序进行验证后,广播COMMIT消息,执行收到的客户端的请求并给客户端以响应。
3)客户端等待来自不同节点的响应,若有m+1个响应相同,则该响应即为运算的结果。
PBFT一般适合有对强一致性有要求的私有链和联盟链,例如,在IBM主导的区块链超级账本项目中,PBFT是一个可选的共识协议。在Hyperledger的Fabric项目中,共识模块被设计成可插拔的模块,支持像PBFT、Raft等共识算法。
在有些分布式场景下,其假设条件不需要考虑拜占庭故障,而只是处理一般的死机故障。在这种情况下,采用Paxos等协议会更加高效。。PAXOS是一种基于消息传递且具有高度容错特性的一致性算法。
PAXOS中有三类角色Proposer、Acceptor及Learner,主要交互过程在Proposer和Acceptor之间。算法流程分为两个阶段:
phase 1
a) proposer向网络内超过半数的acceptor发送prepare消息
b) acceptor正常情况下回复promise消息
phase 2
a) 在有足够多acceptor回复promise消息时,proposer发送accept消息
b) 正常情况下acceptor回复accepted消息
流程图如图所示:
PAXOS协议用于微信PaxosStore中,每分钟调用Paxos协议过程数十亿次量级。
Paxos是Lamport设计的保持分布式系统一致性的协议。但由于Paxos非常复杂,比较难以理解,因此后来出现了各种不同的实现和变种。Raft是由Stanford提出的一种更易理解的一致性算法,意在取代目前广为使用的Paxos算法。
Raft最初是一个用于管理复制日志的共识算法,它是在非拜占庭故障下达成共识的强一致协议。Raft实现共识过程如下:首先选举一个leader,leader从客户端接收记账请求、完成记账操作、生成区块,并复制到其他记账节点。leader有完全的管理记账权利,例如,leader能够决定是否接受新的交易记录项而无需考虑其他的记账节点,leader可能失效或与其他节点失去联系,这时,重新选出新的leader。
在Raft中,每个节点会处于以下三种状态中的一种:
(1)follower:所有结点都以follower的状态开始。如果没收到leader消息则会变成candidate状态;
(2)candidate:会向其他结点“拉选票”,如果得到大部分的票则成为leader。这个过程就叫做Leader选举(Leader Election);
(3)leader:所有对系统的修改都会先经过leader。每个修改都会写一条日志(log entry)。leader收到修改请求后的过程如下:此过程叫做日志复制(Log Replication)
1)复制日志到所有follower结点
2)大部分结点响应时才提交日志
3)通知所有follower结点日志已提交
4)所有follower也提交日志
5)现在整个系统处于一致的状态
Raft阶段主要分为两个,首先是leader选举过程,然后在选举出来的leader基础上进行正常操作,比如日志复制、记账等。
(1)leader选举
当follower在选举时间内未收到leader的消息,则转换为candidate状态。在Raft系统中:
1)任何一个服务器都可以成为候选者candidate,只要它向其他服务器follower发出选举自己的请求。
2)如果其他服务器同意了,发出OK。如果在这个过程中,有一个follower宕机,没有收到请求选举的要求,此时候选者可以自己选自己,只要达到N/2+1的大多数票,候选人还是可以成为leader的。
3)这样这个候选者就成为了leader领导人,它可以向选民也就是follower发出指令,比如进行记账。
4)以后通过心跳消息进行记账的通知。
5)一旦这个leader崩溃了,那么follower中有一个成为候选者,并发出邀票选举。
6)follower同意后,其成为leader,继续承担记账等指导工作。
(2)日志复制
记账步骤如下所示:
1)假设leader已经选出,这时客户端发出增加一个日志的要求;
2)leader要求follower遵从他的指令,将这个新的日志内容追加到各自日志中;
3)大多数follower服务器将交易记录写入账本后,确认追加成功,发出确认成功信息;
4)在下一个心跳消息中,leader会通知所有follower更新确认的项目。
对于每个新的交易记录,重复上述过程。
在这一过程中,若发生网络通信故障,使得leader不能访问大多数follower了,那么leader只能正常更新它能访问的那些follower服务器。而大多数的服务器follower因为没有了leader,他们将重新选举一个候选者作为leader,然后这个leader作为代表与外界打交道,如果外界要求其添加新的交易记录,这个新的leader就按上述步骤通知大多数follower。当网络通信恢复,原先的leader就变成follower,在失联阶段,这个老leader的任何更新都不能算确认,必须全部回滚,接收新的leader的新的更新。
在去中心账本系统中,每个加入这个系统的节点都要保存一份完整的账本,但每个节点却不能同时记账,因为节点处于不同的环境,接收不同的信息,如果同时记账,必然导致账本的不一致。因此通过同时来决定那个节点拥有记账权。
在比特币系统中,大约每10分钟进行一轮算力竞赛,竞赛的胜利者,就获得一次记账的权力,并向其他节点同步新增账本信息。
PoW系统的主要特征是计算的不对称性。工作端要做一定难度的工作才能得出一个结果,而验证方却很容易通过结果来检查工作端是不是做了相应的工作。该工作量的要求是,在某个字符串后面连接一个称为nonce的整数值串,对连接后的字符串进行SHA256哈希运算,如果得到的哈希结果(以十六进制的形式表示)是以若干个0开头的,则验证通过。
比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链,必须解出比特币网络出的PoW问题。关键的3个要素是 工作量证明函数、区块及难度值 。工作量证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题所需要的计算量。
(1)工作量证明函数就是<u style="box-sizing: border-box;"> SHA256 </u>
比特币的区块由区块头及该区块所包含的交易列表组成。拥有80字节固定长度的区块头,就是用于比特币工作量证明的输入字符串。
(2)难度的调整是在每个完整节点中独立自动发生的。每2016个区块,所有节点都会按统一的公式自动调整难度。如果区块产生的速率比10分钟快则增加难度,比10分钟慢则降低难度。
公式可以总结为:新难度值=旧难度值×(过去2016个区块花费时长/20160分钟)
工作量证明需要有一个目标值。比特币工作量证明的目标值(Target)的计算公式:目标值=最大目标值/难度值
其中最大目标值为一个恒定值:
目标值的大小与难度值成反比。比特币工作量证明的达成就是矿工计算出来的 区块哈希值必须小于目标值 。
(3)PoW能否解决拜占庭将军问题
比特币的PoW共识算法是一种概率性的拜占庭协议(Probabilistic BA)
当不诚实的算力小于网络总算力的50%时,同时挖矿难度比较高(在大约10分钟出一个区块情况下)比特币网络达到一致性的概念会随确认区块的数目增多而呈指数型增加。但当不诚实算力具一定规模,甚至不用接近50%的时候,比特币的共识算法并不能保证正确性,也就是,不能保证大多数的区块由诚实节点来提供。
比特币的共识算法不适合于私有链和联盟链。其原因首先是它是一个最终一致性共识算法,不是一个强一致性共识算法。第二个原因是其共识效率低。
扩展知识: 一致性
严格一致性,是在系统不发生任何故障,而且所有节点之间的通信无需任何时间这种理想的条件下,才能达到。这个时候整个系统就等价于一台机器了。在现实中,是不可能达到的。
强一致性,当分布式系统中更新操作完成之后,任何多个进程或线程,访问系统都会获得最新的值。
弱一致性,是指系统并不保证后续进程或线程的访问都会返回最新的更新的值。系统在数据成功写入之后,不承诺立即可以读到最新写入的值,也不会具体承诺多久读到。但是会尽可能保证在某个时间级别(秒级)之后。可以让数据达到一致性状态。
最终一致性是弱一致性的特定形式。系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。也就是说,如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。
在股权证明PoS模式下,有一个名词叫币龄,每个币每天产生1币龄,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个PoS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(假定利息可理解为年利率5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41个币,这下就很有意思了,持币有利息。
点点币(Peercoin)是首先采用权益证明的货币。,点点币的权益证明机制结合了随机化与币龄的概念,未使用至少30天的币可以参与竞争下一区块,越久和越大的币集有更大的可能去签名下一区块。一旦币的权益被用于签名一个区块,则币龄将清为零,这样必须等待至少30日才能签署另一区块。
PoS机制虽然考虑到了PoW的不足,但依据权益结余来选择,会导致首富账户的权力更大,有可能支配记账权。股份授权证明机制(Delegated Proof of Stake,DPoS)的出现正是基于解决PoW机制和PoS机制的这类不足。
比特股(Bitshare)是一类采用DPoS机制的密码货币。它的原理是,让每一个持有比特股的人进行投票,由此产生101位代表 , 我们可以将其理解为101个超级节点或者矿池,而这101个超级节点彼此的权利是完全相等的。如果代表不能履行他们的职责(当轮到他们时,没能生成区块),他们会被除名,网络会选出新的超级节点来取代他们。
比特股引入了见证人这个概念,见证人可以生成区块,每一个持有比特股的人都可以投票选举见证人。得到总同意票数中的前N个(N通常定义为101)候选者可以当选为见证人,当选见证人的个数(N)需满足:至少一半的参与投票者相信N已经充分地去中心化。
见证人的候选名单每个维护周期(1天)更新一次。见证人然后随机排列,每个见证人按序有2秒的权限时间生成区块,若见证人在给定的时间片不能生成区块,区块生成权限交给下一个时间片对应的见证人。
比特股还设计了另外一类竞选,代表竞选。选出的代表拥有提出改变网络参数的特权,包括交易费用、区块大小、见证人费用和区块区间。若大多数代表同意所提出的改变,持股人有两周的审查期,这期间可以罢免代表并废止所提出的改变。这一设计确保代表技术上没有直接修改参数的权利以及所有的网络参数的改变最终需得到持股人的同意。
Ripple(瑞波)是一种基于互联网的开源支付协议,在Ripple的网络中,交易由客户端(应用)发起,经过追踪节点(tracking node)或验证节点(validating node)把交易广播到整个网络中。
追踪节点的主要功能是分发交易信息以及响应客户端的账本请求。验证节点除包含追踪节点的所有功能外,还能够通过共识协议,在账本中增加新的账本实例数据。
Ripple的共识达成发生在验证节点之间,每个验证节点都预先配置了一份可信任节点名单,称为UNL(Unique Node List)。在名单上的节点可对交易达成进行投票。每隔几秒,Ripple网络将进行如下共识过程:
1)每个验证节点会不断收到从网络发送过来的交易,通过与本地账本数据验证后,不合法的交易直接丢弃,合法的交易将汇总成交易候选集(candidate set)。交易候选集里面还包括之前共识过程无法确认而遗留下来的交易。
2)每个验证节点把自己的交易候选集作为提案发送给其他验证节点。
3)验证节点在收到其他节点发来的提案后,如果不是来自UNL上的节点,则忽略该提案;如果是来自UNL上的节点,就会对比提案中的交易和本地的交易候选集,如果有相同的交易,该交易就获得一票。在一定时间内,当交易获得超过50%的票数时,则该交易进入下一轮。没有超过50%的交易,将留待下一次共识过程去确认。
4)验证节点把超过50%票数的交易作为提案发给其他节点,同时提高所需票数的阈值到60%,重复步骤3)、步骤4),直到阈值达到80%。
5)验证节点把经过80%UNL节点确认的交易正式写入本地的账本数据中,称为最后关闭账本(Last Closed Ledger),即账本最后(最新)的状态。
在Ripple的共识算法中,参与投票节点的身份是事先知道的。该共识算法只适合于权限链(Permissioned chain)的场景。Ripple共识算法的拜占庭容错(BFT)能力为(n-1)/5,即可以容忍整个网络中20%的节点出现拜占庭错误而不影响正确的共识。
在区块链网络中,由于应用场景的不同,所设计的目标各异,不同的区块链系统采用了不同的共识算法。一般来说,在私有链和联盟链情况下,对一致性、正确性有很强的要求。一般来说要采用强一致性的共识算法。而在公有链情况下,对一致性和正确性通常没法做到百分之百,通常采用最终一致性(Eventual Consistency)的共识算法。
共识算法的选择与应用场景高度相关,可信环境使用paxos 或者raft,带许可的联盟可使用pbft ,非许可链可以是pow,pos,ripple共识等,根据对手方信任度分级,自由选择共识机制。
B. 不可能三角与共识机制
区块链不可能三角是由巴比特创始人长峡先生最早提出来的,所说的原理是:去中心化、安全、环保构成一个不可能三角形,设计一个符合其中两个特性的数字货币,则必然会使得第三个特性无法达成。例如设计一个既环保又安全的密码学货币,它必然是中心化的。
当时出现了很多采用其他共识机制而诞生的数字货币,例如PPcoin、Nextcoin、Ripple等,使得pow的共识机制在比特币社区也饱受争议,多数否定pow共识机制的社区成员认为这种共识机制是在浪费世界电力在做着无用的数学计算。而关键的是,中本聪在白皮书里对比特币共识机制的选择上并没有给出解释,pos即将取代pow的呼声愈演愈烈。
在这种情况之下,长峡先生提出了这个不可能三角的理论,用博弈论解读pos必然导致中心化的结果。我不否定pow,也不否定pos,但在不同的token机制下,其实有着不一样的取舍。我们都知道,跨地域、跨国家的银行间转账除了要付出很高的手续费之外,国与国之间的货币结算其实成本也是很高的,目前主要采用飞机运输的方式,按月进行结算。其次在各个商业银行将自己的储备货币发放到各个分支银行的过程中也是花费了大量的人力和物力,这其实是货币本身的属性造成的。货币在去中心化、安全、环保这三种特性中,最重要的是安全,其次才是效率。而比特币利用pow的共识机制,耗费了巨大的电力最大程度地保证了货币的安全特性,并同时兼容去中心化。在货币属性的架构搭建来说已经是最优解,而类似ripple这类以牺牲去中心化而提升效率的做法则更适用于结算。
而eos采用的dpos共识机制也是饱受争议,大家认为21个主节点的运行完全没有施行区块链去中心化的特点。但是各位得想一想,在这个不可能三角的框架下,对于智能合约这种商业的产品,是效率更加重要还是去中心化更加重要,相信在不同人的心里已经有了答案了。所以或者我们无法确认到底哪些共识机制最好,但我们可以在不同的应用场景和不同的token属性中找到那个最优的一种。
C. 什么是POW和POS,二者区别联系
POW:全称Proof of Work,工作量证明。
POS:全称Proof of Stake,权益证明。
这两者都区块链的共识机制,是数字货币的记账方法。
区别是:
1、POW机制:工作量证明机制即对于工作量的证明,是生成要加入到区块链中的一笔新的交易信息(即新区块)时必须满足的要求。在基于工作量证明机制构建的区块链网络中,节点通过计算随机哈希散列的数值解争夺记账权,求得正确的数值解以生成区块的能力是节点算力的具体表现。
2、POS机制:权益证明要求证明人提供一定数量加密货币的所有权即可。权益证明机制的运作方式是,当创造一个新区块时,矿工需要创建一个“币权”交易,交易会按照预先设定的比例把一些币发送给矿工本身。权益证明机制根据每个节点拥有代币的比例和时间,依据算法等比例地降低节点的挖矿难度,从而加快了寻找随机数的速度。
(3)比特币共识pow扩展阅读:
比特币(BitCoin)的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。
与大多数货币不同,比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算产生,比特币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节安全性。P2P的去中心化特性与算法本身可以确保无法通过大量制造比特币来人为操控币值。
D. 区块链中PoW是指什么
是指工作量证明机制,是区块链的一种共识机制。指在区块链系统中,根据每个节点在运算的过程中所做出的贡献来确定权限的一种算法。工作量证明机制是现在区块链应用最为广泛的一种共识机制。共识机制是区块链系统中很重要的一部分,如果出现问题,那么整个系统都会出问题,在区块链开发中是必须要注意的。这是之前我一个在煊凌科技上班的人告诉我的,他虽然只是里面的销售,但是对区块链的了解也比大部分人要全面。
E. POW共识机制是什么意思
比特币系统会让加入网络的每一个节点进行哈希运算,谁先求出一个合适的解,谁就可以获得本次记账权。一旦本次记账权被人抢走,所有的节点就会开始进行下一个记账权的争夺,也就是进行哈希运算。
F. 比特币的四大弊端你知道吗
论述题:请回答比特币有哪四大弊端?并论述目前有哪些技术能弥补这些不足?
答:比特币的四大弊端分别是:交易确认时间长、需要大量算力投入、难以承载商用场景、社区治理过于片面。目前Bitterfly——蝴蝶矩阵熵权共识算法能弥补上述不足。
1. 交易时间缩短至15秒,赋能商业应用新生态
比特币交易的生命周期始于交易的创建,目前比特币系统中一般取6个区块作为交易确认时间,即在交易被写入区块后再等待6个基于该区块生成(一般是60分钟),再实际进行该交易其他资产的交接,而这个过程所需的时间是非常漫长的。
针对这个问题,Bitterfly改进了工作量证明机制:首先,Bitterfly的共识达成发生在验证节点之间。参与投票节点的身份是事先知道的,每个验证节点都预先配置了一份可信任节点名单,在名单上的节点可对交易达成进行投票。其次,Bitterfly共识算法的拜占庭容错(BFT)能力为(n-1)/5,即可以容忍整个网络中20%的节点出现拜占庭错误而不影响正确的共识。因此,算法的效率比POW等匿名共识算法要高效,商用级的区块链确认速度(5000+TPS)将交易的确认时间缩短到了几秒钟,完全可以满足绝大多数的交易不受时间限制,实时进行。
2. Cloud-API云服务器挖矿,减少算力+电力投入
从2010年开始挖矿,随着越来越多的矿工加入比特币网络中,挖矿的难度急剧增大,全网每秒要进行几万亿次的哈希计算,挖矿对电脑的硬件和矿机的性能提出了更加苛刻的要求。随着被挖出的比特币数量逐渐减少,矿工们为了确保有利可图,成千上万台矿机每天24小时挖矿,用电量消耗十分庞大。据英国《每日电讯报》报道,开采这种加密货币所需电力激增至每年77.78太瓦时,相当于智利的总耗电量。
Bitterfly作为一条具有开放性和包容性的公链,改进了比特币的挖矿方式,首次提出云服务器挖矿Cloud-API的概念。Cloud-API支持多种类型计算设备,包括接入全球多个云服务器供应商,如亚马逊云、微软云、阿里云、谷歌云、IBM云等,通过高效聚合全球算力资源,实现挖矿裂变效应,不仅大幅度降低了挖矿门槛,还能有效避免资源浪费。从投资成本角度来说,在保证矿机高性能运作下,节约电力将使传统的专用矿机不再具有优势甚至面临被淘汰的境地。
3. POW+Bitterfly双层算法,承载商业应用之需
比特币由于系统吞度量(TPS)每秒处理的数量过低,很容易造成网络拥堵严重,难以满足用户交易的核心诉求。在落地应用方面,由于扩展性差、交易费用高、确认时间长等问题,导致比特币难以承载更大的商用场景。随着“区块链+”的概念不断深入推进,用户已从单纯的关注数字货币价格和交易,逐步转为更加重视其使用范围的大小。根据市场需求提高落地应用能力是比特币和其他数字货币的发展趋势。
Bitterfly开创性地提出了POW+Bitterfly双层算法,即改进型 PBFT 算法。Bitterfly通过 POW 算法确保底层区块足够安全的同时,以价值储存、去中心化数字资产兑换、支付与清算等技术,服务多种商业生态和应用。根据使用者(个人、企业、政府)、资产所有者、服务运营商、产业链上不同经营主体(设备供应商、在线电商、金融机构、物流企业等),以及区块链业务特点,对底层进行模块化拆分,达到应对多维度、多角色的安全防护、数据隐私保密、分布式数据存储、可信数据资产接入和交易。
4. 21个创世节点,凝聚社区共识
比特币社区的上层管理就算是最低门槛也是大部分人的天花板,因为比特币的社区治理更侧重于技术的升级与维护,且治理体系非常复杂,需要极强的专业能力。虽然社区“人人可参与”,只要大体上认同比特币的核心价值并愿意参与其中相关活动,就可以被认为是社区成员,但相较于金字塔顶部而言这些人缺乏认同感,流动性较大。
所以,Bitterfly从机制上首要倡导的就是让每个节点主动推广Bitterfly的价值观,在理念上达成一致。其次,以“做贡献,得奖励”的方式促进社区共享共治,形成合力稳健发展。Bitterfly社区将不设准入门槛,不论是否拥有技术背景,均可竞争节点资格。Bitterfly总共诞生210个节点,节点会通过多种方式来帮助社区未来的发展。
近来在国外科研社交服务网站Researchgate上,一篇由哈佛大学学生发表的文章:“Bitterfly:蝴蝶熵权共识算法”引起了广泛关注。文章在肯定比特币价值的同时,也指出了POW共识算法的弊端,并表明在技术方面比特币对区块链的未来难以为继。
在比特币问世11年后,它能否继续支撑整个区块链行业被再一次放在话题桌上讨论,
而该名学生在提出问题的同时,也同样给出了解决方案,那就是蝴蝶熵权共识算法。蝴蝶振翅,飓风将起。Bitterfly变革世界的力量从每一次全力以赴的展翅而始。
点击头像关注更多内容
G. POW & POS,傻傻分不清楚的共识机制
什么是共识机制?
我在开更的第一篇文章,就简单讲解了数字货币世界的16个最高频名词,其中一个就是共识机制,还记得吗?
为什么要有共识机制呢?
这就必须要解释一下在分布式系统中不得不了解的“拜占庭将军问题”了。
拜占庭将军问题(The Byzantine Generals Problem)可以总结为一句话:
在古代,11位忠诚的、不同位置的将军,如何排除叛徒的影响,对进攻或撤退达成一致。
当然,拜占庭将军问题并不是如今才提出的,我们大中华在春秋战国时期就发明了“虎符”这个神奇的方式来保障命令的正确执行。
在分布系数系统中,各个节点就是“拜占庭将军”,算法执行中的任意一个错误就是“叛徒”。
为了尽可能地排除错误、快速达成一致,来让系统有效地、正确地运行,便应运而生了各种“共识机制”。
————————————————
下面,我们就来一起学习数字货币世界中常见的几种共识机制:
PoW,工作量证明 Proof of Work
PoW是比特币所采用的共识机制,最早是由Adam Back为了解决垃圾邮件的问题而开发的一个“哈希现金Hashcash”程序。
比特币采用的是SHA256的单向函数,其具体的工作原理实在太专业,我们只需要理解到“SHA256的结果很容易验证,但是要将其计算出来,需要不断尝试运算,直到匹配到某个随机数;技术上而言,任何新增区块都需要经过232394亿运算才能得到”的程度,感兴趣的小伙伴可以搜索SHA256去深入学习。
因此,只要矿工出示运算结果,那通过PoW,全网节点就认可了他所付出的成本,承认新的区块奖励属于他。
如此大量的运算相当浪费资源,实际上并没有任何科学或实际用途,只是为了实践工作量证明机制、阻止攻击者伪装成节点来控制网络。
虽然在2009年时为了构建这种去中心化的、允许所有人可以免费参与的全球货币网络,没有更好的选择;但是发展到如今,已经有了其他不需要大量浪费算力的证明机制,比如我们下面就要提到的,PoS权益证明。
————————————————
PoS,权益证明 Proof of Stake
主要思想是:节点记账权的获得难度与节点持有的权益成反比,也就是说,一个节点拥有的币越多、时间越久,越容易获取记账权,也就越容易获取区块奖励。
实际上,最初的PoS是PoW的一种升级,根据每个节点的币龄,来等比例地降低挖矿难度,从而加快找到随机数的速度。
什么是币龄呢?
币龄=数量*拥有天数。
由于区块链中的每笔交易记录都会被标记时间戳,这个时间戳就可以作为币龄的证明,因此币龄也不可能被轻易伪造。
比如A从B那里收到10个币,并且持有了90天,那么,A就拥有了900的币龄;如果A卖了这10个币,这900币龄就被消耗了;
后来,为了彻底摆脱PoW这种依靠算力的共识机制,PoS引入了“利息”的概念;年利率是在PoS机制最初确认时就设定的,一般不会变化。
利息=(币龄*年利率)/365 ,如果利率是1%,在上个例子中,A就可以得到0.02466个币的利息。
如此一来,PoS区块链的作用过程就可以这样描述:
在初期,通过PoW机制,产生创世币;
在创世币达到一定规模时,PoS机制开始作用,交易时消耗币龄、获得产生区块的优先权,并获取利息,同时PoW机制由于消耗太多资源、浪费算力而逐渐淡出;
最终系统中仅剩PoS来维持正常运作。
目前大家所熟悉的以太坊,主要还是采用PoW的机制,不过正在转向PoS。
————————————————
大家了解了PoW和PoS,在遇到其他共识机制的时候,相信也会比较快得就能理解。
比如:股份授权证明DPOS,类似于董事会投票;燃烧证明POB;沉淀证明POD;能力证明POC;消逝时间证明PODT,等等。
就不在这里为大家一一展开了,感兴趣的同学可以网络或知乎一下~
H. 就目前来看,比特币设计之初有哪些设计的不完善的地方
比特币设定了最大发售数量,并且比特币执行分布式系统买卖,游离于世界各国政府以外,不会受到政府的行政职能管束。更为重要的是,造成比特币的程序必须用电脑来执行,必须耗费电力能源,因而,形成了成本,而且造成一枚一个新的比特币的成本非常高。比特币的数量比较有限,并且成本非常高。这种体制毫无疑问制造了比特币能够“资本增值”的营销手段,让比特币成为一种天然的投机性标底。
难度系数调整管理机制周期时间过长可能导致卒死、投资模型设计方案太简单这些…很多数字货币一开始设定的目标就是要击败比特币,因此立在利益相关的一方大多以批判比特币和描述自己怎样解决比特币并没有改进的地方为立脚点,但大多数以失败告终,因此只能偷偷的修改了自己的目标和跑道,默默地承认了比特币的地位。也有很多人口中不断在发布着比特币存有如何如何问题的言论,人体却异常诚实的大占比配备比特币。
I. 区块链共识机制之一:POW工作量证明机制
区块链可以理解为一个不可篡改的公共账本,所有参与者都能验证交易并进行记账,即为分布式账本。那到底由谁来记账?又如何保证账本的一致性、准确性呢?也就是区块链的共识机制是如何的?
区块链的共识机制就是解决由谁来记账(构造区块),以及如何维护区块链的一致性问题。目前区块链项目采用的共识机制有多种,如:POW工作量证明机制,POS权益证明机制,DPOS股份授权证明机制等等。本文说明POW工作量证明机制。
区块链的第一个成功应用比特币系统采用的POW工作量证明机制。即以比特币系统为例说明POW机制,首先比特币系统有一套激励机制让所有参与者竞争记账的权利,即谁拥有记账权谁将获取构造新区块的比特币奖励(目前奖励为12.5比特币),同时获取新区块内所有交易的手续费作为奖励。
参与者如何竞争记账权利呢?参与者通过自己的算力计算一道数学难题,谁先计算的结果,谁就拥有了记账的权利,也就可获得构造新区块的奖励。这道数学难题就是寻找一个随机数Nonce,使得对区块头的哈希计算的结果小于目标值,Nonce本身是区块头中的一个字段,所以通过不断的尝试Nonce的值,以满足区块头的哈希计算结果小于目标值。通过动态调整目标值,即可调整计算的Nonce值的难度。
关于哈希计算Nonce的过程通常类比为掷筛子游戏,基于参与游戏的筛子的个数通过调整掷得筛子的点数可调整游戏的难度。例如:100个人参与掷筛子,总共有100个筛子,要求掷得点数为100为赢,则100个人谁先掷得点数100即为胜利者,即拥有了记账权。如果发现大家掷出100点的时间太快,则可增加难度,要求掷得点数为80为赢。如果又有100个人参与游戏,则游戏中增加了筛子数,如:筛子数增加为200个,同样通过设置掷得点数来调整游戏的难度。
筛子类似于比特币网络的算力,掷得点数类似于比特币网络可动态调整的目标值。
区块链以最长的链条视为正确的链条,如果存在同时出现两个区块,会暂时并行记录两个区块,后续再生成的区块基于其中的某一个区块,将会形成的最长的链条作为一致性的链条,另外一个区块将会被丢弃,比特币是基于6个区块的确认,所以被丢弃的区块将不会获得比特币系统的奖励,也就是白白将竞争记账权的算力(电费)浪费了。基于工作量的激励,参与者必然尽最大能力构造正确的区块,也就是满足区块链的一致性。即全网的所有用户可以达成唯一的一致性的公共账本。
目前比特币系统全网算力已达到惊人的24.75EH/s,其中1E=1000P,1P=1000T,1T=1000G,1G=1000M,1M=1000K,1K=1000,H/s为每秒一次哈希计算(哈希碰撞),也就是每秒进行24.75E次哈希计算,且仍有持续的算力加入比特币系统。比特币记账权的竞争,提供算力的硬件从CPU,GPU,专业矿机,矿池。目前单机版的专业矿机已无法竞争到记账权,必须由多台矿机组合为矿池才能竞争到记账权。
J. pos机制解决了pow的问题
基于权益证明(PoS),通常将金钱作为股权使用。POA指的是身份的使用。这背后的想法是,人们会注意自己的名声,因此会被劝阻不要恶意行事。POW 工作量证明支持不可信的分布式共识,这对于加密货币等行业非常重要。它涉及挖掘过程,最好描述为执行计算以验证交易的合法性和创建新货币。第一个完成计算的矿工将获得一枚新代币,并将区块添加到链中。POS 权益证明的定义是在决定谁将创建新块时使用权益关系。这个权益的取决于每个人持有的代币数量。持有更多代币的人更有可能被选为下一个块的验证器。奖励来自交易费用,因为在这个过程中不会产生新的代币。