导航:首页 > 矿机挖矿 > 共识算法和挖矿的区别

共识算法和挖矿的区别

发布时间:2023-06-01 05:30:05

区块链 --- 共识算法

PoW算法是一种防止分布式服务资源被滥用、拒绝服务攻击的机制。它要求节点进行适量消耗时间和资源的复杂运算,并且其运算结果能被其他节点快速验算,以耗用时间、能源做担保,以确保服务与资源被真正的需求所使用。

PoW算法中最基本的技术原理是使用哈希算法。假设求哈希值Hash(r),若原始数据为r(raw),则运算结果为R(Result)。

R = Hash(r)

哈希函数Hash()的特性是,对于任意输入值r,得出结果R,并且无法从R反推回r。当输入的原始数据r变动1比特时,其结果R值完全改变。在比特币的PoW算法中,引入算法难度d和随机值n,得到以下公式:

Rd = Hash(r+n)

该公式要求在填入随机值n的情况下,计算结果Rd的前d字节必须为0。由于哈希函数结果的未知性,每个矿工都要做大量运算之后,才能得出正确结果,而算出结果广播给全网之后,其他节点只需要进行一次哈希运算即可校验。PoW算法就是采用这种方式让计算消耗资源,而校验仅需一次。

 

PoS算法要求节点验证者必须质押一定的资金才有挖矿打包资格,并且区域链系统在选定打包节点时使用随机的方式,当节点质押的资金越多时,其被选定打包区块的概率越大。

POS模式下,每个币每天产生1币龄,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000。这个时候,如果你验证了一个POS区块,你的币龄就会被清空为0,同时从区块中获得相对应的数字货币利息。

节点通过PoS算法出块的过程如下:普通的节点要成为出块节点,首先要进行资产的质押,当轮到自己出块时,打包区块,然后向全网广播,其他验证节点将会校验区块的合法性。

 

DPoS算法和PoS算法相似,也采用股份和权益质押。

但不同的是,DPoS算法采用委托质押的方式,类似于用全民选举代表的方式选出N个超级节点记账出块。

选民把自己的选票投给某个节点,如果某个节点当选记账节点,那么该记账节点往往在获取出块奖励后,可以采用任意方式来回报自己的选民。

这N个记账节点将轮流出块,并且节点之间相互监督,如果其作恶,那么会被扣除质押金。

通过信任少量的诚信节点,可以去除区块签名过程中不必要的步骤,提高了交易的速度。
 

拜占庭问题:

拜占庭是古代东罗马帝国的首都,为了防御在每块封地都驻扎一支由单个将军带领的军队,将军之间只能靠信差传递消息。在战争时,所有将军必须达成共识,决定是否共同开战。

但是,在军队内可能有叛徒,这些人将影响将军们达成共识。拜占庭将军问题是指在已知有将军是叛徒的情况下,剩余的将军如何达成一致决策的问题。

BFT:

BFT即拜占庭容错,拜占庭容错技术是一类分布式计算领域的容错技术。拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或中断以及遭到恶意攻击等原因,计算机和网络可能出现不可预料的行为。拜占庭容错技术被设计用来处理这些异常行为,并满足所要解决的问题的规范要求。

拜占庭容错系统

发生故障的节点被称为 拜占庭节点 ,而正常的节点即为 非拜占庭节点

假设分布式系统拥有n台节点,并假设整个系统拜占庭节点不超过m台(n ≥ 3m + 1),拜占庭容错系统需要满足如下两个条件:

另外,拜占庭容错系统需要达成如下两个指标:

PBFT即实用拜占庭容错算法,解决了原始拜占庭容错算法效率不高的问题,算法的时间复杂度是O(n^2),使得在实际系统应用中可以解决拜占庭容错问题
 

PBFT是一种状态机副本复制算法,所有的副本在一个视图(view)轮换的过程中操作,主节点通过视图编号以及节点数集合来确定,即:主节点 p = v mod |R|。v:视图编号,|R|节点个数,p:主节点编号。

PBFT算法的共识过程如下:客户端(Client)发起消息请求(request),并广播转发至每一个副本节点(Replica),由其中一个主节点(Leader)发起提案消息pre-prepare,并广播。其他节点获取原始消息,在校验完成后发送prepare消息。每个节点收到2f+1个prepare消息,即认为已经准备完毕,并发送commit消息。当节点收到2f+1个commit消息,客户端收到f+1个相同的reply消息时,说明客户端发起的请求已经达成全网共识。

具体流程如下

客户端c向主节点p发送<REQUEST, o, t, c>请求。o: 请求的具体操作,t: 请求时客户端追加的时间戳,c:客户端标识。REQUEST: 包含消息内容m,以及消息摘要d(m)。客户端对请求进行签名。

主节点收到客户端的请求,需要进行以下交验:

a. 客户端请求消息签名是否正确。

非法请求丢弃。正确请求,分配一个编号n,编号n主要用于对客户端的请求进行排序。然后广播一条<<PRE-PREPARE, v, n, d>, m>消息给其他副本节点。v:视图编号,d客户端消息摘要,m消息内容。<PRE-PREPARE, v, n, d>进行主节点签名。n是要在某一个范围区间内的[h, H],具体原因参见 垃圾回收 章节。

副本节点i收到主节点的PRE-PREPARE消息,需要进行以下交验:

a. 主节点PRE-PREPARE消息签名是否正确。

b. 当前副本节点是否已经收到了一条在同一v下并且编号也是n,但是签名不同的PRE-PREPARE信息。

c. d与m的摘要是否一致。

d. n是否在区间[h, H]内。

