錢包開發的技術挑戰之一:以太坊索引的複雜性

Kordan Ou
Oct 25, 2024

--

隨著區塊鏈技術的蓬勃發展,錢包應用成為了每個鏈上使用者與區塊鏈互動的橋樑。看似簡單的錢包介面,像是顯示以太幣餘額或歷史交易紀錄等功能,其實背後有著巨大的技術挑戰。而在這些挑戰中,以太坊的鏈上資料索引系統尤為困難。本文將深入探討以太坊錢包開發中索引技術的障礙,帶你理解錢包開發不為人知的技術難點。

1. 以太坊的資料結構特性與其挑戰

從錶面上看,以太坊區塊鏈作為一個系統記錄(system-of-record)擁有完美的單一歷史記錄、不可更改性以及追加式設計,似乎是建立資料索引的理想選擇。然而,實際情況卻充滿挑戰。這些挑戰主要來自於以下特性:

  • 餘額變化記錄的不可見性: 以太坊上的 ETH 轉帳不會直接觸發事件日誌(logs),這意味著僅透過簡單查詢無法獲取歷史轉帳記錄。相反,我們需要追蹤每筆交易的呼叫樹,利用trace_block等操作來尋找交易紀錄,這是一個既耗時又昂貴的過程。
  • 重組處理的困難: 區塊鏈出於共識機制的需求,可能發生區塊重組 (reorg),例如 Polygon 上的多達 10 個區塊的重組。每次重組都需要刪除部分資料並重新寫入,這對於龐大的資料庫來說,處理效率可能受到嚴重影響,甚至出現索引停擺。

2. 資料來源的不穩定性

為了在錢包應用中展示及時準確的資料,開發者可以選擇自行運行節點或使用託管節點 API 服務。然而,即使是市面上知名的託管節點 API(例如 Alchemy、Quicknode 或 Chainstack),也難免會出現性能瓶頸、正確性錯誤或可用性問題。這些節點服務通常會受限於 JSON RPC API 的查詢效率,尤其當我們需要跨鏈或大量歷史查詢時,效能問題會更加顯著。為了應對此情況,開發者往往會使用多個 API 來源以提高穩定性,但這也意味著額外的開銷和運行複雜度。

3. 索引器的設計與儲存負擔

在傳統資料庫中,我們可以根據需求進行索引的靈活設計,但在區塊鏈資料上則有所不同。以太坊的區塊資料非常龐大,錢包開發者通常需要建立一個索引器來寫入鏈上資料至資料庫。常見的索引器如 The Graph、Ponder 或 Shovel 雖然可以協助建立索引,但都伴隨著大量資料寫入的需求,例如僅交易追蹤就可能佔據約 1TB 的資料量。更麻煩的是,這些索引器在處理區塊重組時,往往會發生查詢超時或無法同步等問題。

例如,Daimo Indexer 團隊在運行 Shovel 索引器時遇到的問題便體現了這一挑戰。原本簡單地利用 Shovel 將以太坊資料從 RPC 介面寫入 Postgres 資料庫的操作,隨著資料量增長迅速失效。Daimo 團隊不得不分拆出一個專用的「JumboDB」來儲存鏈上原始資料,並建立另一個程式來提取 Daimo 專用的資料。然而,隨著資料量持續增加,這種方法最終因 Postgres 無法快速刪除重組區塊而被迫放棄。

4. 跨鏈資料同步的需求

隨著以太坊逐漸採用 Layer 2(L2)擴展技術與 Rollup 解決方案,開發者需要處理的不再僅僅是單一鏈,而是多條鏈的同步資料。例如,若要展示帳戶的真實餘額,就必須跨主鏈及多個 Rollup 平台進行資料整合,這需要在每條鏈上重複建立索引器,極大地增加了開發和維護的複雜度。

5. 更高效的資料備份與回填

區塊鏈的資料隨著時間推移而增加,因此回填歷史資料是一個常見需求。然而,現有的 JSON RPC API 的查詢效率極低,尤其是當需要回填歷史資料時,API 僅能以逐區塊的方式來回傳資料,速度緩慢且開銷高昂。理想情況下,開發者希望能有類似 S3 儲存或 Torrent 檔案的方式來快速載入歷史資料,這樣可顯著提高回填效率。

6. Daimo Indexer 的解決方案

針對上述問題,Daimo Indexer 採取了多種改進策略,最終設計出了一個更輕量化、靈活性更高的索引系統:

  • 直接從 RPC 獲取資料並自動過濾: Daimo Indexer 從 RPC 中直接抓取所需的事件和追蹤記錄,並以自定義邏輯進行篩選,僅儲存必要的資料至資料庫中,這減少了大量不必要的寫入和儲存空間需求。
  • 去除第三方依賴性: Daimo Indexer 不再依賴外部索引器,這樣一來,當出現問題時開發團隊可以自主進行調整,提升了整體的靈活性與維護性。
  • 特定鏈的多鏈資料統一: 對於 Daimo 錢包關注的特定帳戶,Daimo Indexer 實現了在多條鏈上的索引,確保在多鏈環境中的資料一致性,尤其針對 Rollup 架構的應用場景。

結論:錢包索引的挑戰與未來展望

以太坊作為錢包資料來源的理想性在技術上存在重重障礙,索引技術的需求在於確保高效、即時的資料同步與顯示。這些挑戰不僅來自於以太坊本身的設計限制,也受到多鏈環境及其擴展技術的影響。Daimo Indexer 的經驗告訴我們,透過建立更輕量、具備自主控制的索引系統,能夠剋服傳統索引方法的瓶頸。隨著技術的進一步發展,以太坊錢包應用的使用者體驗有望變得更加流暢、可靠。

參考:https://daimo.com/blog/posts/less-terrible-ethereum-indexing

--

--

Kordan Ou
Kordan Ou

Written by Kordan Ou

我是 KryptoGO 的創辦人,同時也是一位加密貨幣的投資者和愛好者。我非常熱愛加密金融科技,並一直關注著行業監管的最新發展。如果你對這個領域感興趣,或是對加密貨幣和區塊鏈有疑問,歡迎關注我!我們可以一起探討這個迅速發展的領域,了解更多有趣的資訊。更多關於我:https://kordan.me

No responses yet