詳解a16z 推出的Helios:完全無需信任的以太坊訪問

撰文:Noah Citron

編譯:PANews,王爾玉

11月8日,a16z Crypto推出了以太坊輕客戶端Helios,基於Rust語言進行編寫,提供完全無需信任的以太坊訪問。以下是PANews對官方新聞的翻譯。

我們使用區塊鏈的主要原因之一是無需信任。藉此,我們可自主掌控自己的財富和數據。多數情況下,以太坊等區塊鏈的確兌現了這一承諾:我們的資產真正屬於我們自己。

但我們也為了追求方便而做了一些妥協。其中之一即我們使用了中心化的RPC(遠程調用)服務器。用戶往往會通過Alchemy等中心化提供商訪問以太坊。這些公司在雲服務器上運行高性能節點,幫助大家輕鬆訪問鏈上數據。當錢包查詢其代幣餘額或檢查一項待處理交易是否已納入區塊時,幾乎總會用到這些中心化提供商。

當前系統的問題在於用戶需要信任這些提供商,而無法驗證查詢結果是否正確。

Helios是我們開發的基於Rust的以太坊輕客戶端,它能提供完全無需信任的以太坊訪問。 Helios使用了以太坊切換至PoS後促成的輕客戶端協議,它能將來自不受信任的中心化RPC提供商的數據轉換至安全可驗證的本地RPC中。結合中心化RPC,Helios可在不運行完整節點的情況下驗證數據的真偽。

難以兼顧便捷性與去中心化是一個常見痛點,我們的客戶端(公眾可在其基礎上繼續構建)能實現約兩秒內完成同步,且無需存儲,用戶可通過任何設備(包括手機和瀏覽器插件)訪問安全的鏈上數據。但依賴中心化基礎設施到底有什麼潛在陷阱呢?本文將梳理此類陷阱,介紹我們的設計方案,並提供一些思路,幫助大家為代碼庫添磚加瓦。

中心化基礎設施的陷阱:以太坊“黑暗森林”中的理論產物

一個(理論性)產物潛伏在黑暗森林中。它沒有在以太坊交易內存池(Mempool)中尋找獵物,而是通過模擬我們依賴的中心化基礎設施來設置陷阱。落入該陷阱的用戶並沒有犯任何錯誤:他們只是訪問了常去的去中心化交易所,設定了合理的滑點,並像往常一樣買賣代幣……他們沒做錯任何事,但仍然遭遇了一種新型三明治攻擊,這是一種精心設置在以太坊黑暗森林入口處——RPC提供商——的陷阱。

詳細說明之前,我們先來看一下去中心化交易所是如何處理交易的。用戶執行兌換交易時會向智能合約提供幾個參數:要兌換的代幣,兌換金額,以及最重要的,用戶推進交易必須接收的最小代幣數量。最後一項參數指明了兌換必須達到的“最小產出”,否則會撤銷交易。這通常被稱為“滑點”,因為它有效設定了從交易發送至內存池到交易被納入區塊之間可能出現的最大價差。如果滑點設置太低,用戶有可能只能接收到較少代幣。這種情況也可能導致三明治攻擊,攻擊者可將用戶的出價夾在兩個惡意交易之間。這些交易會推高現貨價格,迫使用戶以不太好的價格進行交易。然後,攻擊者會立即出售代幣,獲取小額利潤。

只要這個最小產出參數設置在公允值附近,你就不會受到三明治攻擊。但如果你的RPC提供商沒有提供去中心化交易所智能合約的準確報價呢?如此一來,用戶可能會被蒙蔽,並以較低的最小產出參數簽署兌換交易,更糟的是,用戶還可能將交易直接發送給惡意的RPC提供商。提供商可以不將這筆交易廣播至公共內存池(數十個機器人在其中競相開展三明治攻擊),而私下扣留並將被攻擊的交易包直接發送給Flashbots,以從中牟利。

