Quality and cost of service oracle for The Graph network gateways

By popular demand, core developers @juanmardefago and myself have collaborated to produce an oracle that:

  1. posts aggregated quality and cost of service data from available gateways to IPFS every 5 minutes
  2. posts the IPFS file metadata to Gnosis chain via a DataEdge contract (gnosisscan)
  3. and indexes the IPFS files in a subgraph for consumption by protocol stakeholders

The community can use this data to aggregate quality and cost of service data in different ways and build a variety of analytics and monitoring dashboards related to quality and cost of service at the Indexer and subgraph deployment levels.

We have posted developer documentation here that includes more information on metric definitions, file schemas, the architecture of the streaming data pipeline, and important disclaimers. Please note that, while we hope the data will be useful to the community, it is based on a number of off-chain dependencies, so is nondeterministic and can not guaranteed to be accurate or timely.

Thanks and let us know if you have any questions or comments!


Thanks for this great addition to the ecosystem. The gateway statistics will be very useful to indexers to understand a bit better the dynamics of the gateways, and help them optimizing their infrastructure.

Among the different metrics that is published, one that has been mysterious to me is avg_indexer_blocks_behind. Can you share more details about how it is being calculated? I found that the value is often much larger than I’d expect, even though direct verification on the indexers will show much smaller values. Can you tell what is the point of reference?


Sorry for the delay. The metric definitions are in the developer documentation here.

avg_indexer_blocks_behind: is the average number of blocks behind an Indexer was from the chain head in indexing a subgraph when responding to queries

This could be skewed high when a subgraph is initially syncing.

Thanks for the response. I saw the documentation, but it doesn’t explain what is the point of reference. Are you comparing with the the response of an external RPC provider, or is it one of your own nodes, or do you compare the block height to other indexers.

Got it, thanks for the clarification and good question.

Yes, it uses the latest block from the network’s RPC provider as the reference point.

(Sorry for the delay, I’m not checking the forum frequently.)

1 Like