-(圖片來源:Claudio Galamini)-

Schlesi 是以太坊2.0 的一個多客戶端測試網,如今它已完成了它的歷史使命,要停止運行了。

不誇張地說,Schlesi 完成了以太坊2.0 路線圖上的一個重要里程碑:成功地啟動了一個公開的多客戶端測試網。本文中我準備談談Schlesi 測試網及其繼任者Witti 測試網。

一些重要的定義

我們先溝通一下一些術語的含義。

什麼是測試網絡?

測試網絡是用於測試的備用網絡,希望盡可能模擬目標網絡的生產環境來測試軟件和協議的實際能力。計劃使用目標網絡用於生產的用戶可通過測試網來測試客戶端的能力,以保證不會遇到bug。測試網很重要,因為它能幫助大家在實際投入生產之前發現bug。

什麼是以太坊2.0 測試網?

以太坊2.0 的第一個階段,Phase 0,要退出信標鏈(Beacon Chain)。關於什麼是信標鏈,Bed Edgington 在2018 年10 月給出了一個很好的解讀:

“信標鏈的核心功能是為自身及分片鏈而管理權益證明協議的運行。這種管理包括:管理驗證者及其出塊權重;為每個時隙處的每個分片安排區塊提議者;組織驗證者、劃分成委員會,參與對被提議區塊的投票;執行共識規則,發放獎勵和施加懲罰;成為各分片登記自身狀態的錨點,以協助跨分片交易。”(來源)

為了給信標鏈做測試,我們需要讓一個乃至多個客戶端共同組成一個網絡。所謂“以太坊2.0 測試網”,就是在一個測試環境中運行Phase 0 信標鏈實例。當前仍在運行的一個單客戶端測試網是Prysmatic Labs 發起的Topaz 測試網。

什麼是多客戶端測試網?

多客戶端測試網就是由多個不同開發團隊開發的客戶端共同聯網組成的測試網絡。 Schlesi 和Witti 都是多客戶端測試網。多客戶端測試網的挑戰性更大,因為不同的客戶端各有各的特點,也各有各的bug,配置也不盡相同。大多數客戶端在參與多客戶端測試網之前都會運行私有的測試網。 Afri Schoedon 說得好:

“在主網啟動以前,我們需要啟動盡可能模擬主網條件的測試網。這就要求我們有穩定、長期、持久的測試網絡,而且僅僅得到一種客戶端的支持是不夠,要得到多種客戶端的支持,甚至所有客戶端都能參與,才行。”

以太坊2.0 測試網怎麼會分叉?

信標鍊是靠權益證明協議來支撐的。當2/3 的驗證者都見證了某些區塊的有效性時,就會有一批區塊得到確認。這就是所謂的“達成確定性”,達成之後,此前的區塊就永遠不能再更改了。當區塊鏈不能達成確定性的時候,它就會變得不穩定,也有可能發生分叉。當不同的驗證者支持相互競爭的區塊時,分叉就出現了。這就是Schlesi 測試網上出現的情況。

多客戶端測試網歷史

Schlesi 實際上並不是第一個多客戶端測試網。還有一個更早的叫做“multinet” 的測試網,是在2019 年10 月24 號啟動的(GitHub),也是多客戶端共同參與的:Nimbus、Trinity、Lighthouse、Prysm、Lodestar 以及Artemis(也就是現在的Teku 客戶端)。不過,它更像一個模擬的多客戶端測試網。 Afri Schoedon 解釋道:

“Eth2.0 Multinet 是一系列用於模擬多客戶端測試網的腳本集合,它可以調整多種參數來模擬測試效果,比如驗證者數量。Multinet 所用的是最小化的Eth2.0 規範。”

到了2020 年3月,在一次開發者電話會議中,以太坊基金會研究院Danny Ryan 表達了希望“啟動多客戶端測試網” 的意願。然後,就出現了Schlesi 測試網。

