引言

Eth 2.0 迎來了從挖礦到 staking 的範式轉變。Staking 是指鎖定一定數量(目前是 32 個)的以太幣來獲得 “驗證者” 的身份,進而能參與確定哪些區塊能鏈接在鏈上。

當前有許多模擬 Eth 2.0 架構的測試網供大家實驗,其中 staking 功能往往是藉助 Goerli (Eth1.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 –eth1-endpoint http://127.0.0.1:8545

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

- 使用 Lighthouse 同步的信標鏈節點 -

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

- Nethermind Goerli 節點在信標鏈節點同步期間的表現 -

我們會使用 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 的隱藏文件夾裏(注意那個開頭的 . )。你要找到一個叫做 eth1-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 \
--eth1-http http:127.0.0.1:8545 \
--from-address {put your address here without the 0x} \
--testnet-dir ~/witti/lighthouse \
--validator all

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

- 同步好的 Lighthouse 信標鏈節點 -

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

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

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

lighthouse vc

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

一些提醒

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

- Lighthouse 驗證者 -

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

- Lighthouse 驗證者,正在發佈見證消息 -

見證消息的內容是對某個區塊的投票支持。發佈新區塊則是實際上爲區塊鏈提議一個新區塊,當然這種機會要少得多。

離線的驗證者會被懲罰,在本文寫作之時(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 客戶端,所以我覺得我有必要批評幾句。

(完)

原文鏈接: https://medium.com/nethermind-eth/using-nethermind-to-run-a-validator-in-eth2-5c227653e197

作者:William Schwab

翻譯:阿劍

本文由原作者授權 EthFans 翻譯及再出版。

相關文章