什麼是以太坊節點和客戶端

節點是運行以太坊客戶端軟件的計算機。也就是說用戶需要在設備上有一個應用程序,即所謂的客戶端,來運行節點。以太坊客戶端可以驗證每個區塊中的所有交易,保持網絡安全和數據準確。在以太坊合併之前,運行一個全節點需要一個軟件(或兩個運行一個挖礦節點)。在以太坊合併之後,需要兩個客戶端軟件來運行一個全節點(三個來運行一個驗證節點)。一個來處理和傳輸交易(執行客戶端),一個來處理區塊傳輸和分叉選擇(共識客戶端)以及一個可選的驗證客戶端,用於處理區塊生產和對從同類型節點接收到的區塊進行“投票”。

許多以太坊執行客戶端和共識客戶端存在於多種編程語言中,例如Go、Rust、JavaScript、Typescript、Python、C#.NET、Nim 和Java。這些客戶端共同點是都遵循同一個規則,並影響以太坊網絡和區塊鏈功能運行方式。

節點類型

事實上,客戶端可以運行3 種不同類型的節點——全節點(full)、輕節點(light)、和歸檔節點(archive)。

全節點

全節點是擁有完整區塊鏈帳本資料的節點,具備獨立驗證的能力來確認交易之有效性。主要在處理下列四件事:

  • 存儲完整的區塊鏈數據。
  • 參與區塊驗證,驗證所有區塊和狀態。
  • 所有狀態都可以從全節點導出。
  • 提供網絡服務,並根據請求提供數據。

輕節點

輕節點不是下載每個區塊,而是下載區塊頭(block headers)。這些標頭僅包含有關區塊內容的概括信息。以太坊目前還不支持大量的輕節點,但輕節點支持是一個有望在不久的將來快速發展的領域。

  • 輕節點所需的任何其他信息都從全節點請求。
  • 輕節點可以根據區塊頭中的狀態根獨立驗證數據的有效性。
  • 輕節點使用戶能夠參與以太坊網絡,而無需強大的硬件或運行全節點所需的高帶寬。
  • 輕節點可能會在手機或嵌入式設備上運行。輕節點不參與共識(即它們不能是礦工/驗證者),但它們可以使用與全節點相同的功能訪問以太坊區塊鏈。

歸檔節點

歸檔節點是在全節點的基礎之上,額外儲存了每個區塊高度的區塊狀態,包括個人帳戶與合約帳戶之當時餘額等信息,即針對每個區塊高度當下的狀態進行快照並存檔。

  • 存儲保存在全節點中的所有內容,並建立歷史狀態的存檔。如果你想查詢#4,000,000區塊的賬戶餘額,或者簡單而可靠地測試你自己的交易數據集,而不使用OpenEthereum挖掘它們,則需要此功能。
  • 這些數據以兆兆字節(terabytes)為單位,這使得歸檔節點對普通用戶的吸引力不大,但對於區塊瀏覽器、錢包供應商和區塊鏈分析等服務來說卻很方便。

總之,要想獲得鏈上數據,就需要建立全節點、輕節點以及歸檔節點。 Tokenview就建立了這樣的節點集群。作為以太坊生態的節點之一,Tokenview也是以太坊節點的服務提供商。截止目前,已為10000+家企業提供了以太坊數據API服務及節點搭建服務。通過穩定、快速的數據接口實時調取區塊鏈數據,可免除自建節點、同步區塊、空間佔用、運維等成本。

為什麼要運行以太坊節點?

對個人的好處

運行自己的節點能夠以真正私有、自給自足和去信任的方式使用以太坊。無需信任網絡,自行通過客戶端驗證數據。 “Don't trust, verify”就是一個非常受歡迎的流行區塊鏈口號。

  • 節點會根據共識規則自行驗證所有交易和區塊。這意味著不必依賴網絡中其它節點,也不必完全信任他們。
  • 不必將地址和余額洩露給隨機節點。一切都可以通過自己的客戶端核實。
  • 如果使用自己的節點,Dapp可以更加安全和私密,Metamask,MyEtherWallet和其他一些錢包可以輕鬆地指向本地節點。
  • 使用自己的節點可以編寫自定義的RPC 端點。
  • 可以使用Inter-process Communications (IPC) 連接到自己的節點或重寫節點以插件的形式加載你的程序。這提供了低延遲,這對於盡可能快地替換你的交易(即搶先交易)是必需的。

