輕客戶端
執行全節點是與以太坊互動最無須信任、私密、去中心化且抗審查的方式。透過全節點,你可以保留自己的區塊鏈副本以便即時查詢,並能直接存取以太坊的點對點網路。然而,執行全節點需要大量的記憶體、儲存空間和 CPU 資源。這意味著並非每個人都有條件執行自己的節點。以太坊路線圖上有幾個解決此問題的方案(包括無狀態性),但距離實作還有幾年的時間。短期內的解決方案是犧牲執行全節點的部分優勢,換取大幅的效能提升,讓節點能在極低的硬體要求下執行。做出這種權衡的節點被稱為輕節點。
什麼是輕客戶端
輕節點是執行輕客戶端軟體的節點。它們不保留區塊鏈資料的本機副本並獨立驗證所有變更,而是向某些提供者請求必要的資料。提供者可能是直接連線的全節點,或是透過某些中心化的 RPC 伺服器。然後輕節點會驗證這些資料,使其能夠跟上鏈的最新狀態。輕節點只處理區塊頭,僅偶爾下載實際的區塊內容。節點的「輕量程度」可能會有所不同,取決於它們執行的輕客戶端與全客戶端軟體組合。例如,最輕量的設定是執行輕量級的執行客戶端和輕量級的共識客戶端。許多節點也很可能選擇執行輕量級的共識客戶端搭配完整的執行客戶端,反之亦然。
輕客戶端如何運作?
當以太坊開始使用基於權益證明 (PoS) 的共識機制時,引入了專門支援輕客戶端的新基礎設施。其運作方式是每 1.1 天隨機選擇 512 個驗證者組成子集,作為同步委員會。同步委員會會對近期區塊的區塊頭進行簽署。每個區塊頭包含同步委員會中驗證者的聚合簽章,以及一個顯示哪些驗證者已簽署、哪些未簽署的「位元欄位 (bitfield)」。每個區塊頭還包含預期參與簽署下一個區塊的驗證者清單。這意味著輕客戶端可以快速確認同步委員會已對其接收的資料進行簽署,並且可以透過將收到的同步委員會與上一個區塊中預期的同步委員會進行比較,來檢查該同步委員會是否為真實的。透過這種方式,輕客戶端可以持續更新其對最新以太坊區塊的認知,而無需實際下載區塊本身,只需下載包含摘要資訊的區塊頭即可。
在執行層上,輕量級執行客戶端並沒有單一的規範。輕量級執行客戶端的範圍可以從完整執行客戶端的「輕量模式」(具備全節點的所有 EVM 和網路功能,但僅驗證區塊頭而不下載相關資料),到更精簡的客戶端(嚴重依賴將請求轉發給 RPC 提供者來與以太坊互動)。
為什麼輕客戶端很重要?
輕客戶端之所以重要,是因為它們允許使用者驗證傳入的資料,而不是盲目信任其資料提供者是正確且誠實的,同時只使用全節點極小部分的運算資源。輕客戶端接收到的資料可以與區塊頭進行比對,它們知道這些區塊頭已經由 512 個隨機以太坊驗證者集合中至少 2/3 的人簽署。這是資料正確性的極有力證據。
輕客戶端僅使用極少量的運算能力、記憶體和儲存空間,因此可以在手機上執行、嵌入應用程式中或作為瀏覽器的一部分。輕客戶端是一種讓信任最小化存取以太坊變得與信任第三方提供者一樣順暢無阻的方法。
讓我們舉個簡單的例子。想像你想檢查你的帳戶餘額。為此,你必須向以太坊節點發出請求。該節點將檢查其以太坊狀態的本機副本以獲取你的餘額,並將其傳回給你。如果你無法直接存取節點,有些中心化營運商會將此資料作為服務提供。你可以向他們發送請求,他們會檢查自己的節點,並將結果傳回給你。這樣做的問題在於,你必須信任提供者給你的是正確資訊。如果你無法自行驗證,你永遠無法真正知道資訊是否正確。
輕客戶端解決了這個問題。你仍然向某些外部提供者請求資料,但當你收到回傳的資料時,它會附帶一個證明,你的輕節點可以將其與在區塊頭中收到的資訊進行比對。這意味著是以太坊在驗證你資料的正確性,而不是某個受信任的營運商。
輕客戶端帶來了哪些創新?
輕客戶端的主要好處是讓更多人能夠以微乎其微的硬體要求和對第三方最小的依賴,獨立存取以太坊。這對使用者有利,因為他們可以驗證自己的資料;這對網路也有利,因為它增加了驗證鏈的節點數量和多樣性。
在儲存空間、記憶體和處理能力極小的裝置上執行以太坊節點的能力,是輕客戶端解鎖的主要創新領域之一。雖然現今的以太坊節點需要大量的運算資源,但輕客戶端可以嵌入瀏覽器、在手機上執行,甚至可能在智慧型手錶等更小的裝置上執行。這意味著內建客戶端的以太坊錢包可以在手機上執行。這意味著行動錢包可以更加去中心化,因為它們不必信任中心化資料提供者來獲取資料。
它的延伸應用是支援物聯網 (IoT) 裝置。輕客戶端可用於快速證明某些代幣餘額或 NFT 的所有權,並享有同步委員會提供的所有安全保證,從而觸發物聯網網路上的某些動作。想像一個自行車租賃服務 (opens in a new tab),它使用內建輕客戶端的應用程式來快速驗證你是否擁有該租賃服務的 NFT,如果是,就會解鎖一輛自行車讓你騎走!
以太坊匯總也將受益於輕客戶端。匯總面臨的一大問題是針對跨鏈橋的駭客攻擊,這些跨鏈橋允許資金從以太坊主網轉帳到匯總。其中一個漏洞是匯總用來偵測使用者是否已向跨鏈橋存款的預言機。如果預言機提供錯誤資料,它們可能會欺騙匯總,讓其以為跨鏈橋有存款,進而錯誤地釋放資金。嵌入匯總中的輕客戶端可用於防範受損的預言機,因為存入跨鏈橋的資金可以附帶一個證明,在釋放任何代幣之前由匯總進行驗證。同樣的概念也可以應用於其他跨鏈橋。
輕客戶端也可用於升級以太坊錢包。你的錢包可以使用內建的輕客戶端直接驗證呈現給你的資料,而不是信任 RPC 提供者提供的資料。這將增加你錢包的安全性。如果你的 RPC 提供者不誠實並向你提供錯誤資料,內建的輕客戶端可以告訴你!
輕客戶端開發的現狀為何?
目前有幾個輕客戶端正在開發中,包括執行客戶端、共識客戶端以及結合執行與共識的輕客戶端。以下是我們在撰寫本頁面時所知的輕客戶端實作:
- 洛德斯塔 (Lodestar) (opens in a new tab):使用 TypeScript 的共識輕客戶端
- Helios (opens in a new tab):使用 Rust 結合執行與共識的輕客戶端
- Geth (opens in a new tab):使用 Go 的執行客戶端輕量模式(開發中)
- 寧布斯 (Nimbus) (opens in a new tab):使用 Nim 的共識輕客戶端
據我們所知,這些目前都尚未達到可投入生產的狀態。
此外,還有許多工作正在進行,以改善輕客戶端存取以太坊資料的方式。目前,輕客戶端依賴使用主從式架構 (client/server model) 向全節點發出 RPC 請求,但在未來,可以使用專用網路(例如波特爾網路 (opens in a new tab))以更去中心化的方式請求資料,該網路可以使用點對點流言協定將資料提供給輕客戶端。
其他路線圖項目,例如沃克爾樹和無狀態性,最終將使輕客戶端的安全保證與全客戶端相當。