10 个版本 (4 个重大更改)
0.5.4 | 2024 年 3 月 20 日 |
---|---|
0.5.3 | 2024 年 3 月 18 日 |
0.4.0 | 2023 年 12 月 5 日 |
0.3.0 | 2023 年 10 月 25 日 |
0.1.1 | 2023 年 8 月 9 日 |
#31 in #hybrid
92 每月下载
在 2 个 crate 中使用 (通过 hybrid-api)
340KB
4K SLoC
Hybrid Indexer
Substrate 事件索引器。
该工具的开发得到了 Web3 基金会的资助。
概述
Hybrid 采用独特的、部分去中心化的方法,解决了当前开源 Substrate 区块浏览器的主要两个问题:中心化和巨大的托管需求。
一个完全集中的区块浏览器通常会使用 SQL 数据库存储整个归档节点的内容,并存储其他数据以索引所有内容。可靠地运行此类数据库需要巨大的系统资源和费用。
查询区块信息或任何区块高度的链状态时,Hybrid dapp 将使用浏览器内的 Substrate Connect 轻客户端。或者,这些查询可以直接通过 WSS 发送到归档节点。
对于事件搜索功能,Hybrid 索引器有效地索引了所有区块中的事件,以便可以通过简单的 WSS 查询找到它们。例如,查找与特定 AccountId
相关的所有事件。
这种架构有三个主要优势
- 状态查询是完全去中心化的 - 您不必信任 RPC 提供者不会对您撒谎
- 100% 可用性 - 轻客户端不依赖于任何可能始终不可用的集中式服务
- Hybrid 索引器具有显著降低的系统要求 - 它不需要存储所有链历史记录
最终,Hybrid 将使用这种集中式/去中心化方法作为 ink! 合约浏览器的基础。
由于 Substrate 是一个联邦平台,将能够从 Hybrid dapp 浏览多个链。
架构
Hybrid 索引器是用 Rust 编写的。它可以配置为连接到任何 Substrate 链。
它使用 subxt 读取所有区块中的事件,并使用 sled 库将这些事件索引到键值数据库中。这比在 SQL 数据库中存储索引要高效得多。
具有识别参数的事件将被索引。例如,在余额组件中,转账事件可以通过AccountId
识别,包括from
和to
的AccountId
。
Hybrid为以下Substrate组件内置了索引宏:系统、预映像、索引、余额、交易支付、质押、会话、民主、集体、选举Phragmen、国库、托管、身份、代理、多重签名、快速解质押、多阶段选举提供者、小费、赏金、子赏金、包裹列表、提名池。
Hybrid目前支持以下事件参数的索引:AccountId
、AccountIndex
、AuctionIndex
、BountyIndex
、CandidateHash
、EraIndex
、MessageId
、ParaId
、PoolId
、PreimageHash
、ProposalHash
、RefIndex
、RegistrarIndex
、SessionIndex
、TipHash
。
此外,所有事件都按事件变体索引。这意味着,例如,可以获取所有账户的所有余额转账列表。
要索引一个区块,首先需要查询确定区块号的哈希值。然后查询元数据版本。最后下载区块本身。为了确保吞吐量尽可能高,同时索引多个区块以抵消往返延迟。
与每个Substrate链都是一个单独的Rust构建,使用Substrate组件类似,每个链都需要一个单独的Hybrid索引器构建,配置为索引正确的组件。
当链可能执行运行时升级时,该链的Hybrid索引器需要带有任何更新事件的新的发布版本。如果索引器实例在运行时升级之前没有更新,则可以在正确的区块号上重新启动新版本。
WSS查询通过高度可扩展的tokio_tungstenite Rust库处理。
消费者将能够订阅与查询匹配的新事件。
数据库键以这种方式构建,以便可以使用从特定区块号开始的迭代器找到事件。例如,对于AccountId键空间
AccountId/BlockNumber/EventIndex
数据库条目是键唯一的。不存储值。每个找到的事件只需要返回区块号和事件索引。这减少了索引数据库的大小,并增加了去中心化。前端可以以去中心化的方式查询链以检索事件。
依赖关系
~20–31MB
~476K SLoC