区块链中slot、epoch、以及在slot和epoch中的出块机制,分叉原理(自己备用)

以太坊2.0中有两个时间概念:时隙槽slot 和 时段(周期)epoch。其中一个slot为12秒,而每个 epoch 由 32 个 slots 组成,所以每个epoch共384秒,也就是 6.4 分钟。

对于每个epoch,使用RANDAO伪随机算法将全部的验证节点分成多个委员会(committee),这些委员会的职责主要包括出块LMD GHOST(以太坊的分叉选择规则)投票和Casper FFG投票(有时候把这两种投票合称Gasper)

每个委员会至少包括128个验证节点(一个验证节点在一个 epoch 中只能参与一个委员会),它的职责是负责验证一个slot(这里我看不同的资料有不同的说法,资料[1]的说法是全部验证者被随机分成32个委员会,正好对应一个epoch里的32个slot;而资料[2]的说法是由于网络中的验证者总数大于32*128*2=8192,所以可以保证每个slot至少有两个委员会;资料[3]的说法是由一个或多个单独的委员会负责验证每个slot。这个估计要看最新的资料,据说关于ETH2.0出块机制这方面一直在变化,貌似两年前的文章已经没有太多参考价值)。

在这至少128个验证者组成的委员会中,会随机选择(还有种说法是根据有效余额权重,有效余额定义见资料[4])一个验证者作为区块提议者(propose),其余验证者负责LMD GHOST投票和Casper FFG投票,其中LMD GHOST投票需要所有验证者在自己所在的 slot 中投票选出信标链的head。

这两种投票的区别就像地方选举和全国选举,因为只有分配给某个slot的验证者才会对该slot进行LMD GHOST 投票,而Casper FFG需要所有验证者为epoch的检查点(checkpoints)进行投票,投票的权重由验证者节点的的余额决定。在每个Epoch之后,各委员会的验证者被混合并合并到新的委员会。

区块提议者会根据LMD-GHOST 分叉选择规则,在他认为拥有最多验证者证明的链构建下一个区块。提议者有4秒的时间去提议一个新区块,如果提议者完成了它的任务,一个有效的区块(在4秒内)将会填充slot;如果未完成任务(比如提议者离线),slot将传递为空(skipped),如下图中的slot4。

在区块提议的过程中,有可能因为网络延迟或者恶意行为(例如区块提议者同时发布两个不同的区块)等原因出现分叉(这里我在网上其他地方查了资料好像很多人都说ETH2.0不会存在叔块/孤块,但这里的分叉难道不会产生叔块么??),比如下图在slot5/6出现了分叉:验证者(5)提议了一个区块,但是验证者(6)没有收到相关信息(例如,该区块到达该验证者的速度不够快)。所以验证者(6)根据从验证者(3)那里看到的最新信息提议了一个区块。

当出现分叉时,要根据LMD GHOST投票结果确定主链。相比于POW选择最长链为主链,LMD GHOST规则的思路为根据验证者最近一次的投票(Latest Message Driven)确定每个区块的weight,每当遇到分叉时选择weight最大的区块作为主链,一直重复该操作直至找到leaf block即链头。而对于某一个区块的weight,它等于投给该区块以及该区块所有子孙后代区块的票数总和。

(但是这里我不太理解的是到底什么叫做最近一次的投票?我是觉得在一个epoch当中,一个验证者本来就是只在他所在的slot投一次票吧,这样的话就不存在第二次投票也就不存在什么最近不最近这个概念了,那照这样理解的话应该下图中的每个区块都有与它直接连接的笑脸才对,但显然不是这样的,下面这张图只有 2 1 4 1这几个区块有投票,有懂行的朋友能解释下嘛?)

 

以上图为例,笑脸表示验证者的最近一次投票证明(每个笑脸的weight这里都取1),数字表示每个区块的weight,尽管最上面一条链才是最长链,但由于绿色这条链获得了最多的验证者证明,所以绿色这条链才是权威链。

检查点(checkpoints)与区块的最终确认(finalized)

前面讲的都是以太坊2.0的出块机制,那么区块又是怎么确认的呢?

首先,我们需要明确检查点的定义。检查点是一个epoch中第一个slot的区块。第一个slot中若是没有区块,则检查点是前一个最近的区块。每个epoch必定有一个检查点块,且一个区块可以是被归属于多个epoch的检查点。

 

以上图为例,slot 64 处的区块是 epoch 1的检查点,epoch 2 的检查点本来应该是位于 slot 128 处产生的区块,但由于从 slot 65 到 slot 128 之间都没有区块,所以 epoch 2 的检查点是从 slot 128 往前的第一个区块,即 slot 64 处的区块。

