当前位置: 首页 > news >正文

区块链中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没有提议区块,可能因为提议者离线了。

 

 

相关文章:

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

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

免费开源的vue+express搭建的后台管理系统

此项目已开源 前端git地址:exp后台管理系统前端: exp后台管理系统前端 后端git地址:express后台管理系统: express后台管理系统 安装运行 npm i yarn i 前端: npm run dev | yarn dev 后端: npm run start | yarn start 主要技术栈 前端后端名称版本名…...

【开发】视频云存储EasyCVR视频汇聚平台AI智能算法定制

安防视频集中存储EasyCVR视频汇聚平台,可支持海量视频的轻量化接入与汇聚管理。平台能提供视频存储磁盘阵列、视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联、H.265自动转码等功能。为了便…...

Ribbon:负载均衡及Ribbon

什么是负载均衡&#xff1f; 第一种轮询算法&#xff0c;依次遍历去执行&#xff0c;达到负载均衡 集成Ribbon 导入pom&#xff0c;在消费者服务里的pom文件导入 <!-- Ribbon 集成 --><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spr…...

【声波】声波在硼酸、硫酸镁 (MgSO4) 和纯水中的吸收研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

使用swoole实现实时消息推送给客户端

一. 测试服务端 //测试服务端public function testServer(){$server new Server(192.168.0.144, 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP);$server->on(request, function ($request, $response) {$response->header(Content-Type, text/plain);$response->end("He…...

Ordinals 之后,以太坊铭文协议 Ethscriptions 如何再塑 NFT 资产形态

随着加密市场的发展&#xff0c;NFT 赛道逐渐形成了其独有的市场。但在加密熊市的持续影响下&#xff0c;今年 NFT 赛道的发展充满坎坷与挑战。据 NFTGO 数据显示&#xff0c;截至 8 月 7 日&#xff0c;与去年相比&#xff0c;NFT 市值总计约 56.4 亿美元&#xff0c;过去 1 年…...

Python绘制爱心代码(七夕限定版)

写在前面&#xff1a; 又到了一年一度的七夕节啦&#xff01;你还在发愁送女朋友什么礼物&#xff0c;不知道怎样表达你满满的爱意吗&#xff1f;别担心&#xff0c;我来帮你&#xff01;今天&#xff0c;我将教你使用Python绘制一个跳动的爱心&#xff0c;用创意和幽默为这个…...

Java两整数相除向上取整

方法一&#xff1a;通过三目运算符 &#xff08;简单移动&#xff09; x / y (x % y ! 0 ? 1 : 0);方法二&#xff1a;通过ceil函数&#xff08;不推荐使用&#xff0c;涉及类型转换&#xff09; (int)Math.ceil((double)x/y);// 或者(int)Math.ceil(x * 1.0 /y);方法三&…...

Linux学习之Telnet明文漏洞

yum install telnet telnet-server xinetd -y安装软件。 systemctl start xinetd.service开启xinetd&#xff0c;systemctl start telnet.socket开启telnet。 xinetd来监控端口&#xff0c;然后把数据传给telnet。 ifconfig eth0看一下eth0网卡信息&#xff0c;。 iptable…...

产品经理如何提高用户画像效果?SIKT模型

产品经理做用户画像&#xff0c;最担心被业务方反馈&#xff1a;没效果。这往往是由用户画像与业务场景脱节造成的。那么我们该如何从业务场景出发&#xff0c;让用户画像更有效&#xff1f;一般来说&#xff0c;我们可以采用SIKT模型解决这个问题。 用户画像 ​ 1、SIK…...

ubuntu安装Microsoft Edge并设置为中文

1、下载 edge.deb 版本并安装 sudo dpkg -i microsoft-edg.deb 2. 设置默认中文显示 如果是通过.deb方式安装的&#xff1a; 打开默认安装路径下的microsoft-edge-dev文件&#xff0c;在文件最开头加上: export LANGUAGEZH-CN.UTF-8 &#xff0c;保存退出。 cd /opt/micr…...

Host/ KVM/ Docker/ K8s/ OpenStack/ Mesos简单介绍和区别

Host/ KVM/ Docker/ Kubernetes/ OpenStack 和 Mesos 的简单介绍&#xff1a; - Host&#xff1a; Host 是指物理服务器或虚拟机主机&#xff0c;它们可以运行多个虚拟机或容器来提供计算和存储资源。Host 是云计算和容器化技术中的基本组成部分。 - KVM&#xff1a; KVM 是…...

关于Transformer中的位置编码

位置编码 (Positional Encoding) 位置编码是在自然语言处理中&#xff0c;特别是在 Transformer 架构中使用的一个重要概念。Transformer 架构由于其自注意力机制 (Self-Attention Mechanism) 的特性&#xff0c;对序列中的元素没有固有的顺序感知。这意味着&#xff0c;如果不…...

ABAP 期初库存批量导入 demo1

&--------------------------------------------------------------------- *& Report ZMMCP005 &--------------------------------------------------------------------- 作者&#xff1a; Liv完成日期&#xff1a;描述&#xff1a; 期初库存导入需求简要说明&…...

想用 Python 写游戏,都有哪些好用的游戏开发库?

虽然 Python 在网络爬虫、人工智能、数据分析方面有广泛应用,但它并不是一门专门做游戏开发的编程语言,不过对于小型的游戏开发,Python 还是挺香的。下面为大家介绍几个支持 Python 的 2D、3D 游戏开发库,使用它们,你可以设计出很多有意思的小游戏! Cocos2d Cocos2d 是…...

vue3 路由缓存问题

目录 解决问题的思路&#xff1a; 解决问题的方案&#xff1a; 1、给roter-view添加key&#xff08;破坏复用机制&#xff0c;强制销毁重建&#xff09; 2、使用beforeRouteUpdate导航钩子 3、使用watch监听路由 vue3路由缓存&#xff1a;当用户从/users/johnny导航到/use…...

如何找到一个数的所有质因数,以及如何快速判断一个数是不是质数

前情介绍 今天遇到一个需求&#xff1a;找到一个数所有的质因数。 初步解决 先定义一个判断质数的函数&#xff1a; def is_Prime(number):i 2count 0while i < number:if number % i 0 :count 1i 1if count > 0:return Falseelse:return True 接着定义一个寻找质…...

西瓜书之神经网络

一&#xff0c;神经元模型 所谓神经网络&#xff0c; 目前用得最广泛的一个定义是“神经网络是由具有适应性的简单单元组成的广泛并行互连的网络&#xff0c;它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应”。 M-P神经元 M-P神经元&#xff1a;接收n个输入(…...

C++进阶 特殊类的设计

本篇博客介绍&#xff1a;介绍几种特殊的类 特殊类的设计 设计一个类不能被拷贝设计一个类 只能在堆上创建对象设计一个类 只能在栈上创造对象设计一个类不能被继承单例模式饿汉模式懒汉模式单例模式对象的释放问题 总结 设计一个类不能被拷贝 我们的拷贝只会发生在两个场景当…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...