Release Notes: 7.2

We're glad to announce DipDup 7.2! This release brings Etherlink smart rollup compatibility, API for managing indexes in runtime, and a bunch of minor improvements.

Indexing Tezos Etherlink smart rollups

Etherlink is an EVM-compatible smart rollup, which prioritizes fair ordering of transactions, low latency and security.

Smart rollups are Tezos’ permissionless L2 scaling solution. They are WASM applications, providing versatility in what language you write them in. You can learn more in Etherlink docs

Since version 7.2 you can index Etherlink smart rollups like regular Tezos contracts. Choose demo_etherlink template when creating a new project:

spec_version: 2.0
package: demo_etherlink

    kind: tezos.tzkt
    url: ${TZKT_URL:-}

    kind: tezos
    address: KT1Ax1oGGjooakyYJvtrX3q5zxRwYv6EAeC2
    typename: controller
    kind: tezos
    address: sr1SW7VtD6xbSAEoRk8LXewr3igfWjBx7FPB
    typename: rollup

    kind: tezos.tzkt.operations
    datasource: tzkt
      - controller
      - rollup
      - callback: on_rollup_call
          - type: transaction
            destination: controller
            entrypoint: default
            alias: controller_default
          - type: transaction
            destination: rollup
            entrypoint: default
            alias: rollup_default

Etherlink rollups' addresses start with the sr1 prefix instead of KT1, and an entrypoint is always default. If you omit an entrypoint in the operation pattern, the transaction will be treated as untyped.

See the tezos.tzkt.operations page for more details.

API to add indexes in runtime

One of the cool features of DipDup is that you can add indexes in runtime using ctx.add_contract/add_index methods from any callback. Now a basic HTTP API is available for the same purpose. To use it, add api section to your config:

  port: 46339  # dial INDEX 😎

Now you can use your favorite HTTP client to manage DipDup:

# Add contract
curl -X POST -H "Content-Type: application/json" \
  --data '{"kind":"tezos", "name": "LB", "typename": "dex" "address": "KT1TxqZ8QtKvLu3V3JH7Gx58n7Co8pgtpQU5"}'

# Add index from the template
curl -X POST -H "Content-Type: application/json" \
  --data '{"template":"dex_template", "name": "LB_index", "values": {"contract": "LB"}}'

# Check how DipDup is doing

See the API reference for more details.

Other improvements

make is back! After gathering feedback from the community we decided to return Makefile to the base template, but make it package manager-agnostic. Instead, when creating a new project DipDup suggests choosing a package manager from PDM/Poetry/None (sets package_manager field in replay.yaml config). No action is required for existing projects, but you can run dipdup init --base [--force] to update the project base.

Indexing EVM events with node RPC (evm.node datasource) has become faster. Node RPC while inherently slow, is used only for the "last mile" indexing (fetching a few hundred latest blocks not yet in Subsquid Network API) and realtime subscriptions.

Finally, we have sped up the generation of Pydantic typeclasses with datamodel-codegen. Also, resulting classes use X | Y union syntax when possible.

Changes since 7.0


  • cli: Added --unsafe, --compose, --internal flags to config env command.
  • cli: Added missing short equivalents for options in some commands.
  • cli: Relative paths to be initialized now can be passed to the init command as arguments.
  • tezos.tzkt.token_balances: Added new index.


  • cli: Fixed DIPDUP_DEBUG not being applied to the package logger.
  • cli: Fixed crash on early Python 3.11 releases.
  • project: Update default Docker tag for TimescaleDB HA.
  • tezos.tzkt.token_transfers: Fixed filtering transfers by token_id.

See you soon! 👋

DipDup is a free open-source software created by the community and for the community. Join our socials to discuss this release, ask any questions, or participate in development.

Twitter | Discord | GitHub

Help and tips -> Join our Discord
Ideas or suggestions -> Issue Tracker
GraphQL IDE -> Open Playground