對網絡的好處

多樣化的節點對以太坊的健康、安全和運行彈性非常重要。

  • 它們為依賴於區塊鏈數據的輕節點提供訪問區塊鏈數據的機會。在使用高峰期,需要有足夠多的全節點來幫助輕節點同步。輕節點不存儲整個區塊鏈,而是通過區塊頭中的狀態根來驗證數據。如果需要的話,它們可以從區塊中請求更多的信息。
  • 全節點強制執行PoW共識機制,它們不接受不遵循規則的區塊。這為網絡提供了額外的安全性,因為如果所有節點都是輕節點,不進行全面驗證,區塊生產者可能會攻擊網絡,例如創建獎勵更高的區塊。

如果運行全節點,整個以太坊網絡都會從中受益。

執行客戶端(原ETH1客戶端)

以太坊社區維護著多個開源執行客戶端(以前稱為“Eth1 客戶端”,或簡稱為“以太坊客戶端”),由不同團隊使用不同的編程語言開發。這使得網絡更強大和多樣化。理想的目標是在沒有任何客戶端主導的情況下實現多樣性,以減少任何單點故障。

(1)Go Ethereum(簡稱Geth)是以太坊協議的原始實現之一。目前,它是受眾最廣泛的客戶端,擁有最大用戶群,為用戶和開發者提供各種工具。它是用Go語言編寫,完全開源,並採用GNU LGPL v3授權。

(2)OpenEthereum是一個快速、功能豐富的以太坊客戶端,提供快速可靠的服務所需基礎架構,這些服務需要快速同步和最大限度的運行時間。注意:OpenEthereum已被棄用,不再進行維護。最好切換到另一個客戶端實現。

(3)Nethermind是基於C#.NET技術棧創建的以太坊實現,可在包括ARM在內的所有主流平台上運行。它提供了強大的性能:

  • 性能優化的虛擬機。
  • 狀態訪問。
  • 網絡和豐富的功能,如Prometheus/Graphana儀錶盤、seq企業日誌支持、JSON RPC追踪和分析插件。

Nethermind也擁有詳細的文檔,強大的開發支持,在線社區以及為高級用戶提供全天候支持。

(4)Hyperledger Besu是一個用於公共網絡和許可網絡的企業級以太坊客戶端。它運行所有以太坊主網功能,從追踪到GraphQL,具有廣泛的監控,並由ConsenSys支持,無論是在開放的社區渠道還是通過企業的商業SLA。它是用Java編寫的,並獲得Apache 2.0許可。 Hyperledger Besu是一個以Apache 2.0許可開發並以Java編寫的開源以太坊客戶端。它運行在以太坊公共網絡,專用網絡以及測試網絡(如Rinkeby,Ropsten和Grli)上。 Besu實施工作量證明(Ethash)和權限證明(IBFT 2.0和Clique)共識機制。

(5)Erigon(原Turbo‐Geth)是Go以太坊的一個分叉,以速度和磁盤空間效率為目標。 Erigon是一個完全重新架構的以太坊實現,目前用Go編寫,但計劃用其他語言實現。 Erigon的目標是提供更快、更模塊化、更優化的以太坊實現。它可以在3天內使用不到2TB的磁盤空間執行完全歸檔節點同步。

共識客戶端(原ETH2客戶端)

有多個共識客戶端(以前稱為“ETH2”客戶端)來支持共識升級。它們正在運行Beacon Chain,並將在合併後向執行客戶端提供權益證明共識機制。

參考文章:https://ethereum.org/en/developers/docs/nodes-and-clients/