如果别人问你“以太坊目前所使用的共识算法”是什么?如果你此时去浏览器搜索发现有些文章说是PoS,又有些说是PoW

完整且正确的说法应该是这样的,这其实也是PoW共识机制以太坊的关系。首先以太坊的源码是分有阶段,不同阶段所使用的共识算法要分开来说。所分的阶段有:

  • Frontier(前沿)。这个阶段的版本是以太坊的基础,此时的以太坊具备了挖矿交易以及智能合约功能模块。但是没有供普通用户使用的图形化界面,仅适合于开发者使用。所使用的共识算法是“PoW”。
  • Homestead(家园)。这个阶段的以太坊网络变得更加稳定,且具备了图形界面的钱包软件。所使用的共识算法还是是“PoW”。
  • Metropolis(大都会)。分有下面两个子版本:
    • 拜占庭。发布了集合钱包功能以及合约发布等丰富功能的图形化界面软件“Mist”,同时也引入了很多新的技术,例如零知识证明,抽象账号等。使用的共识算法仍然是“PoW”。
    • 君士坦丁堡。使用混合共识算法“PoW + PoS”,为“宁静”做铺垫。
  • Serenity(宁静)。将把以太坊的共识算法全部换成基于“PoS”的变种算法--“Casper投注共识”,它属于PoS系列。

截至2018-12-14,目前以太坊的最新发布版本是Metropolis大都会的拜占庭。由上述可知,在以太坊发展的过程中,它的共识算法对于不同的阶段,分别是:PoW共识,PoW + PoS 共识PoS

Chost 协议

Chost 协议的全称是“Greedy Heaviest-Observed Sub-Tree protocol”,贪婪子树协议,又称幽灵协议,它属于主链选择协议范畴。

首先在比特币公链中,它是根据最长链规则来解决区块链分叉问题的。请注意,并不是所有的区块链公链解决分叉问题都是使用最长链规则,以太坊就不是。

选择最长链

以太坊解决区块链分叉问题目前所使用的 是Ghost 协议,所以Ghost协议的真实作用是用来进行主链选择的。不同于比特币的最长链规则,它在选择最长链的时候不以哪条链区块连续最长为标准,而是将分叉区块也考虑了进去,选择出一条包含了分叉区块在内区块数目最多的链作为最长链。例如下图所示:

在上图的分叉情况中,在比特币公链中,最终胜出的是链:0 <- 1A <- 2C <- 3F <- 4B <- 5A,一条由最长链规则选择的链。而在以太坊公链中,由幽灵协议得出的最终胜出的是:0 <- 1A <- 2B <- 3D <- 4A 。

原因就是在上面的分叉情况中,幽灵协议把分叉区块也考虑进去了,统计总的区块数,发现在包含了区块: 0,1A,2B,3E,3D,3C,4A 的链是含有区块数最多的。因此该链胜出,这就是幽灵协议选择最初链的机制。

分叉块处理

此外,对于在最长链中被包含进去了的造成链分叉的块,例如上图中的3E3CGhost 协议对它们也有一套对应的处理机制,这些区块会被根据规则处理为:

  1. 孤块,完全没用的块,挖出的矿工没任何收益。比特币链中的分叉块都是孤块
  2. 叔块,被一定范围内的后续子块所打包收纳的块,挖出叔块的矿工会按照一定算法给予收益。

关于叔块方方面面的通俗详细介绍,在我书里,这里就不展开说了。

我们总结一下,Ghost幽灵协议在以太坊中主要起到了下面两点作用:

  1. 选择出最长链
  2. 对最长链中分叉块进行处理

Casper PoS变种共识机制

前提:Casper 目前还没完全公布,还处于开发中,下面内容是根据目前现有的知识总结出的。

作为以太坊第四阶段版本的共识机制,Casper投注共识增加了惩罚机制,并基于PoS的思想在记账节点中选取验证人,能够投注的角色是:验证人。可以将这类角色理解为新一代以太坊矿工。

在casper共识机制中,验证人要拿出保证金的一部分对它认为的大概率胜出的区块进行下注:

  • 如果赌对了,它们就可以拿回保证金外加区块中的交易费用,也许还会有一些新发的货币;
  • 如果下注没有迅速达成一致,下注太慢,它们只能拿回部分下注金,相当于损失了一些下注金;
  • 因此数个回合之后下注的结果出来,那些选错了的验证人就会输掉它们的下注金;
  • 此外如果验证人过于显著的改变下注,例如先是赌某个块有很高概率胜出,然后又改赌另外一个块有高概率胜出,它将被惩罚。

如何成为验证人

想成为验证人,是要进行交保证金进行申请的,同时也可以在进入后选择退出,加入和退出都会将是以太坊网络中的一种特殊的交易类型,目前最常见的交易就是转账ETH代币。也就是说,到时候可能要调用一定的以太坊接口来进行申请成为验证人。保证金很有可能就是以太坊ETH代币,它将会被用来投注,或被因被以太坊惩罚而没收掉。

目前Casper的验证人逻辑将会通过一个名称为Casper合约的东西来实现,合约它提供投注,加入,取款和获取共识信息等一系列功能,因此通过简单的调用Casper合约我们就能提交投注或者进行其他操作。Casper合约的内部状态如下:

这个合约会记录当前的验证人集合,对于每位验证人的6项主要字段解析如下:

  • Return address,验证人保证金的返还地址
  • Deposit size,当前验证人保证金的数量(注意验证人的投注会使这个值增加或减少)
  • Validation code,验证人的验证代码
  • Seq,最近一次投注的序号
  • Prevhash,最近一次投注的hash
  • 验证人的每次投注的表格

