RPC 与索引:高效访问区块链数据 |Quicknode🤖 新推出:《Quicknode 》AI 烹饪指南 10个经过验证的AI编程教程agents 。
查看食谱 通过 SOC 2 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 也是执行写入操作的唯一途径。您无法通过索引器提交交易。索引器是只读系统,仅在数据已提交至区块链后进行处理。每当您的应用程序需要发送交易、批准代币、与智能合约交互或广播任何会改变状态的操作时,都必须通过 RPCendpoint 进行。
实时状态验证是 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 的完整区块链索引器。
延伸阅读