以太坊技术系列-以太坊共识机制
区块链的特点之一是去中心化。也就是节点会分布在各个地方组成分布式系统。各个节点需要对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的流程以及设计思想。后续将开始重点讨论智能合约的部分。
POW、POS、如何规避分叉的思考
POW即工作量证明共识机制,即整个旷工节点去计算数学题,最先运用工作量证明共识机制的项目是比特币,比特币是目前世界最成功的区块链项目,从08年诞生到现在,系统基本上没有遇到大的事件,说明他的系统还是有独特的优势的,不然怎么在一个没有中心化公司或者个人去运作的情况下能够持续运作这么久,接下来我们一起去看看他究竟有什么样的优点:
在比特币的网络系统里,整个系统的交易记录都是旷工通过哈希碰撞将区块写入链中的,在哈希碰撞的过程就是整个网络旷工争抢记账权的过程,谁的脑袋聪明,就先破解了系统里面的这个难题,从而获得记账权,然后向全网公布,得到6个节点确认之后,这个区块写入系统的大涨本上,如果有人要想去篡改自己的数据,他就得在最快的时间修改之前形成的所有区块数据,因为每一个区块的哈希都是由上一个哈希计算出来的,所以如果要想篡改数据不但需要强大的算力和很短的时间完成,如果时间太慢,超过10分钟,下一个区块就会形成,篡改起来将会更加的难,所以黑客要想攻击整个网络,是非常难的事情,所以这也是比特币系统如此问的原因。
因为系统为了维护这个公共账本,旷工们需要花费大量的算力去算这到哈希函数的难题,在一定的时间只能有少部分节点旷工可以获得记账权,对于没有获得记账权的旷工来说,他之前所花费的的电力基本都白费了,所以工作量证明最大的问题就是会浪费大量的算力,算力背后的支撑就是我们的电能。
在我们币精英商学院群里,如果我们发行一个Token叫精英币在本群内部交易流通,如果我们内部的交易就会形成账本,大家为了维护这个账本就得花大量的时间去维护,比如说我和涛涛发生了一笔交易,如果我们群内有有15名旷工去争夺记账权,结果阿雷获得了记账权,阿雷记录完之后向全网广播,说我已经把账记录完毕,然后14名旷工中的6个旷工去确认阿里的账记录得是否真实,核实通过通过后阿雷的记录的账单才能并入到我们币精英商学院的大账本中,其实大家回头来看这个过程,不仅浪费了大家很多时间,而且整个打包到确认需要花费很长的时间,如果我们币精英以后的学员越来越多,有几十万,那么每天发生的交易就有好几万笔,这将需要耗费多少的人力和时间啊。
即拥有的币越多,有记账权的概率越大,这里的越多有两个维度,一个是持有币的时间期限,第二一个就是持有代币的数量,所以这里的币指的是币龄,即持币数量 持币天数。比如
币精英商学院的袁叔叔持有精英币1000个持有周期是30天,那么他的币龄是1000 30=30000,即每个币每天产生一个币龄,并且每产生一个区块币龄就会被清0,假如每被清空365个币龄,就会从区块中获得0.05个精英币的利息,那么袁叔叔开启了一个区块,他将得到的利息是【《1000*30》X5%】/365=4.1个精英币。通过上面我们可以知道他的优点是:省略掉了竞争记账造成的资源浪费,在一定程度上缩短了达成共识的时间。他的缺点就是容易形成贫富两极分化,有币的人越来越有币,还有个问题就是没有专业化,拥有权益的人未必希望参与记账,
关于对待分叉来说那个共识机制有效 目前来说没有正确的答案,首先我们来分析一下比特币分叉的原因是他的的容量小,每个区块只有2M,就相当于我们的城市道路只有两车道,随着社会的快速发展,车子越来越多,两车道已经不能满足我们的要求,于是出现了4次道或者形成专用车道,即自行车道和汽车专用道、公交车专用车道。这也就是我们所说的侧链机制,但是目前这种技术尚未取得明显的成功和进步,还有一种解决办法就是闪电网络技术,闪电网络技术就是区块系统的小笔交易放到最后统一处理,就像在我们币精英商学院的同学麻将桌上打麻将一样,每次都结算很麻烦,于是阿雷想出了一个办法,第一局阿雷输了200个精英币给文涛,第二局是文涛输了200个精英币给魏刚 第三局则是魏刚输给了东城200个精英币,然后打完三局阿雷说我想回家写作业了,不玩了,开始算账,阿雷直接给东城200个精英币就OK,是不是很快啊,这只是我举的理想例子,在区块链的交易不是这么简单,所以闪电网络到目前为止还处于探索期,还不能算是最好的解决方案。
关于为什么还是分叉了呢? 这里面有很多原因,我认为90%是人为原因,跟要想解决比特币交易速度没有一点关系,很多人分叉就是为了赚点钱,分叉之后很多私生子都没有爸妈管了,所以我是不喜欢分叉币的。
POW、POS共识机制的优缺点是什么啊?哪位大神科普下
POW:Proof of Work,工作证明。比特币在Block的生成过程中使用了此机制,找到合理的Block Hash需要经过大要得量尝试计算,计算时间取决于机器的哈希运算速度。POS:Proof of Stake,股权证明。简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,在POS模式下,持币有利息。DSC(动态权益)共识算法:公链项目Penta的独创。分三层:第一层进行代表选举,第二层通过三列筹钱算法挑选议员和观察员组成若干共识组,第三层从候选区块中通过散列抽签算法选取正式块。
对于pow和pos和区块链pow和pos的总结分享本篇到此就结束了,不知你从中学到你需要的知识点没 ?如果还想了解更多这方面的内容,记得收藏关注本站后续更新。
标签: 区块
②文章观点仅代表原作者本人不代表本站立场,并不完全代表本站赞同其观点和对其真实性负责。
③文章版权归原作者所有,部分转载文章仅为传播更多信息、受益服务用户之目的,如信息标记有误,请联系站长修正。
④本站一律禁止以任何方式发布或转载任何违法违规的相关信息,如发现本站上有涉嫌侵权/违规及任何不妥的内容,请第一时间反馈。发送邮件到 88667178@qq.com,经核实立即修正或删除。