造成這一攻擊的根本原因是信任他人來幫助你獲取區塊鏈狀態。為解決該問題,有經驗的用戶通常會運行自己的以太坊節點,這項工作需要耗費大量時間和資源,至少需要一台持續在線的設備,數百GB的存儲空間,以及大約一天的時間以從頭開始同步。這個過程顯然比過去簡化了。 Ethereum on ARM等團體一直在不懈努力,幫助大家通過低成本硬件運行節點(例如帶有外部硬盤驅動器的樹莓派微型電腦)。但即便要求大幅降低,運行節點對於多數用戶仍然很困難,特別是使用移動設備的用戶。

需要注意的是,中心化RPC提供商攻擊雖然完全可能發生,但通常只是簡單的釣魚攻擊,我們說的那種攻擊尚未發生。儘管Alchemy等大型提供商的過往記錄讓我們沒有理由懷疑他們,但在將不熟悉的RPC提供商添加至錢包前,多做一些研究仍然是值得的。

Helios簡介:完全無需信任的以太坊訪問

以太坊推出輕客戶端協議,為快速的區塊鏈交互和通過最低硬件需求驗證RPC端點開闢了令人興奮的可能性。在The Merge後的一個月裡,一批彼此獨立的輕客戶端(Lodestar、Nimbus和基於JavaScript的Kevlar)相繼湧現,它們各闢蹊徑,只為了同一目標:無需信任的高效訪問,且不必使用完整節點。

我們的解決方案Helios是一個以太坊輕客戶端,可在大約兩秒內完成同步,不需要存儲,並提供完全無需信任的以太坊訪問。與所有以太坊客戶端一樣,Helios由執行層和共識層組成。但與多數其他客戶端不同,Helios將這兩層緊密耦合,用戶只需安裝和運行單個軟件即可。 (Erigon也在朝著這個方向發展,他們在其歸檔節點中直接加入了一個共識層輕客戶端)。

它如何運作呢? Helios共識層使用一個已知的信標鏈區塊哈希,並連接一個不受信任的RPC,以可驗證的方式同步至當前區塊。 Helios執行層將這些經過驗證的信標鏈區塊與不受信任的執行層RPC結合,以驗證有關鏈上狀態的各種信息,例如賬戶餘額、合約存儲、交易收據和智能合約調用結果。這些組件協同工作,可為用戶提供完全無需信任的RPC,且無需運行完整節點。

共識層

共識層輕客戶端符合信標鏈輕客戶端規範,並利用了信標鏈的同步委員會(在Altair硬分叉的Merge之前推出)。同步委員會是隨機選擇的512個驗證者構成的子集,服務週期約27小時。

驗證者進入同步委員會後會簽署看到的所有信標鏈區塊頭(block header)。如果超過三分之二的委員會成員簽署了一個區塊頭,則該區塊極有可能位於規範信標鏈中。如果Helios了解當前同步委員會的組成,它可以通過向不受信任的RPC查詢最近的同步委員會簽名,以有把握地追踪鏈頭。

得益於BLS簽名聚合,只需一次查詢即可完成對新區塊頭的驗證。只要簽名有效且超過三分之二的委員會成員完成簽名,即可保證區塊已包含在鏈中(當然,它也可能被重組至鏈外,而追踪區塊的最終性可提供更強的保證)。

但這個策略中顯然缺少了一個環節:如何找到當前的同步委員會。首先要獲取一個稱為弱主觀性檢查點(weak subjectivity checkpoint)的信任根。別被名字嚇到,它僅僅表示一個可以保證在過去的某個時刻被納入鏈中的舊的區塊哈希。關於檢查點確切的存在時間,背後有一些有趣的數學計算:最壞的情況分析顯示大約有兩週,而更實際的估計表明有數月。

如果檢查點太舊,理論上存在可以誘騙節點跟隨錯誤鏈的攻擊。此時,獲取弱主觀性檢查點就超出了協議的能力範圍。 Helios的解決辦法是提供一個初始檢查點,將之硬編碼至代碼庫(很容易被覆蓋),它會在本地保存最新的最終區塊哈希,以便在節點同步時用作檢查點。

