輕量用戶端
運行全節點是與以太坊互動最去信任、隱私、去中心化和抗審查的方式。 透過全節點,你可以保留自己的區塊鏈副本,可用於即時查詢並直接存取以太坊的點對點網路。 然而,運行全節點需要大量的記憶體、儲存空間及 CPU 資源。 這意味著讓所有人運行自己的節點不可行。 以太坊路線圖上有幾種解決方式,包括無狀態,但距離實現還要幾年的時間。 近期的解決方法是權衡一些運行全節點的優點,以實現大幅效能改進,使節點在極低硬體需求下運行。 做出這種妥協的節點稱為輕節點。
輕量用戶端是什麼?
輕節點是運行輕量用戶端軟體的節點。 輕節點不保留區塊鏈資料的本地副本,也不獨立驗證所有變更,而是向一些提供者索取必要資料。 提供者可能是直接或透過一些中心化遠端程序呼叫伺服器連結到全節點。 接著,輕節點驗證資料,使資料能和鏈頭保持同步。 輕節點只處理區塊頭,只有偶爾才會下載實際區塊內容。 節點的輕量程度可能會有所不同,具體取決於它們執行的輕量和全用戶端軟體的組合。 舉例來說,最輕量的設定是運行一個輕量執行用戶端和一個輕量共識用戶端。 許多節點也有可能會選擇運行輕量共識用戶端和全執行用戶端,反之亦然。
輕量用戶端是如何運作的?
當以太坊開始使用基於權益證明的共識機制時,專門引入了新的基礎設施來支援輕量用戶端。 它的運作方式是,每 1.1 天隨機選擇包含了 512 個驗證者的子集作為同步委員會。 同步委員會簽署最近區塊的頭部。 每個區塊頭包括了同步委員會中驗證者的聚合簽名,以及一個顯示驗證者簽名與否的「位元欄位」。 每個區塊頭還包含了預期參與下一個區塊簽名的驗證者清單。 這表示輕量用戶端可以快速查看同步委員會是否已簽署它們收到的資料,它們也可以透過比較它們收到的資料和依據上一個區塊而預期收到的資料,以確認同步委員會的真實性。 這樣一來,輕量用戶端就能持續更新對最新以太坊區塊的了解,而不需要實際下載區塊,只要下載包含摘要資訊的區塊頭即可。
在執行層上,沒有對輕量執行用戶端的單一規範。 輕量執行用戶端的範圍差異可以與全執行用戶端的「輕量模式」不同,後者有全節點的所有以太坊虛擬機和網路功能,但只驗證區塊頭,而不下載相關資料,或者它也可以是更精簡的用戶端,主要依賴將請求轉發至遠端程序呼叫提供者以和以太坊交互。
為什麼輕量用戶端很重要?
輕量用戶端重要的原因是,它們讓使用者驗證傳入的資料,而非盲目相信它們的資料提供者是正確和誠實的,同時只使用全節點運算資源的很小一部分。 輕量用戶端收到的資料可以根據區塊頭進行檢查,因為它們知道這些區塊頭已獲得 512 個隨機的以太坊驗證者中至少 2/3 的簽名。 這是能證明資料正確的強大證據。
輕量用戶端只使用很小一部分的算力、記憶體和儲存空間,因此它們可以在手機上、嵌入應用程式中或作為瀏覽器的一部分運行。 輕量用戶端以信任最小化的方式存取以太坊,就像信任第三方提供者一樣順暢。
我們來看個簡單的例子。 想像你打算查看你的錢包餘額。 要完成這件事,你需要向以太坊節點發送一個請求。 該節點會檢查它的以太坊的本地副本中你的餘額,並將其回傳給你。 如果你沒有辦法直接存取節點,有一些中心化的營運商會提供此資料作為服務。 你可以向它們發送一個請求,它們會查看其節點,並將結果回傳給你。 這個方法的問題在於,你需要信任該提供者提供了你正確的資訊。 如果你無法自行驗證資訊,你永遠無法知道該資訊是否正確。
輕量用戶端可以解決此問題。 你仍然向外部提供者請求資料,但當你接收到返回的資料時,資料會附加一個證明,你的輕量用戶端可以依據區塊頭中收到的資訊來檢查這個證明。 這表示以太坊會驗證你資料的正確性,而不是某些受信任的營運者來驗證。
輕量用戶端帶來了哪些創新?
輕量用戶端的主要好處是使更多的人能夠獨立存取以太坊,對硬體的需求幾乎可忽略,依賴第三方程度也被降到最低。 這對使用者來說有益,因為他們可以驗證自己的資料,且它提升了驗證區塊鏈的節點數量及多樣性。
輕量用戶端解鎖的創新領域其中之一是可以在儲存空間、記憶體和處理能力都很小的裝置上運行以太坊節點。 如今的以太坊節點需要大量運算資源,輕量用戶端可被嵌入瀏覽器中、在手機上運行,或者甚至可能在更小的智慧型裝置上運行,如智慧手錶。 這表示含有嵌入式用戶端的以太坊錢包可能可以在手機上運行。 這表示手機錢包可更去中心化,因為它們不需要信任中心化資料提供者以獲取資料。
這個的延伸是使用物聯網 (IoT) 裝置。 輕量用戶端可用於快速證明某些代幣或非同質化代幣的餘額或擁有權,透過所有同步委員會提供的安全保證,以觸發物聯網的某些操作。 想像一個腳踏車租借服務,透過應用程式和嵌入式輕量用戶端以快速驗證你擁有租借服務的非同質化代幣,如果是,則解鎖一輛腳踏車讓你騎走。
以太坊卷軸也受益於輕量用戶端。 卷軸一直以來的其中一個大問題是,駭客會瞄準允許資金在卷軸和以太坊之間轉移的跨鏈橋發動攻擊。 其中一個漏洞是卷軸用來偵測使用者是否存款至跨鏈橋的預言機。 如果預言機提供了錯誤資料,它們可能會欺騙卷軸有新存款至跨鏈橋的資金,並錯誤的釋放資金。 嵌入在卷軸中的輕量用戶端可以用來避免預言機損壞帶來的傷害,因為存款進跨鏈橋可以得到一個附加的證明,可在釋放資金前被卷軸用來驗證。 相同的概念也適用於其他跨鏈橋。
輕量用戶端也可以用於升級以太坊錢包。 你的錢包可以使用嵌入式輕量用戶端直接驗證向你提供的資料,而不用信任遠端程序呼叫提供者提供的資料。 這會為你的錢包提升安全性。 如果你的遠端程序呼叫提供者不誠實,且向你提供錯誤的資料,嵌入式輕量用戶端會告訴你!
輕量用戶端開發的現狀如何?
有許多的輕量用戶端都在開發中,包括執行、共識、和執行/共識組合的輕量用戶端。 這些是在撰文時我們已知的輕量用戶端實現:
- Lodestar:由 TypeScript 編寫的輕量用戶端
- Helios:由 Rust 編寫的執行和共識組合輕量用戶端
- Geth:用 Go 語言編寫的執行用戶端輕量模式(開發中)
- Nimbus:由 Nim 編寫的共識輕量用戶端
據我們所知,上述這些服務都尚未準備好在生產環境中使用。
為了改進輕量用戶端存取以太坊資料的方式,還有很多工作要做。 目前,輕量用戶端依賴使用用戶端/伺服器架構向全節點發出的遠端程序呼叫請求,但在未來可以透過專用網路用更去中心化的方式請求資料,如門戶網路可以透過點對點廣播協議將資料發送至輕量用戶端。
其他路線圖上的專案如 Verkle 樹和無狀態性,最終會為輕量用戶端帶來與全用戶端同等的安全保證。