非法请求丢弃。正确请求,副本节点i向其他节点包括主节点发送一条<PREPARE, v, n, d, i>消息, v, n, d, m与上述PRE-PREPARE消息内容相同,i是当前副本节点编号。<PREPARE, v, n, d, i>进行副本节点i的签名。记录PRE-PREPARE和PREPARE消息到log中,用于View Change过程中恢复未完成的请求操作。

主节点和副本节点收到PREPARE消息,需要进行以下交验:

a. 副本节点PREPARE消息签名是否正确。

b. 当前副本节点是否已经收到了同一视图v下的n。

c. n是否在区间[h, H]内。

d. d是否和当前已收到PRE-PPREPARE中的d相同

非法请求丢弃。如果副本节点i收到了2f+1个验证通过的PREPARE消息,则向其他节点包括主节点发送一条<COMMIT, v, n, d, i>消息,v, n, d, i与上述PREPARE消息内容相同。<COMMIT, v, n, d, i>进行副本节点i的签名。记录COMMIT消息到日志中,用于View Change过程中恢复未完成的请求操作。记录其他副本节点发送的PREPARE消息到log中。

主节点和副本节点收到COMMIT消息,需要进行以下交验:

a. 副本节点COMMIT消息签名是否正确。

b. 当前副本节点是否已经收到了同一视图v下的n。

c. d与m的摘要是否一致。

d. n是否在区间[h, H]内。

非法请求丢弃。如果副本节点i收到了2f+1个验证通过的COMMIT消息,说明当前网络中的大部分节点已经达成共识,运行客户端的请求操作o,并返回<REPLY, v, t, c, i, r>给客户端,r:是请求操作结果,客户端如果收到f+1个相同的REPLY消息,说明客户端发起的请求已经达成全网共识,否则客户端需要判断是否重新发送请求给主节点。记录其他副本节点发送的COMMIT消息到log中。
 

如果主节点作恶,它可能会给不同的请求编上相同的序号,或者不去分配序号,或者让相邻的序号不连续。备份节点应当有职责来主动检查这些序号的合法性。

如果主节点掉线或者作恶不广播客户端的请求,客户端设置超时机制,超时的话,向所有副本节点广播请求消息。副本节点检测出主节点作恶或者下线,发起View Change协议。

View Change协议

副本节点向其他节点广播<VIEW-CHANGE, v+1, n, C , P , i>消息。n是最新的stable checkpoint的编号, C 2f+1验证过的CheckPoint消息集合, P 是当前副本节点未完成的请求的PRE-PREPARE和PREPARE消息集合。

当主节点p = v + 1 mod |R|收到 2f 个有效的VIEW-CHANGE消息后,向其他节点广播<NEW-VIEW, v+1, V , O >消息。 V 是有效的VIEW-CHANGE消息集合。 O 是主节点重新发起的未经完成的PRE-PREPARE消息集合。PRE-PREPARE消息集合的选取规则:

副本节点收到主节点的NEW-VIEW消息,验证有效性,有效的话,进入v+1状态,并且开始 O 中的PRE-PREPARE消息处理流程。
 

在上述算法流程中,为了确保在View Change的过程中,能够恢复先前的请求,每一个副本节点都记录一些消息到本地的log中,当执行请求后副本节点需要把之前该请求的记录消息清除掉。

最简单的做法是在Reply消息后,再执行一次当前状态的共识同步,这样做的成本比较高,因此可以在执行完多条请求K(例如:100条)后执行一次状态同步。这个状态同步消息就是CheckPoint消息。

副本节点i发送<CheckPoint, n, d, i>给其他节点,n是当前节点所保留的最后一个视图请求编号,d是对当前状态的一个摘要,该CheckPoint消息记录到log中。如果副本节点i收到了2f+1个验证过的CheckPoint消息,则清除先前日志中的消息,并以n作为当前一个stable checkpoint。

这是理想情况,实际上当副本节点i向其他节点发出CheckPoint消息后,其他节点还没有完成K条请求,所以不会立即对i的请求作出响应,它还会按照自己的节奏,向前行进,但此时发出的CheckPoint并未形成stable。

为了防止i的处理请求过快,设置一个上文提到的 高低水位区间[h, H] 来解决这个问题。低水位h等于上一个stable checkpoint的编号,高水位H = h + L,其中L是我们指定的数值,等于checkpoint周期处理请求数K的整数倍,可以设置为L = 2K。当副本节点i处理请求超过高水位H时,此时就会停止脚步,等待stable checkpoint发生变化,再继续前进。
 

在区块链场景中,一般适合于对强一致性有要求的私有链和联盟链场景。例如,在IBM主导的区块链超级账本项目中,PBFT是一个可选的共识协议。在Hyperledger的Fabric项目中,共识模块被设计成可插拔的模块,支持像PBFT、Raft等共识算法。
 

 

Raft基于领导者驱动的共识模型,其中将选举一位杰出的领导者(Leader),而该Leader将完全负责管理集群,Leader负责管理Raft集群的所有节点之间的复制日志。
 

下图中,将在启动过程中选择集群的Leader(S1),并为来自客户端的所有命令/请求提供服务。 Raft集群中的所有节点都维护一个分布式日志(复制日志)以存储和提交由客户端发出的命令(日志条目)。 Leader接受来自客户端的日志条目,并在Raft集群中的所有关注者(S2,S3,S4,S5)之间复制它们。

