在 Raspberry Pi 4 上執行以太坊節點
Ethereum on Arm 是一個自訂的 Linux 映像檔,可以將 Raspberry Pi 變成一個以太坊節點。
若要使用 Ethereum on Arm 將 Raspberry Pi 變成以太坊節點,建議使用以下硬體:
- Raspberry Pi 4(B 型 8GB)、Odroid M1 或 Rock 5B(8GB/16GB RAM)開發板
- MicroSD 記憶卡(最低 16 GB Class 10)
- 至少 2 TB 的 SSD USB 3.0 磁碟,或帶有 USB 轉 SATA 外接盒的 SSD。
- 電源供應器
- 乙太網路線
- 通訊埠轉發(詳情請參閱客戶端說明)
- 附散熱片與風扇的外殼
- USB 鍵盤、螢幕與 HDMI 線(micro-HDMI)(選用)
為什麼要在 ARM 上執行以太坊?
ARM 開發板是非常實惠、靈活且小巧的電腦。它們是執行以太坊節點的絕佳選擇,因為它們價格低廉,可以設定為將所有資源集中在節點上以提高效率,耗電量低,而且體積小巧,可以毫不突兀地放置在任何家庭中。啟動節點也非常容易,因為只需將預先建置的映像檔燒錄到 Raspberry Pi 的 MicroSD 卡中,無需下載或建置軟體。
它是如何運作的?
Raspberry Pi 的記憶卡會燒錄一個預先建置的映像檔。這個映像檔包含執行以太坊節點所需的一切。有了燒錄好的記憶卡,使用者只需開啟 Raspberry Pi 的電源即可。執行節點所需的所有程序都會自動啟動。這是因為記憶卡包含一個基於 Linux 的作業系統 (OS),在該系統之上會自動執行系統級程序,將裝置變成一個以太坊節點。
以太坊無法使用廣受歡迎的 Raspberry Pi Linux 作業系統「Raspbian」來執行,因為 Raspbian 仍使用 32 位元架構,這會導致以太坊使用者遇到記憶體問題,而且共識客戶端不支援 32 位元二進位檔。為了解決這個問題,Ethereum on Arm 團隊遷移到名為「Armbian」的原生 64 位元作業系統。
映像檔會處理所有必要的步驟,從設定環境、格式化 SSD 磁碟,到安裝與執行以太坊軟體,以及啟動區塊鏈同步。
關於執行客戶端與共識客戶端的注意事項
Ethereum on Arm 映像檔包含預先建置的執行客戶端與共識客戶端作為服務。以太坊節點需要這兩個客戶端都處於同步且執行的狀態。你只需要下載並燒錄映像檔,然後啟動服務即可。該映像檔預先載入了以下執行客戶端:
- Geth
- 奈瑟邁 (Nethermind)
- 貝蘇 (Besu)
以及以下共識客戶端:
- 萊特豪斯 (Lighthouse)
- 寧布斯 (Nimbus)
- 普萊斯姆 (Prysm)
- 泰庫 (Teku)
你應該各選擇一個來執行——所有執行客戶端都與所有共識客戶端相容。如果你沒有明確選擇客戶端,節點將退回使用預設值(Geth 和萊特豪斯 (Lighthouse)),並在開發板通電時自動執行它們。你必須在路由器上開啟通訊埠 30303,以便 Geth 能夠尋找並連接到對等節點。
下載映像檔
Raspberry Pi 4 以太坊映像檔是一個「隨插即用」的映像檔,會自動安裝並設定執行客戶端與共識客戶端,將它們設定為互相通訊並連接到以太坊網路。使用者只需使用一個簡單的指令來啟動它們的程序。
從 Ethereum on Arm (opens in a new tab) 下載 Raspberry Pi 映像檔並驗證 SHA-256 雜湊:
# 從包含已下載映像檔的目錄
shasum -a 256 ethonarm_22.04.00.img.zip
# 雜湊應輸出:fb497e8f8a7388b62d6e1efbc406b9558bee7ef46ec7e53083630029c117444f
請注意,Rock 5B 和 Odroid M1 開發板的映像檔可在 Ethereum-on-Arm 的下載頁面 (opens in a new tab)取得。
燒錄 MicroSD 卡
將用於 Raspberry Pi 的 MicroSD 卡應先插入桌上型電腦或筆記型電腦以便進行燒錄。然後,以下終端機指令會將下載的映像檔燒錄到 SD 卡上:
# 檢查 MicroSD 卡名稱
sudo fdisk -l
>> sdxxx
確保名稱正確非常重要,因為下一個指令包含 dd,它會在將映像檔推送到卡片之前完全清除卡片上的現有內容。要繼續操作,請導覽至包含壓縮映像檔的目錄:
# 解壓縮並燒錄映像檔
unzip ethonarm_22.04.00.img.zip
sudo dd bs=1M if=ethonarm_22.04.00.img of=/dev/<sdxx> conv=fdatasync status=progress
記憶卡現在已燒錄完畢,可以將其插入 Raspberry Pi 中。
啟動節點
將 SD 卡插入 Raspberry Pi 後,連接乙太網路線和 SSD,然後開啟電源。作業系統將會開機並自動開始執行預先設定的任務,將 Raspberry Pi 變成一個以太坊節點,包括安裝和建置客戶端軟體。這大約需要 10 到 15 分鐘。
一旦所有東西都安裝並設定完畢,請透過 SSH 連線登入裝置,或者如果開發板連接了螢幕和鍵盤,則直接使用終端機登入。使用 ethereum 帳戶登入,因為該帳戶具有啟動節點所需的權限。
User: ethereum
Password: ethereum
預設的執行客戶端 Geth 將會自動啟動。你可以使用以下終端機指令檢查日誌來確認這一點:
sudo journalctl -u geth -f
共識客戶端確實需要明確啟動。為此,請先在路由器上開啟通訊埠 9000,以便萊特豪斯 (Lighthouse) 能夠尋找並連接到對等節點。然後啟用並啟動 Lighthouse 服務:
sudo systemctl enable lighthouse-beacon
sudo systemctl start lighthouse-beacon
使用日誌檢查客戶端:
sudo journalctl -u lighthouse-beacon
請注意,共識客戶端將在幾分鐘內完成同步,因為它使用檢查點同步。執行客戶端將需要更長的時間——可能需要幾個小時,而且在共識客戶端完成同步之前它不會啟動(這是因為執行客戶端需要一個同步目標,而這由已同步的共識客戶端提供)。
隨著 Geth 和萊特豪斯 (Lighthouse) 服務的執行與同步,你的 Raspberry Pi 現在已經是一個以太坊節點了!最常見的與以太坊網路互動的方式是使用 Geth 的 JavaScript 主控台,它可以附加到通訊埠 8545 上的 Geth 客戶端。也可以使用像 Curl 這樣的請求工具提交格式化為 JSON 物件的指令。詳情請參閱 Geth 文件 (opens in a new tab)。
Geth 已預先設定為將指標報告給 Grafana 儀表板,可以在瀏覽器中檢視。進階使用者可能希望使用此功能來監控其節點的健康狀況,方法是導覽至 ipaddress:3000,並傳遞 user: admin 和 passwd: ethereum。
驗證者
也可以選擇將驗證者新增至共識客戶端。驗證者軟體允許你的節點積極參與共識,並為網路提供密碼經濟學安全性。你將會獲得 ETH 作為這項工作的獎勵。要執行驗證者,你必須先擁有 32 個 ETH,這些 ETH 必須存入存款合約中。你可以按照 Launchpad (opens in a new tab) 上的逐步指南進行存款。請在桌上型電腦/筆記型電腦上執行此操作,但不要產生金鑰——這可以直接在 Raspberry Pi 上完成。
在 Raspberry Pi 上開啟終端機並執行以下指令來產生存款金鑰:
sudo apt-get update
sudo apt-get install staking-deposit-cli
cd && deposit new-mnemonic --num_validators 1
(或者下載 staking-deposit-cli (opens in a new tab) 以在實體隔離的機器上執行,並執行 deposit new-mnemnonic 指令)
請妥善保管助記詞!上述指令在節點的金鑰庫中產生了兩個檔案:驗證者金鑰和存款資料檔案。存款資料需要上傳到 Launchpad,因此必須將其從 Raspberry Pi 複製到桌上型電腦/筆記型電腦。這可以使用 SSH 連線或任何其他複製/貼上方法來完成。
一旦執行 Launchpad 的電腦上有了存款資料檔案,就可以將其拖放到 Launchpad 畫面上的 + 中。按照畫面上的指示發送交易到存款合約。
回到 Raspberry Pi,現在可以啟動驗證者了。這需要匯入驗證者金鑰,設定收集獎勵的地址,然後啟動預先設定的驗證者程序。以下範例適用於萊特豪斯 (Lighthouse)——其他共識客戶端的指示可在 Ethereum on Arm 文件 (opens in a new tab)中找到:
# 匯入驗證者金鑰
lighthouse account validator import --directory=/home/ethereum/validator_keys
# 設定獎勵地址
sudo sed -i 's/<ETH_ADDRESS>' /etc/ethereum/lighthouse-validator.conf
# 啟動驗證者
sudo systemctl start lighthouse-validator
恭喜,你現在已經在 Raspberry Pi 上執行了一個完整的以太坊節點和驗證者!
更多詳細資訊
本頁面概述了如何使用 Raspberry Pi 設定 Geth-萊特豪斯 (Lighthouse) 節點和驗證者。更詳細的指示可在 Ethereum-on-Arm 網站 (opens in a new tab)上找到。
歡迎提供回饋
我們知道 Raspberry Pi 擁有龐大的使用者群,這可能對以太坊網路的健康產生非常正面的影響。 請深入了解本教學中的詳細資訊,嘗試在測試網上執行,查看 Ethereum on Arm 的 GitHub,提供回饋,提出問題 (issue) 和拉取請求 (pull request),並協助推進技術和文件!
參考資料
- https://ubuntu.com/download/raspberry-pi (opens in a new tab)
- https://wikipedia.org/wiki/Port_forwarding (opens in a new tab)
- https://prometheus.io (opens in a new tab)
- https://grafana.com (opens in a new tab)
- https://forum.armbian.com/topic/5565-zram-vs-swap/ (opens in a new tab)
- https://geth.ethereum.org (opens in a new tab)
- https://nethermind.io (opens in a new tab)
- https://www.hyperledger.org/projects/besu (opens in a new tab)
- https://github.com/prysmaticlabs/prysm (opens in a new tab)
- https://lighthouse.sigmaprime.io (opens in a new tab)
- https://docs.ethswarm.org/ (opens in a new tab)
- https://raiden.network (opens in a new tab)
- https://ipfs.io (opens in a new tab)
- https://status.im (opens in a new tab)
- https://vipnode.org (opens in a new tab)