用戶端多樣性
用戶端多樣性意指網路由同一協定的數個各自獨立的軟體實作來運行,而非人人都跑同一支程式。區塊鏈協定是一份規格;每個用戶端(執行端的 Geth、Nethermind、Besu、Erigon、Reth;共識端的 Prysm、Lighthouse、Teku、Nimbus、Lodestar、Grandine)都是各自獨立的程式碼庫,由不同團隊以不同語言寫成,力求精確遵循該規格。多樣性正是刻意把驗證者分散到這些實作上、使任何單一者都不致主宰的做法。
它之所以重要,是因為所有軟體都有漏洞,而由網路絕對多數所共有的漏洞格外危險。設想三分之二的驗證者都跑同一個執行用戶端,而該用戶端有個缺陷,會接受其他用戶端會拒絕的無效區塊。由於該用戶端掌握絕對多數,它能把這個壞區塊最終化——而最終化本應不可逆——使誠實的少數方在沒有緊急社群介入下無法回復它。各自獨立的實作幾乎不會共有完全相同的漏洞,因此多樣性使這種波及全網的災難性故障變得微乎其微。
關鍵數字來自權益證明的容錯門檻。若有漏洞的用戶端掌控不到三分之一的驗證者,它最壞也只能讓鏈停止最終化——這是惱人卻可復原的活性故障,因為鏈只需等待,不活躍洩漏便會在漏洞修復後恢復最終性。在三分之一到三分之二之間,鏈可能停滯,但仍無法錯誤地最終化。唯有超過三分之二,單一有漏洞的實作才能最終化一條無效鏈——這才是真正的災難。因此實務上的安全準則是:任一用戶端都不應超過任一層的三分之一,理想上不超過三分之二。
這使用戶端多樣性成為一種帶有搭便車問題的公共財。每位營運者各自都覺得運行最熱門、文件最齊全的用戶端最省事,但這種行為本身卻把風險集中到所有人身上。社群以即時追蹤用戶端市佔率的儀表板、鼓勵改用少數派用戶端、以及在協定層面獎勵多樣性的構想來回應。要誠實說明的是:即便用戶端組合再怎麼多樣,也無法防範協定規格本身的缺陷——多樣性防的是實作漏洞,而非設計本身出錯。
門檻正是重點所在:佔比低於 1/3 的有漏洞用戶端最多只能無法最終化(可復原);唯有超過 2/3 才能最終化一條無效鏈(災難性)。因此「任一用戶端不超過三分之一」就是實務上的安全線。