在Raft集群中,需要满足最少数量的节点才能提供预期的级别共识保证, 这也称为法定人数。 在Raft集群中执行操作所需的最少投票数为 (N / 2 +1) ,其中N是组中成员总数,即 投票至少超过一半 ,这也就是为什么集群节点通常为奇数的原因。 因此,在上面的示例中,我们至少需要3个节点才能具有共识保证。

如果法定仲裁节点由于任何原因不可用,也就是投票没有超过半数,则此次协商没有达成一致,并且无法提交新日志。

 

数据存储:Tidb/TiKV

日志:阿里巴巴的 DLedger

服务发现:Consul& etcd

集群调度:HashiCorp Nomad
 

只能容纳故障节点(CFT),不容纳作恶节点

顺序投票,只能串行apply,因此高并发场景下性能差
 

Raft通过解决围绕Leader选举的三个主要子问题,管理分布式日志和算法的安全性功能来解决分布式共识问题。

当我们启动一个新的Raft集群或某个领导者不可用时,将通过集群中所有成员节点之间协商来选举一个新的领导者。 因此,在给定的实例中,Raft集群的节点可以处于以下任何状态: 追随者(Follower),候选人(Candidate)或领导者(Leader)。

系统刚开始启动的时候,所有节点都是follower,在一段时间内如果它们没有收到Leader的心跳信号,follower就会转化为Candidate;

如果某个Candidate节点收到大多数节点的票,则这个Candidate就可以转化为Leader,其余的Candidate节点都会回到Follower状态;

一旦一个Leader发现系统中存在一个Leader节点比自己拥有更高的任期(Term),它就会转换为Follower。

Raft使用基于心跳的RPC机制来检测何时开始新的选举。 在正常期间, Leader 会定期向所有可用的 Follower 发送心跳消息(实际中可能把日志和心跳一起发过去)。 因此,其他节点以 Follower 状态启动,只要它从当前 Leader 那里收到周期性的心跳,就一直保持在 Follower 状态。

Follower 达到其超时时间时,它将通过以下方式启动选举程序:

根据 Candidate 从集群中其他节点收到的响应,可以得出选举的三个结果。

共识算法的实现一般是基于复制状态机(Replicated state machines),何为 复制状态机

简单来说: 相同的初识状态 + 相同的输入 = 相同的结束状态 。不同节点要以相同且确定性的函数来处理输入,而不要引入一下不确定的值,比如本地时间等。使用replicated log是一个很不错的注意,log具有持久化、保序的特点,是大多数分布式系统的基石。

有了Leader之后,客户端所有并发的请求可以在Leader这边形成一个有序的日志(状态)序列,以此来表示这些请求的先后处理顺序。Leader然后将自己的日志序列发送Follower,保持整个系统的全局一致性。注意并不是强一致性,而是 最终一致性

日志由有序编号(log index)的日志条目组成。每个日志条目包含它被创建时的任期号(term),和日志中包含的数据组成,日志包含的数据可以为任何类型,从简单类型到区块链的区块。每个日志条目可以用[ term, index, data]序列对表示,其中term表示任期, index表示索引号,data表示日志数据。

Leader 尝试在集群中的大多数节点上执行复制命令。 如果复制成功,则将命令提交给集群,并将响应发送回客户端。类似两阶段提交(2PC),不过与2PC的区别在于,leader只需要超过一半节点同意(处于工作状态)即可。

leader follower 都可能crash,那么 follower 维护的日志与 leader 相比可能出现以下情况

当出现了leader与follower不一致的情况,leader强制follower复制自己的log, Leader会从后往前试 ,每次AppendEntries失败后尝试前一个日志条目(递减nextIndex值), 直到成功找到每个Follower的日志一致位置点(基于上述的两条保证),然后向后逐条覆盖Followers在该位置之后的条目 。所以丢失的或者多出来的条目可能会持续多个任期。
 

要求候选人的日志至少与其他节点一样最新。如果不是,则跟随者节点将不投票给候选者。

意味着每个提交的条目都必须存在于这些服务器中的至少一个中。如果候选人的日志至少与该多数日志中的其他日志一样最新,则它将保存所有已提交的条目,避免了日志回滚事件的发生。

即任一任期内最多一个leader被选出。这一点非常重要,在一个复制集中任何时刻只能有一个leader。系统中同时有多余一个leader,被称之为脑裂(brain split),这是非常严重的问题,会导致数据的覆盖丢失。在raft中,两点保证了这个属性:

因此, 某一任期内一定只有一个leader
 

当集群中节点的状态发生变化(集群配置发生变化)时,系统容易受到系统故障。 因此,为防止这种情况,Raft使用了一种称为两阶段的方法来更改集群成员身份。 因此,在这种方法中,集群在实现新的成员身份配置之前首先更改为中间状态(称为联合共识)。 联合共识使系统即使在配置之间进行转换时也可用于响应客户端请求,它的主要目的是提升分布式系统的可用性。

㈡ 比特币的挖矿到底挖的是什么

比特币最吸引人的是挖矿。为什么采矿如此迷人?因为挖矿可以得到比特币。在写这篇文章的时候,比特币的价格是3900美元。如果能挖到一个区块,可以获得48750美元的开采收入和大约6000美元的交易费收入。这难道不令人着迷吗?

那么到底什么是采矿呢?矿工如何通过挖矿获得比特币?这需要从比特币区块链系统采用的PoW(工作量证明)共识机制说起。

有一个村子,很多事情需要一起决定。比如有一天村长需要所有村民一起决定今天中午在村食堂包饺子还是卷面条。通常我们能想到的方式是投票——每个村民一票,少数服从多数。但是有些村民不愿意在食堂吃饭,可能会把自己的票让给别人,可能会导致不公平。大竖悔毕部分在食堂吃饭的人,可能都实现不了自己的愿望。

