Loading Entities with Labels
This feature is planned for deprecation in a future release. We recommend not relying on it to facilitate easier upgrades in the future.
Introduction
In the basic section to get values loaded into your handler into you have used the get
function. This is great when starting out, but when your indexer is further along you may want to use labels to make the connection between the load
and get
parts explicit. This can make your code look cleaner, and avoid sneaky bugs where the wrong entity is being loaded or the load
and get
function aren't matching up.
For loading a single entity you will use a label, but for an array you can use the tag arrayLabels
in config.yaml
file. This is useful for groups of entitites that you want to have in your handler, and the entities stay ordered for easy iteration. For example, you may want to load two token entities for an event from an AMM pool that you are indexing.
Example
The below example illustrates how to define an arrayLabel
as well as a label
for entity A
that we want to load for TestEvent
event.
config.yaml
networks:
- id: 12345 #Your chain Id
contracts:
- name: Greeter
# ... other fields
events:
- event: "TestEvent"
requiredEntities:
- name: "A"
arrayLabels:
- "allAs"
labels:
- "singleA"
# ... rest of your config file
schema.graphql
type A {
id: ID!
someField: String!
}
Event Handler file
- Javascript
- Typescript
- Rescript
GreeterContract.TestEvent.loader(({ event, context }) => {
context.A.allALoad(["id1", "id2", "id3"])
context.A.singleALoad("singled")
// ... other loaders
})
GreeterContract.TestEvent.handler(({ event, context }) => {
let arrayOfAs = context.A.allA
let singleA = context.A.singleA
// ... rest of the handler that uses or updates these entities.
})
GreeterContract_TestEvent_loader(({ event, context }) => {
context.A.allALoad(["id1", "id2", "id3"]);
context.A.singleALoad("singled");
// ... other loaders
});
GreeterContract_TestEvent_handler(({ event, context }) => {
let arrayOfAs = context.A.allA;
let singleA = context.A.singleA;
// ... rest of the handler that uses or updates these entities.
});
GreeterContract.TestEvent.loader((event, context) => {
context.a.allALoad(["id1", "id2", "id3"])
context.a.singleALoad("singled")
// ... other loaders
})
GreeterContract.TestEvent.handler((event, context) => {
let arrayOfAs = context.a.allA
let singleA = context.a.singleA
// ... rest of the handler that uses or updates these entities.
})