---
title: "什么是 Ethereum 承诺级别？"
description: "了解 Safe（Justified）、Finalized 和 Latest 承诺级别"
---

# 什么是 Ethereum 承诺级别？

[Beacon Chain](https://www.alchemy.com/overviews/what-is-the-ethereum-beacon-chain) 引入了两种新的 Ethereum 承诺级别，_safe_ 和 _finalized_，用于标记区块，与 PoW 链上已有的 _latest_ 标签并存。_latest_ 区块标签指的是最近添加到 Ethereum 区块链上的区块，也称为"头部"（head）；_safe_ 承诺级别落后当前 epoch 一个 epoch（即 32 个 slot）；_finalized_ 承诺级别落后于最近标记为 _safe_ 的区块一个 epoch。

Ethereum 承诺级别之所以有用，是因为它们为 web3 开发者提供了有效的原语，用于查询由 Ethereum 权益证明算法变更所带来的不易发生[重组](https://www.alchemy.com/overviews/what-is-a-reorg)的区块。

由于开发者对 _justified_ 和 _finalized_ 区块不易被重组有更高的保证，他们可以在智能合约和去中心化应用中构建更强的假设。

## **什么是区块高度？**

**区块高度是用于标示区块添加到区块链上顺序的数值。** 例如，如果正在构建和验证的待定区块的区块高度为 100，那么最近验证的区块（即 _latest_ 区块）的区块高度将为 99。

## **什么是链重组（re-org）？**

[**链重组**](https://www.alchemy.com/overviews/what-is-a-reorg)是指已添加到规范链（即主链，或最长链）上的区块被移除并被另一个区块替代的情况。重组会影响结算终局性，因为添加到规范链上的区块可能通过重组被改变。

由于漏洞利用以及[最大可提取价值（MEV）](https://www.alchemy.com/overviews/what-is-mev)都可能导致重组发生，因此开发者若信任最新区块已经结算，是一个难以成立的假设。

随着从工作量证明迁移到权益证明，Ethereum 的 Beacon 链引入了 _safe_ 和 _finalized_ 区块承诺级别，为开发者提供更强的保证。

## **什么是 epoch？**

**在合并后的 Ethereum 环境中，Beacon Chain 引入了 slot（构建新区块的机会）和 epoch（等于 32 个 slot）的概念。** 由于新区块可以精确地每 12 秒验证一次，一个 epoch 等于 6.4 分钟。

在每个 epoch 中，Beacon Chain 会随机选出一组验证者委员会，对添加到区块链上的区块的有效性进行认证。_safe_ 和 _finalized_ 区块承诺级别是基于 epoch 来确定的。

虽然[每个 epoch 有 32 个 slot](https://ethereum.org/en/developers/docs/data-and-analytics/block-explorers/#consensus-layer-data)，但在极少数情况下（不到 1%），某个 slot 可能不会有区块被验证，因此有些 epoch 可能少于 32 个区块。一种可能的原因是被随机选中的验证者不在线。

## **什么是 Ethereum 承诺级别？**

[**Ethereum 承诺级别**](https://www.alchemy.com/docs/how-to-get-the-latest-block-on-ethereum)是用于将已验证区块标记为 latest、justified 或 finalized 的标签，为开发者提供关于区块被重组可能性的某些保证。

### **1. Latest**

‍_latest_ 区块是 Ethereum 验证者最近构建并验证的区块。使用 _latest_ 区块时应保持谨慎，因为无法保证 Beacon Chain 不会发生重组，此时该区块会成为叔块（Uncle Block），即[未被添加到规范链上的区块](https://www.alchemy.com/docs/what-are-uncle-blocks)。

### **2. Safe**

‍_safe_ 区块是已收到 Ethereum 验证者集合三分之二认证的区块。_safe_ 区块被认为不易被重组。

例如，_safe_ 区块发生链重组的少数可能情形之一是网络遭受大规模、协调一致的攻击。

### **3. Finalized**

finalized 区块是落后于最近一个 _justified_ 区块一个 epoch 的 justified 区块。_finalized_ 区块极[不易被重组](https://blog.ethereum.org/2021/11/29/how-the-merge-impacts-app-layer)，唯一的例外是三分之二多数的验证者最终确定了一条竞争性区块链。

## safe 和 finalized 承诺级别是如何确定的？

safe 和 finalized 承诺级别是根据 epoch 的完成情况来确定的。让我们以合并（The Merge）之后的前三个 epoch（epoch 0、1、2）为例，来说明 safe 和 finalized 区块是如何运作的。

- Epoch 0 = 区块 0-31
- Epoch 1 = 区块 32-63
- Epoch 2 = 区块 64-95
- Epoch 3 = 区块 96-127

假设当前最新区块是区块 96，它标志着 epoch 3 的开始和 epoch 2 的结束。

由于区块 96 包含了对区块 64 的[认证](https://www.paradigm.xyz/2021/07/ethereum-reorgs-after-the-merge)（即验证者投票表明[提议的规范区块头](https://www.alchemy.com/overviews/proposer-builder-separation)为真），一旦 Beacon Chain 收到三分之二验证者的认证，区块 64 就会被标记为 _justified（safe）_。

一旦区块 64 被标记为 justified 并标记为 _safe_，此前的 justified 区块就会被标记为 _finalized_。由于 safe 和 _finalized_ 区块都出现在 epoch 的开始处，区块 32（epoch 1 的第一个区块）会被标记为 _finalized_。

如果当前区块高度为 96，还可以这样来理解：

- 区块 96（epoch 3 的开始）= _latest_
- 区块 64（epoch 2 的开始）= _justified_（_safe_）
- 区块 32（epoch 1 的开始）= _finalized_