于是村长换了一种方式。10点50分,他用喊话器向全体村民广播:“中午我们在食堂选做饺子还是面条。想去食堂吃饭的,就推食堂门口的巨石。11点整,石头会推到大门东边,他们中午吃饺子;推余芹到大门西边,中午吃面。”

于是想在食堂吃饭的人跑去推石头。贡献多的人最后实现了愿望,贡献少的人心甘情愿,因为村里一直就是这样的规矩。

这个故事讲述了一种在民众中达成共识的方式,我们可以称之为“工作量证明机制”。用努力的多少来证明自己的选择意愿。

在本系列的第一篇文章中,我们讨论了可以保持每个人的账簿一致的区块链系统。这种保持所有节点数据一致的机制称为共识机制。不同的共识算法可以达到不同性能的共识效果,最终目的是保持数据一致。

注意第一个,在任何块中,第一个都没有转出地址,也就是所谓的CoinBase (mining transaction)。没有人付给矿工这些钱,但是矿工只是写着他们得到了12.5个比特币。所有节点都同意矿工这样写,所以矿工获得采矿收入。

不同矿工填块的时候,数据肯定是不一样的,因为每个矿工的第一条规则肯定是不一样的,矿工只会把开采所得转到自己的地址。所以矿工迈克尔的CoinBase是“迈克尔获得了12.5个比特币”,矿工南希的CoinBase是“南希获得了12.5个比特币”。

每个矿工都填好了自己收集的交易和应该得到的收入。那么,谁的记录会得到大家的认可呢?比特币使用工作量证明机制,让矿工相互竞争来解决一个数学问题。谁先解决,谁就得到大家的认可。就像开篇故事中讲述的那个村庄一样,每个矿工都在用力推着巨石。一旦石头压住了他的账户页面,他喊道:“我的工作量证明是成功的。快来看!”所有的矿工都来了,抄下那一页账目,贴在账本后面,然后开始新的记账流程。周而复始,生生不息,账本一页页的增加,账本越来越厚。

当中本聪决定采用工作量认证机制时,出发点是为了避免系统受到攻击。“中本聪”认为,如果攻击者想通过搞乱账本来攻击,他需要足够的计算能力。换句话说,他比大多数推石头的人都厉害。这样他要付出巨大的成本,但回报不足以抵消成本,所以攻击者没有经济动机去攻击比特币系统。

但是,现在由于比特币的价格越来越高,推石头的人已经不满足于自己去推了,而是把家里的大骡子大马都派上去干活了。在“中本聪”最初的设计里,一个CPU一票,用算力来决定哪个矿工记的账成为最终的账目。随着比特币价格的增高,开始出现了GPU挖矿,后来人们又不满足于GPU的速度,开始制造专用芯片挖矿。专用芯片在计算比特币问题的能力上是普通CPU的数万倍,因此现在比特币已经不是“一个CPU一票”了,这也背离了当初“中本聪”的设计,比特币网络已经基本上被几大矿池所垄断,背离了去中心化货币这一初衷。

雷锋网特约稿件,未经授权禁止转载。详情见转载须知。

相关问答:显卡挖矿是什么意思?为什么显卡价格和挖矿有关?

作为一个曾经“梦想一夜暴富,最后血本无归”的“老矿工”,来回答这个问题,本文尽量用通俗的语言来描述一下挖矿、显卡挖矿和显卡价格的一些相关问题。

“挖矿”是什么意思?

简单来讲,挖矿就是产生数字货币的意思,数字货币有很多种,包括我们听到过比特币、莱特币以太坊、币安币、狗狗币等。

这里,我们以比特币为例,来大致了解一下,比特币就是一种P2P形式的数字货币,P2P的去中心化特性与算法本身可以确保无法通过大量制造比特币来人为操控币值。所以,比特币其总数量有限,该货币系统曾在4年内只有不超过1050万个,之后的总数量将被永久限制在2100万个。

但是,与大多数货币不前手同,比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算机数据计算而产生,每隔一定时间就会通过“挖矿”产生一部分比特币。

“显卡挖矿”是什么意思?

我们知道了“挖矿”的含义,简单地说,不就是让电脑进行大量计算吗?这不正是电脑的长处吗?

那么,为什么“挖矿”总要拿显卡去挖,更为厉害的CPU,它不能挖吗?毕竟,显卡一般都是用来打游戏的,怎么会和数字货币扯上关系呢?

这里就要提到一个词语:算力。

我们要知道,挖矿最重要的就是电脑硬件的算力大小,相较于CPU的复杂运算,显卡进行的则是通用计算,往往都会堆叠上千甚至几千个流处理器。然而正好,挖矿只需要通用计算就能搞定,复杂运算却完全利用不上,所以,显卡的另外一个用武之地就是挖矿!

相当于什么意思呢?举个例子简单的例子:我们需要在大量的白纸上面写上一个数字1,我们安排10个老师和1000个小学生来做这件事,在相同时间内,这1000个小学生的完成量肯定要比10个老师完成的更多,虽然老师能力更强,但是在处理这种简单事情上,架不住小学生人多啊。

其实,早期的“挖矿”,确实是用CPU来进行的,后来,由于挖矿的难度越来越大,CPU的通用计算你能力已经并无法满足挖矿的需求了,所以就用到显卡来挖矿。反而,对于我们平时注重的电脑性能提升的重点硬件CPU和内存要求并不高,有的时候仅仅需要能够保证运行操系统和相关软件就行。我当初自己配置的小型矿机,使用的CPU和CPU散热都是二手货,内存仅为4GB,使用的硬盘仅为60G,然而搭配的确是6块显卡和可以插6块显卡的主板。

