References
Instant Subgraphs Configuration
This configuration file is required for Instant Subgraphs.
Configuration
{
version: "1", // The version of this config, we only support a value of "1" right now
name: "TokenDeployed", // The name of the event you want to track as specified in the ABI file
abis: {
// Mapping of ABIs names (can be anything you want) to ABI files
TokenRegistry: {
path: "./path/to/your/abi.json",
},
},
chains: ["mainnet"], // All the chains this contract has been deployed to that you want to track. For each chain, you must have an instance below in which the chain name matches. Note that not every ABI must be deployed on all declared chains
instances: [
{
abi: "TokenRegistry", // The ABI you want to track. This name must match a key in the `abis` object above
address: "0x...", // The address of the contract
startBlock: 13983724, // The block from which you want your subgraph to start indexing (in most cases, this is the block that deployed your contract)
chain: "mainnet", // The chain you want to track this contract on
},
],
}
Examples
Multi-chain
This example shows how to define multiple chains with many addresses.
{
"name": "TokenDeployed",
"abis": {
"TokenRegistry": {
"path": "./abis/tokenRegistryAbi.json"
}
},
"chains": ["mainnet", "avalanche", "evmos", "moonbeam", "milkomedac1"],
"instances": [
{
"abi": "TokenRegistry",
"address": "0x0A6f564C5c9BeBD66F1595f1B51D1F3de6Ef3b79",
"startBlock": 13983724,
"chain": "mainnet"
},
{
"abi": "TokenRegistry",
"address": "0x2d6775C1673d4cE55e1f827A0D53e62C43d1F304",
"startBlock": 13718798,
"chain": "avalanche"
},
{
"abi": "TokenRegistry",
"address": "0x10B84C73001745D969e7056D7ca474ce1D959FE8",
"startBlock": 59533,
"chain": "evmos"
},
{
"abi": "TokenRegistry",
"address": "0xa7E4Fea3c1468D6C1A3A77e21e6e43Daed855C1b",
"startBlock": 171256,
"chain": "moonbeam"
},
{
"abi": "TokenRegistry",
"address": "0x19d4b0F5871913c714554Bbb457F2a1549f52E04",
"startBlock": 1356181,
"chain": "milkomedac1"
}
]
}
This configuration results in multiple deployed subgraphs, each with an identical GraphQL schema for you to fetch data.
If you prefer a combined view of the data across all deployed subgraphs, please have a look at cross-chain subgraphs.
Factory patterns
Some contracts create other child contracts, which then emit events that you need to track. The configuration here can handle that by allowing you specify a source
inside an instance
entry. The source
tells the indexer which Factory contract event creates a new contract, and the address of the new contract as inferred from the event argument.
{
// This configuration is mostly the same as the one above
name: "",
abis: {
Factory: {
path: "./abis/factory.json", // The path to the ABI for the Factory contract
},
Pool: {
path: "./abis/pool.json", // The path the ABI for the contract deployed by the Factory contract
},
},
chains: ["bsc"],
instances: [
{
abi: "Factory",
address: "0xa98242820EBF3a405D265CCd22A4Ea8F64AFb281",
startBlock: 16748800,
chain: "bsc",
},
{
abi: "Pool",
// This is the main difference between the configuration for factory vs non-factory applications.
// In this example, the Factory contract makes new Pool contracts and the below configuration specifies that with this `source` object
source: {
abi: "Factory", // The ABI name which creates this contract
eventSignature: "PoolCreated(address,address,bool)", // This is the signature of the event from the Factory contract which indicates that this contract was created
addressParam: "pool", // The name of the parameter from the Factory contract's event that contains the new address to track
},
},
],
}
In this example, there is a defined factory contract that makes many pools, and each pool needs to be tracked. We have two ABIs and the last instance
entry looks for any PoolCreated
event in the Factory
ABI, gets a parameter from it, and uses that as a data source to watch for future Pool
events in the Pool
ABI.