合併後的第一天:快速回顧PoS乙太坊設計

來源:@stonecoldpat0

作者:Patrick McCorry

能源消耗

合併後的能源消耗會减少99.8%。 這是可以公開驗證的,而排除一切合理的質疑後,可以說使用/運行乙太坊不會對環境造成影響。 沒有,沒有,一點都沒有。 這就少了一個問題,可以說服新手嘗試、採用和使用加密貨幣。

可擴展性

PoS的轉變不會影響可擴展性。 PoW和PoS是抗女巫攻擊的共識機制。 它的目標在於:限制可以參與區塊生成過程的人。 它只會找到共擔風險且因此理性行動的參與者。

引用推文: https://twitter.com/el33th4xor/status/1006931658338177024

slot、epoch和委員會

一個epoch有32個slot。 在一個epoch裏,整個驗證者集將被平均至每一個slot,這樣委員會的規模就等於所有驗證者除以32。 在一個slot裏,一個委員會成員提議了區塊,剩餘的成員則對此進行投票。 (BLS產生隨機信標)

同步和投票

slot是指12秒的時隙:

  • 0 - 4秒:提議區塊

  • 4 - 12秒:投票和計票

最好的情况下,會正常進行區塊提議和投票。 有時候,提議者可能會離線,那就不會有區塊被提議出來。

處理被跳過的區塊

如果區塊提議者離線了,那麼:

  • 委員會成員(slot 96)會投票給上一個區塊

  • 下一個委員會繼續正常運作

就像所有的區塊鏈一樣,這能促使一條權威鏈的形成,因為區塊鏈生產者/驗證者必須擴展一個父塊。

最新區塊和分叉處理

在鏈的頂端進行分叉是可以的:

  • 區塊提議者已經提議了兩個或以上的區塊(罰沒情况,但區塊仍然存在)

  • 發生延遲而區塊到達了下一個slot。

這時候,該slot的委員會成員需要選擇一個區塊。

分叉選擇規則的重要性

委員會成員應該基於同一套規則選擇“最重的鏈”(heaviest chain):

  • 選擇最多投票的分叉

  • 票數平局情况下選擇最低雜湊的區塊

  • Proposer boost:如果區塊在這個slot被提議了,選擇有70%額外票數的區塊

引用推文: https://twitter.com/hasufl/status/1570316069306503170

區塊變壞

如果絕大多數的委員會成員都把票投給同一個區塊,那麼:

  • 未來的委員會將會延續勝出的區塊

  • 競爭的分叉區塊則會變“壞”或者“被丟棄”

分叉選擇規則:跟隨票數積累最多的鏈。

弱主觀性

由於“投票”和“長程攻擊”的性質,所以我們不可能接收來自不受信任來源的區塊鏈副本並驗證它是不是“一條真正”的鏈,而是必須依靠於社會共識和眾所周知的檢查點:【部落格連結】

引用文章:Proof of Stake: How I Learned to Love Weak Subjectivity | Ethereum Foundation Blog

最終確定性

我們可以理解下麵這句保證:“一旦區塊敲定,它將永不可逆轉”。

兩個階段:

  • 驗證:在1個epoch後,下一個候選區塊就會被敲定。

  • 最終確定:在2個epoch後,絕對多數已經給它投票了(兩次)。

兩個區塊樹

PoS乙太坊的魅力在於,它有兩個組成:

  • 通過LMD Ghost機制實現活性(跟隨最重的區塊分支(heaviest branch))

  • 通過Casper的FFG實現安全性(選擇一個區塊並敲定它)。

epoch的鏈給予我們信心,而slot鏈的頂端則是“待處理的世界狀態”

攻擊者:占質押存款的1/3以上

攻擊者無法控制交易的排序,但是他們可以攻擊最終確定性。 只會在2/3以上的驗證者投票給一個區塊時,它才能進行敲定。 如果它只獲得了少於2/3的票數,那麼它就無法驗證或敲定。

不作為懲罰

誠實的驗證者會繼續在slot中生產區塊,並慢慢排除那些不遵守分叉選擇規則的驗證者。 最終,不投票者會失去足够的質押存款,這樣誠實的驗證者就能占比2/3以上的質押。

兩條平行的鏈

如果說不作為懲罰發生了,那是因為:

  • 一個驗證者集想要審查一筆交易

  • 另一個驗證者集想要打包交易

每一個驗證者集將會對另一個驗證者集進行“不作為懲罰”。 這導致了兩條鏈的誕生。 這是平和的分叉。

攻擊者:占質押存款的1/2以上

他們控制了“分叉選擇規則”並决定忽略那些打包了審查交易的區塊。 就比如在PoW機制中,他們無法改變共識規則,只能控制交易的排序。 但據我所知,在這種情況下“不作為懲罰(inactivity leak)”將不會被啟動。

乙太坊的守衛者

在面對審查的時候,我們能够做什麼? 答案是一次用戶啟動的軟分叉! 總的來說,我們可以強制退出(並潜在地)通過分叉程式碼來罰沒攻擊者。 這是一種有針對性的攻擊,不會損害誠實驗證者的利益。

引用推文: https://twitter.com/stonecoldpat0/status/1560040361447260163

多用戶端主題

目標:避免會讓區塊/無效交易被永遠敲定的零日攻擊。 但這需要多少個用戶端? 嗯,另一個出現的問題是因為不作為懲罰。 如果兩個占比50%的用戶端出現分歧,那麼他們最終會變成兩個平行的世界。

任何單個用戶端無法啟動漏洞

當運行一個用戶端組合的驗證者所占的質押存款占比大於33%時,不作為的懲罰才會變得有意義。 通過運行少數人使用的用戶端,你可以最小化所有因為軟件漏洞而造成的損害。 閱讀更多請看這裡: https://dankradfeist.de/ethereum/2022/03/24/run-the-majority-client-at-your-own-peril.html

懲罰不等於罰沒

區別:

  • 懲罰:只是很小的問題,不會對網絡造成損害

  • 罰沒:驗證者作出了公開可檢測且惡意的行為

如果驗證者觸發了罰沒條件,他們就會被強制移出網絡。 閱讀更多:

引用文章: https://eth2book.info/altair/part2/incentives/slashing/

兩種罰沒情况

1.在同一個slot裏投票/提議兩個或以上的區塊(強制每個slot一張票規則的執行)

2.提議“包含”了一個你已經投過票的分叉的分叉(抵抗長程攻擊)

我做了一個基於圖上公式的視覺圖幫助大家理解。

無論如何,我希望你們喜歡這條推文。 乙太坊已經變更了它的共識協定,從工作量證明機制轉向權益證明機制,這份成績非常了不起。 這也是為什麼乙太坊、它的路線圖/科技以及社區都非常好的。

乙太坊是實驗的天堂。