为什么显卡价格和挖矿有关?

关于显卡的价格与挖矿的关系,一般可以从新显卡和二手显卡市场的价格来分别说一下。

第一,新显卡方面。

其实,新显卡的价格上涨,主要是在前两年,最近显卡价格正在逐渐回落。而当初,显卡价格上涨跟当时比特币的市场行情有很大关系。当时的比特币价格可谓是达到了疯狂状态,所以催生了大量的专业“矿工”和“挖矿公司”,当然,也包括大量的像我一样的“挖矿散户”。

当时,有媒体报道,有部分地区的网吧竟然关门歇业,战而进行专业挖矿,其火热程度可想而知。

后来,由于数字货币价格回落,并且相关监管部门对数字货币及挖矿项目的规范化管理,行业正逐步回归理性和正规,加上挖矿行业与环境保护相悖,所以大量的矿工转行、矿机关闭,同时,相关企业也研发出了专用的挖矿机器,造成显卡需求持续下降,显卡价格随之下降。

大量的市场需求,导致显卡的价格一涨再涨;市场需求降低,显卡价格也逐步回落,这与市场的供需关系和价格浮动是相匹配的。

第二,二手显卡方面。

挖矿用的显卡,我们俗称矿卡。随着矿机对显卡的大量需求,二手显卡也被很多矿工所青睐;但又随着大量矿机关闭,大量矿卡肯定流入二手市场,而很多良心人士,是不建议普通用户购买二手矿卡的。所以,显卡二手市场的的价格也就随着挖矿行业的行情变化而变化。

举个真实的例子,AMD曾推出了一款显卡叫Radeon Ⅶ,于2019年2月发布,7月份停产,发布时价格仅为5000多。但是,在停产一年半过后,其二手价格竟高达8000元左右,而这仅仅是由于这块显卡各方面的性能数据更加有利于挖矿。

总体而言,显卡挖矿就是一种利用显卡本身的优势来进行数字货币的生产,而挖矿行业的兴衰,就直接影响了显卡价格的波动。

在此,奉劝还未进入而又想进入“矿圈”的普通玩家,放弃吧,因为有可能,下一个“血本无归”的,就是你!

㈢ 什么是poc容量证明共识算法

PoC是Proof of Capacity的缩写,翻译成汉语就是容量证明。顾名思义,就是通过存储容量的多少来决定区块生成权的算法。PoC共识机制用更加通俗的语言表达就是用CPU,GPU预算出一堆彩票号码,然后填满硬盘,挖矿就是寻找中奖的彩票号码。
目前大部分数字货币挖矿采用的是PoW(工作量证明)。仅有Burst、BHD、Newbi使用PoC共识机制。

㈣ 共识算法(分布式下的一致性算法)

共识算法(分布式下的一致性算法)

业务场景:

达到的效果:可以保证在过半节点正常的情况下,所有的写入操作不会丢失。

Zab协议并不保证强一致性,也不是弱一致性,而是在一定限度内的强一致性。

缺点:

缺点:

区块链1.0时代:比特币,作用就是去中心化的货币,无国界的货币,并且可以匿名性的洗钱
区块链2.0时代:代表以太坊,引入了智能合约的概念,发挥其 去中心化和不可篡改的特性,可以实现类似于 追溯、拍卖、投票等业务场景。

区块链技术的实用价值:
无国界虚拟货币:比如比特币

模拟一个拍卖(盲拍)的业务场景(发布一个智能合约):
https://solidity.readthedocs.io/en/latest/solidity-by-example.html#simple-open-auction

普通拍卖可能存在的问题:

商家A对一件商品公开自己要拍卖,智能合约在规定的时间会开始接收竞拍(参与竞拍的人需要支付保证金(以太币)),在竞拍结束之后,价格最高的人会完成支付,其它的买家的保证金会全额退回。
然后成功竞拍者可以线下去找卖家,证明自己的身份,然后获得竞拍品

优点:

工作量证明( PoW )通过计算一个数值( nonce ),使得拼揍上交易数据后内容的 Hash 值满足规定的上限。在节点成功找到满足的Hash值之后,会马上对全网进行广播打包区块,网络的节点收到广播打包区块,会立刻对其进行验证

举个例子,给定的一个基本的字符串”Hello, world!”,我们给出的工作量要求是,可以在这个字符串后面添加一个叫做nonce的整数值,对变更后(添加nonce)的字符串进行SHA256哈希运算,
如果得到的哈希结果(以16进制的形式表示)是以”0000”开头的,则验证通过。为了达到这个工作量证明的目标。我们需要不停的递增nonce值,对得到的新字符串进行SHA256哈希运算。
按照这个规则,我们需要经过4251次计算才能找到恰好前4位为0的哈希散列。计算完之后,然后广播到临近的节点,临近的节点会先验算交易是否合法(金额是否异常),再验证hash值是否满足要求,都满足的话,就会把这个数据块添加到自己的账本中。

优点:

缺点:

计算难度值会因为 股东持有的 币龄而降低,为挖矿无形之中提升了壁垒,股东更容易算出结果值(难度更低),从而避免过度的算力竞争,节省电力,提升系统的稳定性。
因为从人性的角度,股东更不愿意让不安全的现象发生(比如攻击主链),因为会造成信用降低,从而自己的矿币贬值。让股东拥有更多的记账权,让主链更安全。

