來源 | someresat.medium.com
作者 | Somer Esat
提醒:不要按照這個指南與Eth2主網連接。主網指南請參考《以太坊2.0主網質押教學(Ubuntu/Nimbus)》。
本文詳解如何通過多客戶端測試網Pyrmont在以太坊2.0主網質押。主要基於以下幾個技術:
➤ Ubuntu v20.04 (LTS) x64 伺服器
➤ Go Ethereum 節點 (代碼分支)
➤ Status 的以太坊2.0 客戶端,Nimbus (代碼分支)
➤ 正式多客戶端測試網公網,Pyrmont
➤ 瀏覽器插件加密錢包 MetaMask
➤ Prometheus 參數
➤ Grafana 儀錶盤
此篇指南包括以下指令:
➤ 配置一個新運行的Ubuntu伺服器用例
➤ 配置一個以太坊1.0節點並將其作為服務運行
➤ 生成 Pyrmont 驗證者帳戶密鑰並存入資產
➤ 導入 Pyrmont 驗證者帳戶密鑰到 Nimbus 客戶端裡
➤ 給以太坊2.0與 Pyrmont 測試網階段0編譯並配置 Nimbus 客戶端軟體,並把它們作為服務來運行
➤ 安裝和配置 Prometheus 參數,設置一個 Grafana 儀錶盤
本教程參考了網上的各種資料,感謝這些提供資料的貢獻者!
感謝 Nimbus Discord 提供的幫助與審校。
特別感謝 Nimbus 客戶端團隊和以太坊基金會的研究員。他們經過幾年的不懈努力,將我們帶到這難以置信的時刻——Eth2.0成功創世。
此教程僅作教育用途。我不是本文涉及的任何技術的專家。不保證此教程內容的準確性,因遵循此教程而造成的損失,本人概不負責。
歡迎提供反饋!
這個過程可能有些棘手。除了我之外,以下是兩個你可以尋求幫助的好資源 :
➤ EthStaker社區是一個以太坊2.0 Staking 社區,資源豐富且十分友好。
Reddit:https://www.reddit.com/r/ethstaker/
Discord:https://discord.gg/7z8wzehjrJ
➤ Nimbus 客戶端團隊的Discord: https://discord.gg/PBJBuJKfXs,他們是客戶端軟體的工程團隊,是使用 Nimbus 專家。
使用本教程需要對以太坊、ETH、Staking、測試網、Linux 和 MetaMask 有一定的背景知識。
此教程還需要在開始前安裝並運行:
➤ Ubuntu 伺服器 v20.04 (LTS) amd64 或者一個較新的,在本地計算機、你的網絡、或雲端 (AWS、Digital Ocean、Microsoft Azure等)安裝和運行的Ubuntu伺服器。推薦使用本地計算機,以提高網絡的去中心化程度——如果雲端供應商掉線了,那麼託管在這個供應商的節點都會離線。
➤ 已安裝或已配置的瀏覽器插件加密錢包MetaMask。一臺裝有作業系統 (Mac、Windows、Linux等) 和瀏覽器 (Brave、Safari、FireFox等) 的計算機。
我沒有在樹莓Pi上測試過這份教程。如果你想嘗試的話,只需要把下面列出的軟體換成ARM版本。不保證可行。
➤ Ubuntu伺服器用例。我用過v20.04 (LTS) amd64伺服器 VM
➤ 瀏覽器插件加密錢包MetaMask,安裝並配置好
➤ 硬體要求是一個比較大的話題。總的來說:一個相對較新的CPU、8GB內存的RAM (16GB更佳)、一個內存至少 1TB 的SSD 、穩定的網絡(足夠快的下載速度以及月度數據額度),這些性能都會讓質押過程更加安全順暢。
本教程篇幅較長,下面這個圖表簡要說明了質押的步驟,標黃的即是本文會覆蓋到的部分:
整個流程可以概念化表述為:
➤ 設置一個Eth1 節點並同步Eth1 Göerli 測試網的數據;
➤ 生成驗證者密鑰和存款數據;
➤ 配置 Nimbus 客戶端並同步Eth1節點數據
➤ 存入 32 Göerli 測試網 ETH 以激活驗證者密鑰
那我們現在就開始吧!
使用一個SSH埠,連接至你的Ubuntu伺服器。在默認情況下,Ubuntu上的root帳戶通常都是禁用的,然而有些雲提供商可以啟動root帳戶。如果你用root登錄,最好是重新創建一個擁有管理權限的用戶帳戶,因為使用root用戶登錄存在很大的風險。
注意:如果你不是用root登錄的便可以直接跳到第1步。
設置一個密碼並填寫其他信息。
通過把新的用戶加入sudo群組中,來授予其管理權限。
# usermod -aG sudo <yourusername>當你用你的用戶名 <yourusername> 登錄時,可以通過在命令行前輸入sudo,來以超級用戶的權限執行操作。
可選:如果你通過 root 帳戶使用 SSH 密鑰來連接你的 Ubuntu 實例,你將需要使用 root 帳戶的 SSH 密鑰數據來連接新帳戶。
# rsync --archive --chown=<yourusername>:<yourusername> ~/.ssh /home/<yourusername>最後,退出登錄你的root帳戶,然後使用你新創建的用戶名<yourusername>登入Ubuntu伺服器。
確保系統更新至最新的軟體和安全設置。
$ sudo apt update && sudo apt upgrade$ sudo apt dist-upgrade && sudo apt autoremove$ sudo reboot安全性十分重要。但由於本文不是針對安全性的指南,所有只列出了一些基礎的設置:一個防火牆和一個不同的 SSH 埠。
Ubuntu 20.04 伺服器可以使用默認的 UFW 防火牆來限制訪問該伺服器的流量,不過要先設置其允許來自 SSH、Go Ethereum、Grafana、Nimbus 的入站流量。
允許 SSH
允許通過SSH連接到伺服器。為了安全,接下來我們要修改默認埠22 (因為這是一個普遍的攻擊矢量)。
注意:如果你選擇不修改默認SSH埠 (不建議),那就要加一項操作——允許默認SSH埠 *$ sudo ufw allow 22/tcp* ,然後跳到允許「Go Ethereum」這一步。
在1024 — 49151之間選擇一個埠號,然後運行以下命令以檢索尚未使用的埠號。如果顯示紅色 (被使用了),就選擇另一個埠。比如: sudo ss -tulpn | grep ':6673'
$ sudo ss -tulpn | grep ':<yourSSHportnumber>'更新防火牆,允許<yourSSHportnumber> 的入站流量。SSH要求TCP協議。比如:sudo ufw allow 6673/tcp
$ sudo ufw allow <yourSSHportnumber>/tcp下一步,修改默認SSH埠。
$ sudo nano /etc/ssh/sshd_config找到默認埠# Port 22 或Port 22,然後修改你自己的埠號 Port <yourSSHportnumber>。刪掉 # (如果有的話)。參考下方的截圖,你的文檔應該和下圖展示的類似 (除了埠號不一樣)。保存然後退出。
重啟SSH服務。
$ sudo systemctl restart ssh下次你通過SSH登錄時就使用你的埠號 <yourSSHportnumber> 。
可選:如果你已經使用埠 22/TCP 的UFW了,那就更新防火牆以拒絕該埠的入站流量。請務必在你使用新SSH埠登錄之後在操作這一步。
允許 Go Ethereum
允許來自Go Ethereum對等節點 (埠30303/TPC 和 30303/UDP) 的入站請求。如果你使用第三方 (如Infura) 託管的 Eth1 節點,則可以跳過這一步。
注意:如果你在本地託管你的Ubuntu伺服器,你需要配置你的網絡路由以允許來自埠 30303 的入站流量。
允許 Nimbus
允許與 Nimbus 的對等節點進行點對點連接,以便在信標鏈節點上 (埠9000/TCP 和 9000/UDP) 進行操作。.
注意:如果你在本地託管你的Ubuntu伺服器,你需要配置你的網絡路由和防火牆以允許來自該埠的入站流量。
允許 Grafana
允許訪問Grafana web 伺服器 (埠3000/TCP) 的入站請求。
$ sudo ufw allow 3000/tcp允許 Prometheus (可選)
如果你想直接訪問Prometheus數據服務,你也可以打開埠9090/TCP。如果你僅使用Grafana查看數據,則沒有必要這樣做。我沒有打開這個埠。.
$ sudo ufw allow 9090/tcp啟動防火牆,檢查是否已經正確配置。
$ sudo ufw enable$ sudo ufw status numbered顯示應該是這樣的
Ubuntu 內置了時間同步,並默認使用 systemd『s timesyncd 服務進行激活。驗證其是否正確運行。
激活 NTP service ,運行方式:
$ sudo timedatectl set-ntp on參考下方的截圖:
安裝並配置Eth1.0的節點,Nimbus 信標鏈將與該節點相連。如果你選擇第三方服務 (如Infura) 的話,可以跳過這一步。
建議使用PPA (Personal Package Archives,個人安裝包存檔) 安裝Go Ethereum客戶端。
$ sudo add-apt-repository -y ppa:ethereum/ethereum更新軟體包並安裝最新的穩定版本。
$ sudo apt update$ sudo apt install geth運行該服務需要創建一個帳戶,此種類型的帳戶無法登錄伺服器。
$ sudo useradd --no-create-home --shell /bin/false goeth為Eth1區塊鏈創建數據目錄,用來存儲Eth1節點數據。選擇 -p 選項以創建完整路徑。
$ sudo mkdir -p /var/lib/goethereum設置目錄的權限。goeth 帳戶需要權限來修改該數據目錄。
$ sudo chown -R goeth:goeth /var/lib/goethereum創建一個systemd服務文件來儲存該服務配置。我們將使用該配置文件來命令systemd運行geth 進程。
$ sudo nano /etc/systemd/system/geth.service將下列的服務配置複製粘貼到文檔中。
[Unit]Description=Ethereum go clientAfter=network.target Wants=network.target[Service]User=goeth Group=goethType=simpleRestart=alwaysRestartSec=5ExecStart=geth --goerli --ws --datadir /var/lib/goethereum[Install]WantedBy=default.targetflag --goerli 用於定位 Göerli 測試網,而flag --ws 用來公開與信標鏈節點連接的一個web socket埠 (ws://127.0.0.1:8546) 。
參考下方的截圖。保存然後退出。
重新加載 systemd 以顯示上述的更改。
$ sudo systemctl daemon-reload啟動服務,並檢查確保其正常運行。
$ sudo systemctl start geth$ sudo systemctl status geth顯示應如下方截圖。
如果你每一步都做對了,它會用綠色字體顯示」active (running)"。如果沒有顯示,你需要倒回去重複上述步驟,修復問題。按Q退出。
允許geth服務在系統重啟時自動啟動。
$ sudo systemctl enable gethGo Ethereum節點將會開始同步。你可以運行 journal 命令來追蹤進程。按「CTRL+c」退出。
$ sudo journalctl -f -u geth.service當你花較長的時間來找到需要同步的對等節點時,你可以添加一些對等節點。訪問此處以獲得最新的清單,並操作下列命令行以修改geth服務:
$ sudo systemctl stop geth$ sudo nano /etc/systemd/system/geth.service修改 ExecStart 行,添加 --bootnodes flag:在下方羅列出最新的對等點,並以逗號分割。
ExecStart=geth --goerli --http --datadir /var/lib/goethereum --bootnodes "enode://46add44b9f13965f7b9875ac6b85f016f341012d84f975377573800a863526f4da19ae2c620ec73d11591fa9510e992ecc03ad0751f53cc02f7c7ed6d55c7291@94.237.54.114:30313,enode://119f66b04772e8d2e9d352b81a15aa49d565590bfc9a80fe732706919f8ccd00a471cf8433e398c55c4862aadb4aadf3a010201483b87e8358951698aa0b6f07@13.250.50.139:30303"保存文件之後退出。然後重啟服務並觀察。
$ sudo systemctl daemon-reload$ sudo systemctl start geth$ sudo journalctl -f -u geth.service啟動後顯示應該類似下方截圖:
在運行信標鏈之前,你需要等待節點同步完成。點擊此處訪問最新的區塊。
比如,上方截圖顯示了節點正在處理區塊 number=43756 ,再看看下方截圖,顯示最新的區塊是 3196411。也就是說,我們還有一段時間才能完成同步。
接下來,我們將準備驗證者存款數據。如果你想查看同步狀態,你可以在任意時間運行命令 sudo journalctl -fu geth.service 以查看。
為了能在Eth2.0 Pyrmont測試網上運行驗證者節點,我們將需要註冊一個或多個驗證者帳戶。
注意:如果你已經生成了你的存款數據並提交了你的質押存款,你可以跳過這一步。如果你是在別處生成的,你需要複製你的驗證者密鑰到這個伺服器上。
註冊步驟如下:
➤ 獲取Göerli ETH
➤ 生成驗證者密鑰。一個密鑰代表一個驗證者帳戶。
➤ 向每個驗證者帳戶各存入32個Göerli ETH
➤ 等候你的驗證者帳戶被激活
那我們現在就開始吧!
➤ 使用已經安裝了瀏覽器插件MetaMask的計算機。
➤ 點擊MetaMask然後登錄
➤ 點擊頂部的下拉菜單,選擇Göerli 測試網絡
➤ 點擊帳戶名,複製你的Göerli 測試網錢包地址
➤ 使用你的地址從authenticated faucet獲取Göerli ETH,或者通過在 ethstaker Discord上的#request-goerli-eth頻道使用機器人命令:!goerliEth <yourwalletaddress>。
注意:一個驗證者需要一筆32個ETH的存款。你的MetaMask錢包需要有充足的 Göerli ETH存進每個驗證者客戶端裡。例如,如果你想要運行10個驗證者,拿你就需要320個Göerli ETH以及一些額外的錢 (比如1個Göerli ETH) 來支付gas費。
接下來我們要生成存款數據和驗證者密鑰。Nimbus 驗證者客戶端支持多個驗證者密鑰。在Pyrmont測試網上基本上一個驗證者密鑰代表一個「驗證者帳戶」。存款數據中包含你的質押信息 (如驗證者密鑰清單等)
注意:如果在主網上進行質押,最好是用一臺完全沒有連接過網絡的機器,以防洩漏助記詞。
在「asset"一欄複製這個連結到Linux版本。我們將使用該連結來下載它,如下所示。修改指令裡的URL名為最新版本的下載連結。
$ cd ~$ sudo apt install curl$ curl -LO https://github.com/ethereum/eth2.0-deposit-cli/releases/download/v1.1.0/eth2deposit-cli-ed5a6d3-linux-amd64.tar.gz打開tar存檔並去到其創建的目錄。
$ sudo tar xvf eth2deposit-cli-ed5a6d3-linux-amd64.tar.gz$ cd eth2deposit-cli-ed5a6d3-linux-amd64運行應用來生成存款數據和驗證者密鑰。
將<numberofvalidators>修改為你想要創建的驗證者密鑰數。例如:--num_validators 5
$ sudo ./deposit new-mnemonic --num_validators <numberofvalidators> --mnemonic_language=english --chain pyrmont它會要求你創建一個錢包密碼。我們將使用它來將驗證者密鑰加載到 Nimbus 客戶端的驗證者錢包。把它備份到安全的地方。
它會生成一個種子短語 (助記符)。把它備份到其他地方。這很重要,你將需要它來生成提款密鑰或者添加驗證者。
一旦你已經確認了你的助記符,你的驗證者密鑰就會被創建。
新創建的驗證者密鑰和存款數據文檔會在一個特定地方被創建。比如:eth2deposit-cli-ed5a6d3-linux-amd64/validator_keys 。標記一下,我們待會會用到。
文件夾的內容見下:
deposit_data-[timestamp].json文檔包含了驗證者的公鑰和存款的相關信息。這個文檔會在下一步用來完成存款進程。由於我們是在一個伺服器上,而沒有一個網絡瀏覽器,因此要使用secure FTP (SFTP) 把文檔遷移到一部運行MetaMask的計算機上。記得先完成這一步再繼續。
keystore-m...json文檔包含加密的籤名密鑰。每個驗證者帳戶都有一個 keystore-m。這些會被用來創建 Nimbus 客戶端驗證者錢包。
通過刪除下載的tar存檔文件進行清理。
$ cd ~$ rm -rf eth2deposit-cli-ed5a6d3-linux-amd64.tar.gz現在你已經有了存款數據和密鑰存儲文件,接下來就可以設置 Nimbus 了。我們要先把資產存入密鑰中 (存入Göerli ETH以激活驗證者)再設置 Nimbus,這樣我們就可以首先驗證設置了。如果驗證者存款被激活了,但系統沒準備好的話,我們會受到怠工懲罰。
構建 Nimbus 客戶端需要一些開發依賴工具 (C compiler、Maker、Bash、Git)。
$ sudo apt-get install build-essential git現在我們準備好構建 Nimbus 了。Nimbus 生成一個 nimbus_beacon_node 二進位文件。我們通過輸入不同的子命令或 flags 來執行該二進位文件以獲得我們需要的功能。比如:nimbus_beacon_node deposits import可以將驗證者密鑰導入到客戶端錢包中。輸入nimbus_beacon_node --network=pyrmont 可以運行與 Prymont 網絡連接的一個信標節點實例。
$ cd ~$ git clone https://github.com/status-im/nimbus-eth2$ cd nimbus-eth2使用 Make 來編譯Nimbus 二進位文件。我們在參數功能中包含 flag -d:insecure 來進行編譯。
$ make NIMFLAGS="-d:insecure" nimbus_beacon_node顯示應如下圖:
構建時間長短取決於你的硬體設備狀況。是時候喝點飲料補充補充水分了。也可以閱讀我其他的文章。
如果都操作成功了請繼續,如果操作失敗了請求助 Nimbus Discord :
https://discord.gg/PBJBuJKfXs接下來複製粘貼已編譯的二進位文件 nimbus_beacon_node 至目錄 /usr/local/bin 中,Nimbus 服務將在那運行。
注意:每一次你拉取或構建一個新版本 nimbus_beacon_node 二進位文件,你都需要做這一步。請看此教程的最後附錄 —— Nimbus更新。
$ sudo cp /$HOME/nimbus-eth2/build/nimbus_beacon_node /usr/local/bin通過導入在上一步創建的keystore-m JSON文檔創建驗證者錢包。
首先,創建一個目錄來儲存驗證者數據,並給當前用戶權限來訪問數據。當前用戶需要權限,因為他們需要執行導入。在 <yourusername> 修改登入用戶名。
$ sudo mkdir -p /var/lib/nimbus$ sudo chown -R <yourusername>:<yourusername> /var/lib/nimbus在文件夾設置正確的權限,這一步在錢包創建過程中執行。把權限應用到數據文件夾。
$ sudo chmod 700 /var/lib/nimbus$ ls -dl /var/lib/nimbus顯示內容如下:
接下來,運行驗證者密鑰導入,使用nimbus_beacon_node deposits import 功能。我們需要提供生成的keystore-m文檔所在位置的目錄。例如:$HOME/eth2deposit-cli-ed5a6d3-linux-amd64/validator_keys。
$ cd ~$ cd nimbus-eth2$ build/nimbus_beacon_node deposits import --data-dir=/var/lib/nimbus $HOME/eth2deposit-cli-ed5a6d3-linux-amd64/validator_keysflag--data-dir指定錢包數據輸出的位置。
你會被要求提供驗證者密鑰的密碼。這個密碼是你在第5步設置的。
這一步完成了!現在驗證者密鑰已經導入,我們將把Nimbus客戶端作為服務來設置。
我們將把Nimbus客戶端作為服務來運行,因此如果系統重啟,這個進程將自動重新開始。
為信標節點與驗證者節點的運行創建一個帳戶。這種類型的帳戶不能用來登錄進入伺服器。
$ sudo useradd --no-create-home --shell /bin/false nimbus設置目錄權限。我們在前一步創建了一個數據目錄(/var/lib/nimbus)。nimbus 帳戶需要修改數目目錄的權限。
$ sudo chown -R nimbus:nimbus /var/lib/nimbus$ ls -dl /var/lib/nimbus你的用戶帳戶不能再訪問目錄了。顯示應如下:
創建一個systemd服務文檔來儲存配置服務。
$ sudo nano /etc/systemd/system/nimbus.service將下面這段代碼複製粘貼到文檔裡
[Unit]Description=Nimbus Beacon NodeWants=network-online.targetAfter=network-online.target[Service]Type=simpleUser=nimbusGroup=nimbusRestart=alwaysWorkingDirectory=/var/lib/nimbusEnvironment="ClientIP=$(curl -s v4.ident.me)"ExecStart=/bin/bash -c '/usr/local/bin/nimbus_beacon_node --network=pyrmont --data-dir=/var/lib/nimbus --web3-url=ws://127.0.0.1:8546 --metrics --metrics-port=8008 --rpc --rpc-port=9091 --nat=extip:${ClientIP} --validators-dir=/var/lib/nimbus/validators --secrets-dir=/var/lib/nimbus/secrets --log-level=INFO --log-file=/var/lib/nimbus/beacon_node.log'[Install]WantedBy=multi-user.target如果你使用的是一個遠程的或第三方Eth1節點,你需要修改--web3-url。如果你是在本地創建Eth1節點 (從第4步),你不需要修改這個值。
提供的flag如下:
➤ --network——客戶端連接的網絡。在這裡就是Pyrmont。
➤ --data-dir——儲存信標節點和驗證者數據的目錄。
➤ --web3-url——指向Eth1節點 (本地或遠程的)的web socket (ws) 的URL。
➤ --metrics——開啟數據伺服器。
➤ --metrics-port——冗餘,因為它被設為默認值,但為了方便還是把它包含在內。必須與在Prometheus 的配置文檔裡的Nimbus數據相匹配。
➤ --rpc——開啟RPC API
➤ --rpc-port——需要避免與Prometheus衝突
➤ --nat ——你的伺服器的外部IP位址。我們使用環境變量 Environment="ClientIP=$(curl -s v4.ident.me)"來獲取客戶端IP位址,因為 ExecStart不允許內聯調用。用--nat=extip:${ClientIP}就能解決問題。
➤ --validators-dir ——驗證者密鑰數據所在的目錄。
➤ --secrets-dir——驗證者密鑰秘密所在的目錄。
➤ --log-level——日誌記錄的詳細程度。INFO用作表示性能。
➤ --log-file——是所需,這樣服務才能創建日誌文檔。路徑必須與服務的WorkingDirectory匹配。
參看下方截圖。你的文檔應該如此。退出並保存。
重新加載systemd以顯示更改。
$ sudo systemctl daemon-reload注意:如果你是運行本地的Eth1節點(看第4步),你應該等待至它完全同步完數據再啟動Teku服務。在這裡查看進程:*sudo journalctl -fu geth.service*
啟動服務並檢查,確保運行正確。
$ sudo systemctl start nimbus$ sudo systemctl status nimbus顯示的結果應該是這樣:
如果你每一步都做對了,它會用綠色字體顯示」active (running)"。如果沒有顯示,你需要倒回去重複上述步驟,修復問題。按Q退出。
允許服務隨系統重啟而自動重啟。
$ sudo systemctl enable nimbus信標節點將開始同步數據。它可能要花幾個小時才能完全實現同步。你可以通過運行journal命令來追蹤進程。按CTRL+c退出。
$ sudo journalctl -fu nimbus.service日誌輸出類似於這樣:
Nov 24 22:25:56 ETH-STAKER-001 bash[65560]: INF 2020-11-24 22:25:31.197+00:00 Slot start topics="beacnde" tid=65560 file=nimbus_beacon_node.nim:473 lastSlot=46326 scheduledSlot=46327 beaconTime=6d10h25m24s197ms907us264ns peers=1 head=1e6df25a:242 headEpoch=7 finalized=542c17b2:128 finalizedEpoch=4Nov 24 22:25:56 ETH-STAKER-001 bash[65560]: NOT 2020-11-24 22:25:31.203+00:00 Syncing in progress; skipping validator duties for now topics="beacval" tid=65560 file=validator_duties.nim:519 slot=46327 headSlot=242Nov 24 22:25:56 ETH-STAKER-001 bash[65560]: INF 2020-11-24 22:25:31.203+00:00 Slot end topics="beacnde" tid=65560 file=nimbus_beacon_node.nim:559 slot=46327 nextSlot=46328 head=1e6df25a:242 headEpoch=7 finalizedHead=542c17b2:128 finalizedEpoch=4Nov 24 22:25:56 ETH-STAKER-001 bash[65560]: NOT 2020-11-24 22:25:34.396+00:00 Reached new finalization checkpoint topics="chaindag" tid=65560 file=chain_dag.nim:910 finalizedHead=6ad92bbe:189@192 heads=1 newHead=23e933aa:256如果想知道當前epoch與headEpoch的距離,你可以在pyrmont.beaconcha.in查看比較。
例如,上面的日誌輸出顯示現節現在正在處理headEpoch: 7,然後看下面截圖的地方,你會看到最新一個epoch是23582。基於此,我們知道離完成數據同步還需要一些時間。
現在你的信標鏈已經作為服務來運行了。恭喜!
注意:當信標節點完全同步之後,驗證者客戶端會自動開始證明/提議區塊。
你可以通過 pyrmont.beaconcha.in查看你的驗證者狀態,只需搜索你的驗證者公鑰或用你的MetaMask錢包地址搜索。可能要過一段時間你的信息才會出現在網站上。
現在你的設置已經完成並在運行中了,你需要給Pyrmont測試網存入32個Göerli ETH。
注意:如果你已經提交了你的質押存款,你可以跳過這一步。
這一步是關於將所需的Göerli ETH存入Pyrmont測試網的存款合約。這需要在瀏覽器上通過Pyrmont的Launchpad網站啟動你的MetaMask (或其他) 錢包。
注意:如果這份教程是用於主網 (它不是),你需要等到你的Eth1節點和信標節點完全同步完再開存入你的存款。如果你不這樣做,當你的Eth1節點或信標鏈在同步時,你可能要遭遇怠工懲罰。
Pyrmont測試網的
Launchpad:https://pyrmont.launchpad.ethereum.org/
一直隨著屏幕切換點擊這些警告步驟,直到你到達密鑰對生成的部分。選擇你打算運行的驗證者數量。選擇一個與你在步驟5中生成的驗證者文件數量相匹配的值。
往下滾動,看這些內容你是否同意,然後點擊「Continue」 (繼續)。
你會被要求上傳deposit_data-[timestamp].json文檔。這個文檔你是在之氣生成的,把它複製到有瀏覽器的計算機裡。瀏覽/選擇或拖拉這個文檔,然後點擊Continue。
連接你的錢包。選擇MetaMask (或者是其他支持的錢包),登錄,選擇存有你的Göerli ETH的Göerli測試網絡,然後點擊Continue。
注意:請100%確定你在MetaMask上選的是Göerli測試網絡。不要把真的ETH發送到 Pyrmont測試網。
你的MetaMask餘額就會顯示出來。如果你選擇了Göerli測試網絡且你有充足的Göerli ETH餘額,網站會允許你繼續下一步。
然後會出現一個Summary (總結),顯示驗證者數和所需的Göerli ETH數量。如果你同意的話就給那些方框打勾,然後點擊Continue。
點擊"Initiate All Transactions" (啟動所有交易)。
會有多個MetaMask實例彈出,每個都對Pyrmont測試網提出一個32個Göerli ETH的交易請求。請確認每一筆交易。
在最後會有一個清單。裡面有非常多有用信息。可以看一下
新加入的驗證者需要等一下 (幾個小時到幾天不等)才能激活。你可以以下幾步來查看你的密鑰狀態:
1. 複製你的Göerli測試網錢包地址
2. 前往:https://pyrmont.beaconcha.in/
3. 搜索你的錢包地址。你的密鑰會顯示出來。
點進某個驗證者詳情,每個驗證者激活後你會看到在Status那一欄有預估時間。
現在你面前有一個條正在運作的信標鏈、一個驗證者節點以及你的測試網存款。一旦你的存款被激活,你將開始工作並賺取收益。恭喜你!
Prometheus是一個提供監測功能和警報工具箱的開源系統。它在你的Ubuntu伺服器上作為一個服務來運行,而它的職責就是去抓取數據。更多信息請看這裡。
我們會使用Prometheus公開信標鏈、驗證者的運行時數據和特定實例數據。
這些服務是在帳戶下運行的。這些帳戶不能登錄到伺服器。
$ sudo useradd --no-create-home --shell /bin/false prometheus$ sudo useradd --no-create-home --shell /bin/false node_exporter程序與數據目錄。
$ sudo mkdir /etc/prometheus$ sudo mkdir /var/lib/prometheus設置目錄的所有權。prometheus帳戶會管理這些。
$ sudo chown -R prometheus:prometheus /etc/prometheus$ sudo chown -R prometheus:prometheus /var/lib/prometheus從Prometheus下載頁面修改最新版本的版本號。Rpi用戶一定要獲取ARM二進位文檔。
$ cd ~$ curl -LO https://github.com/prometheus/prometheus/releases/download/v2.22.2/prometheus-2.22.2.linux-amd64.tar.gz打開tar存檔。它包含兩個二進位文檔和一些內容文檔。
$ tar xvf prometheus-2.22.2.linux-amd64.tar.gz複製二進位文檔到下列位置。
$ sudo cp prometheus-2.22.2.linux-amd64/prometheus /usr/local/bin/$ sudo cp prometheus-2.22.2.linux-amd64/promtool /usr/local/bin/設置目錄的所有權。prometheus帳戶會管理這些。
$ sudo chown -R prometheus:prometheus /usr/local/bin/prometheus$ sudo chown -R prometheus:prometheus /usr/local/bin/promtool複製這些內容文檔到下列位置。
$ sudo cp -r prometheus-2.22.2.linux-amd64/consoles /etc/prometheus$ sudo cp -r prometheus-2.22.2.linux-amd64/console_libraries /etc/prometheus設置目錄和文檔 (-R) 的所有權。prometheus帳戶會管理這些。
$ sudo chown -R prometheus:prometheus /etc/prometheus/consoles$ sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries移除下載存檔。
$ rm -rf prometheus-2.22.2.linux-amd64.tar.gz prometheus-2.22.2.linux-amd64Prometheus使用一個配置文檔,這樣它就知道去哪裡獲取數據。
打開YAML配置文檔來編輯。
$ sudo nano /etc/prometheus/prometheus.yml複製下面的代碼到文檔,注意不要進行任何其他編輯,並退出保存文件。
global: scrape_interval: 15s evaluation_interval: 15sscrape_configs: - job_name: 'nimbus' static_configs: - targets: ['localhost:8008'] - job_name: 'node_exporter' static_configs: - targets: ['localhost:9100']scrape_config對不同的分工名稱給出定義。我們有三個分工名稱:validator (驗證者)、beacon node (信標節點) 和node_exporter。前兩個的職責很明顯,最後一個是用作與伺服器用例本身 (內存、CPU、磁碟、網絡等) 相關的數據。我們將在下面安裝並配置node_exporter。
給config文檔設置所有權。prometheus帳戶將擁有這個所有權。
$ sudo chown -R prometheus:prometheus /etc/prometheus/prometheus.yml最後,測試伺服器是否運行正確。
$ sudo -u prometheus /usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries輸出應該如下。按Ctrl + C退出。
level=info ts=2020-09-12T22:16:21.179Z caller=web.go:524 component=web msg="Start listening for connections" address=0.0.0.0:9090level=info ts=2020-09-12T22:16:21.181Z caller=main.go:700 fs_type=EXT4_SUPER_MAGIClevel=info ts=2020-09-12T22:16:21.181Z caller=main.go:701 msg="TSDB started"level=info ts=2020-09-12T22:16:21.182Z caller=main.go:805 msg="Loading configuration file" filename=/etc/prometheus/prometheus.ymllevel=info ts=2020-09-12T22:16:21.182Z caller=main.go:833 msg="Completed loading of configuration file" filename=/etc/prometheus/prometheus.ymllevel=info ts=2020-09-12T22:16:21.183Z caller=main.go:652 msg="Server is ready to receive web requests."創建一個systemd服務文檔來保存服務配置,它會告訴systemd文檔把Prometheus作為prometheus用戶來運行,配置文檔在目錄的保存路徑為/etc/prometheus/prometheus.yml,並把數據保存在目錄的這裡/var/lib/prometheus .
$ sudo nano /etc/systemd/system/prometheus.service將下面的代碼複製粘貼到文檔。退出並保存。
[Unit]Description=PrometheusWants=network-online.targetAfter=network-online.target[Service]Type=simpleUser=prometheusGroup=prometheusRestart=alwaysRestartSec=5ExecStart=/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries[Install]WantedBy=multi-user.target重新加載systemd以顯示更改。
$ sudo systemctl daemon-reload然後用下面的命令來啟動服務,並查看狀態以確保運行正確。
$ sudo systemctl start prometheus$ sudo systemctl status prometheus輸出應該如下圖:
如果你每一步都做對了,它會用綠色字體顯示」active (running)"。如果沒有顯示,你需要倒回去重複上述步驟,修復問題。按Q退出 。
最後,允許Prometheus隨系統啟動而啟動。
$ sudo systemctl enable prometheusPrometheus會提供關於信標鏈和驗證者的數據。如果我們想要我們Ubuntu用例的數據,我們需要一個叫Node_Exporter的extension。如果你在下面指定其他版本,你可以在這裡找到最新的穩定版本。Rpi用戶記得要獲取ARM二進位文檔。
$ cd ~$ curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz打開下載了的軟體。
$ tar xvf node_exporter-1.0.1.linux-amd64.tar.gz複製二進位文檔到目錄/usr/local/bin,並設置用戶與群組對我們在前面創建的node_exporter用戶的所有權。
$ sudo cp node_exporter-1.0.1.linux-amd64/node_exporter /usr/local/bin$ sudo chown -R node_exporter:node_exporter /usr/local/bin/node_exporter移除下載了的存檔。
$ rm -rf node_exporter-1.0.1.linux-amd64.tar.gz node_exporter-1.0.1.linux-amd64創建一個systemd服務文檔來儲存服務config文檔,它會告訴systemd把Node_Exporter 作為node_exporter用戶來運行。
$ sudo nano /etc/systemd/system/node_exporter.service複製下列代碼到文檔。退出並保存。
[Unit]Description=Node ExporterWants=network-online.targetAfter=network-online.target[Service]User=node_exporterGroup=node_exporterType=simpleExecStart=/usr/local/bin/node_exporter[Install]WantedBy=multi-user.target重新加載systemd以顯示更改。
$ sudo systemctl daemon-reload然後按下面的命令啟動服務並檢查狀態,確保運行正確。
$ sudo systemctl start node_exporter$ sudo systemctl status node_exporter輸出應該如下圖。
如果你每一步都做對了,它會用綠色字體顯示」active (running)"。如果沒有顯示,你需要倒回去重複上述步驟,修復問題。按Q退出 。
最後,允許Node Exporter隨系統啟動而啟動。
$ sudo systemctl enable node_exporter測試Prometheus和Node Exporter (可選)
所有東西都準備就緒了。通過在防火牆打開一個埠 (請參閱步驟2)和瀏覽http://<yourserverip>:9090你可以有選擇性地測試它的功能。在那裡你可以運行查詢以查看不同的數據。例如,你可以試這個查詢來看還有多少可用內存:
Prometheus是我們的數據來源,而Grafana則給我們提供報告儀錶盤數據的功能。接下來安裝Grafana並配置儀錶盤。
我們會用一個APT倉庫來安裝,因為這會使得安裝和更新更簡單。Grafana可以在官方的Ubuntu軟體包倉庫中找到,但那個版本可能不是最新的,因此我們將使用Grafana的官方倉庫。
用wget下載Grafana GPG的密鑰,然後將輸出傳送到apt-key。這會將密鑰添加到你的APT安裝的信任密鑰列表中。
$ wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -把Grafana倉庫加到APT的來源裡。
$ sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"刷新apt緩存。
確認Grafana是從倉庫安裝的。
$ apt-cache policy grafana輸出應該如下:
grafana: Installed: (none) Candidate: 7.3.3 Version table: 7.3.3 500 500 https://packages.grafana.com/oss/deb stable/main amd64 Packages 7.3.2 500 500 https://packages.grafana.com/oss/deb stable/main amd64 Packages 7.3.1 500 500 https://packages.grafana.com/oss/deb stable/main amd64 ...檢查頂部顯示的版本是否與這裡顯示的最新版本一致。然後繼續安裝。
$ sudo apt install grafana啟動Grafana伺服器和檢查狀態,確保運行正確。
$ sudo systemctl start grafana-server$ sudo systemctl status grafana-server輸出應該如下圖:
如果你每一步都做對了,它會用綠色字體顯示」active (running)"。如果沒有顯示,你需要倒回去重複上述步驟,修復問題。按Q退出。
允許Grafana隨系統啟動而啟動。
$ sudo systemctl enable grafana-server能做到這一步已經很棒了!現在一切都設置好並開始運行了,你可以在瀏覽器裡前往http://<yourserverip>:3000/,會出現Grafana的登錄窗口。
在admin輸入用戶名和密碼。系統會讓你修改密碼,請務必修改。
讓我們配置數據來源吧。把你的滑鼠移至左邊菜單欄的齒輪圖標處,會彈出一個菜單——選擇Data Sources。
點擊 Add Data Source,然後選擇Prometheus。在URL輸入http://localhost:9090,然後點擊 Save and Test。
現在開始導入儀錶盤。移動你的滑鼠到左邊菜單欄的+圖標,會有一個菜單彈出,選擇 Import。
從這裡(從原始數據)複製粘貼JSON,點擊Load,然後 Import。你應該可以看到儀錶盤。
注意:很明顯這是個非常基礎的儀錶盤。該團隊正在努力加入更多的數據 (比如:驗證者數、每個驗證者的證明量、每個驗證者的提議量、每個驗證者的餘額等)。現在官方的儀錶盤還在開發中,請看這裡。
你還可以在Telegram和Discord看到警報信息。這裡是有指引。
如果因為Git倉庫的修改你需要更新代碼,請按這些步驟來獲取最新的文檔並構建你的二進位文檔。
$ cd ~$ cd nimbus-eth2$ git pull$ make update$ make NIMFLAGS="-d:insecure" nimbus_beacon_node接下來,我們會停止信標鏈和驗證者服務,並複製粘貼二進位文檔到目錄/usr/local/bin,然後再次啟動服務。
$ sudo systemctl stop nimbus$ sudo cp /$HOME/nimbus-eth2/build/nimbus_beacon_node /usr/local/bin$ sudo systemctl start nimbus$ sudo systemctl status nimbus $ sudo journalctl -fu nimbus.service完成了!服務已經更新好了。
如果你需要更新到最新版本的Geth,請按以下步驟:
$ sudo systemctl stop geth$ sudo systemctl stop nimbus$ sudo apt update && upgrade$ sudo systemctl start geth$ sudo systemctl status geth $ sudo journalctl -f -u geth $ sudo systemctl start nimbus$ sudo systemctl status nimbus $ sudo journalctl -f -u nimbus.service點擊「閱讀原文」獲取文章內部連結!
原文連結:https://someresat.medium.com/guide-to-staking-on-ethereum-2-0-ubuntu-pyrmont-nimbus-e6592c110843
ECN的翻譯工作旨在為中國以太坊社區傳遞優質資訊和學習資源,文章版權歸原作者所有,轉載須註明原文出處以及ETH中文站。若需長期轉載,請聯繫eth@ecn.co進行授權。