区块链知识拼图:共识算法(简介)
Posted 爱吃猫的鱼先森
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链知识拼图:共识算法(简介)相关的知识,希望对你有一定的参考价值。
很多接触或者了解区块链过区块链的人,对“共识”两个字一定不陌生。今天,便借一个系列的分享,和大家一起学习“共识”算法的一些点滴。可能不全,但希望对大家有所帮助。首先,先通过这篇分享,帮助我们理清共识算法 一些理论概念。
什么是共识
所谓共识,就是指处在分布式系统中的众多节点就某一个决策或行为达成一致。但是达成共识并不是一件简单的事,整个系统中的节点可能会出现各种无法预知的问题,比如说节点宕机、通讯故障或者被恶意攻击了等。
在分布式系统领域,存在着一个FLP不可能定理,F、L、P是其三位提出者的姓名首字母。FLP不可能定理:在一个异步通讯网络中,只要存在一个故障节点,就不存在一种完美的共识算法可以正确的终止。只有在同步网络中,才存在这样的共识算法。
值得注意的是,同步网络中的共识模型使得整个系统在一个可控可预估的时间内到达某一个状态。而异步网络中的共识模型不存在这种可预估的可能,因为其中节点的通讯延迟是无上界的,节点的处理速度也是未知的。可以看出,这种异步模型更贴近我们真实的网络世界。我们上面也提到了,想要在异步环境下设计出这样的一种共识模型或共识算法是不可能的,而同步算法由于其需要等待所有的节点完成某一个动作,性能较为低下,所以,便产生了两者的中间产物:部分同步模型(Partial Synchrony Model)。
部分同步模型,顾名思义,同步了但没完全同步。该模型会设置一个全局稳定时间(Global Stabilization Time,GST)作为该模型异步和同步之间的分界线。在GST到达之前,整个系统保持为异步状态,而到GST到达之后,整个系统恢复为同步状态。
但无论是同步网络还是异步网络,一个正确的共识算法必须满足以下三点:
- 一致性(Agreement):所有的节点都统一某个结果。
- 有效性(Validity):最终的结果必须是网络中某个节点提出来的。
- 终止性(Termination):所有节点最终都能到达某个结果。比如前面提到的部分同步模型中,GST后系统切换成同步状态就是为了保证节点能满足终止性。
共识算法有哪些
其实共识算法不是什么新鲜的东西,很久前它名为分布式一致性算法。随着区块链的出现,共识算法便专门被默认为是区块链中的分布式一致性算法。适用于区块链的共识算法按照不同的需要被分为不同的类别。
分类标准可以大致总结为以下这三种,随表进行举例:
- 按照是否能够容忍拜占庭错误,即是否能够容许节点进行恶意的行为分类。公有链环境存在的节点无法监管和控制,必须使用拜占庭容错算法,而联盟链因为存在一定的信任基础,可以视情况选择非拜占庭容错算法。
- 按照算法确定性类别分类,即分为确定性共识算法和概率性共识算法。确定性共识算法即一旦共识结果出来了,便不可能再出现更改的可能。而概率性共识算法则可能出现更改的情况,比如bitcoin中的分叉攻击,可能使得链上一部分已经达成的共识作废。
- 按照选择矿工的方式进行分类。大致可以分为以下两种:选举类和证明类。选举类即通过选举决定谁作为出块节点。而证明类则通过设置某种证明方式,节点通过完成规定的证明过程,获得出块的权力。
共识算法 | 拜占庭容错 | 算法确定性 | 是否需要证明 |
---|---|---|---|
PBFT | √ | √ | × |
PoW | √ | × | √ |
PoS | √ | × | √ |
Paxos | × | √ | × |
Raft | × | √ | × |
未完待续
下一小节将和大家分享一些常见的共识算法。咕咕咕咕咕。
区块链实战区块链新发明:工作量证明,PoW共识算法
目录
一、简介
区块链技术中,无论是 P2P网络,还是 hash 函数 以及 密码学的数字签名,这些都不是新技术。如果说比特币发明了什么技术,那么Proof of Work 工作量证明 就是一个, 简称 PoW共识。
工作量证明(POW)从字面意思就知道,就是证明一个人干了这份活,得到大家认可之后,产生一个新区块,然后给干这份工作的人一定的比特币作为报酬。
二、知识点
工作量证明(POW)
随机值做作用
挖矿矿工
区块交易手续费
三、工作量证明 PoW 与 区块链的关系
1、为何要引入 PoW
中本聪设计了全球多节点共同维护的分布式账本来保证账本的安全性,但是这些节点为什么要加入网络并帮助维护账本呢。
某个用户 A 拥有比特币, A 也不一定会加入整个网络成为一个节点去维护整个网络的比特币账本。
为了解决这个问题就需要引入激励机制。中本聪通过控制发行总量,把比特币做成类似黄金白银的硬通货,然后就给维护账本的人进行奖励,从而激励一群人去做类似的事情,这些让将交易打包并产生新的区块就可以获得系统的比特币奖励。
2、如何确认工作难度
在 hash 函数 Y = H(X) 中,如果要 Y 符合某些条件,比如小于某个值的时候就有些难度了,要找到符合这样条件的 hash 值并不容易。由于区块号,前块 hash 值,要打包的交易信息是不变的,所以就必须引入一个变化因子随机数了。
对于工作节点 N ,为了得到满足条件的 hash 值 Y,它只能不停的尝试不同的 Nonce 随机数 计算生成 hash 值,并判断是否符合前面的条件,如果满足则形成一个新的区块 B。
其它节点对区块 B 进行验证,验证通过则证明该节点是通过了多次的计算才得到的结果,也就是付出了大量的工作,这个过程就是工作量证明。
3、挖矿机制与矿工
为了获得比特币网络奖励,就诞生了一种矿工职业。矿工在网络节点中不停的计算 hash 值,计算成功后立刻全网广播,如果得到确认则获得系统的比特币奖励。
比特币网络目前平均 10 分钟出一个区块,可见矿工确实是付出了工作的。新区块的产生保持都基本这个速率,难度值必须根据全网算力的变化进行调整。
简单地说,难度值被设定在无论挖矿能力如何,新区块产生速率都保持在10分钟一个。
挖矿机制解决了节点参与维护账本的问题,也解决了比特币发行的问题。一开始整个网络一个比特币也没有,随着区块的产生,比特币就被发行出来。
中本聪同时设计了通缩机制,最开始一个区块奖励 50 个比特币,每 4 年减半,最终总量为 2100 万个。
4、区块手续费
矿工在打包交易的同时会收取该比交易的手续费,所以矿工始终是有动力去挖矿的。
因此,挖矿的本质就是找到一个使最新区块头部信息的 SHA256 值满足难度目标值条件的 nonce 值。就目前来说,每成功挖到一次区块,一个矿工就需要尝试几十亿次的 nonce 值。
比特币的工作量证明机制明确通过数学的方式给出了 工作内容、工作量以及评价方式, 把 付出劳动 即获得 所有权,通过数学的方式模拟了出来,这是最公平的一种所有权分发机制,这也是为什么我们说比特币是最公平的货币发行机制。
以上是关于区块链知识拼图:共识算法(简介)的主要内容,如果未能解决你的问题,请参考以下文章