扩展可以参考我之前写过的zab专栏博客
https://www.jianshu.com/nb/32551354

㈤ 常见的共识算法介绍

在异步系统中,需要主机之间进行状态复制,以保证每个主机达成一致的状态共识。而在异步系统中,主机之间可能出现故障,因此需要在默认不可靠的异步网络中定义容错协议,以确保各个主机达到安全可靠的状态共识。

共识算法其实就是一组规则,设置一组条件,筛选出具有代表性的节点。在区块链系统中,存在很多这样的筛选方案,如在公有链中的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共识等,根据对手方信任度分级,自由选择共识机制。

㈥ 比特币、以太坊与IPFS挖矿的区别

比特币和以太坊是pow算力挖矿。ipfs是存储即挖矿,新型模式。

㈦ 北大青鸟设计培训:区块链技术中的共识算法

关于区块链技术的一些讲解和知识点分析我们已经给大家分享过很多次了。
今天,银川java课程http://www.kmbdqn.cn/就再来了解一下,区块链技术中的共识算法的一些基本定义与特点。
简单过一下区块链我们一般意识形态中的链是铁链,由铁铸成,一环扣一环。
形象地,区块链的也可以这么理解,只不过它不是由铁铸成,而是由拥有一定数据结构的块连接而成,这是一个简单的雏形通俗讲解共识所谓共识,通俗来说,就是我们大家对某种事物的理解达成一致的意思。
比如说日常的开会讨论问题,又比如判断一个动物是不是猫,我们肉眼看了后觉得像猫,其满足猫的特征,那么我们认为它是猫。
共识,是一种规则。
继续我们的会议例子。
参与会议的人,通过开会的方式来达到数尘谈论解决问题。
对比区块链中,参与挖矿的矿工通过某种共识方式(算法)来解决让自己的账本跟其他节点的账本保持一致。
让账本保持一致的深入一层意思就是,让链中区块信息保持一致。
为什么需要共识,不需要可不可以?当然不可以,生活中没了共识的规则,一切乱套。
区块链没了共识的规则,各个节点各干各的,失去一致的意义。
这两个例子的对应的关系如下:会议的人=挖矿的矿工开会=共识方式(算法)谈论薯斗禅解决问题=让自己的账本跟其他节点的账本保持一致如果你对节点的概念意思不懂,请先理解为矿工,一个节点内部包含很多角色,矿工是其中之一。
共识算法目前常见销轮的在区块链中,节点们让自己的账本跟其他节点的账本保持一致的共识方式(算法)有如下几种:PoW,代表者是比特币(BTC)弊端:矿池的出现,一定程度上违背了去中心化的初衷,同时也使得51%攻击成为可能,影响其安全性。
存在巨大的算力浪费,看看矿池消耗大量的电力资源,随着难度增加,挖出的不够付电费PoS,代表者是以太坊(ETH),从PoW过度到PoS弊端:破坏者对网络的攻击成本很低,拥有代币就能竞争另外拥有代币数量大的节点获得记账权的概率会更大,会使得网络共识受少数富裕账户支配,从而失去公正性。

㈧ 如何辩别真正的区块链数字货币

某个数字货币是否是一个有价值的币种,在目前基本属于“天使轮”阶段而言,判定标准有三个,一是团队,二是经济模型,三是行业需求。

团队的随机性太大,在此不进行讨论。本文首先对数字货币的经济模型进行一个详尽地分析,在随后的文章中,笔者会根据不同行业对部分数字货币进行剖析。

严格来讲,本文所涉及的经济模型,并不完全等同于经济学中所述概念。特指在数字货币中,货币的共识机制与激励机制。

一、共识机制

共识机制是区块链系统中各个节点达成一致的策略和方法,应根据系统类型及应用场景的不同灵活选取。

常用的共识机制主要有PoW、PoS、DPoS、PBFT(及其变种)等。另外,基于区块链技术的不同应用场景,以及各种共识机制的特性,本文按照以下维度来评价各种共识机制的技术水平:

a) 合规监管:是否支持超级权限节点对全网节点、数据进行监管;

b) 性能效率:交易达成共识被确认的效率;

c) 资源消耗:共识过程中耗费的CPU、网络输入输出、存储等计算机资源;

d) 容错性:防攻击、防欺诈的能力。

1 行业背景

寻找行业痛点:资产管理需要专业的团队与知识,然而现在大多数数字货币投资者并不具备;数字货币市场行情波动巨大,在行情下挫中,投资者无法对资产进行保值。

2 自身优势

在股票、期货市场深耕多年,有成熟、高素质资产管理团队;AI大数据团队技术实力强劲。

3 市场调研

进行市场调研之后,预估未来5年内,资产管理的市值约为10亿美元。

4 数字货币总量

在考虑预期资产管理市值、开发周期与难度后,考虑发行基于以太坊ERC20数字货币XT,数量20亿枚,永不增发。

5 分配方式

早期投资人持有10%,团队持有20%,商务运营10%,社区建设10%,投资者持有50%。

6 数字货币释放/回购机制

释放机制分为三类:

第一类:商务运营持币部分为全部解锁,用途限定为商务及运营活动;

第二类:社区建设部分的释放机制为,社区成员发布独家资讯、合作平台发布独家项目进展等行为,根据参与ID数,释放相应比例XT(发布者与参与者各获得50%),直至全部释放完成(释放完成之后,后续奖励来源于平台利润池);

第三类:投资者持主流数字货币,在平台中进行资产管理,根据兑换比例,释放一定数量的XT,早期投资人与团队持有部分同步,按比例解锁;

