---
title: 單槽最終性
description: 單槽最終性的解釋
lang: zh-tw
template: roadmap
---

一個 [以太坊](/) 區塊大約需要 15 分鐘才能已定案。然而，我們可以讓以太坊的共識機制更有效率地驗證區塊，並大幅縮短達到最終性的時間。區塊可以在同一個時槽中被提案並已定案，而不需要等待 15 分鐘。這個概念被稱為**單槽最終性 (SSF)**。

## 什麼是最終性？ {#what-is-finality}

在以太坊基於權益證明 (PoS) 的共識機制中，最終性是指保證一個區塊不能在不銷毀至少 33% 總質押 ETH 的情況下被更改或從區塊鏈中移除。這是一種「加密經濟」安全性，因為信心來自於改變鏈的順序或內容所伴隨的極高成本，這將阻止任何理性的經濟參與者嘗試這樣做。

## 為什麼要追求更快的最終性？ {#why-aim-for-quicker-finality}

目前達到最終性的時間被證明太長了。大多數使用者不想等待 15 分鐘才達到最終性，而且對於可能需要高交易吞吐量的應用程式和交易所來說，必須等待這麼長時間才能確定他們的交易是永久的，這非常不方便。在區塊提案和已定案之間存在延遲，也為短暫的區塊重組創造了機會，攻擊者可以利用這些機會來審查某些區塊或提取最大可提取價值 (MEV)。分階段升級區塊的機制也相當複雜，並且已經修補了幾次以修復安全漏洞，使其成為以太坊程式碼庫中更容易出現微妙錯誤的部分之一。透過將達到最終性的時間縮短到單一一個時槽，這些問題都可以被消除。

## 去中心化、時間與開銷的權衡 {#the-decentralization-time-overhead-tradeoff}

最終性保證並非新區塊的即時屬性；新區塊需要時間才能已定案。原因是代表網路上至少 2/3 總質押 ETH 的驗證者必須對該區塊進行投票（「證明」），才能將其視為已定案。網路上的每個驗證節點都必須處理來自其他節點的證明，才能知道一個區塊是否已經達到該 2/3 的門檻。

允許達到已定案的時間越短，每個節點所需的運算能力就越高，因為證明處理必須更快完成。此外，網路上存在的驗證節點越多，每個區塊必須處理的證明就越多，這也增加了所需的處理能力。所需的處理能力越高，能參與的人就越少，因為運行每個驗證節點需要更昂貴的硬體。增加區塊之間的時間會減少每個節點所需的運算能力，但也會延長達到最終性的時間，因為證明的處理速度會變慢。

因此，在開銷（運算能力）、去中心化（可以參與驗證鏈的節點數量）和達到最終性的時間之間存在著權衡。理想的系統會在最小運算能力、最大去中心化和最短達到最終性的時間之間取得平衡。

以太坊目前的共識機制透過以下方式平衡了這三個參數：

- **將最低質押要求設定為 32 ETH**。這為個別節點必須處理的驗證者證明數量設定了上限，因此也為每個節點的運算需求設定了上限。
- **將達到最終性的時間設定為約 15 分鐘**。這為在一般家用電腦上運行的驗證者提供了足夠的時間，以安全地處理每個區塊的證明。

在目前的機制設計下，為了縮短達到最終性的時間，必須減少網路上的驗證者數量或提高每個節點的硬體要求。然而，可以對處理證明的方式進行改進，從而允許計算更多的證明，而不會增加每個節點的開銷。更有效率的處理將允許在單一一個時槽內確定最終性，而不是跨越兩個紀元。

## 實現 SSF 的途徑 {#routes-to-ssf}

<ExpandableCard title="為什麼我們現在還無法實現 SSF？" eventCategory="/roadmap/single-slot-finality" eventName="clicked Why can't we hear SSF today?">

目前的共識機制結合了來自多個驗證者（稱為委員會）的證明，以減少每個驗證者在驗證區塊時必須處理的訊息數量。每個驗證者都有機會在每個紀元（32 個時槽）中進行證明，但在每個時槽中，只有一部分被稱為「委員會」的驗證者進行證明。他們透過劃分為子網路來實現這一點，在子網路中，少數驗證者被選為「聚合者」。這些聚合者各自將他們從其子網路中其他驗證者那裡看到的所有簽章組合成一個單一的聚合簽章。包含最多個人貢獻數量的聚合者會將其聚合簽章傳遞給區塊提案者，區塊提案者將其與來自其他委員會的聚合簽章一起包含在區塊中。

這個過程為每個驗證者在每個紀元中投票提供了足夠的容量，因為 `32 slots * 64 committees * 256 validators per committee = 524,288 validators per epoch`。在撰寫本文時（2023 年 2 月），大約有 513,000 名活躍的驗證者。

在這個方案中，只有透過將他們的證明分佈在整個紀元中，每個驗證者才有可能對區塊進行投票。然而，有可能透過改進機制，使得_每個驗證者都有機會在每個時槽中進行證明_。
</ExpandableCard>

