Helios 是一個用 Rust 寫的去信任、有效率、可移植的多鏈輕客戶端。
Helios 將不受信任的集中式 RPC 端點轉換為其使用者安全且不可操作的本機 RPC。它可以在幾秒鐘內同步,不需要存儲,並且足夠輕量級,可以在行動裝置上運行。
Helios 的二進位大小很小,可以編譯成 WebAssembly。這使其成為直接嵌入錢包和 dapp 的完美目標。
首先安裝heliosup
,Helios 的安裝程式:
curl https://raw.githubusercontent.com/a16z/helios/master/heliosup/install | bash
要安裝 Helios,請執行heliosup
。
要在以太坊上執行 Helios,請執行以下命令,將$ETH_RPC_URL
替換為 RPC 提供者 URL(例如 Alchemy):
helios ethereum --execution-rpc $ETH_RPC_URL
$ETH_RPC_URL
必須是提供eth_getProof
端點的支援的以太坊執行 API 提供者。 Infura 目前不支援此功能。我們建議使用煉金術。
Helios 現在將在http://127.0.0.1:8545
運行本機 RPC 伺服器。
Helios 也在 rpc.md 檔案中提供了其支援的 RPC 方法的文檔。
若要在 OP Stack 鏈上執行 Helios,請執行以下命令,將$ETH_RPC_URL
替換為 RPC 提供者 URL(例如 Alchemy),並將$NETWORK
替換為支援的 OP Stack 網路:
helios opstack --network $NETWORK --execution-rpc $ETH_RPC_URL
目前支援的網路值是op-mainnet
和base
,很快就會有更多網路值。
--consensus-rpc
或-c
可用於設定自訂共識層 rpc 端點。這必須是支援輕客戶端信標鏈API的共識節點。為此,我們建議使用 Nimbus。如果未提供共識 rpc,則預設為我們執行的https://www.lightclientdata.org
。
--checkpoint
或-w
可用於設定自訂弱主觀性檢查點。這必須等於一個紀元的第一個信標區塊雜湊值。弱主觀性檢查點是系統信任的根源。如果將此設為惡意值,攻擊者可能會導致用戶端同步到錯誤的鏈。 Helios 最初會設定一個預設值,然後快取它所看到的最新最終區塊以供以後使用。
--network
或-n
設定要同步的網路。目前有效的選項是mainnet
、 sepolia
和holesky
但使用者可以在其設定檔中新增自訂網路。
--rpc-port
或-p
設定本地 RPC 應運行的連接埠。預設值為8545
。
--rpc-bind-ip
或-b
設定綁定到 JSON-RPC 伺服器的 IP。預設情況下,Helios 將使用127.0.0.1
。使用0.0.0.0
允許遠端存取。
--data-dir
或-d
設定 Helios 用於儲存快取的弱主觀性檢查點的目錄。
--fallback
或-f
設定檢查點回退 url(字串)。只有當--checkpoint
標誌提供的檢查點對於 Helios 來說太過時而無法用於同步時,才使用此選項。如果未提供任何內容且未設定--load-external-fallback
標誌,Helios 將會出錯。例如,您可以像這樣指定後備: helios --fallback "https://sync-mainnet.beaconcha.in"
(或使用簡寫,如下所示: helios -f "https://sync-mainnet.beaconcha.in"
)
--load-external-fallback
或-l
啟用弱主觀性檢查點回退(不需要值)。例如,假設您設定的檢查點數值過於過時,Helios 無法與其同步。如果設定了此標誌,Helios 將在 ethpandaops/checkpoint-sync-health-checks 的社群維護清單中查詢所有網路 api 的最新插槽。槽列表會針對健康的 api 進行過濾,並且將返回最近 epoch 中出現最頻繁的檢查點。注意:這是社區維護的列表,因此不提供安全保證。如果傳遞到--checkpoint
檢查點失敗,請將此作為最後的手段。不建議這樣做,因為惡意檢查點可以從列出的 api 返回,即使它們被認為是健康的。這可以像這樣運行: helios --load-external-fallback
(或簡寫的helios -l
)。
--strict-checkpoint-age
或-s
啟用嚴格的檢查點年齡檢查。如果檢查點已超過兩週且啟用了此標誌,Helios 將會出錯。如果沒有此標誌,Helios 將會向使用者發出警告並繼續。如果檢查點超過兩週,理論上存在可能導致 Helios 和超輕客戶端同步錯誤的攻擊。這些攻擊既複雜又昂貴,因此 Helios 預設會停用此攻擊。
--help
或-h
列印幫助訊息。
所有設定選項都可以在~/.helios/helios.toml
中的每個網路層級上設定。這是一個範例設定檔:
[mainnet]consensus_rpc =“https://ethereum.operationsolarstorm.org”execution_rpc =“https://eth-mainnet.g.alchemy.com/v2/XXXXX”檢查點=「0x85e6151a246e8fdba36db27a0c767 [op-主網]consensus_rpc = " https://op-mainnet.operationsolarstorm.org"execution_rpc = "https://opt-mainnet.g.alchemy.com/v2/XXXXX"[base]consensus_rpc = "https://base.operationsolarstorm.org "execution_rpc =“https://base-mainnet.g.alchemy.com/v2/XXXXX”
config.md 檔案中提供了設定選項的全面細分。
將 Helios 作為 Rust 庫運行的範例可以在範例目錄中看到。
檢查點是信標鏈共識層區塊哈希而不是執行層區塊哈希。 https://holesky.etherscan.io/blocks 顯示了 Holesky 執行層區塊雜湊的範例
檢查點可以從以下連結取得:
以太坊主網 https://beaconcha.in
Holesky 測試網 https://holesky.beaconcha.in
建議使用區塊雜湊作為不到兩週的檢查點,但是您實際上可以使用較舊的檢查點,它仍然可以工作,但會給您一個警告。使用不到兩週的檢查點可以防止一些很難實施的攻擊。
例如,要取得 Holesky 測試網的最新檢查點,請造訪 https://holesky.beaconcha.in/ 並取得任何最終紀元中第一個區塊的區塊雜湊值。在撰寫本文時,紀元 78425 中的第一個區塊雜湊是最舊的插槽 2509600,其區塊根為 0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6183c7753e779ec6c24be2f3c50c6036c
這個最新的檢查點可以作為命令列中的附加 CLI 選項提供,以在以太坊 Holesky 測試網路上運行 Helios Light Client 節點:
太陽神以太坊 ——網路空洞 --consensus-rpc http://testing.holesky.beacon-api.nimbus.team --execution-rpc https://ethereum-holesky.g.allthatnode.com --檢查點0x60409a013161b33c8c68c6183c7753e779ec6c24be2f3c50c6036c30e13b34a6
例如,要取得以太坊主網的最新檢查點,請造訪 https://beaconcha.in 並取得任何最終紀元中第一個區塊的區塊雜湊值。在編寫紀元 222705 中的第一個區塊雜湊時,最舊的插槽 7126560 的區塊根為 0xe1912ca8ca3b45dac497cae7825bab055b0f60285533721b046e825bab055b0f60285533721b046e825bab055b0f60285533721b046e825b055b0ffeb。
這個最新的檢查點可以作為命令列中的附加 CLI 選項提供,以在以太坊主網上運行 Helios Light Client 節點:
太陽神以太坊 --網路主機網 --consensus-rpc https://www.lightclientdata.org --execution-rpc https://ethereum-mainnet.g.allthatnode.com --檢查點0xe1912ca8ca3b45dac497cae7825bab055b0f60285533721b046e8fefb5b076f2
如果您希望使用設定檔而不是 CLI 參數,那麼您應該將設定檔中的範例檢查點替換為上面獲得的最新檢查點。
為了確保 Helios 按預期工作,我們有一個可供您運行的全面測試套件。在執行測試之前,請確保在專案目錄的根目錄中建立一個.env
檔案。您可以複製.env.example
檔案的內容並填寫您自己的機密。
cp .env.example .env
若要執行所有測試,請使用以下命令:
貨物測試全部
若要對單一套件執行測試,請使用以下命令,並替換為您要測試的套件:
貨物測試 -p <包名稱>
歡迎對 Helios 做出所有貢獻。在開啟 PR 之前,請提交詳細說明錯誤或功能的問題。開啟 PR 時,請確保您的貢獻已建置、已使用cargo fmt
進行檢查,並且包含測試(如果適用)。
如果您在使用 Helios 時遇到問題或正在考慮做出貢獻,請隨時在此處加入我們的電報。
該代碼按原樣提供。對於代碼的安全性或正確性,不作任何明示或暗示的保證、陳述或保證。它未經審核,因此不能保證它會按預期工作,用戶可能會遇到傳輸資訊的延遲、故障、錯誤、遺漏或遺失。本回購協議中的任何內容均不應被解釋為針對任何特定事實或情況的投資建議或法律建議,並且無意取代稱職的律師。如果您有任何疑問或疑慮,強烈建議您聯繫您所在司法管轄區的信譽良好的律師。 a16z對前述內容的任何使用不承擔任何責任,使用者應謹慎使用並自行承擔風險。請參閱 a16z.com/disclosures 以了解更多資訊。