tezos.events index

Kathmandu Tezos protocol upgrade has introduced contract events, a new way to interact with smart contracts. This index allows indexing events using strictly typed payloads. From the developer's perspective, it's similar to the tezos.big_maps index with a few differences.

dipdup.yaml
spec_version: 3.0
package: demo_tezos_events

datasources:
  tzkt:
    kind: tezos.tzkt
    url: https://api.shadownet.tzkt.io

contracts:
  events_contract:
    kind: tezos
    address: KT1E3EQJmoajoTj9YXJWgenuYTHnDUoWSiFt

indexes:
  events:
    kind: tezos.events
    datasources:
      - tzkt
    handlers:
      - callback: on_wrap_event
        contract: events_contract
        tag: Wrap
      - callback: on_unwrap_event
        contract: events_contract
        tag: Unwrap
      - callback: on_other_event
        contract: events_contract

Unlike big maps, contracts may introduce new event tags and payloads at any time, so the index must be updated accordingly.

handlers/on_wrap_event.py
from demo_tezos_events import models as models
from demo_tezos_events.types.events_contract.tezos_events.wrap import WrapPayload
from dipdup.context import HandlerContext
from dipdup.models.tezos import TezosEvent


async def on_wrap_event(
    ctx: HandlerContext,
    event: TezosEvent[WrapPayload],
) -> None: ...

Each contract can have a fallback handler called for all unknown events so you can process untyped data.

handlers/on_other_event.py
from demo_tezos_events import models as models
from dipdup.context import HandlerContext
from dipdup.models.tezos import TezosUnknownEvent


async def on_other_event(
    ctx: HandlerContext,
    event: TezosUnknownEvent,
) -> None: ...
Help and tips -> Join our Discord
Ideas or suggestions -> Issue Tracker
GraphQL IDE -> Open Playground