基于Substreams的子图
Reading time: 7 min
Developed by , Substreams is an exceptionally powerful processing engine capable of consuming rich streams of blockchain data. Substreams allow you to refine and shape blockchain data for fast and seamless digestion by end-user applications. More specifically, Substreams is a blockchain-agnostic, parallelized, and streaming-first engine, serving as a blockchain data transformation layer. Powered by the , it enables developers to write Rust modules, build upon community modules, provide extremely high-performance indexing, and their data anywhere.
Go to the to learn more about Substreams.
将Substreams的强大功能与子图(subgraphs)的可查询性相结合。在发布一个由Substreams驱动的子图时,Substreams的转换过程产生的数据可以,这些实体变更与子图的实体是兼容的。
如果您已经熟悉子图(Subgraph)开发,那么请注意,基于Substreams的子图可以被查询,就像它是由AssemblyScript转换层生成的一样,具有所有子图的优势,比如提供动态和灵活的GraphQL API。
子图由数据源组成,这些数据源指定了在链上发生的事件以及通过用Assemblyscript编写的处理程序应如何转换这些事件。这些事件按照链上发生事件的顺序依次进行处理。
相比之下,由Substreams支持的子图具有单一数据源,该数据源引用一个Substreams包,由图节点进行处理。与传统的子图相比,Substreams可以访问更多精细的链上数据,并且还可以从大规模并行处理中获益,这可能意味着处理时间更快。
Substreams-powered subgraphs combine all the benefits of Substreams with the queryability of subgraphs. They bring greater composability and high-performance indexing to The Graph. They also enable new data use cases; for example, once you've built your Substreams-powered Subgraph, you can reuse your to output to different such as PostgreSQL, MongoDB, and Kafka.
使用Substreams有许多好处,包括:
-
可组合的: Substreams模块具有可组合性,就像乐高积木一样,您可以将它们堆叠起来,并在社区模块的基础上构建,进一步细化公共数据。
-
高性能索引:大规模并行操作(类似于BigQuery)能够使索引速度提升数个数量级。
-
任意传输:将您的数据传输到您想要的任何地方:PostgreSQL、MongoDB、Kafka、子图、平面文件、Google Sheets等。
-
可编程:使用代码自定义提取、进行转换时聚合,并为多个传输目标建模输出。
-
访问不作为JSON RPC的一部分的附加数据。
-
Firehose的全部好处。
Firehose是由开发的区块链数据提取层,从零开始设计,以前所未有的速度处理区块链的完整历史。它提供基于文件和流式优先的方法,是StreamingFast开源技术套件的核心组件,也是Substreams的基础。
使用Firehose有许多好处,包括:
-
最低延迟和无需轮询:Firehose节点以流优先的方式设计,竞相将块数据推送出去。
-
防止宕机:从头开始为高可用性而设计。
-
不会错过任何数据:Firehose流游标设计用于处理分叉,并在任何情况下都可以继续从上次离开的地方开始。
-
最丰富的数据模型:包含余额变化、完整的调用树、内部交易、日志、存储变更、燃气费用等最佳数据模型。
-
利用平面文件:将区块链数据提取到平面文件中,这是目前最便宜、最优化的计算资源。
The will teach you how to build Substreams modules.
The will allow you to bootstrap a Substreams project without any code.
Rust模块相当于子图中的AssemblyScript mappers。它们以类似的方式编译为WASM,但编程模型允许并行执行。它们定义了您想要对原始区块链数据应用的转换和聚合类型。
在使用Substreams时,组合发生在转换层,从而使得缓存模块可以被重复使用。
举例来说,Alice可以构建一个DEX价格模块,Bob可以使用它来构建一种感兴趣的代币的交易量聚合器,Lisa可以将四个单独的DEX价格模块组合起来创建一个价格预言机。一个单独的Substreams请求将打包所有这些个人模块,并将它们链接在一起,提供一个更加精细的数据流。然后可以使用该数据流填充子图,并由消费者查询。
在Substreams-powered子图之后,您可以使用Graph CLI在上部署它。
您可以访问此 以找到Substreams和Substreams-powered子图的示例。
这种集成带来许多好处,包括通过利用社区模块和在其上构建的组合性来实现极高性能的索引。