回购机制为:所得利润(以XT计)的50%返还给持币者;剩余进入平台利润池中,按月对利润池中的50%的XT进行销毁,直至XT总量为10亿枚;其余作为平台生态建设基金;

7 数字货币权益

利润分成:持有XT,是为平台用户,可以享受平台利润50%的分成;

平台治理:参与平台活动享受XT奖励、其他项目方的空投活动;

功能定制:可基于平台AI大数据,投资者可购买针对个人交易策略进行优化的服务

㈨ 深入了解区块链的共识机制及算法原理

所谓“共识机制”,是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共识。再通俗一点来讲,如果中国一名微博大V、美国一名虚拟币玩家、一名非洲留学生和一名欧洲旅行者互不相识,但他们都一致认为你是个好人,那么基本上就可以断定你这人还不坏。

要想整个区块链网络节点维持一份相同的数据,同时保证每个参与者的公平性,整个体系的所有参与者必须要有统一的协议,也就是我们这里要将的共识算法。比特币所有的节点都遵循统一的协议规范。协议规范(共识算法)由相关的共识规则组成,这些规则可以分为两个大的核心:工作量证明与最长链机制。所有规则(共识)的最终体现就是比特币的最长链。共识算法的目的就是保证比特币不停地在最长链条上运转,从而保证整个记账系统的一致性和可靠性。

区块链中的用户进行交易时不需要考虑对方的信用、不需要信任对方,也无需一个可信的中介机构或中央机构,只需要依据区块链协议即可实现交易。这种不需要可信第三方中介就可以顺利交易的前提是区块链的共识机制,即在互不了解、信任的市场环境中,参与交易的各节点出于对自身利益考虑,没有任何违规作弊的动机、行为,因此各节点会主动自觉遵守预先设定的规则,来判断每一笔交易的真实性和可靠性,并将检验通过的记录写入到区块链中。各节点的利益各不相同,逻辑上将它们没有合谋欺骗作弊的动机产生,而当网络中有的节点拥有公共信誉时,这一点尤为明显。区块链技术运用基于数学原理的共识算法,在节点之间建立“信任”网络,利用技术手段从而实现一种创新式的信用网络。

目前区款连行业内主流的共识算法机制包含:工作量证明机制、权益证明机制、股份授权证明机制和Pool验证池这四大类。

工作量证明机制即对于工作量的证明,是生成要加入到区块链中的一笔新的交易信息(即新区块)时必须满足的要求。在基于工作量证明机制构建的区块链网络中,节点通过计算随机哈希散列的数值解争夺记账权,求得正确的数值解以生成区块的能力是节点算力的具体表现。工作量证明机制具有完全去中心化的优点,在以工作量证明机制为共识的区块链中,节点可以自由进出。大家所熟知的比特币网络就应用工作量证明机制来生产新的货币。然而,由于工作量证明机制在比特币网络中的应用已经吸引了全球计算机大部分的算力,其他想尝试使用该机制的区块链应用很难获得同样规模的算力来维持自身的安全。同时,基于工作量证明机制的挖矿行为还造成了大量的资源浪费,达成共识所需要的周期也较长,因此该机制并不适合商业应用。

2012年,化名Sunny King的网友推出了Peercoin,该加密电子货币采用工作量证明机制发行新币,采用权益证明机制维护网络安全,这是权益证明机制在加密电子货币中的首次应用。与要求证明人执行一定量的计算工作不同,权益证明要求证明人提供一定数量加密货币的所有权即可。权益证明机制的运作方式是,当创造一个新区块时,矿工需要创建一个“币权”交易,交易会按照预先设定的比例把一些币发送给矿工本身。权益证明机制根据每个节点拥有代币的比例和时间,依据算法等比例地降低节点的挖矿难度,从而加快了寻找随机数的速度。这种共识机制可以缩短达成共识所需的时间,但本质上仍然需要网络中的节点进行挖矿运算。因此,PoS机制并没有从根本上解决PoW机制难以应用于商业领域的问题。

股份授权证明机制是一种新的保障网络安全的共识机制。它在尝试解决传统的PoW机制和PoS机制问题的同时,还能通过实施科技式的民主抵消中心化所带来的负面效应。

股份授权证明机制与董事会投票类似,该机制拥有一个内置的实时股权人投票系统,就像系统随时都在召开一个永不散场的股东大会,所有股东都在这里投票决定公司决策。基于DPoS机制建立的区块链的去中心化依赖于一定数量的代表,而非全体用户。在这样的区块链中,全体节点投票选举出一定数量的节点代表,由他们来代理全体节点确认区块、维持系统有序运行。同时,区块链中的全体节点具有随时罢免和任命代表的权力。如果必要,全体节点可以通过投票让现任节点代表失去代表资格,重新选举新的代表,实现实时的民主。

股份授权证明机制可以大大缩小参与验证和记账节点的数量,从而达到秒级的共识验证。然而,该共识机制仍然不能完美解决区块链在商业中的应用问题,因为该共识机制无法摆脱对于代币的依赖,而在很多商业应用中并不需要代币的存在。

Pool验证池基于传统的分布式一致性技术建立,并辅之以数据验证机制,是目前区块链中广泛使用的一种共识机制。

Pool验证池不需要依赖代币就可以工作,在成熟的分布式一致性算法(Pasox、Raft)基础之上,可以实现秒级共识验证,更适合有多方参与的多中心商业模式。不过,Pool验证池也存在一些不足,例如该共识机制能够实现的分布式程度不如PoW机制等

这里主要讲解区块链工作量证明机制的一些算法原理以及比特币网络是如何证明自己的工作量的,希望大家能够对共识算法有一个基本的认识。