自從以太坊共識機制設計以來，簽章聚合方案 (BLS) 被發現比最初想像的更具可擴展性，同時客戶端處理和驗證簽章的能力也有所提高。事實證明，在單一一個時槽內處理來自大量驗證者的證明實際上是可能的。例如，如果有一百萬個驗證者，每個驗證者在每個時槽中投票兩次，並且時槽時間調整為 16 秒，節點將被要求以每秒至少 125,000 次聚合的速率驗證簽章，以便在時槽內處理所有 100 萬個證明。實際上，一台普通電腦大約需要 500 奈秒來進行一次簽章驗證，這意味著 125,000 次驗證可以在約 62.5 毫秒內完成——遠低於一秒的門檻。

透過在每個時槽建立例如 125,000 名隨機選擇的驗證者組成的超級委員會，可以進一步提高效率。只有這些驗證者可以對區塊進行投票，因此只有這個驗證者子集決定區塊是否已定案。這是否是個好主意，取決於社群希望對以太坊進行成功攻擊的成本有多高。這是因為攻擊者不需要總質押以太幣的 2/3，而是可以利用_該超級委員會中_ 2/3 的質押以太幣來讓一個不誠實的區塊已定案。這仍然是一個活躍的研究領域，但對於一個大到首先需要超級委員會的驗證者集合來說，攻擊其中一個子委員會的成本將會非常高（例如，以 ETH 計價的攻擊成本將是 `2/3 * 125,000 * 32 = ~2.6 million ETH`），這似乎是合理的。攻擊成本可以透過增加驗證者集合的規模來調整（例如，調整驗證者規模，使攻擊成本等於 100 萬以太幣、400 萬以太幣、1000 萬以太幣等）。社群的[初步民意調查](https://youtu.be/ojBgyFl6-v4?t=755)似乎表明，100 萬到 200 萬以太幣是可接受的攻擊成本，這意味著每個超級委員會大約需要 65,536 到 97,152 名驗證者。

然而，驗證並不是真正的瓶頸——簽章聚合才是真正挑戰驗證者節點的地方。為了擴展簽章聚合，可能需要增加每個子網路中的驗證者數量、增加子網路的數量，或者增加額外的聚合層（即實施委員會的委員會）。部分解決方案可能是允許專門的聚合者——類似於在提案者與建構者分離 (PBS) 和丹克分片下，區塊建構和為匯總資料產生承諾將外包給專門的區塊建構者。

## 分叉選擇規則在 SSF 中的作用是什麼？ {#role-of-the-fork-choice-rule}

今天的共識機制依賴於最終性小工具（決定是否有 2/3 的驗證者已經證明某條鏈的演算法）和分叉選擇規則（在有多個選項時決定哪條鏈是正確的演算法）之間的緊密耦合。分叉選擇演算法只考慮_自_上一個已定案區塊以來的區塊。在 SSF 下，分叉選擇規則將沒有任何區塊需要考慮，因為最終性發生在區塊被提案的同一個時槽中。這意味著在 SSF 下，分叉選擇演算法_或_最終性小工具在任何時候都只有一個會處於活躍狀態。最終性小工具會讓有 2/3 驗證者在線並誠實證明的區塊已定案。如果一個區塊無法超過 2/3 的門檻，分叉選擇規則就會啟動以決定要跟隨哪條鏈。這也創造了一個機會來維持不活躍漏損機制，該機制可以恢復超過 1/3 驗證者離線的鏈，儘管會有一些額外的細微差別。

## 懸而未決的問題 {#outstanding-issues}

透過增加每個子網路的驗證者數量來擴展聚合的問題在於，這會導致點對點網路上的負載增加。增加聚合層的問題在於，它的工程設計相當複雜並且會增加延遲（即區塊提案者可能需要更長的時間才能收到所有子網路聚合者的訊息）。目前也不清楚如何處理網路上的活躍驗證者數量超過每個時槽可行處理數量的情況，即使使用了 BLS 簽章聚合。一個潛在的解決方案是，因為所有驗證者都在每個時槽中進行證明，而且在 SSF 下沒有委員會，所以可以完全移除有效餘額 32 ETH 的上限，這意味著管理多個驗證者的營運商可以整合他們的質押並運行更少的驗證者，從而減少驗證節點為了計算整個驗證者集合而必須處理的訊息數量。這依賴於大型質押者同意整合他們的驗證者。也有可能在任何時候對驗證者的數量或質押的 ETH 數量施加固定的上限。然而，這需要某種機制來決定允許哪些驗證者參與，哪些不允許，這很容易產生不必要的副作用。

## 目前進展 {#current-progress}

SSF 目前處於研究階段。預計幾年內不會發布，可能會在其他重大升級（例如[沃克爾樹](/roadmap/verkle-trees/)和[丹克分片](/roadmap/danksharding/)）之後推出。

## 延伸閱讀 {#further-reading}

- [Vitalik 在 EDCON 2022 上關於 SSF 的演講](https://www.youtube.com/watch?v=nPgUKNPWXNI)
- [Vitalik 的筆記：實現單槽最終性的途徑](https://notes.ethereum.org/@vbuterin/single_slot_finality)
