證明
最後編輯: @Xeift(opens in a new tab), 2024年4月23日
驗證者需要在每個時期建立、簽署和廣播證明。 本頁概述這些證明是什麼樣的,以及它們是如何處理和如何在共識用戶端之間交流的。
什麼是證明?
每個(6.4 分鐘)驗證者都會向網路提交一個證明。 這個證明針對時期內的一個特定時隙。 證明的目的是投票贊成驗證者對於鏈的看法,特別是最近的合理區塊和當前時期內的第一個區塊(稱為來源
和目標
檢查點)。 所有參與的驗證者的資訊都會合併,使得網路可以達成關於區塊鏈狀態的共識。
證明包含以下組成部分:
aggregation_bits
:驗證者的位元列表,其位置對應到委員會中的驗證者索引;(0/1) 數值表示驗證者是否簽署了data
(即,他們是否活躍和同意區塊提議者)data
:與證明相關的細節,如下方的定義signature
:彙總了個人驗證者簽署的 Boneh-Lynn-Shacham 簽章
證明驗證者的第一個任務是建置 data
。 data
包含以下資訊:
slot
:證明參考的時隙號碼index
:一個數字,用來辨識驗證者在給定的時隙中所屬的委員會beacon_block_root
:驗證者在鏈頭看到的區塊的根雜湊(套用分叉選擇演算法的結果)source
:最終確定性投票的一部分,表示驗證者認為的最新的合理區塊target
:最終確定性投票的一部分,表示驗證者認為的當前時段的第一個區塊
一旦 data
建置完成,驗證者就可以將 aggregation_bits
中對應於他們自己的驗證者索引的位元從 0 翻轉到 1,表示他們已經參與。
最終,驗證者簽署證明並且在網路上進行廣播。
彙總的證明
每個驗證者在網路上傳遞此資料時,都會產生大量的相關開銷。 因此,個人驗證者在更廣泛的廣播前,先會在子網內彙總。 這包括將簽章彙總在一起,以讓廣播出去的證明包含共識 data
及一個單一簽章,此為所有同意該 data
的驗證者之簽章合併而成的簽章。 這可以透過 aggregation_bits
來檢查,因為它提供了每個驗證者在其委員會(委員會 ID 在 data
中提供)中的索引,可用於查詢個人簽章。
在每個時期,每個子網中都會選出 16 個驗證者來擔任聚合者
。 聚合者會收集它在廣播網路中監聽到的與其自身 data
相同的所有證明。 每個符合證明的發送者會被記錄在 aggregation_bits
中。 然後,聚合者將彙總證明廣播到更廣泛的網路。
當驗證者被選為區塊提議者時,它們會將最新時隙來自子網的彙總證明打包到新區塊中。
證明包含生命週期
- 產生
- 傳播
- 彙總
- 傳播
- 納入
證明的生命週期如下圖所示:
酬勞
驗證者提交證明可以獲得獎勵。 證明的獎勵依參與標記(來源、目標和頭部)、基礎獎勵和參與率而定。
每個參與標記都可以為 true 或 false,視提交的證明及納入延遲而定。
最佳情況是所有 3 個標記皆為 true,在這種情況下,驗證者的每個正確標記可以賺取:
獎勵 += 基礎獎勵 * 標記加權 * 標記證明率 / 64
標記證明率是透過特定標記的「所有證明驗證者的有效餘額總和」與「總活躍有效餘額」的比較來計算的。
基礎獎勵
基礎獎勵是根據參與證明的驗證者數量及其質押的有效以太幣餘額計算的:
base reward = validator effective balance x 2^6 / SQRT(Effective balance of all active validators)
納入延遲
當驗證者在鏈頭 (block n
) 上投票時,block n+1
尚未提議。 所以,證明自然會在經過一個區塊之後被納入區塊,因此所有在作為鏈頭的 block n
上投票的證明都會在 block n+1
被納入,納入延遲爲 1。 若納入延遲加倍至 2 個時隙,則證明的獎勵會減半,這是因爲證明獎勵的計算方式爲基礎獎勵乘以納入延遲的倒數。
證明場景
缺少參加投票的驗證者
驗證者最多有一個時期能夠提交他們的證明。 若錯過了在時期 0 時提交證明的機會,則它們可在時期 1 時提交(經過一個納入延遲)。
缺少聚合者
每個時期總共有 16 個聚合者。 此外,驗證者會隨機訂閱兩個子網路並持續 256 個時期,並在缺少聚合者時作為備用。
缺少區塊提議者
值得注意的是,在一些情況下幸運的聚合者可能同時被選為區塊提議者。 若因為區塊提議者消失而導致證明未被納入,則下個區塊提議者會取得已彙總的證明並納入下一個區塊。 但是,納入延遲會因此增加 1。
衍生閱讀
認識社區或社團資源能幫助大家學習更多? 歡迎自由編輯或添加於本頁!!