節點架構
一個以太坊節點由兩個客戶端組成:一個執行客戶端和一個共識客戶端。為了讓節點能夠提案新區塊,它還必須執行一個驗證者客戶端。
當以太坊使用工作量證明 (PoW)時,一個執行客戶端就足以執行一個完整的以太坊節點。然而,自從實施權益證明 (PoS)以來,執行客戶端必須與另一個稱為共識客戶端的軟體一起使用。
下圖顯示了兩個以太坊客戶端之間的關係。這兩個客戶端連接到各自的點對點 (P2P) 網路。需要獨立的 P2P 網路,因為執行客戶端透過其 P2P 網路廣播交易,使它們能夠管理本地的交易池,而共識客戶端則透過其 P2P 網路廣播區塊,從而實現共識和鏈的增長。
執行客戶端有多種選擇,包括 Erigon、Nethermind 和 Besu。
為了讓這種雙客戶端架構運作,共識客戶端必須將打包的交易傳遞給執行客戶端。執行客戶端在本地執行這些交易,以驗證交易沒有違反任何以太坊規則,並且提議的以太坊狀態更新是正確的。當一個節點被選為區塊生產者時,其共識客戶端實例會向執行客戶端請求打包的交易,以將其包含在新區塊中並執行它們來更新全域狀態。共識客戶端透過使用 Engine API (opens in a new tab) 的本地 RPC 連線來驅動執行客戶端。
執行客戶端的作用是什麼?
執行客戶端負責交易驗證、處理和廣播,以及狀態管理和支援以太坊虛擬機 (EVM)。它不負責區塊建構、區塊廣播或處理共識邏輯。這些屬於共識客戶端的職責範圍。
執行客戶端建立執行負載——交易列表、更新的狀態樹以及其他與執行相關的資料。共識客戶端將執行負載包含在每個區塊中。執行客戶端還負責重新執行新區塊中的交易,以確保它們是有效的。執行交易是在執行客戶端的嵌入式電腦上完成的,該電腦被稱為以太坊虛擬機 (EVM)。
執行客戶端還透過 RPC 方法提供以太坊的使用者介面,讓使用者能夠查詢以太坊區塊鏈、提交交易和部署智能合約。RPC 呼叫通常由 Web3js (opens in a new tab)、Web3py (opens in a new tab) 等函式庫或瀏覽器錢包等使用者介面來處理。
總結來說,執行客戶端是:
- 使用者通往以太坊的閘道
- 以太坊虛擬機、以太坊狀態和交易池的所在之處。
共識客戶端的作用是什麼?
共識客戶端處理所有使節點能夠與以太坊網路保持同步的邏輯。這包括從對等節點接收區塊並執行分叉選擇演算法,以確保節點始終跟隨累積最多證明(由驗證者有效餘額加權)的鏈。與執行客戶端類似,共識客戶端擁有自己的 P2P 網路,透過該網路分享區塊和證明。
共識客戶端不參與證明或提案區塊——這是由驗證者完成的,驗證者是共識客戶端的可選附加元件。沒有驗證者的共識客戶端只會跟上鏈的頂端,讓節點保持同步。這使得使用者能夠使用他們的執行客戶端與以太坊進行交易,並確信他們處於正確的鏈上。
驗證者
質押並執行驗證者軟體使節點有資格被選中提案新區塊。節點營運者可以透過在存款合約中存入 32 ETH,將驗證者新增到他們的共識客戶端中。驗證者客戶端與共識客戶端捆綁在一起,可以隨時新增到節點中。驗證者處理證明和區塊提案。它還使節點能夠累積獎勵,或透過懲罰或罰沒損失 ETH。
節點元件比較
| 執行客戶端 | 共識客戶端 | 驗證者 |
|---|---|---|
| 透過其 P2P 網路廣播交易 | 透過其 P2P 網路廣播區塊和證明 | 提案區塊 |
| 執行/重新執行交易 | 執行分叉選擇演算法 | 累積獎勵/懲罰 |
| 驗證傳入的狀態變更 | 追蹤鏈的頂端 | 進行證明 |
| 管理狀態和收據樹 | 管理信標狀態(包含共識和執行資訊) | 需要質押 32 ETH |
| 建立執行負載 | 追蹤 RANDAO 中累積的隨機性(一種為驗證者選擇和其他共識操作提供可驗證隨機性的演算法) | 可能被罰沒 |
| 暴露 JSON-RPC API 以與以太坊互動 | 追蹤合理化與最終確定性 |
