---
title: "什麼是 Ethereum 承諾層級？"
description: "認識 Safe（Justified）、Finalized 和 Latest 這幾種承諾層級"
---

# 什麼是 Ethereum 承諾層級？

[Beacon Chain](https://www.alchemy.com/overviews/what-is-the-ethereum-beacon-chain) 引入了兩種新的 Ethereum 承諾等級（commitment level），_safe_ 和 _finalized_，用來標記區塊，與 PoW 鏈既有的 _latest_ 標籤並存。_latest_ 區塊標籤是指最近被加入 Ethereum 區塊鏈的區塊，也稱為「head」；_safe_ 承諾等級是落後目前 epoch 一個 epoch（即 32 個 slot）；_finalized_ 承諾等級則是落後最近被標記為 _safe_ 的區塊一個 epoch。

Ethereum 承諾等級之所以有用，是因為它們為 web3 開發者提供了實用的基礎工具，可以查詢那些因 Ethereum 的 Proof-of-Stake 演算法變更而不太可能發生[重組（reorg）](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)是指已被加入正典鏈（canonical chain，即主鏈或最長鏈）的區塊被移除並替換為另一個區塊。重組會影響結算最終性（settlement finality），因為已加入正典鏈的區塊有可能因重組而被更改。

由於重組可能因漏洞攻擊，以及[最大可提取價值（Maximal Extractable Value，MEV）](https://www.alchemy.com/overviews/what-is-mev)而發生，開發者若假設最新區塊已經結算，是一個難以成立的假設。

隨著從 Proof-of-Work 遷移至 Proof-of-Stake，Ethereum 的 Beacon chain 引入了 _safe_ 和 _finalized_ 區塊承諾等級，為開發者提供更強的保證。

## **什麼是 epoch？**

**在合併後（post-merge）的 Ethereum 環境中，Beacon Chain 引入了 slot（新區塊被建構的機會）以及等於 32 個 slot 的 epoch。** 由於新區塊每 12 秒即可完成一次驗證，一個 epoch 等於 6.4 分鐘。

在每個 epoch 中，Beacon Chain 會隨機選出一組驗證者委員會，對加入區塊鏈的區塊有效性進行驗證（attest）。_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 三分之二驗證者集合證明（attestation）的區塊。_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 的[證明（attestation）](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_
