特務 K 與小雨繼續談論從算力制到押金制的這段技術決策。押金制的過程歷經重重挑戰與回應。前面已經談過
兩人繼續討論其他的面向
客觀是算力制的支持者一直提倡的好處。客觀的意思是節點僅知創世區塊以及協定規則,節點同步的過程可以只倚賴驗證鏈上累積的工作量證明,而不需倚賴其他人的資訊,或是需要信任的來源。
但押金制似乎同步過程沒辦法這麼客觀。怎麼說呢?
要同步一條押金制的區塊鏈,必須去檢驗區塊或檢查點上的驗證者簽章。
但檢查驗證者簽章之前,需要知道現在到有哪些驗證者。
也許兩年前有一批驗證者遞出了辭呈,離開了系統。因此正確的主鏈並沒有包含他們。
但同樣一批驗證者,卻偷偷的維護一條分岔鏈。在這條分岔鏈上,他們從沒離開過。
「這種離職驗證者偷挖一條分岔鏈的行為有個名字:「 遠距攻擊(Long Range Attack) 」」小雨補充。
對正確的主鏈而言,這些離職驗證者也沒有雙重投票的問題。因為他們早已離開系統。懲罰機制不會作用。
因此到底這個新節點要同步誰呢?他會同步到正確的主鏈?還是分岔鏈?
「看起來,還是得去某個官方網站,找到某個正確的節點,或找個真人朋友問。」特務 K 心想。
「但等等,怎麼知道那個官方網站、或某個節點、或那個朋友是可以相信的?」特務 K 越想越不對勁。
「的確這就是你要倚賴主觀資訊的問題」小雨說。
以太坊這邊的回應是:某種主觀的資訊勢不可免。稱為「微主觀(Weak Subjectivity)」
如果一個節點一直是上線狀態,共識規則種能跟到那些離職資訊。這邊不會有需要主觀資訊的問題。
但如果有個節點是今天才打算同步,又或是這個節點曾經同步過,但已經一陣子沒同步了,他們需要有某種來自社會或人際之間的介入,才能得到最新的正確檢查點。
特務 K 記得在十幾天前,在同步節點時,留下的眾多疑惑。在共識層客戶端的參數 checkpoint-sync-url
裡,需要輸入一個外部的連結。
# Lighthouse 執行的指令。 bn 是信標鏈 beacon chain 的縮寫。
# 第二個參數註明共識層客戶端要同步的是主網路而非其他測試網。
# 第三和第四個是共識層客戶端和執行層客戶端溝通的方式。前者要知道後者的 API 去哪打。因為設計上兩者可以在不信任的網路溝通,所以有 JSON Web Tokens 保障通訊安全
# 第五個 checkpoint-sync-url 讓客戶端去取得狀態的檢查點。這要談到微主觀的概念,需要一些脈絡和脈絡的脈絡,過幾天再談。
# 最後的 http 是開啟共識層客戶端的 API
lighthouse bn \
--network mainnet \
--execution-endpoint http://localhost:8551 \
--execution-jwt /tmp/jwtsecret \
--checkpoint-sync-url https://mainnet.checkpoint.sigp.io \
--http
「我們現在有差不多的脈絡和脈絡的脈絡了」小雨說。
在 https://mainnet.checkpoint.sigp.io/ 這個網站裡,會有最新敲定與準敲定的區塊。
在 https://eth-clients.github.io/checkpoint-sync-endpoints/ 網站裡也有其他客戶端團隊所提供的網站。
如果在執行共識客戶端的時候,沒有給出敲定的區塊或相關網址,客戶端會依照一個 微主觀安全期(Weak Subjectivity Period, WSP),判斷是否直接同步有被惡意分岔鏈欺騙的風險。
這個微主觀安全期的計算方式考量了兩個點: ^wsp
這兩個因素決定壞人能多快製造出一個分岔的檢查點來騙你。壞人可以慢慢等押金排隊離開系統;也可以不排隊,立刻挨罰並製造衝突檢查點。
照最新升級 Pectra 影響之後的算法,以及現在總押金的數字,這個微主觀安全期大概是 兩週左右 。^wsp_pectra
特務 K 對這種需要信任某種網站才能取得正確鏈頭的方式感到些微不適。
「即使是完全客觀的系統,你也得到正確的網站下載到正確的客戶端對吧?」小雨說。
在 2014 年 Vitalik 談論微主觀的一文中 ^vitalik_2014 ,有這麼一段文字:
「 共識是一個社會過程 ,人類在沒有任何演算法幫助的情況下相當擅長達成共識;也許最好的例子是雅浦島(Yap)的拉伊石(Rai),當地部落基本上維護著一個區塊鏈,記錄石頭(作為類似比特幣的零內在價值資產)所有權的變更,並將其作為集體記憶的一部分。需要共識「演算法」的原因很簡單,因為人類沒有無限的計算能力,更願意依靠軟體代理來為我們維持共識。軟體代理非常聰明,能夠以完美的精確度在極其複雜的規則集下維持極大狀態的共識,但它們也非常無知,因為它們擁有的社會資訊很少,而共識演算法的挑戰就在於創造一個需要盡可能少的社會資訊輸入的演算法。」