🤖 最新推出:《Quicknode 人工智慧實戰手冊》 10 個經過實測的 AI 程式設計食譜agents 。
查看食譜 RPC 與索引:高效存取區塊鏈資料 |Quicknode已通過 SOC 2 Type II 認證 · ISO 27001
答案>了解索引與區塊鏈資料>RPC 與索引:兩者有何區別? 簡而言之:RPC 與索引是兩種截然不同的區塊鏈資料存取方式。RPC 端點可讓您以逐次請求的方式,即時查詢區塊鏈的當前狀態。 索引則會將區塊鏈資料擷取、轉換並儲存至可搜尋的資料庫中,讓您的應用程式能針對歷史紀錄執行複雜的查詢。RPC 就像是請圖書館員幫您找出某本特定的書;索引則像是為整個圖書館建立卡片目錄。大多數生產環境的應用程式都需要這兩者。
簡單的解釋
每項區塊鏈應用程式都需要數據。錢包需要帳戶餘額;DeFi 儀表板需要代幣價格和流動性池狀態;NFT 交易平台需要所有權記錄和交易歷史;分析平台則需要涵蓋數千個合約和數百萬筆交易的彙總指標。問題在於,該如何將這些數據從區塊鏈導入您的應用程式中。
RPC 端點是區塊鏈的原生介面。當您的應用程式向節點發送 JSON-RPC 請求時,其實是在直接詢問區塊鏈的當前或近期狀態:這個錢包目前的餘額是多少、這筆特定交易發生了什麼、第 20,000,000 個區塊包含哪些內容。 節點會查詢答案並將其傳回。對於點對點查詢而言,RPC 具有即時、精準且直截了當的優勢。但它存在一個關鍵限制:RPC 方法是為了擷取特定且已知資料而設計的,並非用於跨鏈搜尋或彙總。目前沒有任何 RPC 方法能執行「找出這個錢包過去 30 天內的所有交易」或「顯示按交易量排序的前 10 大流動性池」這類操作。
索引功能透過在原始區塊鏈資料之上建立可搜尋的資料庫,來填補這項缺口。索引器會在每個區塊產生時讀取該區塊,解碼交易與事件日誌,將原始資料轉換為結構化記錄,並將這些記錄寫入具備適當索引的資料庫中。完成索引後,您的應用程式即可使用 SQL、GraphQL 或資料庫所支援的任何其他查詢語言來查詢資料。如此一來,複雜的篩選、彙總、排序、聯結以及全文搜尋皆成為可能。
何時該使用 RPC
當您的應用程式需要即時讀取或寫入特定且已知資料時,RPC 便是正確的選擇。 查詢錢包的當前 ETH 餘額只需單次呼叫「eth_getBalance」。將簽署過的交易提交至記憶池則需要「eth_sendRawTransaction」。讀取智慧合約檢視函式的回傳值則使用「eth_call」。這些都是點查詢,您確切知道自己想要什麼,而 RPC 方法也能直接回傳該結果。
RPC 也是執行寫入操作的唯一選項。您無法透過索引器提交交易。索引器是唯讀系統,僅在資料已提交至區塊鏈後才進行處理。每當您的應用程式需要發送交易、批准代幣、與智慧合約互動,或廣播任何會改變狀態的操作時,都必須透過 RPC 進行endpoint 。
即時狀態驗證是 RPC 的另一項優勢。當 DeFi 協議在執行清算前需要檢查用戶的抵押率,或是當跨鏈橋需要驗證存款是否已確認時,它會透過 RPC 查詢節點的當前狀態。回應內容反映了最新的規範區塊,確保資料盡可能保持最新。
RPC 的不足之處在於,任何需要跨多個區塊或合約進行資料掃描、篩選或彙總的查詢。例如「顯示所有涉及此地址的 ERC-20 轉帳」這類查詢,必須遍歷每個區塊並檢查每筆交易收據,若僅透過 RPC 來處理,在運算上是不切實際的。 「過去 24 小時內 Uniswap V3 的總交易量是多少?」則需要解碼並彙總來自數十個流動性池合約、橫跨數千個區塊的事件日誌。這些都是索引相關的問題。
何時應使用索引
每當您的應用程式需要搜尋、篩選、排序或彙總區塊鏈資料時,索引功能便至關重要。那些能顯示使用者橫跨多種代幣與區塊鏈之完整交易紀錄的投資組合追蹤工具,皆仰賴索引資料運作。而展示交易量、TVL 趨勢、Gas 消耗模式及協議指標的分析儀表板,則完全建構於索引資料庫之上。像 Etherscan 這樣的區塊鏈瀏覽器會對整條鏈進行索引,讓使用者能夠搜尋任何地址、交易或合約。
歷史分析是另一項核心的索引應用場景。若合規部門equipe 需要追蹤資金在六個月內透過一系列錢包的flow 流向,這就需要透過複雜的聯結與篩選條件來查詢已建立索引的交易資料。若研究機構希望分析一年內Ethereum 區塊中的 MEV 提取模式,則需要一個涵蓋交易、追蹤紀錄及事件日誌的全面性索引,且這些查詢的運算負載應由資料庫而非區塊鏈節點來處理。
事件驅動式架構同樣能從索引技術中受益。相較於透過輪詢 RPC 端點來偵測特定智慧合約事件何時觸發,索引器能夠持續處理新的區塊,並即時將匹配的事件推送至您的應用程式。這種方式比 WebSocket 訂閱(可能因連線中斷而錯過事件)更可靠,也比 HTTP 輪詢(會因收到空回應而浪費請求)更有效率。
兩者併用
大多數生產環境中的區塊鏈應用程式都會結合使用 RPC 和索引技術。面向使用者的讀取體驗通常由索引資料驅動,例如:投資組合價值、交易紀錄、分析儀表板以及搜尋結果。當使用者執行某項操作(例如發送交易、兌換代幣或鑄造 NFT)時,應用程式會切換至 RPC 模式,將交易提交至網路並確認其已被納入區塊。 交易確認後,索引器會從新區塊中擷取該筆交易並更新資料庫,隨後這些變更便會反映在使用者介面上。
此架構能清晰地分離關注點。RPC 負責處理即時寫入與點讀操作;索引資料庫則負責處理複雜的讀取與歷史查詢。其結果是,應用程式在用戶端呈現出快速且反應靈敏的體驗,同時在後台支援複雜的資料存取模式。
RPC 與索引之間有何區別?
面向 | RPC | 索引編製 |
|---|
存取模式 | 一個請求,一個答案 | 搜尋、篩選與彙總 |
資料的新鮮度 | 即時、最新區塊 | 與鏈條尖端略有滯後 |
歷史深度 | 需要一個存檔節點 | 已儲存且可立即查詢 |
寫入支援 | 是的,寫作的唯一方法是 | 不,僅限讀取 |
設定所需的工作量 | 洛,打個電話給endpoint | Higher,自建或購置管線 |
最適合 | 即時讀取與交易 | 分析、歷史紀錄與搜尋 |
對於歷史查詢而言,索引器是否比 RPC 更快?
對於橫跨多個區塊的任何資料,答案確實是肯定的。向 RPC 節點查詢錢包的完整歷史紀錄,意味著必須逐區塊掃描;而索引器則已將該資料解碼並儲存起來,因此相同的查詢只需透過單次快速查詢即可完成。歷史紀錄越久遠,兩者之間的差距就越大:請參閱「為何查詢區塊鏈資料如此困難」一文,了解即時資料與歷史資料如何產生相互矛盾的影響。
查詢類型 | 最佳工具 | 為什麼 |
|---|
當前餘額或狀態 | RPC | 直接且即時 |
提交一筆交易 | RPC | 只有 RPC 可以寫入 |
錢包交易紀錄 | 索引器 | 需要跨區塊搜尋 |
協議總量或 TVL | 索引器 | 需要進行時間序列彙總 |
新區塊即時活動 | RPC 或 串流 | 低延遲推送 |
能否在 RPC 之上建置一個區塊鏈索引器?
是的,而且幾乎所有的索引器都是如此運作的。索引器會透過 RPC 或串流饋送讀取區塊鏈,解碼每個區塊,並將結構化的資料列寫入其自身資料庫中。其中最困難的部分在於如何可靠地處理區塊鏈重組、重試以及資料缺口,這也是為什麼許多團隊會採用受管理的區塊鏈資料串流管道,而非手動編寫RPC 輪詢迴圈。
索引會取代 RPC 嗎?
不。索引與 RPC 是Web3 基礎架構堆疊中互補的層級。RPC 仍是提交交易和讀取最新狀態的唯一途徑,而索引則為搜尋、歷史紀錄和分析功能提供支援。生產環境中的應用程式會將寫入操作和即時讀取轉發至 RPC,並將複雜的讀取操作轉發至索引。
常見問題
能否透過索引器提交交易?
不。索引器是唯讀系統,會在資料提交至區塊鏈後進行處理。每筆交易的提交都必須透過 RPCendpoint 進行。
為什麼 RPC 在執行分析查詢時會變慢?
RPC 每次呼叫僅會傳回一項已知資料,且無法在鏈上進行篩選或彙總。若要透過 RPC 回答分析問題,就必須進行數千次連續呼叫,並自行整合結果,這不僅速度緩慢,成本也高昂。
與 RPC 相比,索引資料的即時性有多高?
索引資料通常會比區塊鏈末端滯後數秒至數分鐘,具體時間取決於索引器。RPC 反映的是最新的規範區塊,因此若需不到一秒的即時性,仍需直接從節點讀取資料。
您需要一個用於建立索引的存檔節點嗎?
The Graph 究竟是索引器還是 RPC 提供者?
The Graph 是一種索引協定。其專屬的索引器透過 RPC 讀取區塊鏈,並將處理後的結果以可供查詢的子圖形式呈現。它本身無法提交交易,也無法提供亞秒級的即時資料。
Quicknode 是如何同時支援這兩者的
Quicknode 為此方程式的兩端皆提供基礎架構。Core API提供橫跨 80 多條區塊鏈的全球分散式、低延遲 RPC 存取服務,能以 99.99% 的正常運作率處理即時讀取與交易提交,且回應速度比競爭對手快 2.5 倍。強化後的 API 方法可減少執行常見操作(例如查詢代幣餘額或 NFT 收藏集)所需的個別 RPC 呼叫次數。
Quicknode Streams 透過提供基於推送的資料管道,將原始或經過篩選的區塊鏈資料直接傳送至您的資料庫、資料倉儲或 Webhook,從而彌合 RPC 與索引之間的差距。 您無需建置和維護自訂的 RPC 輪詢基礎架構來饋送資料至索引器,只需配置一個「串流」(Stream),Quicknode 便會自動處理資料擷取、篩選、傳送、重組修正及重試邏輯。Streams 同時支援即時串流與歷史資料回填,因此您只需使用單一工具,即可從創世區塊開始填充索引,並使其保持最新狀態。 對於需要自行建置索引器的團隊,Quicknode 發布了一份逐步指南,說明如何使用Streams 建立一個由 PostgreSQL 支援的完整區塊鏈索引器。
延伸閱讀