使用 Nethermind 和 Lighthouse 執行以太坊 2.0 測試網的驗證者

買賣虛擬貨幣
引言Eth 2.0 迎來了從挖礦到 staking 的正規化轉變。Staking 是指鎖定一定數量(目前是 32 個)的以太幣來獲得 “驗證者” 的身份,進而能參與確定哪些區塊能連結在鏈上。當前有許多模擬 Eth 2.0 架構的測試網供大家實驗,其中 staking 功能往往是藉助 Goerli (Eth2.0)測試網實現的 。此前大多數 Eth 2.0 節點搭建的教程都是基於 Geth 客戶端在 Goerli 上完成 staking。能提前感受 Eth 2.0 真的很不錯。不過 Eth 2.0 的目標之一是讓每一個人都可以參與到驗證中來,因此本文聚焦於介紹如何使用 Nethermind 客戶端在 Goerli 測試網上質押以太幣,成為 Eth 2.0 的驗證者。一臺基於 Linux 作業系統並裝有 Curl 的裝置足以復現本教程。不過在開始之前,我們必須提前宣告一點:Eth2.0 的進展日新月異。因此,本文資訊的時效性有限。不過我們會盡可能提供資源幫讀者解決可能遇到的更新和變動,希望讀者們在甄別過程中遵循密碼學貨幣世界的一條基本法:無驗證,不信任(Don't Trust, Verify)。安裝 Nethermind 客戶端Nethermind 客戶端主頁:https://www.nethermind.io/client
Nethermind 客戶端文件:https://nethermind.readthedocs.io/準備安裝 Nethermind 之時,請訪問公開版本頁,下載適用於您的作業系統的最新版本(不過本教程聚焦於 Linux 系統下的安裝和執行)。從 zip 壓縮檔案中提取出 Nethermind:unzip nethermind-linux-amd64–1.8.XX-XXXXXXX.zip -d nethermind(第一個 xx 是版本號。比如我現在撰文的時候,最新的版本是 1.8.43。檔名中有一個 7 位數的校驗和,就是 xx 後面的 xxxxxxx。對於 1.8.43 版本來說,校驗和是 f28f4b7。檔名後面可能還附有檔案的上傳時間,這全看你是在哪兒下載的檔案。真正最重要的事只有一個:下載 Nethermind 最新的穩定版本!使用最新的版本往往能讓很多技術問題迎刃而解。)確保 Nethermind 是最新版本Eth2 的技術規範變化很快,甚至有可能推倒過去的一些東西。Nethermind 客戶端也在快速推進,有時候幾乎每天都有新版本。我建議你把檢查和升級 Nethermind 作為日常工作的一部分,再不濟也要變成每週的例行工作。
如果你想檢查自己執行的 Nethermind 是不是最新版本,在 Nethermind 的目錄裡面開啟 CLI(./Nethermind.Cli),輸入web3.clientVersion然後版本號就會出來了。然後再比對 Nethermind 的公開版本頁,如果不是最新版本,就請動手更新。更新版本跟安裝實質上是一樣的。下載新的安裝包,解壓 zip 檔案到你選定的儲存位置,覆蓋掉舊的 Nethermind 檔案。我這裡就完全複製了從下載資料夾解壓 Nethermind 的命令列,只不過加了一個 -o,表示要覆蓋資料夾裡的內容:unzip -o nethermind-linux-amd64–1.8.XX-XXXXXXX.zip-d nethermind升級之後你必須重啟軟體,這樣你的節點才會允許最新版本的 Nethermind。
同步 Goerli 測試網在 Nethermind 目錄中,使用 Nethermind 同步 Goerli 測試網:./Nethermind.Runner --config goerli --JsonRpc.Enabled true(另一種方法是,在執行 Nethermind.Launcher (啟動)時會提供額外的選擇,詢問你要同步哪條鏈。本版指南使用了 Nethermind.Runner,額外的好處是可以透過製作一個 systemd 指令碼或者類似方法來自動化這個過程)。如果你想使用 Nethermind 來生成在 Goerli 測試網上使用的錢包,你還得再加一段:--Init.EnableUnsecuredDevWallet true。把 JsonRpc.Enabled 設為 True(啟動)是為了便於使用 Goerli 水龍頭(免費獲得 Goerli 測試網上的以太幣)和傳送驗證者保證金。如果你的計算機上沒有別的軟體在使用 8545 埠傳輸訊息,那 Nethermind 就會直接使用這個埠。不要忘了在 MetaMask 上把網路設成 localhost:8545(我自己不覺得有必要做這一步,不過如果你已經在本地同步好了,那就沒有必要使用 Infura 來查詢 Goerli 測試網了 —— 你不手動設,MetaMask 就會自動使用 Infura)。

當 Nethermind 開始顯示 “Processed” 的時候,就說明你的節點已經完成同步了。這裡有張截圖,已同步好 Goerli 測試網的 Nethermind 節點就是這樣的:

Lighthouse

Lighthouse 是由 Sigma Prime 團隊開發的 Eth2 客戶端,是用 Rust 語言寫的。所以你得跳轉到 rustup.rs 網頁找個簡易的安裝指南裝一下 Rust。稍微劇透一下,安裝 Rust 可能很花時間、佔用很多計算機資源(譯者注:此言不虛,在 Windows 安裝完整的 Rust 非常麻煩。)

裝好 Rust、確保能執行之後,下一步就是下載和構建 Lighthouse 程式碼。build(構建)操作會花一些時間,我上次嘗試的時候,執行時間超過半個小時。

git clone https://github.com/sigp/lighthouse.git
cd lighthouse
cargo build — release

Lighthouse 預設加入 Witti 測試網,所以你需要下載 Witti 程式碼庫。找個資料夾,輸入下面這個命令列就可以了:

git clone https://github.com/goerli/witti

(譯者注:現在 Witti 測試網已經關停了。現正在執行的多客戶端測試網叫 Altona。可在此處檢視詳情:https://github.com/goerli/altona )

第一步是讓信標鏈節點(Beacon Node)連上 Goerli 測試網並同步區塊鏈。下面整個命令列是假設 Witti 被克隆到了 home 目錄,不然的話你要替換成你用的地址:

lighthouse bn –http –testnet-dir ~/witti/lighthouse –eth2-endpoint http://127.0.0.1:8545

注意:要是你光輸入 lighthouse 沒用的話(比如程式出錯,顯示 bash: lighthouse: command not found ),你可能需要換成 ~/lighthouse/target/release/lighthouse ,而且可能每次用到 lightho

如果你的 Nethermind 還在 terminal 視窗裡輸出,你應該能看到好多個 RPC 請求出現:

我們會使用 Lighthouse 來建立用於 Staking 的錢包。建立一個口令檔案(包含你所設定的口令),放到一個你選定的地方。我這裡用的檔案命名為 password.txt,假定把它放在 home 目錄下,你可以根據需要傳入不同的輸入。這裡的錢包我也直接命名為 witti,這只是因為本教程所用的 Witti Lighthouse 使用者必讀檔案中建議這麼做,但實際上你可以隨自己高興來命名。類似地,生成的助記詞檔案我們也直接放到 home 目錄裡面。這樣做其實不安全。只不過,這樣可以讓我寫文章的時候容易一點。我希望你在閱讀的時候能更小心一些,弄清楚自己需要做什麼。

lighthouse account_manager wallet create \
--name “witti” \
--passphrase-file ~/password.txt \
--testnet-dir ~/witti/lighthouse \
--mnemonic-output-path ~/menmonic.txt

這樣做就能生成一個錢包了。你會看到一套由 12 個單片語成的助記詞出現在螢幕上,還附有如何保管助記詞的建議。我就不截圖放出來了,因為,正如一些建議所說:永遠不要跟人分享你的助記詞(譯者注:因為助記詞即意味著對一個賬戶的完全控制權)。

下一步我們要建立一個驗證者賬戶。

lighthouse account_manager validator create \
--at-most 1 \
--testnet-dir ~/witti/lighthouse \
--wallet-name “witti” \
--wallet-passphrase ~/password.txt

這時會產生一串 16 進位制的數字。

現在我們需要為我們的驗證者存入保證金。基本上有兩種辦法,要麼用 MetaMask,要麼用 Nethermind CLI。

使用 MetaMask:你先要將 MetaMask 連線到你的節點,就是在右上角選擇所用網路的下拉選項裡選擇 localhose:8545(如果你使用的是另一個埠,你就需要選擇 “Custon RPC(自定義 PRC)”,然後輸入你的埠號)。你也可以在選項裡直接選擇 Goerli 測試網,不過,你明明自己電腦上已經有一個 Goerli 節點了,為什麼還要去用 Infura 的節點呢?

你需要存入至少 32 GoETH(也就是 Goerli 測試網上的 ETH,沒有實際價值),才能成為驗證者。如果你有 Twitter 或者 Facebook 賬號,你可以使用 https://faucet.goerli.mudit.blog 水龍頭。輸入你的 MetaMask 地址,跟隨指引完成操作即可。要等待一些時間才能收到 GoETH,但應該不會等待超過 1 分鐘。

(譯者注:訪問 https://prylabs.net/participate 這個網站並連線自己的 Metamask 錢包可一次性領到 32 個測試網 ETH。)

在網頁瀏覽器內訪問 Lighthouse 的文件。點選 “upload” 按鈕。Lighthouse 需要的檔案應該放在 ~/.lighthouse/validators/0x... 處,也就是 home 目錄裡一個叫做 .lighthouse 的隱藏資料夾裡(注意那個開頭的 .)。你要找到一個叫做 eth2-deposit-data.rlp 的檔案。上傳這個檔案會生成一筆 MetaMask 交易,傳送 32 GoETH 到 Goerli 測試網上的保證金合約。

(譯者注:使用此方法最好再檢驗一下 MetaMask 交易的目標地址,確保是 Altona 測試網的保證金合約地址。因為現在 Witti 網路已經關閉了)。

使用命令列:首先,需要使用額外的一個引數來啟動 Goerli 節點:

--Init.EnableUnsecuredDevWallet true

在 Nethermind 目錄裡面,啟動 CLI(./Nethermind.Cli),輸入 personal.listAccounts 會給你一個測試賬戶列表。要是沒出現這樣的列表,那這個教程剩下的部分可能也沒法正常執行,那我就要推薦你使用上面的 MetaMask 方法了。如果有用,你可以輸入下列命令列、建立一個新賬戶,password 就是這個賬戶的口令,換成一個你喜歡的就行:

personal.newAccount(“password”)

記下執行這個命令所產生的新地址,使用 https://faucet.goerli.mudit.blog 水龍頭往這個地址裡打錢(需要你用 Twitter 或者 Facebook 賬號給他們做宣傳)。你需要至少 32 GoETH(Goerli 測試網 ETH)才能成為驗證者。你還需要從 Nethermind CLI 中解鎖你的賬號:

personal.unlockAccount({your address}, “{your password}”)

在撰寫本文之時,Lighthouse 仍需要一個 IPC 端點來發起存款,雖然我聽說已經有人提了 PR 要換成 http 端點了。下面這段就是關於如何發起存款交易的一個有根據的猜測:

lighthouse account_manager validator deposit \
--eth2-http http:127.0.0.1:8545 \
--from-address {put your address here without the 0x} \
--testnet-dir ~/witti/lighthouse \
--validator all

信標鏈節點應該一直在同步。你可以在信標鏈同步期間啟動驗證者客戶端,但在完成同步之前,驗證者客戶端什麼都不會幹。我會建議你先等著。完成信標鏈同步之後,軟體的輸出會像下圖所示:

完成同步之後,信標鏈節點也不能關閉,要繼續執行。在新的命令列視窗裡,輸入下列命令以啟動驗證者客戶端:

lighthouse vc –auto-register –testnet-dir ~/witti/lighthouse

只有第一次執行驗證者的時候才需要這些引數,而 --auto-register 如果不是在首次執行時使用甚至還會產生問題,所以,在你需要重啟驗證者客戶端的時候,只要用下面這個簡單的命令就好了:

lighthouse vc

整個教程就是這樣啦。如果你能完整做到這一步,真是恭喜你!你現在執行著信標鏈節點和驗證者客戶端,穩妥地站在以太坊 2.0 的前沿世界裡了。

一些提醒

在本文撰寫之時,Witti 測試網上還沒有驗證者新人的排隊機制,所以當你啟動驗證者之後,馬上就能看到軟體的輸出如下圖:

每隔一段時間,你就會看到不是上圖這樣的另一種輸出,要麼是產生了一條區塊見證訊息(attestation),要麼是釋出了一個新區塊。我還沒看到我的客戶端釋出新區塊的情況,但下面這種就是產生見證訊息時候的場景:

見證訊息的內容是對某個區塊的投票支援。釋出新區塊則是實際上為區塊鏈提議一個新區塊,當然這種機會要少得多。

離線的驗證者會被懲罰,在本文寫作之時(2020 年 6 月),這個懲罰力度被設成很小的值,大概要超過 1 年才會損失掉 32 個 ETH。因此,估計大家也會時不時離線(為了升級、更新等等)。

遵循教程的操作,可能也會有搞不定的情況。你的基本設定可能與我的並不相同,另外,這個領域是全新的,軟體也很稚嫩。所以請求幫助的時候不用覺得不好意思!客戶端團隊基本上都有 discord 頻道,雖然你們可能生活在地球的兩端,但他們其實很樂意幫助你,也很希望能得到反饋。不要害羞啦!

使用其它客戶端

Lighthouse 並不是唯一的以太坊 2.0 客戶端軟體。你可以使用 Nethermind 來同步 Goerli 測試網,再搭配任意的以太坊 2.0 客戶端軟體。本教程只是拿 Lighthouse 來舉例。我們會在下文列舉其它的一些客戶端。

此外,據我所知,你可以同時執行多個以太坊 2.0 客戶端。可能你得自己調整一些預設設定,比如客戶端所用的網路埠;另外就是注意自己的電腦效能夠不夠。不過,不管怎麼做,你只需要一個 Goerli 節點。

Teku 客戶端

Teku 客戶端正式文件:https://docs.teku.pegasys.tech/

Witti Teku 文件:https://github.com/goerli/witti/tree/master/teku

Teku 是一款用 Java 寫成的軟體,由 PegaSys 開發。跟隨這些指令就能安裝 Teku 客戶端軟體(還有 Java SDK)。Teku 的文件假定使用者使用 Besu 客戶端來同步 Goerli 測試網,(但我們這裡告訴你可以用 Nethermind),所以相關的段落是可以跳過的。

我自己沒有嘗試過使用 Teku 配合 Netherminde,但我覺得應該是沒問題的。你需要用 Nethermind 來生成錢包(根據我的理解是這樣),所以你要確保使用 -Init.EnableUnsecuredDevWallet 引數來執行 Nethermind。

Lodestar 客戶端

Lodestar 客戶端的安裝指南見:https://github.com/ChainSafe/lodestar

我也沒有嘗試過使用 Lodestar 配合 Netherminde,但我也覺得問題不大。嘗試的時候多看看 Witti 的文件應該會有所幫助。

Prysm 客戶端

Prysm 測試網指南:https://prylabs.net/participate

Witti(Schlesi)Prysm 文件:https://github.com/goerli/witti/tree/master/prysm

(譯者注:現在 Schlesi 測試網也關停了。Prysm 客戶端團隊發起的最新單客戶端測試網名為 Onyx,不過文件也都是公開的)。

Prysm 執行自己的 Goerli 節點叢集,並使 Prysm 客戶端預設與叢集相連。在寫這篇文章的時候,一些技術問題使得 Prysm 無法連線到 Nethermind 部署在本地的 Goerli 節點。它是最著名的以太坊 2.0 客戶端,所以我覺得我有必要批評幾句。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;