验证人如何获取保证金

别人转账给验证人的钱包地址,或者在早期版本基于PoW挖矿收获。

候选区块如何产生

验证人出块,出块是一个独立于其它所有事件而发生的过程:验证人收集交易,当轮到他们的出块时间时,他们就制造一个区块,签名,然后发送到网络上。

按照什么规则轮着出块

Casper机制提供规则。

如何判断胜出区块

当验证人中的绝大多数,满足协议定义阈值的一群验证人的总保证金比例达到67%到90%之间某个百分比以非常高的概率,下注某个块胜出的时候,此区块胜出。

验证人联盟投注的作弊问题

不难看出Casper投注方式是存在有验证人联盟在一起,共同投注某个区块使之胜出的问题的,对于这个问题的解决方案,目前以太坊还没完整公布,处于进一步的研究之中。

以太坊目前所使用的共识算法介绍相关推荐

  1. 以太坊解析之二——POA共识过程与一些可能的修改方案

    以太坊解析之二--POA共识过程 原始版本创建于2021-05-27 文章目录 以太坊解析之二--POA共识过程 前言 一.工作流程 详细解析 二.详细过程 1.启动 2.同步 3.总结 4.一些其他 ...

  2. kademlia java_死磕以太坊源码分析之Kademlia算法

    死磕以太坊源码分析之Kademlia算法 KAD 算法概述 Kademlia是一种点对点分布式哈希表(DHT),它在容易出错的环境中也具有可证明的一致性和性能.使用一种基于异或指标的拓扑结构来路由查询 ...

  3. 第十一课 区块链常用共识算法介绍

    上一节课我们学习了共识算法理论基础,今天我们继续深入学习区块链共识算法,通过这节课我们将了解工作量证明.权威证明.权威授权证明.实用拜占庭容错等相关内容. 在学习课程的时候,你也可以领取BaaS平台为 ...

  4. 以太坊挖矿源码:clique算法

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. clique 以太坊的官方共识算法是ethash算法,这在前文已经有了详细的分析: 它是基于POW的共识机制的,矿工需要 ...

  5. 简介 以太坊 2.0 核心 之 共识机制的改变

    作者:林冠宏 / 指尖下的幽灵 博客:http://www.cnblogs.com/linguanh/ GitHub : https://github.com/af913337456/ 掘金:http ...

  6. 以太坊挖矿源码:ethash算法

    本文具体分析以太坊的共识算法之一:实现了POW的以太坊共识引擎ethash. 关键字:ethash,共识算法,pow,Dagger Hashimoto,ASIC,struct{},nonce,FNV ...

  7. The Merge 过后,没有以太坊 2.0,只有共识层

    以太坊基金会今在 2022 年 1 月就官方宣布将淘汰"以太坊 2.0"的说法,在核心开发人员的共识下改称为"共识层 ( Consensus Layer)".此 ...

  8. 共识算法介绍与分析(PoW、PBFT、Paxos、Raft)

    前言: 读书报告非得做区块链攻防综述相关的,那我这个共识算法的报告就白做了咯 那就放上来和大家一起分享呗 正文: 摘要 在分布式系统中,我们需要制定一定的规则使得多个服务节点对某一个提案达成一致的意见 ...

  9. 拜占庭容错共识算法介绍

    1. 前言 区块链的共识算法中,除了常见的工作量证明(PoW,Proof of Work)和权益证明(PoS,Proof of Stake)外,还有拜占庭容错(Byzantine Fault Tole ...

最新文章

  1. python中url是什么_怎么在Python中实现URL的解析
  2. 【SSH框架】之Hibernate系列一
  3. 嵌入式编程开发环境搭建
  4. 502 Bad Gateway nginx 解决
  5. (HDU)1058 --Humble Numbers( 丑数)
  6. MarkDown基础语法记录
  7. GridView”的控件 必须放在具有 runat=server 的窗体标记内 “错误提示”
  8. java xmpp消息推送_基于XMPP协议(openfire服务器)的消息推送实现
  9. python监控机器(第1版)
  10. C#(64位系统) 解决MySQLDriverCS未能加载文件或程序集,或它的某一个依赖项
  11. 新电脑java开发常用环境安装下载教程收集--持续更新
  12. debian关闭图形界面_禁止debian自动启动图形界面
  13. gopro7怎么回看视频_gopro7推荐帧数设置 gopro7视频格式设置
  14. 字母组合---排列组合问题
  15. php如何放照片,怎样在图片上加上自己的照片 在图片方框中嵌入另一张照片显示...
  16. 嵌入式开发学习路线图
  17. 设备全生命周期管理,开启设管管理新模式
  18. 会计初级系统计算机怎么样,原来初级会计题库有这么多作用 一文一探究竟!(电脑版)...
  19. JavaScript - 销毁定时器
  20. FCN(Fully Convolutional Network)全卷积网络笔记

热门文章

  1. UE4和Unity这样的工具在车载界面的交互设计中发挥什么样的作用呢?
  2. java“智慧食堂”系统springbootvueweb
  3. matlab采样频率怎么编程,关于频率和采样频率
  4. 乐视max2如何打开heic文件,heic是什么文件
  5. Java程序员水平有几个层次?需要掌握哪些技术?
  6. C++11中std::promise的使用
  7. java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z错误
  8. YOLOv5首发改进最新CVPR2023主干FasterNet系列:实测私有数据集mAP有效涨点,同时降低参数量|为更快的神经网络追求更高的 FLOPS,参数量下降,超越其他轻量化模型
  9. 德邦物流java面试_德邦物流面试经验
  10. LeetCode 455. 分发饼干