当进行 LMD GHOST 投票时,验证者也会投票给当前周期中的检查点target checkpoint以及先前的检查点 source checkpoint,此投票即为 Casper FFG 投票。

当一个周期结束时,如果某检查点获得了所有活跃验证者总有效余额 2/3 的投票支持,则该检查点被认为是justified状态。如果检查点A被证明是justified,并且紧接的下一个epoch中的检查点B也被证明是 justified 的,那么A将被最终确认,变为finalized状态。通常,一个检查点会在两个时期内得到最终确认,即 12.8 分钟。

 

上图的英语逐句翻译如下:

1. slot 96处产生一个新的区块,标志着epoch 2结束。该区块内存储了关于epoch 2检查点(即slot 64处区块)的投票;(这句没太懂,为啥slot96会存储slot64的投票)

2. 信标链检查epoch 2检查点(即slot 64处区块)是否获得验证人超过2/3的证明;如果超过,则epoch 2检查点(即slot 64处区块)及epoch 1中的所有区块都被证明(justified);

3. 如果epoch 2检查点(即slot 64处区块)被证明,那么epoch 1检查点(即slot 32处区块)及之前被证明的所有区块都最终确定(finalized)。

所有最终确认(finalized)的检查点都成为规范链(区块链历史的一部分),所有忠诚节点都默认接收规范链,即「最终检查点」之后的区块可以随意分叉,但之前的区块不允许分叉。但如果节点主动选择作恶,则需要承担高昂的攻击成本。所以,通过Casper FFG保证了ETH2.0的安全性。

 

 

 

信标链浏览器:https://beaconscan.com/

让我们在信标链浏览器上查看一下epoch191896,可以看到该epoch的slot6140674为forked,slot6140676为skipped

对应的,在ETH区块链浏览器上,可以看到16967454区块在slot6140673被提议,16967455区块在slot6140675被提议,中间正好隔了一个slot6140674,因为该slot产生的区块是一个分叉块,且没有在LMD Ghost获得更多的投票weight。

 可以看到16967456区块在slot6140677被提议,与上一个区块中间正好隔了一个slot6140676,因为该slot没有提议区块,可能因为提议者离线了。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/96295.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker学习(十五)docker安装MongoDB

什么是MongoDB? MongoDB 是一个开源的、面向文档的 NoSQL 数据库管理系统,它以高性能、灵活的数据存储方式而闻名。与传统的关系型数据库不同,MongoDB 采用了一种称为 BSON(Binary JSON)的二进制 JSON 格式来存储数据。它是一种非…

李沐pytorch学习-卷积网络及其实现

一、卷积定义 卷积计算过程如图1所示,即输入矩阵和核函数对应的位置相乘,然后相加得到输出对应位置的数。 图1. 卷积计算过程 该过程可以形象地从图2中展现。 图2. 二维卷积示意图 二、代码实现 2.1 实现互相关运算 import torch from torch import n…

使用Pandas处理Excel文件

Excel工作表是非常本能和用户友好的,这使得它们非常适合操作大型数据集,即使是技术人员也不例外。如果您正在寻找学习使用Python在Excel文件中操作和自动化内容的地方,请不要再找了。你来对地方了。 在本文中,您将学习如何使用Pan…

antd5源码调试环境搭建(window系统)

将antd源码克隆至本地 $ git clone gitgithub.com:ant-design/ant-design.git $ cd ant-design $ npm install $ npm start前提安装python3、安装node版本18版本 不然后续安装依赖会报python3相关的错误。 项目需要使用git 初始化 不然会报husky相关的错误 git init重新安…

云计算虚拟仿真实训平台

一、云计算虚拟仿真系统概述 云计算虚拟仿真系统是一种基于云计算技术和虚拟化技术的系统,用于实现各种仿真和模拟任务。它可以提供强大的计算能力和资源管理,为用户提供灵活、高效、可扩展的仿真环境。 该系统通常由一组服务器、网络和存储设备组成&am…

Apache Dubbo 云原生可观测性的探索与实践

作者:宋小生 - 平安壹钱包中间件资深工程师 Dubbo3 可观测能力速览 Apache Dubbo3 在云原生可观测性方面完成重磅升级,使用 Dubbo3 最新版本,你只需要引入 dubbo-spring-boot-observability-starter 依赖,微服务集群即原生具备以…

无脑入门pytorch系列(四)—— scatter_

本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思…

musl libc ldso 动态加载研究笔记:02

