Internal data query

Checkpoint also exposes some queries to inspect the internal state of how the indexer is running. Typically, internal queries are usually prefixed with an underscore (_) and are structured in a similar way to how Entity Schema queries are generated.

Currently, Checkpoint exposes the following internal data queries:

1. `_metadata` and `_metadatas` query fields.

These are used to query single or multiple metadata records. Metadata records are key-value pairs of data used by Checkpoint internally to describe the state of its process. These queries are defined as:

type Query {
    """ queries a single metadata value by it's id (key) """
    _metadata(id: ID!): _Metadata

    """ queries multiple metadata values """
    _metadatas(
    first: Int
    skip: Int
    orderBy: String
    orderDirection: OrderDirection
    where: Where_Metadata
    ): [_Metadata]
}

""" Core metadata values used internally by Checkpoint """
type _Metadata {
    """ example id: last_indexed_block """
    id: ID!
    value: String
}

For starters, you can execute the following query to see a list of all metadata values exposed by Checkpoint:

query {
    _metadatas {
        id
        value
    }
}

2. `_checkpoint` and `_checkpoints` query fields

Internally, Checkpoint keeps track of blocks where contracts event are found. These records are usually used by Checkpoint to speed up re-indexing when restarted. The _checkpoint(s) queries provide a way to query these blocks. The results can be exported and used to seed another Checkpoint instance running on another machine.

These queries are defined as:

type Query {
    """ queries a single _checkpoint entry by it's id"""
    _checkpoint(id: ID!): _Checkpoint
    
    """ queries multiple _checkpoint entires """
    _checkpoints(
    first: Int
    skip: Int
    orderBy: String
    orderDirection: OrderDirection
    where: Where_Checkpoint
    ): [_Checkpoint]
}

""" Contract and Block where its event is found. """
type _Checkpoint {
    """ id computed as last 5 bytes of sha256(contract+block) """
    id: ID!
    block_number: Int!
    contract_address: String!
}

For example, you can run the following query to fetch all blocks where the event of a particular contract can be found:

query {
    _checkpoints(where: {
        contract_address: "0x<contract-address>"
    }) {
        block_number
    }
}

Last updated