通過哈希操作,信標鏈區塊可方便地產生唯一的信標區塊哈希。如此便可輕鬆向節點查詢完整的信標區塊,然後通過對之進行哈希操作並與已知的區塊哈希進行比較,來證明區塊內容的有效性。 Helios利用此屬性來獲取和驗證弱主觀性檢查點區塊內的某些字段,包括兩個至關重要的字段:當前同步委員會和下個同步委員會。最關鍵的是,輕客戶端可利用該機制快速檢閱區塊鏈歷史。

現在有了弱主觀性檢查點,我們可以獲取和驗證當前和下個同步委員會。如果當前的鏈頭和檢查點都在相同的同步委員會周期內,我們可以立即開始使用已簽名的同步委員會header來驗證新區塊。如果我們的檢查點排在若干同步委員會之後,則可以:

1.使用檢查點之後的下個同步委員會來獲取和驗證將在未來生成一個同步委員會的區塊。

2.使用此新區塊獲取下個同步委員會。

3.如果檢查點還在後面,返回步驟1。

通過上述流程,我們能以27小時為單位,快速檢閱該區塊鏈的歷史,從過去的任一區塊哈希開始,一直同步至當前的區塊哈希。

執行層

執行層輕客戶端的目標是將經過共識層驗證的信標區塊頭與不受信任的執行層RPC結合使用,提供經過驗證的執行層數據。然後便可通過Helios在本地託管的RPC服務器訪問此數據。

下面舉一個獲取帳戶餘額的簡單例子,首先簡單介紹一下以太坊是如何存儲狀態的。每個帳戶包含若干字段,如合約代碼哈希、隨機數、存儲哈希和余額。這些帳戶存儲在一個經過調整的大型Merkle-Patricia樹中,稱為狀態樹。只要知道狀態樹的根,就可以驗證Merkle證明,來證明樹中是否存在任何帳戶。這一證明無法被偽造。

Helios有一個來自共識層的經過驗證的狀態根(state root)。通過對不受信任的執行層RPC應用這一狀態根和Merkle證明請求,Helios可在本地驗證所有存儲在以太坊的數據。

我們使用不同的技術來驗證執行層使用的各種數據,藉此,我們可以驗證來自不受信任的RPC的所有數據。不受信任的RPC可拒絕提供數據訪問,但再也不能提供錯誤的結果。

在狂野世界使用Helios

難以兼顧便捷性與去中心化是一個常見痛點,通過輕量級的Helios,用戶可從任何設備(包括手機和瀏覽器插件)訪問安全的鏈上數據。這將使更多人可以訪問無需信任的以太坊數據,不論使用什麼硬件。用戶可以在MetaMask中將Helios作為他們的RPC提供商,以實現無需信任地訪問各種DApp,整個過程無需任何其他更改。

此外,Rust對WebAssembly的支持使應用開發人員可輕鬆將Helios嵌入Javascript應用程序(如錢包和DApp)中。這些集成將提升以太坊的安全性,減少我們對中心化基礎設施的信任需求。

我們迫不及待地想知道社區對此的反應。有眾多途徑可以為Helios做貢獻,除了為代碼庫添磚加瓦外,你也可以構建集成Helios的軟件,以利用其優勢。以下是讓我們興奮的幾點思路:

  • 支持直接從P2P網絡、而非RPC獲取輕客戶端數據

  • 部署一些缺失的RPC方法

  • 構建可編譯至WebAssembly的Helios版本

  • 將Helios直接集成至錢包軟件中

  • 構建網絡儀表板來查看代幣餘額,將Helios嵌入使用WebAssembly的網站中,以獲取數據

  • 部署引擎API,將Helios共識層連接至現有執行層的全節點上

Total
0
Shares
Related Posts