工作量证明系统的主要特征是客户端要做一定难度的工作来得到一个结果,验证方则很容易通过结果来检查客户端是不是做了相应的工作。这种方案的一个核心特征是不对称性:工作对于请求方是适中中的,对于验证方是易于验证的。它与验证码不同,验证码是易于被人类解决而不是易于被计算机解决。

下图所示的为工作量证明流程。

举个例子,给个一个基本的字符创“hello,world!”,我们给出的工作量要求是,可以在这个字符创后面添加一个叫做nonce(随机数)的整数值,对变更后(添加nonce)的字符创进行SHA-256运算,如果得到的结果(一十六进制的形式表示)以“0000”开头的,则验证通过。为了达到这个工作量证明的目标,需要不停地递增nonce值,对得到的字符创进行SHA-256哈希运算。按照这个规则,需要经过4251次运算,才能找到前导为4个0的哈希散列。

通过这个示例我们对工作量证明机制有了一个初步的理解。有人或许认为如果工作量证明只是这样一个过程,那是不是只要记住nonce为4521使计算能通过验证就行了,当然不是了,这只是一个例子。

下面我们将输入简单的变更为”Hello,World!+整数值”,整数值取1~1000,也就是说将输入变成一个1~1000的数组:Hello,World!1;Hello,World!2;...;Hello,World!1000。然后对数组中的每一个输入依次进行上面的工作量证明—找到前导为4个0的哈希散列。

由于哈希值伪随机的特性,根据概率论的相关知识容易计算出,预计要进行2的16次方次数的尝试,才能得到前导为4个0的哈希散列。而统计一下刚刚进行的1000次计算的实际结果会发现,进行计算的平均次数为66958次,十分接近2的16次方(65536)。在这个例子中,数学期望的计算次数实际就是要求的“工作量”,重复进行多次的工作量证明会是一个符合统计学规律的概率事件。

统计输入的字符创与得到对应目标结果实际使用的计算次数如下:

对于比特币网络中的任何节点,如果想生成一个新的区块加入到区块链中,则必须解决出比特币网络出的这道谜题。这道题的关键要素是工作量证明函数、区块及难度值。工作量证明函数是这道题的计算方法,区块是这道题的输入数据,难度值决定了解这道题的所需要的计算量。

比特币网络中使用的工作量证明函数正是上文提及的SHA-256。区块其实就是在工作量证明环节产生的。旷工通过不停地构造区块数据,检验每次计算出的结果是否满足要求的工作量,从而判断该区块是不是符合网络难度。区块头即比特币工作量证明函数的输入数据。

难度值是矿工们挖掘的重要参考指标,它决定了旷工需要经过多少次哈希运算才能产生一个合法的区块。比特币网络大约每10分钟生成一个区块,如果在不同的全网算力条件下,新区块的产生基本都保持这个速度,难度值必须根据全网算力的变化进行调整。总的原则即为无论挖矿能力如何,使得网络始终保持10分钟产生一个新区块。

难度值的调整是在每个完整节点中独立自动发生的。每隔2016个区块,所有节点都会按照统一的格式自动调整难度值,这个公式是由最新产生的2016个区块的花费时长与期望时长(按每10分钟产生一个取款,则期望时长为20160分钟)比较得出来的,根据实际时长一期望时长的比值进行调整。也就是说,如果区块产生的速度比10分钟快,则增加难度值;反正,则降低难度值。用公式来表达如下:

新难度值=旧难度值*(20160分钟/过去2016个区块花费时长)。

工作量证明需要有一个目标值。比特币工作量证明的目标值(Target)的计算公式如下:

目标值=最大目标值/难度值,其中最大目标值为一个恒定值

目标值的大小与难度值成反比,比特币工作量证明的达成就是矿中计算出来的区块哈希值必须小于目标值。

我们也可以将比特币工作量的过程简单的理解成,通过不停变更区块头(即尝试不同nonce值)并将其作为输入,进行SHA-256哈希运算,找出一个有特定格式哈希值的过程(即要求有一定数量的前导0),而要求的前导0个数越多,难度越大。

可以把比特币将这道工作量证明谜题的步骤大致归纳如下:

该过程可以用下图表示:

比特币的工作量证明,就是我们俗称“挖矿”所做的主要工作。理解工作量证明机制,将为我们进一步理解比特币区块链的共识机制奠定基础。

㈩ 区块链的共识机制是什么优缺点有哪些

区块链的共识机制有很多,说一个影响力最大的比特币背后的pow共识机制,好处是安全 不可篡改 全球流通 缺点是速度太慢了 一秒钟只能处理7笔交易

阅读全文

与共识算法和挖矿的区别相关的资料

热点内容
电影不忠在线免费观看 浏览:276
海外电影在线 浏览:581
陈宝莲演的三圾电影有哪些 浏览:693
穿越小说男主叫林枫唱白狐 浏览:979
日本带剧情的电影有哪些 浏览:371
新疆哈萨克电影 浏览:15
网站免费看高清影视无需下载 浏览:111
日本电影漂亮少女 浏览:304
铁雨3半岛危机免费观看 浏览:918
u2网站 浏览:405
有什么韩国电影网站电影网站 浏览:767
露点的丧尸电影 浏览:468
中国爱情动作电影 浏览:332
老电影武打片电影 浏览:622
比特币市场情况 浏览:611
挖矿是显卡还是处理器 浏览:229
三好小说网现在叫什么 浏览:774
男男大尺度影视作品 浏览:973
武王小说排行榜完结篇 浏览:617