【区块链】查询-SubQuery

简介

一个跨链索引系统,支持在Layer1区块链(Polkadot)和去中心化应用程序之间建立索引和查询层

https://www.subquery.network/

https://github.com/subquery/subql

支持的跨链网络:

  • Polkadot
  • Cosmos
  • Avalanche
  • Algorand
  • Terra

特点:

  • write once, run anywhere
  • 可以使用一个项目,一个数据库,和一个查询终端来处理跨链平台的查询需求(例如波卡和其平行链,跨Cosmos Zones)
  • 解决 polkadot-js 单一查询无法使用条件的缺陷
  • 过滤数据
  • 提供关系数据库
  • 数据转化,与新旧数据交互
  • 组合条件及大批量数据查询
  • 一站式数据存储和查询

系统工作原理

工作流程:

  1. 从区块链中实时获得和过滤数据;
  2. 将数据保存到高性能数据库中;
  3. 从分布式应用中,使用复杂的GraphQL语法查询数据集。

细节:

  1. 用户项目中定义了需要储存的数据项、类型,以及如何处理这些数据

  2. subql-node 在沙箱(vm2 sandbox安全机制)中运行用户项目,读取 substrate 链上数据之后,进行数据处理,处理完毕后写入到关系型数据库中

  3. 通过 subql-query 提供的 graphql 接口,查询和使用数据库中的数据

一个索引器将根据默认为 100 的 batch-size 标记通过 polkadot api 获取每个区块数据, 并将此放置在缓冲区以供处理。然后,当处理区块数据时,索引器将所有这些区块从缓冲区取出, 检查这些区块中的事件和外在内容是否匹配用户定义的过滤器。

数据库

Postgres数据库

PostgreSQL具有所有数据库中最活跃的联邦对象集合-外部数据包装器(FDW)

支持的索引种类多

索引

Indexing 证明使我们能够保证使用同一个 SubQuery 项目的两个不同的 indexer 索引了完全相同的数据, 这对于开发去中心化 SubQuery 网络非常关键。 我们用 Merkle Mountain ranges 算法来确认和保证这一点

使用worker threads支持并行化

使用字典进行索引

当使用字典时,索引器将首先将调用和事件过滤器作为参数,并将其合并为一个 GraphQL 查询。然后它使用字典的 API 来获取一个相关的区块高度列表,只包含特定事件和相关信息。如果使用默认值,这通常大大低于100。

例如,想象一下,您需要检索转账的相关事件。并非所有区块都有这个事件(在下面的图像中,区块3和4中没有转账的事件)。

字典允许您的项目跳过这些区块,而不是在每个区块中寻找一个转账事件。它跳到了区块1、2和5。这是因为字典是事先计算的每个区块中所有调用和事件的参考值。

这意味着使用字典可以减少索引器从该区块链中获得的数据数量,并减少当地缓冲区中储存的“不想要的”区块的数量。但与传统方法相比,它增加了一个额外步骤,需要从字典的 API 获取数据。

字典什么时候没有用?

当block handlers用于从链中获取数据,每个区块都需要处理。因此,在这种情况下使用字典并不提供任何好处,索引器将自动切换到默认的非字典方法。

另外,当处理发生或存在于每个区块的事件或外部事件时,例如 timestamp.set, 使用字典不会提供任何额外的帮助。

fig2

结构

Node依赖

该node用于从项目基于的链上复制数据到Postgres数据库中

如果使用docker部署项目,则docker中已经含有该部分

SubQuery Network

激励+可验证

将项目发布到 SubQuery 网络后,任何人都可以对其进行索引和托管,从而可以更快、更可靠地向世界各地的用户提供数据。

主要角色

网络中的每个人都有一个角色,从高技术开发人员到非高技术开发人员。 SubQuery 网络中包括四个主要参与者.

消费者

消费者将向 SubQuery 网络检索其 dApp 或其工具的特定数据,并为每个请求通过代币 SQT 的形式支付广播费用。

索引者

索引器者将在自己的基础设施中运行和维护高质量的 SubQuery 项目,同时运行着索引器和查询服务,并将会根据其提供的服务获得 SQT 代币奖励。

成为索引者的条件:拥有最低数量以上的SQT,并进行抵押

激励机制

索引者被发现提供无效、不完整或不正确的数据,会被扣除抵押的SQT

可以吸引委托者进行投资,索引者使用这些额外的代币来增加分配给他们选择的项目的金额。 这使索引者能够增加收入。

fig1

委托者

委托者将通过委托来参与网络,支持他们最喜欢的索引者来,以根据索引者所做的工作获得奖励。

构建者

构建者是网络中运行的 SubQuery 项目的构建者。 他们编写并发布 SubQuery 项目,以便网络索引和运行。

Author: iwannaeat
Link: https://iwannaeat.github.io/2023/02/08/【区块链】查询-SubQuery/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.