🤖 新推出:《Quicknode 》AI 烹饪指南 10个经过验证的AI编程教程agents 。
查看食谱 什么是区块链索引?其作用及工作原理 |Quicknode
我们的通讯中包含丰富的免费资源、Quicknode 动态、Web3行业洞察等内容。
CLI、Admin API 、MCP、SDK ,以及支持 75 多个区块链的原生 AI 工具。由开发者打造,专为开发者服务。
涵盖 Python、Ruby 和 JavaScript 的最新代码示例。关于智能合约、NFT 和去中心化应用(dApp)的深入指南。
通过 SOC 2 II 类认证 · ISO 27001
简而言之:区块链 索引是指从区块链中提取原始数据,将其转换为结构化格式,并存储在经过优化以支持快速查询的数据库中的过程。 区块链的设计初衷是确保安全性和不可篡改性,而非用于搜索。如果没有索引,即使回答“显示该钱包的所有转账记录”这样简单的问题,也需要从创世区块开始扫描每一个区块,这在大规模应用中是不切实际的。 索引器通过创建可查询的数据库来解决这一问题,使应用程序能够实时访问链上数据。
简明解释 区块链是只读账本。它们非常擅长以防篡改的顺序记录交易,但在回答有关这些交易的问题方面却表现不佳。它没有内置的“搜索”功能,也没有SQL查询。仅凭标准的RPC方法,无法实现“查找过去30天内涉及该地址的所有ERC-20转账”这样的操作。
通过 RPC 端点提供的原始工具在设计上较为基础。您可以根据区块号获取特定区块,根据哈希值获取特定交易,还可以获取特定区块中的账户余额。但您无法跨区块搜索、按条件筛选、聚合数据,也无法将区块链不同部分的信息进行关联。 若要查找来自特定钱包的所有交易,您需要获取所有已生成的区块,从每个区块中提取所有交易,检查发件人或收件人是否与目标地址匹配,并收集匹配项。在Ethereum 上,这意味着需要扫描超过 2000 万个区块;在Solana 上,则意味着需要扫描数十亿个区块槽位。如果没有索引,这不仅速度极慢,而且在任何合理的时限内都根本无法实现。
区块链索引通过运行一个持续从节点读取新区块、解码原始数据(交易、事件日志、状态变更、追踪信息)、将其转换为结构化记录,并将其写入带有适当索引的数据库的过程来解决这一问题。数据一旦进入数据库,您的应用程序即可使用 SQL 或 GraphQL 等熟悉的工具进行查询,响应时间不到一秒。
索引的工作原理
索引管道遵循“提取、转换、加载”(ETL)模式。在提取阶段,索引器连接到区块链节点并读取原始区块数据。这些数据包括区块头、交易、交易收据(其中包含事件日志)以及可选的跟踪数据(用于捕获合约间内部调用)。索引器按顺序处理区块,从配置的起始区块开始,沿区块链历史记录依次推进。
在转换阶段,索引器将原始数据解码为有意义的结构。例如,原始事件日志被编码为包含主题哈希和数据字段的十六进制字符串。索引器使用智能合约的 ABI(应用程序二进制接口)将这些数据解码为带有名称参数和正确数据类型的可读事件。 一条原始的 Transfer 事件日志将转化为包含“发件人”地址、“收件人”地址、代币数量和合约地址的结构化记录。转换阶段还可以计算衍生数据,例如计算转账时的美元价值、按代币汇总交易量,或追踪实时余额。
在加载阶段,结构化记录会被写入数据库,无论是 PostgreSQL、MongoDB、Snowflake、Elasticsearch 还是其他存储系统。数据库会在应用程序将要查询的字段(如钱包地址、代币合约、时间戳和区块号)上创建索引,从而支持对整个数据集进行快速查找和复杂查询。
一旦索引器追上了区块链的末端,它就会切换到实时mode 模式,在每个新区块生成时立即对其进行处理,并即时插入相应的记录。这样可以确保数据库始终与区块链的实时状态保持同步。
重组问题 区块链索引工作中最具挑战性的方面之一是处理链重组。当区块链的标准链发生变化时,就会发生链重组,这通常是因为在同一高度生成了相互竞争的区块,而网络最终收敛到一个与您的索引器最初处理的分叉不同的分叉上。一旦发生这种情况,您的索引器已经处理过的区块将不再是标准链,而从这些区块派生的任何记录都会出现错误。
一个健壮的索引器必须能够检测到重组操作,回滚受影响的记录,并重新处理正确的数据块。如果无法处理重组操作,将会导致数据库中出现“幽灵事务”(即存在于旧分支但未出现在新分支中的事务)、“缺失事务”(即存在于新分支但未包含在旧分支中的事务)以及状态不正确的情况。对于金融应用程序而言,此类数据损坏是绝对不可接受的。
重组处理大大增加了索引管道的复杂性。索引器需要跟踪哪些区块已被处理,将当前看到的区块链与已存储的数据进行比较,检测差异,并干净利落地执行回滚。这是团队选择托管索引解决方案而非从头构建自定义索引器的主要原因之一。
索引方法 The Graph 是应用最广泛的去中心化索引协议。开发者会创建“子图”(subgraphs),这些配置文件用于定义需要监控哪些智能合约、监听哪些事件,以及如何将事件数据映射到可查询的模式中。被称为“索引器”(Indexers)的独立节点运营商负责运行处理基础设施,并通过 GraphQL 端点处理查询请求。 The Graph 非常适合处理标准用例,例如查询 DeFi 协议数据、NFT 所有权历史以及 DAO 治理活动。其局限性包括延迟(子图更新并非总是实时的)、模式缺乏灵活性(更改模式通常需要重新部署和重新同步),以及对去中心化网络可用性的依赖。
自定义索引器让团队能够完全掌控其数据管道,但需要投入大量工程资源。构建一个生产级别的自定义索引器,意味着需要编写数据块摄入逻辑、事件解码、数据库模式设计、重组处理、错误恢复、监控以及扩展基础设施。对于具有独特数据需求的大规模应用程序而言,这种投入或许物有所值,但对大多数团队来说,这意味着需要耗费数月的工程时间,而这些时间本可以用于开发其核心产品。
基于推送的流式传输是一种较新的方法,它通过将经过筛选的区块链数据直接传输到您的存储系统,从而简化了索引过程,使您无需自行构建和维护提取层。与索引器从节点拉取数据不同,流式传输服务会将您所需的确切数据推送至您的数据库、Webhook 或数据仓库。
Quicknode 如何为区块链索引提供支持 Quicknode Streams 该服务专为区块链数据索引而设计。Streams 提供了一条基于推送的数据管道,可将原始或经过过滤的区块链数据直接传输到您指定的目标位置,包括 PostgreSQL、Snowflake、Amazon S3、Azure Storage 和webhooks 。您无需构建和维护 RPC 轮询基础设施来从区块链中提取数据,只需配置一个流(Stream),指定所需的网络、数据集(区块、交易、收据、追踪记录)以及可选的 JavaScript 过滤器,剩下的工作就由Quicknode 来处理。
Streams 以最终性顺序交付数据,并提供“仅一次”交付保证,这意味着您的数据库始终与规范链保持一致,而无需您的代码管理区块排序或去重。内置的重组处理功能会自动检测链的重组并发送更正数据包,因此您的索引数据始终反映链的真实状态。 对于历史数据,Streams 的“回填”功能可让您将任意范围的历史区块填充到数据库中,同步速度比传统的基于 RPC 的索引管道快达七倍,同时提供与实时流传输相同的过滤和交付保证。
Quicknode 此外,还发布了一份使用Streams 构建区块链索引器的分步指南,演示了如何创建一个基于 PostgreSQL 并配备 REST API 的完整 ERC-20 转账索引器,内容涵盖从配置到查询的整个过程。对于需要更复杂数据处理的团队,Streams 可与Quicknode Functions 集成,从而在流式数据管道之上实现无服务器数据转换、数据增强和自动化处理。
索引和原始 RPC 之间有什么区别? 原生 RPC 和索引功能分别适用于不同类型的问题。RPC 专为点查询和写入操作设计:获取该区块、读取该余额、发送该交易。索引功能则专为搜索和分析设计:某个钱包的所有转账记录、按代币划分的总交易量、某个收藏集的所有权历史。下表对比了这两者,以便您针对不同任务选择合适的工具。
维度
原始 RPC
索引数据库
最擅长
点读和事务提交
搜索、筛选和聚合
查询语言
JSON-RPC 方法
SQL 还是 GraphQL
历史扫描件
缓慢地,逐块进行
快速、预处理且已建立索引
部署工作量
连接到一个endpoint
构建或配置管道
典型延迟
每次呼叫的往返时间
在大型数据集上处理速度不到一秒
索引能支持哪些类型的查询? 一旦数据被索引到结构化数据库中,那些在原始 RPC 环境下无法实现的查询就变得轻而易举。你可以列出某个地址的所有交易记录、追踪 NFT 的完整所有权历史、汇总各代币的每日交易量、按持仓量对钱包进行排名,或者跨多个合约关联事件。这些正是驱动仪表盘、区块链浏览器和分析产品的核心查询。关于为何在没有索引的情况下这些查询如此困难,请参阅“查询区块链数据” 。
索引和流式处理是如何协同工作的? 流处理和索引是互补的两个层。流处理是一种传输机制,可在新区块和事件发生时将其推送至您的基础设施;而索引则是将这些传入的数据组织成可查询的数据存储。现代常见的架构会使用流处理管道将记录导入到已建立索引的数据库中,从而彻底消除脆弱的轮询层。有关数据最初如何到达索引器的详细信息,请参阅“什么是区块链数据流处理 ”以及“轮询与流处理的对比 ” 。
索引器是如何补全历史数据的? 回填是指在切换到实时数据之前,将历史区块填充到数据库中的过程。 一个优秀的处理流程应从选定的历史区块开始,沿区块链向前处理,并在到达链尖时无缝过渡到实时数据,从而使历史记录和实时记录共享同一数据模型。如果处理得当,回填的速度远快于通过原始 RPC 重新扫描整个区块链。请参阅“如何访问历史区块链数据 ”以及“实时区块链数据与历史区块链数据的 权衡”以了解相关取舍。
常见问题解答
为什么不能直接使用 RPC 代替索引呢? RPC 非常适合查询特定的区块、交易或余额,但无法在整个区块链上进行搜索、筛选或聚合。如果通过 RPC 回答“该钱包的所有转账”这类问题,就意味着需要逐个扫描数百万个区块,这在实际操作中是不切实际的。索引机制会将这些数据预处理并存储到数据库中,从而使相同的问题只需通过单次查询即可得到结果。
什么是子图? 子图是 The Graph 采用的一种配置,用于定义应索引哪些合约和事件,以及如何将它们映射到可查询的 GraphQL 模式中。这是构建索引的一种常见方式,非常适合标准的 DeFi、NFT 和治理数据,但与自定义或基于流的管道相比,它在实时延迟和模式灵活性方面可能存在权衡。
索引器如何处理链重组? 一个健壮的索引器能够检测到规范链发生变化时,回滚源自孤立区块的记录,并重新处理正确的记录。如果没有这一机制,数据库中就会积累幻影事务或缺失的事务。托管管道通过发送更正数据包来自动处理重组。有关背景信息,请参阅“什么是区块链重组” 。
我应该自己开发索引器,还是使用托管服务? 构建自定义索引器虽然能提供完全的控制权,但需要编写数据摄取、解码、模式设计、重组处理、监控和扩展等代码,这通常需要数月的时间。托管管道会为您处理数据提取、排序、重组和交付,因此大多数团队只需配置一项服务,并将工程精力集中在核心产品上,就能更快地投入生产环境。
索引后的区块链数据可以存储在哪些数据库中? 索引数据通常会存储在 PostgreSQL、MongoDB、Snowflake、Elasticsearch 或 Amazon S3 等对象存储中,具体取决于您是否需要事务性查询、全文搜索或大规模分析。流处理管道可将记录直接传输到这些目标系统中。如需端到端的教程,请参阅《构建者指南》 ,其中详细介绍了常见的索引模式。
延伸阅读 // Publisher
Quicknode
更新于2026年6月3日
2026年2月3日 — 阅读时间10分钟