通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 Casper PoS共识机制的变种...

2023-11-13

作者:林冠宏 / 指尖下的幽灵

掘金:juejin.im/user/587f0d…

博客:www.cnblogs.com/linguanh/

GitHub : github.com/af913337456…

腾讯云专栏: cloud.tencent.com/developer/u…

虫洞区块链专栏:www.chongdongshequ.com/article/153…


前序

本人版暂名为《区块链以太坊DApp实战开发》一书,即将完成,是一本废话少、讲解通俗、实操性强的技术书籍。本文为书中的小节的部分内容。想涉足这个区块链领域技术开发的同僚可以留意我的博客,届时会发布。

目录

  • PoW 共识机制
  • 以太坊目前所使用的共识算法
  • Ghost 协议
    • 选择最优链
    • 分叉块处理
  • Casper PoS变种共识机制
    • 如何成为验证人
    • 验证人如何获取保证金
    • 候选区块如何产生
    • 按照什么规则轮着出块
    • 如何判断胜出区块
    • 验证人联盟投注的作弊问题

PoW 与 PoS 共识机制

如果对PoW PoS共识机制还不了解的朋友,可以看下我之前的两篇文章

PoW共识机制通俗讲解

PoS共识机制通俗讲解

以太坊目前所使用的共识算法

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

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

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

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

Ghost 协议

Ghost 协议的全称是“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投注方式是存在有验证人联盟在一起,共同投注某个区块使之胜出的问题的,对于这个问题的解决方案,目前以太坊还没完整公布,处于进一步的研究之中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 Casper PoS共识机制的变种... 的相关文章

随机推荐

  • QT实现串口打开和关闭

    一 查找串口 windows 下面这个循环语句用来查找可以用的串口端口 不确定有多少串口可用 也就不知道循环多少次 所以用foreach 不知道用的就百度 foreach const QSerialPortInfo info QSerial
  • Linux常用操作命令

    Shell命令基础 root localhost root 用户名账号 计算机名 用户当前工作目录 文件与目录相关命令 1 ls命令 列出目录内容 执行ls指令可列出目录的内容 包括文件目录以及子目录 ls 参数 文件或目录 若无选定目录
  • 抽象类案例

    卡类 package Java project 1 public abstract class Card private String userName private double money public abstract void p
  • 数据库的连接串(中文)

    在数据库的各种应用程序开发中 连接数据库是数据库应用程序开发的第一步 同时也是最重要的一步 而对于不同的数据库他们的连接模式各有不同 对应的连接串也不同 Sql Server ODBC o 标准连接 Standard Security Dr
  • CSS之background-position属性

    1 作用 background position是用来控制元素背景图片的位置 以图片的左上角顶点为原点 属性值为正就代表图片下移或右移 属性值为负就代表图片上移或左移 它接受三种值 关键词 比如top right bottom left和c
  • WordPress:实现发布文章自动添加TAG标签

    在给我们的WordPress博客更新文章时 大多数人应该会给文章添加一些TAG标签 文章添加TAG标签也是我们做WordPress优化必不可少的一项 但是如果每一篇文章的关键字标签都要手动添加链接 那也太麻烦了 今天给大家分享一篇自动给文章
  • java---多重循环练习

    java 多重循环练习 1 关于多重循环的嵌套使用 举例 一 循环嵌套的用法 1 更加方便 重复率低的实现多步操作 二 使用步骤 1 多个循环结构嵌套 代码如下 示例 for 变量初始值 循环条件 迭代 for 变量初始值 循环条件 迭代
  • RabbitMQ 中arguments详解(系列一之Message TTL)

    注 以下程序使用C 实现 在我们使用RabbitMQ声明队列时 其中最后一个参数是arguments 那么arguments到底有什么用呢 下面我们解释其中参数的第一中用法 即 消息过期时间 Message TTL 我们将最后一个参数arg
  • OW-DETR

    欢迎关注我的公众号 极智视界 获取我的更多笔记分享 大家好 我是极智视界 本文解读一下 基于 Transformer 的开放世界目标检测器 OW DETR 开放世界目标检测 OWOD 是一个具有挑战性的计算机视觉问题 其任务是检测一组已知的
  • 现代密码学第三次实验:不对称加密算法RSA

    现代密码学第三次实验 不对称加密算法RSA 前言 一 实验目的 二 实验环境 三 实验步骤 四 实验基本方法 五 实验程序清单 七 实验结果 八 实验总结 前言 为了帮助同学们完成痛苦的实验课程设计 本作者将其作出的实验结果及代码贴至CSD
  • python实验数据预处理案例_Python数据分析小案例——红楼梦文本分析(一) 文本预处理...

    本文开始介绍一个简单的数据分析案例 分析红楼梦文本 本文主要内容是将红楼梦文本按照章节获取每一回的标题 字数 段落数并保存到csv中方便后续数据分析 红楼梦小说文本可以在这里下载 链接 https pan baidu com s 1WEmu
  • 获取中文、英文、数字的首字母

    function getFirstChar s 获取第一个 s0 mb substr s 0 1 utf 8 一些汉字可能获取不到 可以如下单独处理 if s0 奧 return A if s0 斐 return F if s0 麒 ret
  • java实现洗牌算法——详解Collections.shuffle()

    洗牌题目描述 请撰写一个简单的洗牌程序 显示洗牌结果如下 题目分析 相当于实现52个数字随机打乱顺序 没有王 代码实现 SpringBootApplication public class HelloWorldMainApplication
  • 正交多载波调制(OFDM)

    Orthogonal Frequency Division Multiplexing OFDM OFDM is a special case of multi carrier communication as opposed to a co
  • [深入研究4G/5G/6G专题-39]: URLLC-10-《3GPP URLLC相关协议、规范、技术原理深度解读》-4-如何区分URLLC业务?网络切片的架构与技术详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 目录 前言 第1章 什么是网络切片 网络切片的基本概念 1 1 千变万化的业务需求
  • WSL2无法连接网络

    建议您可以参考下面的步骤重置一下网络试试 按键盘Win R打开 运行 输入cmd然后按Ctrl Shift 回车 以管理员身份打开命令提示符 在打开的命令提示符窗口中粘贴运行下面的命令 netsh winsock reset 命令执行完成后
  • 04PL-SQL过程之声明各种简单变量

    declare v temp number 2 v count binary integer 0 v sal number 7 2 4000 00 v date date sysdate v pi constant number 3 2 3
  • mockito mock void方法_Mockito调用静态方法和void方法

    静态类首先给你的类添加以下注解 PrepareForTest 静态类 class ContextConfiguration RunWith PowerMockRunner class PowerMockRunnerDelegate Spri
  • python练习6——PTA

    7 1 重复元素查找 100 分 每一个列表中只要有一个元素出现两次 那么该列表即被判定为包含重复元素 编写程序 对n行字符串进行处理 一行字符串构成一个列表 程序判定每一个列表中是否包含重复元素 最后统计包含重复元素的行数与不包含重复元素
  • 通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 Casper PoS共识机制的变种...

    作者 林冠宏 指尖下的幽灵 掘金 juejin im user 587f0d 博客 www cnblogs com linguanh GitHub github com af913337456 腾讯云专栏 cloud tencent com