這個名字來自德國柏林的Schlesisches Tor 火車站。 Schlesi 多客戶端測試網在2020 年4 月27 日啟動。

在其運作期間,Schlesi 測試網的目標是測試以太坊2.0 v0.11.1 和v0.11.2 版的規範。以往那些以v0.10 為目標的測試網就因為不穩定而停止了。

Schlesi 啟動之時,成功地讓兩批運行不同以太坊2.0 客戶端(Lighthouse 和Prysm)的驗證者能互聯,後來Teku 也成功加入了。 Nimbus 和Lodestar 進度上稍微落後,但也正迎頭趕上。

然後,5 月17 日,Afri Schoedon 宣布測試網上出現了分叉。

儘管存在的時間較短,Schlesi 催生了組織文檔、編寫配置和引導啟動的機會,並且讓多種客戶端能同時加入;大家可以公開地部署節點、與測試區塊鏈同步,並質押Goerli 測試網ETH 來成為驗證者;開發人員也驚喜地發現,Schlesi 居然運行了這麼久,而各客戶端團隊都因為快速修復了其軟件實現中的問題而得到大家的認可。總的來說是個皆大歡喜的結果。

那麼,到底什麼原因導致Schlesi 測試網最終停止了呢? Prysmatic Labs 團隊的Ivan Martinez 在他們的更新日誌中總結了問題根源:

“協調世界時5 月15 日上午11 時許,Schlesi 測試網被發現有接近50 個時段沒有取得確定性……最終導致該鏈不穩定,出現了幾個臨時的分叉。在超過300 個時段無法取得確定性之後,Prysm 客戶端和Lighthouse 客戶端在時段150496 時隙處形成了分叉。一個區塊在提交時罰沒了一名見證者,但不同客戶端在給被罰沒驗證者計算獎勵和懲罰時出現了不一致。這就暴露出了Prysm 客戶端在懲罰計算上的兩個不同的bug!此次鏈分叉之後,我們覺得最好的辦法就是重新開始。雖然那時候Schlesi 可以從這個錯誤中恢復,但我們覺得最好是立即吸取我們從這次事件中得到的教訓,並啟動一個新的多客戶端測試網。”(來源)

然後,Schlesi 落幕了。 Witti 即將升起!

- (圖片來源:Jan Gympel) -

Witti 多客戶端測試網

Witti 是最新的多客戶端測試網。它的保證金合約都是5 月25 號才部署的,部署在Goerli 測試網上。

就像Schlesi 一樣,Witti 的名字也來源於柏林的一個地鐵站(Wittenberglatz)。根據其GitHub 頁,Witti 會支持3 個以太坊2.0 客戶端:Lighthouse、Prysm 和Teku。 Nimbus 和Lodestar 則還在開發中。

以太坊2.0 v0.11.3 版技術規範是Witti 的測試目標,因為大多數客戶端都已經或接近於實現了這一版規範的功能。雖然最近放出了v0.12,我們可以合理的認為,Witti 和日後的測試網能夠吸收這些變更。

Witti 測試網已於5 月27 日啟動,可在區塊瀏覽器https://witti.beaconcha.in/ 上看到它的情況。

結語

總結一下,我們很快會迎來一個全新的以太坊2.0 多客戶端測試網,叫做Witti;其前身“Schelesi” 將不再運行,雖然它扮演了一個重要的抉擇。

就我個人來說,我非常興奮能部署一個節點採納與Witti。除了幫助開發者做測試,我自己也有不少的樂趣。我覺得大家都應該動手試試。我寫了一份用Prysm 客戶端來參與Topaz 測試網的指南,等Witti 啟動以後我也會相應寫一個指南。

最後,我想表達我對所有開發者的感激之情。以太坊生態系統和社區裡都是雄心壯志的人,都在為一個共同的目標以太坊2.0 而奮鬥。不計其數的開發者、研究員、思考者乃至社區領袖的不懈奮鬥,讓這一切成為可能。謝謝你們!