1. 共识算法(分布式下的一致性算法)
共识算法(分布式下的一致性算法)
业务场景:
达到的效果:可以保证在过半节点正常的情况下,所有的写入操作不会丢失。
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
2. 以太币eth是什么算法
eth算法。
以太币(ETH)是以太坊(Ethereum)的一种数字代币,开发者们需要支付以太币(ETH)来支撑应用的运行。
以太币(ETH)是以太坊(Ethereum)的一种数字代币,以太币和其他数字货币一样,可以在交易平台上进行买卖。
3. 区块链技术中的共识算法
关于区块链技术的一些讲解和知识点分析我们已经给大家分享过很多次了。今天,南邵java课程就再来了解一下,区块链技术中的共识算法的一些基本定义与特点。
简单过一下区块链
我们一般意识形态中的链是铁链,由铁铸成,一环扣一环。形象地,区块链的也可以这么理解,只不过它不是由铁铸成,而是由拥有一定数据结构的块连接而成,这是一个简单的雏形
通俗讲解共识
所谓共识,通俗来说,就是我们大家对某种事物的理解达成一致的意思。比如说日常的开会讨论问题,又比如判断一个动物是不是猫,我们肉眼看了后觉得像猫,其满足猫的特征,那么我们认为它是猫。共识,是一种规则。
继续我们的会议例子。参与会议的人,通过开会的方式来达到谈论解决问题。
对比区块链中,参与挖矿的矿工通过某种共识方式(算法)来解决让自己的账本跟其他节点的账本保持培斗一致。让账本保持一致的深入一层意思就是,让链中区块信息保持一致。
为什么需要共识,不需要可不可以?当然不可以,生活中没了共识的规则,一切乱套。区块链没了共识的规则,各个节点各干各的,失去一致的意毕李义。
这两个例子的对应的关系如下:
会议的人=挖矿的矿工
开会=共识方式(算法)
谈论解决问题=让自己的账本跟其他节点的账本保持一致
如果你对节点的概念意思不懂,请先理解为矿工,一个节点内部包含很多角色,矿工是其中之一。
共识算法
目前常见的在区块链中,节点们让自己的账本跟其他节点的账本保持一致的共识方式(算法)有如下几种:
PoW,代表者是比特币(BTC)
弊端:
矿池的出现,一定程度上违背了去中心化的初衷,同时也使得51%攻击成为可能,影响其安全性。
存在巨大的算力浪费,看看矿池消耗大量的电力资源,随着难度增加,挖手中迟出的不够付电费
PoS,代表者是以太坊(ETH),从PoW过度到PoS
弊端:
破坏者对网络的攻击成本很低,拥有代币就能竞争
另外拥有代币数量大的节点获得记账权的概率会更大,会使得网络共识受少数富裕账户支配,从而失去公正性。
4. 区块链的共识机制
一、区块链共识机制的目标
区块链是什么?简单而言,区块链是一种去中心化的数据库,或可以叫作分布式账本(distributed ledger)。传统上所有的数据库都是中心化的,例如一间银行的账本就储存在银行的中心服务器里。中心化数据库的弊端是数据的安全及正确性全系于数据库运营方(即银行),因为任何能够访问中心化数据库的人(如银行职员或黑客)都可以破坏或修改其中的数据。
而区块链技术则容许数据库存放在全球成千上万的电脑上,每个人的账本通过点对点网络进行同步,网络中任何用户一旦增加一笔交易,交易信息将通过网络通知其他用户验证,记录到各自的账本中。区块链之所以得其名是因为它是由一个个包含交易信息的区块(block)从后向前有序链接起来的数据结构。
很多人对区块链的疑问是,如果每一个用户都拥有一个独立的账本,那么是否意味着可以在自己的账本上添加任意的交易信息,而成千上万个账本又如何保证记账的一致性? 解决记账一致性问题正是区块链共识机制的目标 。区块链共识机制旨在保证分布式系统里所有节点中的数据完全相同并且能够对某个提案(proposal)(例如是一项交易纪录)达成一致。然而分布式系统由于引入了多个节点,所以系统中会出现各种非常复杂的情况;随着节点数量的增加,节点失效或故障、节点之间的网络通信受到干扰甚至阻断等就变成了常见的问题,解决分布式系统中的各种边界条件和意外情况也增加了解决分布式一致性问题的难度。
区块链又可分为三种:
公有链:全世界任何人都可以随时进入系统中读取数据、发送可确认交易、竞争记账的区块链。公有链通常被认为是“完全去中心化“的,因为没有任何人或机构可以控制或篡改其中数据的读写。公有链一般会通过代币机制鼓励参与者竞争记账,来确保数据的安全性。
联盟链:联盟链是指有若干个机构共同参与管理的区块链。每个机构都运行着一个或多个节点,其中的数据只允许系统内不同的机构进行读写和发送交易,并且共同来记录交易数据。这类区块链被认为是“部分去中心化”。
私有链:指其写入权限是由某个组织和机构控制的区块链。参与节点的资格会被严格的限制,由于参与的节点是有限和可控的,因此私有链往往可以有极快的交易速度、更好的隐私保护、更低的交易成本、不容易被恶意攻击、并且能够做到身份认证等金融行业必须的要求。相比中心化数据库,私有链能够防止机构内单节点故意隐瞒或篡改数据。即使发生错误,也能够迅速发现来源,因此许多大型金融机构在目前更加倾向于使用私有链技术。
二、区块链共识机制的分类
解决分布式一致性问题的难度催生了数种共识机制,它们各有其优缺点,亦适用于不同的环境及问题。被众人常识的共识机制有:
l PoW(Proof of Work)工作量证明机制
l PoS(Proof of Stake)股权/权益证明机制
l DPoS(Delegated Proof of Stake)股份授权证明机制
l PBFT(Practical Byzantine Fault Tolerance)实用拜占庭容错算法
l DBFT(Delegated Byzantine Fault Tolerance)授权拜占庭容错算法
l SCP (Stellar Consensus Protocol ) 恒星共识协议
l RPCA(Ripple Protocol Consensus Algorithm)Ripple共识算法
l Pool验证池共识机制
(一)PoW(Proof of Work)工作量证明机制
1. 基本介绍
在该机制中,网络上的每一个节点都在使用SHA256哈希函数(hash function) 运算一个不断变化的区块头的哈希值 (hash sum)。 共识要求算出的值必须等于或小于某个给定的值。 在分布式网络中,所有的参与者都需要使用不同的随机数来持续计算该哈希值,直至达到目标为止。当一个节点的算出确切的值,其他所有的节点必须相互确认该值的正确性。之后新区块中的交易将被验证以防欺诈。
在比特币中,以上运算哈希值的节点被称作“矿工”,而PoW的过程被称为“挖矿”。挖矿是一个耗时的过程,所以也提出了相应的激励机制(例如向矿工授予一小部分比特币)。PoW的优点是完全的去中心化,其缺点是消耗大量算力造成了的资源浪费,达成共识的周期也比较长,共识效率低下,因此其不是很适合商业使用。
2. 加密货币的应用实例
比特币(Bitcoin) 及莱特币(Litecoin)。以太坊(Ethereum) 的前三个阶段(Frontier前沿、Homestead家园、Metropolis大都会)皆采用PoW机制,其第四个阶段 (Serenity宁静) 将采用权益证明机制。PoW适用于公有链。
PoW机制虽然已经成功证明了其长期稳定和相对公平,但在现有框架下,采用PoW的“挖矿”形式,将消耗大量的能源。其消耗的能源只是不停的去做SHA256的运算来保证工作量公平,并没有其他的存在意义。而目前BTC所能达到的交易效率为约5TPS(5笔/秒),以太坊目前受到单区块GAS总额的上限,所能达到的交易频率大约是25TPS,与平均千次每秒、峰值能达到万次每秒处理效率的VISA和MASTERCARD相差甚远。
3. 简图理解模式
(ps:其中A、B、C、D计算哈希值的过程即为“挖矿”,为了犒劳时间成本的付出,机制会以一定数量的比特币作为激励。)
(Ps:PoS模式下,你的“挖矿”收益正比于你的币龄(币的数量*天数),而与电脑的计算性能无关。我们可以认为任何具有概率性事件的累计都是工作量证明,如淘金。假设矿石含金量为p% 质量, 当你得到一定量黄金时,我们可以认为你一定挖掘了1/p 质量的矿石。而且得到的黄金数量越多,这个证明越可靠。)
(二)PoS(Proof of Stake)股权/权益证明机制
1.基本介绍
PoS要求人们证明货币数量的所有权,其相信拥有货币数量多的人攻击网络的可能性低。基于账户余额的选择是非常不公平的,因为单一最富有的人势必在网络中占主导地位,所以提出了许多解决方案。
在股权证明机制中,每当创建一个区块时,矿工需要创建一个称为“币权”的交易,这个交易会按照一定比例预先将一些币发给矿工。然后股权证明机制根据每个节点持有代币的比例和时间(币龄), 依据算法等比例地降低节点的挖矿难度,以加快节点寻找随机数的速度,缩短达成共识所需的时间。
与PoW相比,PoS可以节省更多的能源,更有效率。但是由于挖矿成本接近于0,因此可能会遭受攻击。且PoS在本质上仍然需要网络中的节点进行挖矿运算,所以它同样难以应用于商业领域。
2.数字货币的应用实例
PoS机制下较为成熟的数字货币是点点币(Peercoin)和未来币(NXT),相比于PoW,PoS机制节省了能源,引入了" 币天 "这个概念来参与随机运算。PoS机制能够让更多的持币人参与到记账这个工作中去,而不需要额外购买设备(矿机、显卡等)。每个单位代币的运算能力与其持有的时间长成正相关,即持有人持有的代币数量越多、时间越长,其所能签署、生产下一个区块的概率越大。一旦其签署了下一个区块,持币人持有的币天即清零,重新进入新的循环。
PoS适用于公有链。
3.区块签署人的产生方式
在PoS机制下,因为区块的签署人由随机产生,则一些持币人会长期、大额持有代币以获得更大概率地产生区块,尽可能多的去清零他的"币天"。因此整个网络中的流通代币会减少,从而不利于代币在链上的流通,价格也更容易受到波动。由于可能会存在少量大户持有整个网络中大多数代币的情况,整个网络有可能会随着运行时间的增长而越来越趋向于中心化。相对于PoW而言,PoS机制下作恶的成本很低,因此对于分叉或是双重支付的攻击,需要更多的机制来保证共识。稳定情况下,每秒大约能产生12笔交易,但因为网络延迟及共识问题,需要约60秒才能完整广播共识区块。长期来看,生成区块(即清零"币天")的速度远低于网络传播和广播的速度,因此在PoS机制下需要对生成区块进行"限速",来保证主网的稳定运行。
4.简图理解模式
(PS:拥有越多“股份”权益的人越容易获取账权。是指获得多少货币,取决于你挖矿贡献的工作量,电脑性能越好,分给你的矿就会越多。)
(在纯POS体系中,如NXT,没有挖矿过程,初始的股权分配已经固定,之后只是股权在交易者之中流转,非常类似于现实世界的股票。)
(三)DPoS(Delegated Proof of Stake)股份授权证明机制
1.基本介绍
由于PoS的种种弊端,由此比特股首创的权益代表证明机制 DPoS(Delegated Proof of Stake)应运而生。DPoS 机制中的核心的要素是选举,每个系统原生代币的持有者在区块链里面都可以参与选举,所持有的代币余额即为投票权重。通过投票,股东可以选举出理事会成员,也可以就关系平台发展方向的议题表明态度,这一切构成了社区自治的基础。股东除了自己投票参与选举外,还可以通过将自己的选举票数授权给自己信任的其它账户来代表自己投票。
具体来说, DPoS由比特股(Bitshares)项目组发明。股权拥有着选举他们的代表来进行区块的生成和验证。DPoS类似于现代企业董事会制度,比特股系统将代币持有者称为股东,由股东投票选出101名代表, 然后由这些代表负责生成和验证区块。 持币者若想称为一名代表,需先用自己的公钥去区块链注册,获得一个长度为32位的特有身份标识符,股东可以对这个标识符以交易的形式进行投票,得票数前101位被选为代表。
代表们轮流产生区块,收益(交易手续费)平分。DPoS的优点在于大幅减少了参与区块验证和记账的节点数量,从而缩短了共识验证所需要的时间,大幅提高了交易效率。从某种角度来说,DPoS可以理解为多中心系统,兼具去中心化和中心化优势。优点:大幅缩小参与验证和记账节点的数量,可以达到秒级的共识验证。缺点:投票积极性不高,绝大部分代币持有者未参与投票;另整个共识机制还是依赖于代币,很多商业应用是不需要代币存在的。
DPoS机制要求在产生下一个区块之前,必须验证上一个区块已经被受信任节点所签署。相比于PoS的" 全民挖矿 ",DPoS则是利用类似" 代表大会 "的制度来直接选取可信任节点,由这些可信任节点(即见证人)来代替其他持币人行使权力,见证人节点要求长期在线,从而解决了因为PoS签署区块人不是经常在线而可能导致的产块延误等一系列问题。 DPoS机制通常能达到万次每秒的交易速度,在网络延迟低的情况下可以达到十万秒级别,非常适合企业级的应用。 因为公信宝数据交易所对于数据交易频率要求高,更要求长期稳定性,因此DPoS是非常不错的选择。
2. 股份授权证明机制下的机构与系统
理事会是区块链网络的权力机构,理事会的人选由系统股东(即持币人)选举产生,理事会成员有权发起议案和对议案进行投票表决。
理事会的重要职责之一是根据需要调整系统的可变参数,这些参数包括:
l 费用相关:各种交易类型的费率。
l 授权相关:对接入网络的第三方平台收费及补贴相关参数。
l 区块生产相关:区块生产间隔时间,区块奖励。
l 身份审核相关:审核验证异常机构账户的信息情况。
l 同时,关系到理事会利益的事项将不通过理事会设定。
在Finchain系统中,见证人负责收集网络运行时广播出来的各种交易并打包到区块中,其工作类似于比特币网络中的矿工,在采用 PoW(工作量证明)的比特币网络中,由一种获奖概率取决于哈希算力的抽彩票方式来决定哪个矿工节点产生下一个区块。而在采用 DPoS 机制的金融链网络中,通过理事会投票决定见证人的数量,由持币人投票来决定见证人人选。入选的活跃见证人按顺序打包交易并生产区块,在每一轮区块生产之后,见证人会在随机洗牌决定新的顺序后进入下一轮的区块生产。
3. DPoS的应用实例
比特股(bitshares) 采用DPoS。DPoS主要适用于联盟链。
4.简图理解模式
(四)PBFT(Practical Byzantine Fault Tolerance)实用拜占庭容错算法
1. 基本介绍
PBFT是一种基于严格数学证明的算法,需要经过三个阶段的信息交互和局部共识来达成最终的一致输出。三个阶段分别为预备 (pre-prepare)、准备 (prepare)、落实 (commit)。PBFT算法证明系统中只要有2/3比例以上的正常节点,就能保证最终一定可以输出一致的共识结果。换言之,在使用PBFT算法的系统中,至多可以容忍不超过系统全部节点数量1/3的失效节点 (包括有意误导、故意破坏系统、超时、重复发送消息、伪造签名等的节点,又称为”拜占庭”节点)。
2. PBFT的应用实例
著名联盟链Hyperledger Fabric v0.6采用的是PBFT,v1.0又推出PBFT的改进版本SBFT。PBFT主要适用于私有链和联盟链。
3. 简图理解模式
上图显示了一个简化的PBFT的协议通信模式,其中C为客户端,0 – 3表示服务节点,其中0为主节点,3为故障节点。整个协议的基本过程如下:
(1) 客户端发送请求,激活主节点的服务操作;
(2) 当主节点接收请求后,启动三阶段的协议以向各从节点广播请求;
(a) 序号分配阶段,主节点给请求赋值一个序号n,广播序号分配消息和客户端的请求消息m,并将构造pre-prepare消息给各从节点;
(b) 交互阶段,从节点接收pre-prepare消息,向其他服务节点广播prepare消息;
(c) 序号确认阶段,各节点对视图内的请求和次序进行验证后,广播commit消息,执行收到的客户端的请求并给客户端响应。
(3) 客户端等待来自不同节点的响应,若有m+1个响应相同,则该响应即为运算的结果;
(五)DBFT(Delegated Byzantine Fault Tolerance)授权拜占庭容错算法
1. 基本介绍
DBFT建基于PBFT的基础上,在这个机制当中,存在两种参与者,一种是专业记账的“超级节点”,一种是系统当中不参与记账的普通用户。普通用户基于持有权益的比例来投票选出超级节点,当需要通过一项共识(记账)时,在这些超级节点中随机推选出一名发言人拟定方案,然后由其他超级节点根据拜占庭容错算法(见上文),即少数服从多数的原则进行表态。如果超过2/3的超级节点表示同意发言人方案,则共识达成。这个提案就成为最终发布的区块,并且该区块是不可逆的,所有里面的交易都是百分之百确认的。如果在一定时间内还未达成一致的提案,或者发现有非法交易的话,可以由其他超级节点重新发起提案,重复投票过程,直至达成共识。
2. DBFT的应用实例
国内加密货币及区块链平台NEO是 DBFT算法的研发者及采用者。
3. 简图理解模式
假设系统中只有四个由普通用户投票选出的超级节点,当需要通过一项共识时,系统就会从代表中随机选出一名发言人拟定方案。发言人会将拟好的方案交给每位代表,每位代表先判断发言人的计算结果与它们自身纪录的是否一致,再与其它代表商讨验证计算结果是否正确。如果2/3的代表一致表示发言人方案的计算结果是正确的,那么方案就此通过。
如果只有不到2/3的代表达成共识,将随机选出一名新的发言人,再重复上述流程。这个体系旨在保护系统不受无法行使职能的领袖影响。
上图假设全体节点都是诚实的,达成100%共识,将对方案A(区块)进行验证。
鉴于发言人是随机选出的一名代表,因此他可能会不诚实或出现故障。上图假设发言人给3名代表中的2名发送了恶意信息(方案B),同时给1名代表发送了正确信息(方案A)。
在这种情况下该恶意信息(方案B)无法通过。中间与右边的代表自身的计算结果与发言人发送的不一致,因此就不能验证发言人拟定的方案,导致2人拒绝通过方案。左边的代表因接收了正确信息,与自身的计算结果相符,因此能确认方案,继而成功完成1次验证。但本方案仍无法通过,因为不足2/3的代表达成共识。接着将随机选出一名新发言人,重新开始共识流程。
上图假设发言人是诚实的,但其中1名代表出现了异常;右边的代表向其他代表发送了不正确的信息(B)。
在这种情况下发言人拟定的正确信息(A)依然可以获得验证,因为左边与中间诚实的代表都可以验证由诚实的发言人拟定的方案,达成2/3的共识。代表也可以判断到底是发言人向右边的节点说谎还是右边的节点不诚实。
(六)SCP (Stellar Consensus Protocol ) 恒星共识协议
1. 基本介绍
SCP 是 Stellar (一种基于互联网的去中心化全球支付协议) 研发及使用的共识算法,其建基于联邦拜占庭协议 (Federated Byzantine Agreement) 。传统的非联邦拜占庭协议(如上文的PBFT和DBFT)虽然确保可以通过分布式的方法达成共识,并达到拜占庭容错 (至多可以容忍不超过系统全部节点数量1/3的失效节点),它是一个中心化的系统 — 网络中节点的数量和身份必须提前知晓且验证过。而联邦拜占庭协议的不同之处在于它能够去中心化的同时,又可以做到拜占庭容错。
[…]
(七)RPCA(Ripple Protocol Consensus Algorithm)Ripple共识算法
1. 基本介绍
RPCA是Ripple(一种基于互联网的开源支付协议,可以实现去中心化的货币兑换、支付与清算功能)研发及使用的共识算法。在 Ripple 的网络中,交易由客户端(应用)发起,经过追踪节点(tracking node)或验证节点(validating node)把交易广播到整个网络中。追踪节点的主要功能是分发交易信息以及响应客户端的账本请求。验证节点除包含追踪节点的所有功能外,还能够通过共识协议,在账本中增加新的账本实例数据。
Ripple 的共识达成发生在验证节点之间,每个验证节点都预先配置了一份可信任节点名单,称为 UNL(Unique Node List)。在名单上的节点可对交易达成进行投票。共识过程如下:
(1) 每个验证节点会不断收到从网络发送过来的交易,通过与本地账本数据验证后,不合法的交易直接丢弃,合法的交易将汇总成交易候选集(candidate set)。交易候选集里面还包括之前共识过程无法确认而遗留下来的交易。
(2) 每个验证节点把自己的交易候选集作为提案发送给其他验证节点。
(3) 验证节点在收到其他节点发来的提案后,如果不是来自UNL上的节点,则忽略该提案;如果是来自UNL上的节点,就会对比提案中的交易和本地的交易候选集,如果有相同的交易,该交易就获得一票。在一定时间内,当交易获得超过50%的票数时,则该交易进入下一轮。没有超过50%的交易,将留待下一次共识过程去确认。
(4) 验证节点把超过50%票数的交易作为提案发给其他节点,同时提高所需票数的阈值到60%,重复步骤(3)、步骤(4),直到阈值达到80%。
(5) 验证节点把经过80%UNL节点确认的交易正式写入本地的账本数据中,称为最后关闭账本(last closed ledger),即账本最后(最新)的状态。
在Ripple的共识算法中,参与投票节点的身份是事先知道的,因此,算法的效率比PoW等匿名共识算法要高效,交易的确认时间只需几秒钟。这点也决定了该共识算法只适合于联盟链或私有链。Ripple共识算法的拜占庭容错(BFT)能力为(n-1)/5,即可以容忍整个网络中20%的节点出现拜占庭错误而不影响正确的共识。
2. 简图理解模式
共识过程节点交互示意图:
共识算法流程:
(八)POOL验证池共识机制
Pool验证池共识机制是基于传统的分布式一致性算法(Paxos和Raft)的基础上开发的机制。Paxos算法是1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现。Raft则是在2013年发布的一个比Paxos简单又能实现Paxos所解决问题的一致性算法。Paxos和Raft达成共识的过程皆如同选举一样,参选者需要说服大多数选民(服务器)投票给他,一旦选定后就跟随其操作。Paxos和Raft的区别在于选举的具体过程不同。而Pool验证池共识机制即是在这两种成熟的分布式一致性算法的基础上,辅之以数据验证的机制。
5. 以太坊技术系列-以太坊共识机制
区块链的特点之一是去中心化。也就是节点会分布在各个地方组成分布式系统。各个节点需要对1个问题达成一致,理想情况下,只需要同步状态即可。
如上图所示 B节点将a=1=> a=2的状态同步给 ACDE四个节点,这时系统中状态变为a=2, 但如果其中有恶意节点 AE 收到通知后把a=1=>a=3修改为错误的节点,这个时候大家的状态就不一致了,此时需要共识机制使系统中得到1个唯一正确的状态。
如上面说到分布式系统存在恶意节点导致系统中状态不一致的情况有1个比较著名的虚拟问题-拜占庭将军问题。
拜占庭将军问题是指,N个将军去攻打一座城堡,如果大于一定数量的将军同时进攻则可以攻打成功,如果小于则进攻失败。将军中可能存在叛徒。
这个时候有2种情况
1.如果2个叛徒都在BCDE中,那么共识算法需要让其余2个将军听从A的正确决策进攻城堡。
2.如果A是1个叛徒,共识算法需要让BCDE中剩余的3个忠诚将军保持一致。
这个问题有很多种解法,大家有兴趣可以自行查阅(推荐学习PBFT),我们重点来看看以太坊中目前正在使用的Nakamoto 共识和将要使用的 Casper Friendly Finality Gadget共识是如何解决拜占庭将军问题的。
说到Nakamoto共识和Casper Friendly Finality Gadget共识可能大家不太熟悉,但他们的部分组成应该都比较熟悉-POW(工作量证明)和POS(权益证明)。
POW或POS称之为Sybil抗性机制,为什么需要Sybil抗性机制呢,刚刚我们说到拜占庭将军问题,应该很容易看出恶意节点越多,达成正确共识的难度也就越大,Sybil攻击就是指1个攻击者可以伪装出大量节点来进行攻击,Sybil抗性是指抵御这种攻击能力。
POW通过让矿工或验证者投入算力,POS通过让验证者质押以太坊,如果攻击者要伪装多个节点攻击则必将投入大量的算力或资产,会导致攻击成本高于收益。在以太坊中保障的安全性是除非攻击者拿到整个系统51%算力或资产否则不可能进攻成功。
在解决完Sybil攻击后,通过选取系统中的最长链作为大家达成共识的链。
很多人平时为了简化将pow和pos认为是共识机制,这不够准确,但也说明了其重要作用,我们接下来分析pow和pos。
通过hash不可逆的特性,要求各个矿工不停地计算出某个值的hash符合某一特征,比如前多少位是000000,由于这个过程只能依赖不停的试错计算hash,所以是工作量证明。计算完成后其他节点验证的值符合hash特征非常容易验证。验证通过则成为成为合法区块(不一定是共识区块,需要在最长链中)。
以太坊中的挖矿算法用到2个数据集,1个小数据集cache,1个大数据集DAG。这2个数据集会随着区块链中区块增多慢慢变大,初始大小cache为16M DAG为1G。
我们先来看这2个数据集的生成过程
cache生成规则为有1个种子随机数seed,cache中第1个元素对seed取hash,后面数组中每个元素都是前1个元素取hash获得。
DAG生成规则为 找到cache中对应的元素后 根据元素中的值计算出下次要寻找的下标,循环256次后获得cache中最终需要的元素值进行hash计算得到DAG中元素的值。
然后我们再看看矿工如何进行挖矿以及轻节点如何验证
矿工挖矿的过程为,选择Nonce值映射到DAG中的1个item,通过item中的值计算出下次要找的下标,循环64次,得到最终item,将item中的值hash计算得到结果,结果和target比较,符合条件
则证明挖到区块,如果不符合则更换nonce继续挖矿。矿工在挖矿过程中需要将1G的DAG读取到内存中。
轻节点验证过程和矿工挖矿过程基本一致,
将块头里面的Nonce值映射到DAG中的1个item,然后通过cache数组计算出该item的值,通过item中的值计算出下次要找的下标,循环64次,得到最终item,将item中的值hash计算得到结果,结果和target比较,符合条件则验证通过。轻节点在验证过程中不需要将1G的DAG读取到内存中。每次用到DAG的item值都使用cache进行计算。
以太坊为什么需要这2个不同大小的数组进行辅助hash运算呢,直接进行hash运算会有什么问题?
如果只是进行重复计算会导致挖矿设备专业化,减少去中心化程度。因为我们日常使用的计算机内存和计算力是都需要的,如果挖矿只需要hash运算,挖矿设备则会设计地拥有超高算力,但对内存可以缩小到很小甚至没有。所以我们选用1G的大内存增加对内存访问的频率,增加挖矿设备对内存访问需求,从而更接近于我们日常使用的计算机。
我们看看在Nakamoto共识是如何解决拜占庭将军问题的。首先看看区块链中的拜占庭将军问题是什么?
区块链中需要达成一致的是哪条链为主链,虽然采用了最长链原则,但由于分叉问题,还是会带来拜占庭将军问题。
本来以太坊pow目标是抵抗51%以下的攻击,但如上图如果恶意节点沿着自己挖出的区块不断挖矿,由于主链上有分叉存在,恶意节点不需要达到51%算力就可以超过主链进而成为新的主链,为此以太坊使用了ghost协议给上图中的B1和C1也分配出块奖励,尽快合并到主链中,这样主链长度(按照合并后的总长度算,长度只是抽象概念,以太坊中按照区块权重累加)还是大于恶意节点自己挖矿的。
网络中的用户通过质押一定数量的以太坊成为验证者。每次系统从这些验证者从随机选择出区块创建者,其余验证者去验证创建出的区块是否合法。验证者会获得出块奖励,没有被选中的区块不进行验证则会被扣除一定质押币,如果进行错误验证则会被扣除全部质押币。
如上图,权益证明在每隔一定区块的地方设置一个检查点,对前面的区块进行验证,2/3验证者通过则验证通过,验证通过则该区块所在链成为最长合法链(不能被回滚)。
我们简化地只分析了权益证明本身,在以太坊中权益证明较为复杂的点在于和分片机制结合在一起时的运行流程,这部分会在后面单独将分片机制的一篇文章中详述。
本篇文章主要讨论了共识机制是解决分布式系统中的拜占庭将军问题,以及分析了以太坊中的共识机制一般包括最长链选择和一种sybil抗性机制(pow或pos)。重点分析了pow和pos的流程以及设计思想。后续将开始重点讨论智能合约的部分。
6. 以太坊共识协议Casper原理是怎样的
Casper(投注共识)是一种以太坊下一代的共识机制,属于PoS。Casper的共识是按块达成的而不是像PoS那样按链达成的。数字货币交易所币汇
7. 区块链共识算法——(二)PoS共识(Proof of Stake)
2011 年 7 月, 一 位 名 为 Quantum Mechanic 的 数 字 货 币 爱 好 者 在 比 特 币 论 坛 首次提出了权益证明 PoS 共识算法. 随后, Sunny King 在 2012 年 8 月发布的点点币 (Peercoin, PPC) 中首次实现. PoS 由 系统中具有最高权益而非最高算力的节点获得记账 权, 其中权益体现为节点对特定数量货币的所有权, 称为币龄或币天数 (Coin days)
PoS是考虑到PoW的最大缺陷:浪费资源而提出的,简单来说就是 谁的权益大,谁说了算 。
PoS共识机制(Proof of Stake 权益证明)通过权益记账的方式,解决效率低下、资源浪费、节点一致性等问题。
各个节点需要满足一定的条件(如抵押一定的代币)才能成为验证节点(权益提高),系统通过算法在其中选择一部分作为出块节点(矿工),每隔一段时间重新选择,算法会保证完全随机,不可被操控。只有出块节点才能进行数据处理,争夺记账权。
权益主要由权益因子决定,可以是持币数量,也可以是币龄及两者的结合。
以太坊在之后很有可能会改用PoS进行共识,其更加符合以太坊高效率的特点。
8. 以太坊pos模式是什么意思
POS是一种在公链中的共识算法,可作为POW算法的一种替换。POW是保证比特币、当前以太坊和许多其它区块链安全的一种机制,但是POW算法在挖矿过程中因破坏环境和浪费电力而受到指责。POS试图通过以一种不同的机制取代挖矿的概念,从而解决这些问题。
【拓展资料】
POS机制可以被描述成一种虚拟挖矿。鉴于POW主要依赖于计算机硬件的稀缺性来防止女巫攻击,POS则主要依赖于区块链自身里的代币。在POW中,一个用户可能拿1000美元来买计算机,加入网络来挖矿产生新区块,从而得到奖励。而在POS中,用户可以拿1000美元购买等价值的代币,把这些代币当作押金放入POS机制中,这样用户就有机会产生新块而得到奖励。在POW中,如果用户花费2000美元购买硬件设备,当然会获得两倍算力来挖矿,从而获得两倍奖励。同样,在POS机制中投入两倍的代币作为押金,就有两倍大的机会获得产生新区块的权利。
众所周知,第三季度的“DeFi热”促使以太坊网络上的交易量大幅增加,DappRadar 2020 Q3 Dapp报告指出,以太坊交易量在2020年第三季度猛增至1195亿美元,与第二季度相比增长了近1200%,但随着而来的是网络堵塞,交易费猛增。在今年9月9日,以太坊平均交易费用达到14美元的高度,刷新历史记录。因费用飙升,导致许多交易只能延迟。
EOS创始人BM感叹称:对于大多数正常规模的交易来说,以太坊交易费用太高了。
目前的以太坊仍然面临多重问题,首先老生常谈的是上面提到的交易处理,以太坊网络支持数千个去中心化应用程序,每秒都需要处理大量交易,而采用PoW共识机制的以太坊1.0,每秒只能处理约10-50笔交易,远小于PayPal、Visa 等中心化网络,远无法满足用户对于交易速度的需求。手续费高昂一直是以太坊被诟病的一个重要的点,V神直言,在rollups和分片完成之前,以太坊别无选择,只能忍受高额交易费。因此以太坊需要升级。
9. 北大青鸟设计培训:区块链技术中的共识算法
关于区块链技术的一些讲解和知识点分析我们已经给大家分享过很多次了。
今天,岳阳java课程http://www.kmbdqn.cn/就再来了解一下,区块链技术中的共识算法的一些基本定义与特点。
简单过一下区块链我们一般意识形态中的链是铁链,由铁铸成,一环扣一环。
形象地,区块链的也可以这么理解,只不过它不是由铁铸成,而是由拥有一定数据结构的块连接而成,这是一个简单的雏形通俗讲解共识所谓共识,通俗来说,就是我们大家对某种事物的理解达成一致的意思。
比如说日常的开会讨论问题,又比如判断一个动物是不是猫,我们肉眼看了后觉得像猫,其满足猫的特征,那么我们认为它是猫。
共识,是一种规则。
继续我们的会议例子。
参与会议的人,通过开会的方式来达到谈论解决问题。
对比区块链中,参与挖矿的矿工通过某种共识方式(算法)来解决让自己的账本跟其他节点的账本保持一致。
让账本保持一致的深入一层意思就是,让链中区块信息保持一致。
为什么需要共识,不需要可不可以?当然不可以,生活中没了共识的规则,一切乱套。
区块链没了共识的规则,各个节点各干各的,失去一致的意义。
这两个例子的对应的关系如下:会议的人=挖矿的矿工开会=共识方式(算法)谈论解决问题=让自己的账本跟其他节点的账本保持一致如果你对节点的概念意思不懂,请先理解为矿工,一个节点内部包含很多角色,矿工是其中之一。
共识算法目前常见的在区块链中,节点们让自己的账本跟其他节点的账本保持一致的共识方式(算法)有如下几种:PoW,代表者是比特币(BTC)弊端:矿池的出现,一定程度上违背了去中心化的初衷,同时也使得51%攻击成为可能,影响其安全性。
存在巨大的算力浪费,看看矿池消耗大量的电力资源,随着难度增加,挖出的不够付电费PoS,代表者是以太坊(ETH),从PoW过度到PoS弊端:破坏者对网络的攻击成本很低,拥有代币就能竞争另外拥有代币数量大的节点获得记账权的概率会更大,会使得网络共识受少数富裕账户支配,从而失去公正性。