前言 本篇继续研究 musl libc ldso 的动态加载过程中遇到的关键性的概念:到底要加载ELF 文件的哪些内容到 内存 当前如果遇到 ELF 动态加载,当前系统需要有【文件系统】,并且有较大的内存,因为 ELF 文件是无法直接运行的&#xf…

如何快速的合并多个PPT使之成为一个PPT?

如何快速的合并多个PPT使之成为一个PPT? 项目过程中,经常给客户汇报,经常做PPT,有时候,需要把之前的ppt内容整合到新的内容中,如何快速合并以及使用呢? 幻灯片(PPT中)点…

JMeter接口自动化测试实例—JMeter引用javaScript

Jmeter提供了JSR223 PreProcessor前置处理器,通过该工具融合了Java 8 Nashorn 脚本引擎,可以执行js脚本以便对脚本进行前置处理。其中比较典型的应用就是通过执行js脚本对前端数据进行rsa加密,如登录密码加密。但在这里我就简单的应用javaScr…

7.maven

1 初始Maven 1.1 什么是Maven Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。 官网:https://maven.apache.org/ Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会&…

AI工程师招募;60+开发者AI工具清单;如何用AI工具读懂插件源码;开发者出海解读;斯坦福LLM课程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 一则AI工程师招募信息:新领域需要新技能 Vision Flow (目的涌现) 是一家基于 AGI 原生技术的创业公司,是全球探…

Harmony OS教程学习笔记

基础知识 1.如何修改程序启动的第一个页面? 不想使用创建的默认的页面,这时需要修改启动页面,修改的地方在EntryAbility文件中的onWindowStageCreate方法中。 onWindowStageCreate(windowStage: window.WindowStage) {// Main window is cr…

Java中的异常

认识异常 异常就是程序出现的问题; Integer.valueOf("aaaa"); 异常体系 因为写代码时经常会出现问题,Java的设计者们早就为我们写好了很多个异常类,来描述不同场景下的问题。而有些类是有共性的所以就有了异常的继承体系 Error&…

【Windows系统编程】03.远线程注入ShellCode

shellcode&#xff1a;本质上也是一段普通的代码&#xff0c;只不过特殊的编程手法&#xff0c;可以在任意环境下&#xff0c;不依赖于原有的依赖库执行。 远程线程 #include <iostream> #include <windows.h> #include <TlHelp32.h>int main(){HANDLE hPr…

[JavaWeb]【六】web后端开发-请求响应

前言&#xff1a;请求响应 目录 一 引子 二 请求 2.1 Postman 2.1.1 安装 2.1.2 创建工作空间 2.1.3 添加接口 2.2 简单参数 2.2.1 原始方式&#xff08;不推荐&#xff09; 2.2.2 SpringBoot方式-GET(参数名与形参变量名相同) 2.2.3 SpringBoot方式-POST(参数名与形参…

苹果iOS16曝出新漏洞:飞行模式下依旧可连接网络

近日&#xff0c;网络安全研究人员发现iOS 16存在一种新的漏洞利用后持久化技术&#xff0c;即使受害者的苹果设备处于离线状态&#xff0c;也可以利用该技术悄无声息地访问该设备。 Jamf Threat Labs 的研究人员 Hu Ke 和 Nir Avraham 在与 The Hacker News 分享的一份报告中…

【C++】AVL树(平衡二叉树)

目录 一、AVL树的定义二、AVL树的作用三、AVL树的插入操作插入——平衡因子的更新插入——左单旋插入——右单旋插入——左右双旋插入——右左双旋 四、ALVL树的验证五、AVL树的性能 一、AVL树的定义 AVL树&#xff0c;全称 平衡二叉搜索&#xff08;排序&#xff09;树。 二…

广州华锐互动:3D数字孪生开发编辑器助力企业高效开发数字孪生应用

3D数字孪生开发编辑器是一种新兴的技术&#xff0c;它可以帮助企业更好地管理和维护其物联网设备。这些工具可以帮助企业实现对设备的实时监控、故障排除和优化&#xff0c;从而提高生产效率和降低成本。 数字孪生系统是一种将物理世界与数字世界相结合的技术&#xff0c;它可以…

openGauss学习笔记-43 openGauss 高级数据管理-事件触发器

文章目录 openGauss学习笔记-43 openGauss 高级数据管理-事件触发器43.1 语法格式43.2 参数说明43.3 示例 openGauss学习笔记-43 openGauss 高级数据管理-事件触发器 触发器会在指定的ddl事件发生时自动执行函数。目前事件触发器仅在PG兼容模式下可用。 43.1 语法格式 创建事…