跳到正文

輕量用戶端

介紹具備分叉感知能力的共識輕量用戶端啟動、同步委員會、弱主觀性檢查點、樂觀與最終確定標頭、執行狀態證明、RPC 服務提供者、資料可用性和隱私。

更新於

僅供教育參考,不構成安全或交易建議。輕量用戶端只驗證其設定之協定與證明涵蓋的物件;請確認特定鏈、分叉、檢查點、標頭狀態、服務提供者和未經驗證的資料範圍。

直接答案

輕量用戶端是一種驗證軟體,它追蹤區塊鏈時所需的本機執行、狀態和歷史資料少於完整節點。輕節點是執行這類軟體的裝置或程序。在權益證明以太坊上,共識輕量用戶端從近期可信任的最終確定檢查點啟動,並驗證能辨識分叉的同步委員會更新,以維護樂觀標頭和最終確定標頭;它不會重播每筆 EVM 交易。

這個經過驗證的共識視圖只是第一層信任錨。若要驗證帳戶或合約儲存空間的值,用戶端必須將已認證的信標鏈標頭連結至執行酬載標頭,選定其中的 stateRoot,並以該根驗證帳戶或儲存空間證明。缺少所需證明的一般 RPC 回應仍只是服務提供者的主張。共識簽章不會自動證明交易歷史、收據、呼叫追蹤、資料可用性、應用程式行為或長期可檢索性。

運作機制

  1. 鎖定網路與信任根:鏈身分、創世驗證者根和創世時間、分叉時程與預設值、目前時鐘、用戶端版本,以及近期可信任的最終確定弱主觀性檢查點。透過彼此獨立且經過認證的來源交叉核對檢查點;節點意見一致無法修復惡意起始根。
  2. 為可信任區塊根取得 LightClientBootstrap。驗證啟動物件的標頭、目前同步委員會及其 Merkle 分支,然後初始化 LightClientStore。若鏈、分叉摘要、廣義索引或序列化結構與所設定分叉不符,應拒絕處理。
  3. 按同步委員會週期處理 LightClientUpdate 物件。在輪替委員會前,驗證時槽、參與位元、BLS 聚合簽章與域、目前及下一委員會分支、最終性分支和單調性。分叉升級可能改變物件欄位與廣義索引,因此 Altair 常數並非永久通用值。
  4. 分別維護 optimistic_headerfinalized_header 政策。樂觀更新能提供較新的資訊,但重組或資料扣留風險更高;最終確定更新的共識狀態較強,卻可能有所落後。應用程式必須明確選擇合適的標頭,不能把最新回應重新標為最終確定。
  5. 錨定執行資料。驗證已認證輕量用戶端標頭所攜帶的執行酬載標頭及其分支,再把每項帳戶或儲存空間查詢綁定至該執行 stateRoot、區塊雜湊和最終性狀態。在以太坊上,eth_getProof 可傳回帳戶證明及指定儲存空間證明;應在本機驗證節點、路徑、值和不存在性。
  6. 盤點每個未經驗證的範圍。餘額證明不會認證交易收據、事件紀錄查詢、呼叫追蹤、呼叫模擬、記憶體池、代幣標籤、預言機、blob、歷史區間,也不會證明服務提供者沒有省略結果。每種必要物件都應有證明、獨立重建、完整節點備援方案或明確的信任假設。
  7. 依失敗即關閉原則運作。記錄檢查點、分叉、樂觀與最終確定根、執行區塊與狀態根、證明節點、服務提供者和時間戳記。強制執行最大陳舊期限,分散服務提供者與網路路徑,保護查詢隱私,測試日蝕攻擊與停機復原;輕量用戶端的證明範圍不足時,應使用完整節點或其他驗證系統。

計算範例

  • 同步委員會整數邊界。 對於 512 人委員會,規範中的超多數測試為 participants * 3 >= 512 * 2。參與者為 341 人時,341 / 512 = 66.6015625%1,023 < 1,024,測試不通過。參與者為 342 人時,342 / 512 = 66.796875%1,026 >= 1,024,測試通過。這只驗證所設定的更新規則,不能證明每名委員或每個實作都是誠實的。
  • 標頭時鐘。 教學範例中的檢查點位於時槽 10,000,被認證標頭位於 10,064,其最終確定標頭位於 10,032。按 12 seconds/slot,被認證標頭比檢查點晚 64 * 12 = 768 seconds = 12 minutes 48 seconds,而最終確定標頭落後被認證標頭 32 * 12 = 384 seconds = 6 minutes 24 seconds。時槽時間不保證網路傳遞,也不構成固定牆上時鐘時間的最終性服務承諾。
  • 精簡分支,有限主張。 在包含 2^20 個葉節點的理想平衡樹中,單一葉節點分支有 20 個同層雜湊。按 32 bytes/hash 計,共 640 bytes;與 8 MiB = 8,388,608 bytes 的物件相比,該分支占 0.00762939453125%,減少 99.99237060546875%。該分支只證明葉節點到根的關係,不證明其他位元組可用。
  • 證明與裸 RPC。 在最終確定的執行 stateRoot 下,經驗證的帳戶證明得出 3.25 ETH,而未經證明的 RPC 回應聲稱是 3.30 ETH。差額為 0.05 ETH,且裸回應高出 0.05 / 3.30 = 1.5151515152%。應接受在所選根下證明的值,但不能據此推斷稍後的餘額、收據、歷史結果或代幣身分。

風險

  • 設定錯誤的鏈、創世驗證者根、創世時間或預設值。
  • 從惡意、陳舊或未最終確定的檢查點啟動。
  • 只使用一個未經認證的檢查點來源,或接受長程分叉。
  • 本機時鐘漂移導致時槽、週期、域或陳舊性判斷錯誤。
  • 使用過時的分叉時程、物件結構或廣義索引。
  • 未驗證同步委員會參與度、BLS 簽章或域。
  • 遺漏委員會輪替,或接受無效的目前或下一委員會。
  • 把樂觀標頭當成最終確定標頭。
  • 連結錯誤的信標鏈標頭、執行酬載或執行區塊雜湊。
  • 對錯誤的 stateRoot 驗證帳戶或儲存空間證明。
  • 接受格式錯誤的 trie 節點、路徑、編碼或不存在性證明。
  • 把不支援或沒有證明的 RPC 方法視為已驗證。
  • 收到陳舊、受審查、不完整或偽造的服務提供者回應。
  • 表面獨立的服務提供者共同受控,或遭遇日蝕、Sybil 攻擊。
  • 提供證明的完整節點修剪或停止服務,造成活性喪失。
  • 混淆共識有效性與執行重播或應用程式正確性。
  • 混淆有效證明與資料可用性或永久可檢索性。
  • 缺少應用程式所需的收據、事件紀錄、追蹤、區塊內容或歷史。
  • 用戶端實作、相依套件、二進位檔案或分叉升級失敗。
  • 向服務提供者或節點洩露查詢、IP、帳戶和交易隱私。

常見誤解

  • 輕量用戶端只是較小的完整節點,或是遠端 RPC 的另一個名稱。
  • 同步委員會標頭通過驗證後,每項 RPC 回應都可信任。
  • 最新的樂觀標頭等同於最終確定標頭。
  • Merkle 證明或共識簽章能證明資料可用性和完整歷史。
  • 使用輕量用戶端會自動取得完整節點的隱私、活性與抗審查能力。

相關主題

來源

導覽

搜尋知識庫...