文/Alex R. Mead,CoinMetrics
在消費級硬件上輕鬆設置並運行以太坊節點的能力是以太坊網絡去中心化特性的一個關鍵賣點。但是對於一般人來說,在家裡設置並運行一個節點到底有多大實用性?隨著合併的完成,這個問題在加密社區中被頻繁提及。在Coin Metrics,我們向來都是直接探索節點,獲得一手體驗。
在本週“網絡狀態”系列文章中,我們將介紹在家裡設置和運行以太坊節點所需的步驟。我們將從基本硬件和網絡需求開始,接著介紹軟件下載/編譯/安裝,最後介紹節點操作步驟和維護。在整個過程中,我們將提供從運行Geth/Lighthouse節點中獲得的經驗見解,Coin Metrics團隊自2022年6月以來一直在持續運行該節點。
請注意,本文不構成Coin Metrics對任何特定硬件、互聯網服務提供商或以太坊客戶端的背書,也不構成任何工程或財務建議。所討論的節點獨立於Coin Metrics基礎設施運行,與Coin Metrics並無關聯,純粹是出於實驗和研究目的,與Coin Metrics服務沒有任何交互。本文所提供的信息單純是為了讓我們講得清楚,讓你看得明白。所以,開始吧!
硬件和網絡要求
計算機
要開始設置和運行你自己的以太坊節點,你需要一台計算機及互聯網連接。計算機需要滿足兩個一般要求,足夠的RAM和足夠的硬盤空間。
每個節點客戶端都有特定的RAM要求(見下文),但任何一台16GB RAM的現代計算機基本都夠用。節點也可以運行在8GB的RAM上;然而,如果你想使用該節點做點什麼,而不只是口頭上說說“我要運行一個以太坊節點”而已,那麼你可能會希望你有一台16GB RAM的計算機。建議在專用的計算機上運行以太坊節點,也就是說該計算機的唯一用途就是運行以太坊節點。沒有流媒體Netflix,不編輯視頻,也不處理其他前端/後端進程,只用於運行你的節點。
然後,你需要確保你的計算機有足夠的硬盤空間來存儲當前的以太坊區塊鏈(記住,合併後,以太坊區塊鏈現在有兩個部分:執行層和共識層信標鏈),而且還要有合理的空間來維持鏈的增長。就目前而言,一個比較好的經驗就是使用2TB的固態硬盤(SSD)。固態硬盤是必不可少的,因為它支持足夠快的讀寫行為,因此節點可以本地同步當前鏈,並在鏈持續增長時維護鏈。
至於我們的節點,我們運行的是裝有16GB RAM的Dell OptiPlex 5080和英特爾酷睿i7處理器。這台設備是直接從戴爾的網站上購買的“現貨”。此外,為了擴充內置硬盤空間,我們還使用USB-C Type 3連接器(這款USB連接器是藍色的)連接了一個2TB的三星T7便攜式固態硬盤。
以太坊節點:Dell OptiPlex 5080,有線以太網連接,2TB固態硬盤
網絡連接
要與以太坊網絡同步,你需要至少每秒25MB的下載速度,這是大多數家用互聯網都能滿足的規格。對於我們的節點,我們使用美國中西部可用的標準的Comcast計劃,據稱下載速度為250MB/秒,總數據下載上限為每月1.2TB(超出後將收取額外費用)。這個服務包,或類似的服務,通常面向位於發達經濟體大都市地區的用戶。
軟件:有哪些代碼?從哪裡獲得?
合併後,所有以太坊節點必須同時運行兩個軟件,一個共識層節點和一個執行層節點。 Ethereum.org列出了以下執行層節點:Geth、Nethermind、Besu、Erigon和Akula。對於共識層節點,則列出了:Lighthouse、Lodestar、Nimbus、Prysm和Teku。
對這些不同軟件的分析本文不做贅述。不用說,我們決定分別為我們的執行層和共識層運行一直可靠的Geth和受人尊敬的Lighthouse。
操作系統(OS)
在深入研究運行以太坊協議的軟件之前,先簡單介紹一下操作系統的選擇。我們決定運行Ubuntu 22.04 LTS,裸金屬版。裸金屬意味著操作系統直接運行在處理器的矽片上。沒有虛擬機,沒有Docker容器,只有計算機上的“老式”操作系統。在裸金屬上運行可對硬件資源進行最佳利用,不需要虛擬化的“開銷”。 Ubuntu 22.04 LTS可免費下載,之所以選擇它還有部分原因是因為加密技術和Linux社區都具有獨立性,其中,Ubuntu是若干“Linux風格”系統之一。
要在戴爾電腦上安裝Ubuntu操作系統,我們必須對運行Windows 10的現有硬盤進行開箱分區。這個過程的詳細說明可在Ubuntu的網頁上找到,需要一個USB驅動器在新分區上加載新的操作系統。安裝操作系統可能很棘手,可能是非技術節點操作者要克服的第一個真正的“瓶頸”。應該注意的是,可以在Windows 10上運行相同的系統,因此這不是真正必要的步驟。此外,互聯網上有很多資源可以解決這個問題,所以我們認為,一個有動力並有良好計算機技能的用戶要完成這個任務仍然是合理的。
執行層:Geth
根據clientdiversity.org的數據顯示,Geth是目前使用最多的以太坊節點,約佔所有以太坊客戶端的80%。雖然這對於網絡來說並不理想,但這是我們的節點正在運行的客戶端。至於我們的客戶端可執行程序(例如,當你啟動節點時我們的操作系統實際運行的程序)——以一種真正的“不輕信,去驗證”的方式——我們想要確定軟件的組成。因此,我們使用Git從官方的Go Ethereum源碼庫下載了源代碼。在代碼庫完全本地化的情況下,我們使用GNU Make構建Geth客戶端,還使用了來自Go Ethereum的其他幾個支持軟件,包括使用clef為節點創建和管理key-pair對。 Go Ethereum的網頁對每一步操作都有詳細說明。
下載源代碼,並對其進行編譯,再將它安裝到你的設備上,這是真正的軟件工程師類型的工作。很可能,這對普通計算機用戶來說是一個難以達到的提升。因此,如果從源代碼編譯太過困難,Geth還提供了預構建的二進製文件,你可以從他們的網頁下載。但是,請注意,雖然這些二進製文件非常值得信任,但實際上你信任的是它們的組成。使用源代碼方法,可以單獨分析每一行代碼,因此不需要信任。
共識層:Lighthouse
本著與Geth相同的精神,對於節點,我們從官方Lighthouse庫下載了Lighthouse,它是從源代碼編譯的。與Geth類似,如果沒有軟件經驗,編譯Lighthouse可能非常棘手。因此,預構建的二進製文件也可用於Lighthouse。
運行節點
在實際運行節點時,請記住操作者必須在同一台機器上運行兩個程序(執行客戶端、共識客戶端)——在我們的例子中分別是Geth和Lighthouse。此外,每個客戶端都需要向硬盤寫入大量數據,這就引出了我們的第一步,為文件系統安裝固態硬盤。
安裝固態硬盤
與編譯源代碼類似,定位物理固態硬盤驅動器然後進行“安裝”對普通計算機用戶來說並不容易。需要使用終端程序並具有在計算機的層層文件夾結構中暢通無阻的能力。對於我們的節點,我們選擇將固態硬盤安裝到主目錄文件夾~/ethereum下。在這個文件夾中(請記住,它實際上位於固態硬盤上!)我們創建了另外兩個文件夾,~/ethereum/execution_layer和~/Ethereum/consensus_layer。這些文件夾(或者程序員稱之為目錄)將保存節點所需的所有文件,包括區塊鏈本身。
運行節點軟件
有了節點運行的文件位置,我們現在可以運行節點軟件了。我們首先遵循Go Ethereum網頁上的步驟,包括使用clef設置一個用戶帳戶((EOA — 外部擁有的帳戶),然後使用幾個參數啟動geth,最重要的是將datadir設置為我們在固態硬盤上的~/ethereum/execution_layer文件夾(即目錄)。請注意,chainid為“1”(不帶引號)表示主網(即我們所知道和熱愛的真正的以太坊,而不是測試網)。此外,現在geth必須連接到共識層客戶端(在我們的例子中是Lighthouse),必須配置一些額外的參數,Go Ethereum在他們的網頁中相應的“Connecting to Consensus Clients”(連接到共識客戶端)內容中對這些參數進行了解釋。
該命令將啟動主網區塊鏈的同步進程,到目前為止,有超過600GB的資源(2022年10月)。當我們在2022年6月啟動最初的節點同步時,這個過程用了大約5天時間。
共識層客戶端Lighthouse的運行方式與上述Geth相同。同樣,請確保向固態硬盤正確指定datadir,以確保有足夠的硬盤空間來存儲所有所需的數據。此外,Lighthouse需要與Geth進行通信,因為他們都支持合併後的以太坊。關於連接到執行引擎,Lighthouse文檔提供了關於此連接過程的具體說明。我們的節點同步信標鏈花費了大約兩天時間。請注意,我們首先同步了主網鏈(即Geth),然後啟動了信標鏈(即Lighthouse)同步。
以太坊節點:左屏為Lighthouse STDOUT,右屏為Geth STDOUT。
使用你的節點
當節點同步時,會下載大量數據。實際上是以太坊的整個區塊鏈歷史被複製到你的本地計算機上,包括信標鏈。這些信息完全下載結束後,你可以查詢本地節點的任何信息,並且不要信任任何人來驗證該以太坊系統。有了這樣的設置,當涉及到以太坊網絡和所有與之相關的DAapp時,你就可以真正做到“不輕信,去驗證”了。
連接到你的節點很簡單,可以為Geth或Lighthouse節點組件使用本地託管的RPC。這些API在執行層和共識層都有很好的文檔記錄。對於Python用戶來說,使用開源的Web3.py模塊是一個很好的選擇,有很多博客文章和問題論壇的回答免費提供了許多示例,比如Stack Overflow。如果你對API並不熟悉,你會經歷一個學習曲線;然而,有了Python和這個生態系統可用的大量資源,有動力的用戶當然也可以在網上找到資源來學習他們需要的一切知識技能。
節點表現
隨著權益證明(PoS)成為共識機制,以太坊的區塊時間的可預測性大為提高。出塊時間高度一致,為每12秒產生一個區塊(對於漏塊來說則為24秒、36秒,等等),其他通信(例如,證明)在區塊傳播中為每6秒一次。運行一個專用節點(即,計算機只運行以太坊),這在下面顯示的CPU和網絡活動監視器中都非常清楚。這正是我們所期望的,而且系統的“理論”與觀測到的數據相匹配總是一個令人安心的跡象。回想一下我們自己的節點,是從源代碼編譯的,並使用所有基本構建塊進行設置。
以太坊節點:標準操作的CPU負載百分比和網絡數據速率。
為了進一步顯示正在運行的節點,我們為共識層調用一個端點來返回所有驗證節點的集合(例如,/eth/v1/beacon/states/{state_id}/validators),這是在編寫本文時超過400,000個驗證節點的結果。該查詢的運行時間為幾分鐘,如下所示,在請求處理期間,CPU的使用率明顯增加,然後在請求得到回復後又回落到“正常”狀態。
以太坊節點:信標節點響應API調用,然後恢復正常的節點操作負載。
持續節點運行
與所有軟件系統一樣,會不斷開發新的版本。對於Geth和Lighthouse來說,也是如此——而且,你必須時不時地更新節點軟件。對我們來說,這包括從Github庫中提取最新版本,編譯新的可執行文件,並使用最新的穩定版本重新啟動Geth和Lighthouse。對於我們的簡單節點,我們只需重新編譯並重新啟動。對於面向生產的節點來說,更適合部署一個開發、分階段和完全監控的生產環境。如果你不親自編譯,可以下載最新的預編譯二進製文件,並使用它們重新啟動節點。此外,操作系統也有必須下載和安裝的更新。這對於避免操作系統級別的安全問題尤其重要。
對於我們的節點來說,首先需要一個學習曲線來讓節點連續運行。管理每個進程的RAM利用率是第一個障礙,因為在沒有足夠RAM的情況下,計算機會“隨機”關閉。此外,最初節點使用的是WiFi,無線路由器由於數據過載而崩潰。解決了這些問題(即緩存限制和有線以太網)後,該節點已經連續運行了幾個月沒有停機了。
結論
使用消費級計算機硬件和家庭互聯網連接,可以運行自己的本地以太坊節點。雖然運行從源代碼本地編譯的客戶端(共識層和執行層)對大多數用戶來說可能很困難,但對於最常用的客戶端來說,可以使用預編譯的可執行程序。此外,安裝一個固態硬盤來存儲區塊鏈並運行操作系統(OS)對大多數用戶來說是一個挑戰;但一個有動力、有耐心、願意學習的用戶是完全有能力做到這些的。
節點操作者的下一步是決定是否成為驗證者。為此,節點必須在本地運行第三個客戶端(Lighthouse還附帶一個驗證者客戶端),並且必須質押32個ETH。這比節點設置要稍微複雜一些。此外,人們應該對離線懲罰以及搞砸質押的以太幣私鑰可能帶來的風險有所了解。因此,用戶應該在運行驗證者節點之前了解自己在做什麼。我們還沒有自己運行驗證者節點,但是鑑於我們運行自己節點的複雜性,你最好至少在運行自己節點的一個月後,再決定是否運行你自己的驗證者節點。