区块链笔记5-共识算法
本学习笔记为本人从正规合法信息来源获取的信息,且为个人学习笔记,未用于商业用途。并且是关于IT领域区块链知识的介绍,并非违法违规内容。
5 共识算法
5.1 基本介绍
在信用缺失/不完全条件下的算法使用;
在去中心化的基础情况下,保证分布式账本数据一致性的核心支撑技术,不同的区块链系统根据应用领域和环境假设不同,共识算法的设计思想也不同,进而造成相应区块链系统的交易处理能力、可扩展性和安全性也有所不同。
共识:在部分节点发生故障、网络延时或存在恶意节点的故意破坏情况下,所有正常节点对客户的请求达成一致的处理,并最终实现系统一致性的过程。
分布式系统共识问题:
**FLP不可能原理:**在存在节点和网络故障可能的前提条件下,不存在解决异步分布式系统一致性问题的确定性共识算法。
CAP理论:一个异步分布式系统最多只能满足一致性、可用性和分区容错性三个属性之一。
**拜占庭将军问题:**包含恶意节点的分布式系统如何达成一致性共识的问题。各个节点在得到指令后在得出本节点行动意见之前互相通信交流本节点此轮行动的收到的指令,并以少数服从多数的方法决定本节点的行动意见。
当恶意节点不超过总结点数量的1/3时,拜占庭容错算法可以保证解决系统一致性共识问题,若超过1/3时则不一定能找到有效的拜占庭容错算法。
由于区块链技术存在去中心化的本质,区块链网络中包含恶意节点是必须考虑的问题,因此拜占庭将军问题对于区块链系统的共识算法有着重要的参考意义。
**共识过程模型:**选择出块节点-构造新区块-广播并验证新区块-新区块上链
选择出块节点——根据采用的共识算法的特点确定出块节点
构造新区块——出块节点打包生成新区块
广播并验证新区块——将打包的新区块交给所有验证区块验证,若通过大多数节点验证则将其广播
新区块上链——将验证过的新区块加入已有区块链,构成一条最长链
**拜占庭容错:**指当系统中存在恶意节点的前提条件下,达成一致性共识,速度一般被限制,可以提升恶意节点恶意攻击行为的代价来降低恶意节点的影响,如PoW和POS算法;
**非拜占庭容错:**指当系统中不存在恶意节点的考虑下,达成一致性共识,速度可以很快;如Paxos算法和Raft算法;
基于系统部署类型的共识算法分类:公有链、联盟链和私有链;
**绝对一致性算法:**确定性算法,选择的是强一致性而低活性的策略,保证各个节点的数据生成后,在任意时间点上的数据都能保证绝对一直,不再可变。
**概率性算法:**弱一致性算法,短时间内可能发生区块链分叉,之后会由于一定的机制保留较长链上的区块,并最终撤销较短链上的的区块数据。
算法的评估:安全性和容错能力;可扩展性;性能;资源消耗与去中心化程度;
5.2 PoW 工作量证明
寻找一个随机数Nonce,使得以这个随机数为参数进行计算的SHA256位哈希运算的计算得到解密,仅能使用轮询方式进行计算,计算的难度会根据全网算力进行动态调整。
使用包含有上一个区块的哈希、时间戳和随机数Nonce等元素进行哈希计算,直到生成的哈希值与预期的哈希值匹配,则算打包成功。
从激励措施来看,矿工的收入包括两部分,新区块产生时系统下发的比特币奖励与用户在交易时产生的固定手续费投入。
新难度=实际生成2016个区块的时间*旧难度/14天
**区块链分叉:**最终将选择一条有着最大难度的区块链作为有新区块加入的主链。
**双花问题:**指的是一笔数字资产被恶意攻击者同时用于了两次或两次以上的不同交易,产生了重复花费,从而造成了交易对方资产损失的问题。可以使用51%算力攻击人为制造分叉以实现双花行为。
**PoW算法带来的资源消耗:**挖矿激励和比特币升值造成比特币网络规模不断扩大,产生巨大的资源消耗
5.3 POS 权益证明
区块链网络中参与区块出块的节点必须首先证明自己具有某种形式的权益;权益的典型表现形式是节点对特定代币的所有权,成为币龄=Σ(持有代币的数量*对应代币的持有时间)
矿工在POS模式下,投入出块竞争的权益阅读,相应的获得出块机会的概率也就越大。
**相对PoW算法的优点:**节省能源,提高性能,适当降低中心化程度,提升安全性
存在的问题:不参与出块竞争的参与者离线不参与网络构建或是产生屯币行为
DPOS授权权益证明共识算法
提升了可靠性,限定了出块时间,很难出现区块链分叉现象
见证人选举阶段:拥有权益的股东节点进行投票,选出N个见证人节点进行后续的出块操作
5.4 联盟链算法
PBFT实用拜占庭容错共识算法
基于一种状态机副本复制的思想,经过多轮次消息传递,实现系统中全部诚实节点达成一致的共识,将算法的复杂度降低到多项式级别,应用在实际的联盟链算法中。
请求阶段:客户端将交易信息向全网节点广播,生成主节点负责验证请求信息,并生成预准备消息
预准备阶段:主节点广播预准备消息
准备阶段:每个节点接收到消息后进行验证,并将自己的验证结果消息发送给全部其他的节点
确认阶段:若系统承受的最大恶意节点数为f,则当某个节点收到2f条来自其他节点的确认消息后,加上自己的确认消息,总数达到(2f+1)条时,可以向全网发送一条广播消息
响应阶段:
PBFT算法是强一致性算法,每次区块的产出都是由唯一的主节点主导生成,不存在分叉的可能性,但容错率显著低于比特币的51%可靠性;
5.5 Raft共识算法
应用于没有恶意节点情况下的非拜占庭容错类算法,基于Paxos算法基础上设计的易于理解的分布式系统共识算法。