Table of Contents
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Releases prior to 7.0 has been removed from this file to declutter search results; see the archived copy for the full list.
8.6.3 - 2026-11-13
Added
- context:
ctx.execute_sql_script(..., dedicated_connection=True)runs the scripts on a separate PostgreSQL connection, so a long statement likeREFRESH MATERIALIZED VIEWin a job no longer pauses indexing. - database: Postgres session settings like
synchronous_commitorwork_memcan be set indatabase.server_settingsand apply to every DipDup connection, including indexing transactions that aSETfrom a hook never reaches; values can be strings, numbers or booleans (on/off);search_path(useschema_nameinstead) andclient_encodingare rejected in any letter case. - project:
dipdup newcan add GitHub Actions workflows (lint, config check, Docker image build) and a VS Code debugger config; existing projects get them by settingci: githuboride: vscodeinconfigs/replay.yamland runningdipdup init. - watchdog: The first warning about a stuck callback or transaction includes the chain of coroutines the task is waiting on.
- watchdog:
ctx.watchdog.heartbeatandctx.watchdog.resetaccept an optionalnameto keep a separate countdown for each name.
Fixed
- cli: A crash report that cannot be written (read-only or full disk) no longer replaces the actual error; DipDup logs a warning and skips the report.
- cli:
dipdup newcreates the<package> -> .symlink in the new project, somypyresolves package imports and handlers are formatted the same as by a latermake format lintin the project root. - coinbase: The datasource calls
api.exchange.coinbase.com, soget_candlesworks again; the retiredapi.pro.coinbase.comanswered every request with 503. - coinbase:
get_candlesno longer returns the same candle twice when the range spans more than 300 candles. - coinbase:
get_oracle_pricesraisesUnsupportedFeatureErrorwithout making a request, since Coinbase has deprecated its Price Oracle API. - config:
first_levelandlast_levelset both in a template and where it is used (anindexesentry orctx.add_index) no longer produce a level that is neither of the two (500 and 1001 gave 1021, skipping blocks); the value set where the template is used wins. - config:
tezos.headandtezos.operations_unfilteredindexes created from a template (inindexesor withctx.add_index) no longer fail withhandlers: Unexpected keyword argument. - context: A database connection lost in the middle of a rollback no longer leaves the reverted data under the old index level, which made the index skip the new branch after a restart.
- datasources: A realtime connection closed by the server with an error (e.g. TzKT's
ClientTimeoutInterval) is reconnected instead of crashing the indexer withFrozenInstanceError. - hasura: Views created without reindexing (e.g. by an
on_restartSQL script) appear in the GraphQL API after the next start instead of only afterhasura configure --force. - http: Requests rejected with a 4xx status (except 408 and 429) are no longer retried, so errors like 404 or 400 reach the caller immediately instead of after the full retry backoff.
- http:
Retry-Afteron 429 and 503 responses is honored both as seconds and as an HTTP date; when it is longer than two minutes (orratelimit_sleep, if larger), the request fails right away instead of waiting that long between every retry. - index: A chain reorg received while the index is falling behind the datasource is no longer dropped when the index resyncs, which left the data of the orphaned blocks in the database.
- index: An index that reached its
last_levelno longer keeps the other indexes from switching to realtime and no longer collects realtime messages. - ipfs: The default
urlis nowhttps://ipfs.filebase.io/ipfs, sinceipfs.iono longer serves requests; it is a public gateway for testing and light usage, so set your ownurlfor production. - metrics: Progress is no longer stuck at
estimating...for indexes that skip history or when an index is added while others are syncing, and no longer goes negative after a rollback. - models:
bulk_createcalled with a generator inserts the objects instead of nothing. - project: A project created with
dipdup newfrom thedemo_tezos_etherlinktemplate uses the chosen package name indipdup.yaml. - subscriptions: The datasource sync level is kept on disconnect, so the indexer no longer crashes with
Neither current nor sync level is knownand metrics no longer freeze while reconnecting. - tezos.operations: Handlers get
Nonefor every missingoptionalpattern item, including trailing ones, instead of failing withTypeError; a handler whose required item is missing at the end of a group is no longer called; a pattern of only optional items is no longer called when none of them matched and no longer hangs the indexer. - tezos.operations: Handlers with a pattern item without
entrypointare called for any entrypoint of the contract, not onlydefault; atezos.operations_unfilteredindex next to a filtered one gets every transaction in realtime, not only those with the neighbours' entrypoints. Affected projects start getting handler calls that were silently skipped before; levels already indexed are not revisited, so reindex to get the missed ones. - tezos.operations: Transactions unrelated to any indexed address or code hash are skipped before matching also when only addresses or only code hashes are set; a transaction pattern without
sourceanddestinationgets every transaction with any combination of filters. - tezos.token_balances: Handlers with different filters in one index no longer miss balances during sync: a
contractortoken_idfilter is sent to TzKT only when every handler of the index sets it, since TzKT requires both to match at once. The whole snapshot is fetched again on the next start, so the missed balances arrive without a reindex. - tezos.token_balances: Handlers with
token_idget balances during sync; the filter was sent to TzKT as its internal token ID, so the request matched nothing. The whole snapshot is fetched again on the next start, so the missed balances arrive without a reindex. - tezos.token_transfers: Handlers with different filters in one index no longer miss transfers during sync: a
contract,token_id,fromortofilter is sent to TzKT only when every handler of the index sets it, since TzKT requires all of them to match at once. Levels already indexed are not revisited, so reindex to get the missed transfers. - tezos.token_transfers: Handlers with
token_idget transfers during sync; the filter was sent to TzKT as its internal token ID, so the request matched nothing. Levels already indexed are not revisited, so reindex to get the missed transfers. - tezos.tzkt: A TzKT outage after realtime has started no longer crashes the indexer with
RuntimeError: The socket was never run. - tezos.tzkt: A realtime connection is reconnected after a failed negotiation instead of crashing the indexer: a refused connection crashed it at once, an expired connection id after about ten drops.
- tezos.tzkt: A subscription request lost with a dropped realtime connection is sent again after reconnecting instead of blocking the indexer forever.
- transactions: A rollback that fails after the database connection is lost no longer replaces the error that caused it; the rollback error is attached to it as a note.
- watchdog: A long-running callback is no longer hidden by other callbacks starting or finishing.
- watchdog: A transaction stuck in one index is no longer hidden by other indexes finishing theirs, so
action: exceptionfires as configured. - watchdog: Callback warnings name the stuck handler with its index, or the stuck hook; transaction warnings name the index and level when the transaction belongs to an index.
- watchdog: Hooks running as daemon jobs are no longer reported by the
callbacktrigger, andctx.watchdog.heartbeat(WatchdogTrigger.callback)inside them does nothing.
Changed
- datasources: Realtime connection failures are logged at
WARNINGlevel asRealtime connection failed: ...instead ofERRORasWebsocket connection error: ...; alerts on the old message no longer fire. - datasources: The realtime
http.retry_countlimit counts consecutive connection failures instead of failures over the whole lifetime of the process, and also applies toevm.nodeand tosubstrate.node, which used to reconnect forever; a connection lost before all subscriptions are confirmed counts as failed. - metrics: Progress in the status line and in
dipdup_progress,dipdup_levels_indexed_total,dipdup_levels_totalcovers the whole range of every index, from itsfirst_levelto the head, instead of the levels left at the start of the current run; after a restart at 90% of the history it continues from 90% instead of starting from zero. - tezos.tzkt: The realtime connection uses
http.connection_timeout(60 seconds by default) instead of a hardcoded 30 seconds. - watchdog: A regular (non-daemon) job or hook that runs longer than the
callbacktimeout is now reported, while previously any other callback starting or finishing hid it; anatomic: trueone is also reported by thetransactiontrigger. To allow it, raise the timeout or callctx.watchdog.reset(WatchdogTrigger.callback)inside it, plusctx.watchdog.reset(WatchdogTrigger.transaction)for an atomic one. - watchdog: The
websockettrigger is now armed by default: if an open realtime connection delivers no messages for its timeout (60 seconds unless configured), DipDup warns about it; a datasource without subscriptions is not watched. Previously DipDup never armed it, so it did not fire. If you setwebsocket: action: exception, such a silence now stops the indexer. - watchdog:
ctx.watchdog.heartbeat(trigger)andctx.watchdog.reset(trigger)without a name act on the callbacks or transactions of that trigger watched in the calling code and the tasks it spawns, not on every callback or transaction at once. Inside a watched callback or transaction with none of that kind running, a name-less heartbeat does nothing: for example,heartbeat(WatchdogTrigger.transaction)in a non-atomic hook orheartbeat(WatchdogTrigger.websocket)in any callback. Outside any watched callback or transaction, the trigger keeps a single countdown as before.
Performance
- index: Indexes that match nothing at a realtime level no longer save their level one by one; the levels of all such indexes are saved in a single statement after every dispatcher loop.
Security
- deps: Updated
aiohttpto 3.14.5 andmsgpackto 1.2.4 to fix published advisories, including unbounded memory use in both (GHSA-2g87-pp6c-29x5, GHSA-j586-36cw-2gc2).
8.6.2 - 2026-09-23
Fixed
- cli: A crashed
dipdup runno longer logs a spuriousRuntimeError: aclose()next to the actual error, which reached Sentry as a separate issue. - config:
buffer_sizeno longer conflicts with theadvanced.rollback_depthvalue that validation derives itself, which made the option unusable. - context: An index is no longer rewound when the rollback was skipped because reindexing is ignored.
- evm.node: A project with both
evm.eventsandevm.transactionsindexes on one node datasource opens twonewHeadssubscriptions and gets every head announced twice; the second announcement no longer crashes the datasource with aKeyErrornor fires a phantom rollback. - tezos.tzkt: All buffered messages of a rolled-back level are dropped; one message per level could survive the reorg and be processed later.
- transactions: Every index keeps model updates for its own
rollback_depthlevels instead of the most advanced index deciding for all of them.
8.6.1 - 2026-08-03
Fixed
- cli:
dipdup self installno longer ignores--path,--refand--prewhen DipDup is already installed. - cli:
dipdup self updateexplains how to update installations not managed byuv tool. - context:
ctx.rollbackreverts all changes made above the target level. - evm.events: Fixed parsing nested event payloads with fields named after Python keywords.
- index: Rollbacks are no longer skipped when realtime messages are still queued.
Changed
- codegen: Empty-object Michelson
unitfields no longer accept non-empty objects. - codegen: Fields named after Python builtins are aliased (
boolbecomesbool_); update attribute access in handlers after regenerating types. - codegen: Nullable required fields are no longer optional; a payload without the key fails validation.
- codegen: Root models generated from non-nullable schemas no longer accept
None. - demo_tezos_etherlink: Replaced decommissioned parisnet contracts with shadownet ones.
Security
- deps: Updated
datamodel-code-generatorto 0.71.0 to fix code injection via crafted JSON schemas (GHSA-5578-w22f-pfx9).
8.6.0 - 2026-06-29
Added
- context: Added
get_evm_portal_datasourcemethod to accessevm.sqd_portaldatasources from handlers and hooks with a precise type. - evm.sqd_portal: Added a new datasource backed by the SQD Portal (
portal.sqd.dev), a streaming alternative to the v2.archiveevm.subsquidgateway. - evm.subsquid, starknet.subsquid, substrate.subsquid: Added
api_keyoption to authenticate withv2.archive.subsquid.iogateways, which require a key since 2026-05-19.
Fixed
- evm.node: Omit unset
address/topicsfromlogssubscriptions instead of sendingnull, which strict JSON-RPC nodes (Octez/Etherlink EVM) reject. - http: Treat HTTP 503 responses as rate limiting, applying
ratelimit_sleepbackoff like 429; many gateways shed load with 503 instead of 429. - report: Fixed
KeyError: 'stacktrace'when saving a crashdump for a chained exception whose__context__/__cause__cause has no traceback. - sentry: Fixed crash on init with sentry-sdk 2.61+, where
DEFAULT_MAX_VALUE_LENGTHbecameNone. - sentry: Set process-wide
dipdup.*tags on the global scope so they appear on all error reports.
Changed
- tezos.tzkt: Replaced decommissioned ghostnet with shadownet in known testnet URLs and the
demo_tezos_eventsproject.
8.5.2 - 2026-04-08
Fixed
- cli: Fixed crash when running
schema wipeon empty or in-memory database. - database: Fixed
dipdup_wipefunction not dropping all user-defined objects in some cases. - database: Fix exception when creating connections with aiosqlite==0.22.0.
- evm.node: Retry JSON-RPC requests on "invalid block range params" error.
- substrate.subscan: Pass
X-API-Keyheader whenapi_keyis configured.
8.5.1 - 2025-11-03
Fixed
- demos: Use Etherscan v2 API endpoints in EVM templates.
- mcp: Fixed crash when using
mcp.tooldecorator. - evm.node: Respect
http.batch_sizewhen fetching events and transactions.
Changed
- cli: Don't notify about new framework versions available.
8.5.0 - 2025-09-14
Added
- database: Support running multiple indexers on different schemas in the same database.
- env: Added
DIPDUP_NO_HOOKSenvironment variable to temporary disable internal and user-defined hooks. - env: Added debugpy support to connect to the running indexer; enable with
DIPDUP_DEBUGenvironment variable. - hasura: Extract table/field descriptions from models' docstrings and apply as database comments.
Fixed
- config: Fixed detection of missing env variables.
- database: Fixed
dipdup_wipefunction affecting non-public tables. - package: Fixed incorrect package name in replay files.
- substrate.events: Fixed fetching events with node datasource.
- tezos: Fixed parsing payload when model class has been modified.
- tezos.operations: Fixed missing migration originations when enabled in
typesfilter.
Changed
- env: Autodetected variables
DIPDUP_CIandDIPDUP_DOCKERhave been replaced withenv.is_in_gha,env.is_in_dockerhelpers. - http: Randomize ratelimit sleep time in 10% range.
8.4.3 - 2025-08-13
Fixed
- tezos.tzkt: Updated models to match 1.16 version of API (Seoulnet).
8.4.2 - 2025-06-18
Added
- config: Added
realtimeflag to datasource config to enable websockets/polling implicitly.
Fixed
- cli: Skip logging indexer status if it has not changed.
- config: Fixed
config exportcommand crash whenadvanced.reindexsection is present in config. - config: Do not trigger
config_modifiedreindexing when datasource URLs are updated. - datasources: Do not run datasources not linked to any index and without
realtimeflag set. - models: Fixed serializing UUIDs in
JSONField. - substrate: Fixed loading type registries when specified in config.
- substrate: Fixed processing several vector types.
8.4.1 - 2025-06-02
Fixed
- substrate.events: Fixed crash caused by choosing incorrect runtime metadata for decoding.
8.4.0 - 2025-05-20
Added
- context: Added configurable watchdog service to notify about long-running callbacks and transactions.
- cli: Added loading env-file
dipdup.envif presented in the current directory. - cli: Added
-hshorthand for--helpoption in all commands. - cli: Added
--no-typesoption toinitcommand to skip generating type classes.
Fixed
- cli: Fixed
config env -icommand output. - cli: Fixed discovering package path.
- cli: Fixed printing help message when running commands without arguments.
- codegen: Fixed loading ABIs from the project with no ABI datasources configured.
- env: Skip detection of some variables if set explicitly.
- http: Fixed merging request URL with base path.
- project: Fixed
make imagecommand and default workdir. - project: Fixed missing codegen headers in project base.
- substrate.node: Fixed event index field.
Removed
- project: Do not generate and track
.env.defaultfiles on init. Useconfig envcommand for new environments.
8.3.3 - 2025-04-29
Added
- cli: Added
--nameoption tonewcommand to skip asking for the project name.
Fixed
- cli: Fixed regression in
initcommand behavior when run without flags. - cli: Fixed detecting package name in existing projects without
replay.yamlfile. - cli: Fixed
initcommand processing the same paths multiple times. - cli: Fixed
initcommand not respecting--forceflag when generating default envfiles.
8.3.2 - 2025-04-17
Added
- cli: Added
init --no-baseoption to skip creating the base template. - env: Added
DIPDUP_NO_BASEenvironment variable to skip creating the base template. - mcp: Added
ctx.apidatasource andctx.call_apihelper to server context.
Fixed
- cli: Fixed
newcommand using incorrect template. - mcp: Fixed handling exceptions in MCP tools.
Changed
- cli:
init --baseoption is now enabled by default.
8.3.1 - 2025-04-08
Added
- config: Added
api_urlandcompatibilityfields to MCP config.
Fixed
- api: Fixed configuring uvicorn logging.
- api: Strip secret fields from API responses.
- cli: Fixed logging indexer status.
- mcp: Expose resources as tools for clients that don't support MCP resources yet.
- project: Fixed generation of compose manifest and configs for MCP environment.
Changed
- api: Built-in management API is now using Starlette instead of plain aiohttp.
8.3.0 - 2025-04-02
Added
- cli: Apply ruff linting and formating on init.
- mcp: Added Model Context Protocol (MCP) server implementation.
- mcp: Added built-in resources for accessing indexer configuration and metrics.
- mcp: Added support for exposing custom tools and resources via
@dipdup.mcpdecorators.
Fixed
- package: Create package marker even if helper symlink is present.
- project: Fixed built sdist/wheel artifacts which contained unrelated files.
Changed
- cli:
install.pyscript anddipdup selfcommands useuv toolinstead ofpipx. - cli:
newcommand uses default values for somereplay.yamlfields. - project: Use
hatchlingbuild backend for new projects. - project: Replace
blackwithruffas default formatter.
8.2.2 - 2025-03-13
Added
- starknet.node: Added
fetch_block_headersoption to datasource config.
Fixed
- evm.node: Fixed empty
gasPricefield base conversion on evm transaction deserialization.
8.2.1 - 2025-02-19
Added
- cli: Rewritten interactive mode for
newcommand. - evm.blockvision: Added
evm.blockvisiondatasource to fetch ABIs from Blockvision API. - evm.sourcify: Added
evm.sourcifydatasource to fetch ABIs from Sourcify API.
Fixed
- coinbase: Fixed crash when using coinbase datasource.
- evm.node: Fixed crash when block range goes out of bounds.
8.2.0 - 2025-02-10
Added
- starknet.node: Added methods for fetching contract ABIs for
initcommand.
Fixed
- cli: Fixed help message on
CallbackErrorreportingbatchhandler instead of actual one. - starknet: Process all data types correctly.
- starknet.node: Fetch missing block timestamp and txn id when synching with node.
- substrate.subsquid: Fixed parsing nested structures in response.
- substrate.subsquid: Fixed parsing for
__kindjunctions with multiple keys.
Changed
- project: Set default PostgreSQL password and Hasura secret (both are
changeme) for new projects. - project: Use PostgreSQL 16 image for new projects.
Deprecated
- package: DipDup packages are expected to have
pyproject.tomlanddipdup.yamlfiles in the root directory. This will become a requirement in 9.0.
Other
- deps:
tortoise-ormupdated to 0.24.0.
8.2.0rc1 - 2025-01-24
Added
- project: Support uv package manager in the default project template.
- substrate.events: Added
subtrate.eventsindex kind to process Substrate events. - substrate.node: Added
subtrate.nodedatasource to receive data from Substrate node. - substrate.subscan: Added
substrate.subscandatasource to fetch ABIs from Subscan. - substrate.subsquid: Added
substrate.subsquiddatasource to fetch historical data from Squid Network.
Fixed
- database: Don't process internal models twice if imported from the project.
- evm.subsquid: Fixed event/transaction model deserialization.
Changed
- env: Database migrations with aerich require
DIPDUP_MIGRATIONSvariable to be set. - evm.etherscan: Datasource has been renamed from
abi.etherscantoevm.etherscanfor consistency. - project: Expose Prometheus and internal API ports in default sqlite environment.
8.1.4 - 2025-01-12
Fixed
- evm: Fixed sending JSONRPC requests via web3.py provider.
- evm: Fixed parsing tuple types in ABI.
- evm.subsquid: Fixed type of
timestampfield of event/transaction models. - evm.subsquid: Fixed empty field base conversion on event deserialization.
- starknet: Fixed parsing contract addresses starting with
0x0.
8.1.3 - 2024-12-20
Fixed
- cli: Don't wrap exceptions with
CallbackErrorto avoid shadowing the original exception. - cli: Fixed
--templateoption being ignored when--quietflag is set. - config: Fixed setting default loglevels when
loggingis a dict. - config: Fixed parsing config files after updating to pydantic 2.10.3.
- config: Fixed starknet index validation error.
- metrics: Fixed indexed objects counter.
- starknet: Added support for struct and array types, as well as u256 and ByteArray handlers.
- starknet: Fixed event payload parsing (account for keys field).
- starknet: Fixed missing class property in node datasource.
8.1.2 - 2024-12-10
Fixed
- context: Allow to add Starknet contracts in runtime.
- database: Ignore non-existent immutable table on schema wipe.
- starknet.events: Fixed event ID calculation.
8.1.1 - 2024-10-17
Fixed
- cli: Fixed progress estimation logging.
8.1.0 - 2024-10-16
Added
- evm.etherscan: Try to extract ABI from webpage when API call fails.
- cli: Added
schemasubcommands to manage database migrations:migrate,upgrade,downgrade,headsandhistory. - cli: Added interactive mode for
newcommand. - database: Support database migrations using
aerich. - hasura: Added
hideandhide_internalconfig options to make specified tables/views private.
Fixed
- cli: Reload constants in
dipdup.envafter applying env-files.
8.0.0 - 2024-09-10
Added
- cli: Added
-Coption, a shorthand for-c . -c configs/dipdup.<name>.yaml. - database: Added
dipdup_statusview to the schema.
Fixed
- cli: Don't update existing installation in
self installcommand unless asked to. - cli: Fixed env files not being loaded in some commands.
- install: Fixed reinstalling package when
--forceflag is used. - package: Create package in-place if cwd equals package name.
- performance: Add index name to fetcher and realtime queues.
- subsquid: Fixed missing entry in
dipdup_headinternal table. - tezos.big_maps: Fixed logging status message in
skip_historymode. - tezos.big_maps: Respect order of handlers in
skip_historymode.
Removed
- config: Removed
advanced.skip_version_checkflag; useDIPDUP_NO_VERSION_CHECKenvironment variable. - database: Removed
dipdup_head_statusview; usedipdup_statusview instead.
Performance
- database: Set
synchronous=NORMALandjournal_mode=WALpragmas for on-disk SQLite databases.
8.0.0b5 - 2024-08-09
Added
- package: Added built-in
batchhandler to modify higher-level indexing logic.
Fixed
- cli: Fixed progress estimation when there are indexes with
last_leveloption set. - cli: Don't save reports for successful test runs.
- database: Fixed concurrency issue when using
get_or_createmethod. - evm: Fixed crash when contract ABI contains overloaded methods.
- tezos.operations: Fixed
sr_cementoperation index subscription.
Changed
- config: When filtering EVM transactions by signature, use
signaturefield instead ofmethod. - context: Signatures of
fire_handlerandfire_hookmethods have changed. - context:
ctx.loggeris a regularlogging.Loggerinstead of pre-configuredFormattedLogger.
Other
- deps: Use
uvloopto improve asyncio performance.
8.0.0b4 - 2024-07-20
Added
- config: Publish JSON schemas for config validation and autocompletion.
- starknet.node: Added Starknet node datasource for last mile indexing.
- tezos.operations: Added
sr_cementoperation type to process Smart Rollup Cemented Commitments.
Fixed
- evm.events: Improve fetching event batches from node.
- models: Fixed
CachedModelpreloading.
7.5.9 - 2024-07-20
Fixed
- evm.events: Improve fetching event batches from node.
- models: Fixed
CachedModelpreloading.
8.0.0b3 - 2024-07-04
Added
- env: Added
DIPDUP_LOW_MEMORYvariable to reduce the size of caches and buffers.
Fixed
- cli: Fixed
--preinstaller flag. - cli: Import some dependencies on demand to reduce memory footprint.
- evm.subsquid: Fixed typo in
iter_eventsmethod name.
7.5.8 - 2024-07-04
Fixed
- deps: Removed
pyarrowfrom dependencies, bumpedweb3. - project: Fixed
make imagetarget command.
8.0.0b2 - 2024-06-27
Added
- env: Added
DIPDUP_JSON_LOGenvironment variable to enable JSON logging. - cli: Added
--preflag toselfgroup commands to install pre-release versions.
Fixed
- config: Allow
sentry.dsnto be empty string. - models: Fixed setting default value for
Meta.maxsize. - starknet.events: Fixed filtering events by key.
8.0.0b1 - 2024-06-19
Added
- cli: Added full project migration support for 3.0 spec.
- starknet.events: Added
starknet.eventsindex kind to process Starknet events. - starknet.subsquid: Added
starknet.subsquiddatasource to fetch historical data from Subsquid Archives.
Fixed
- cli: Fixed errors raised when the project package is invalid.
- config: Fixed setting logging levels according to the config.
- evm.events: Fixed matching logs when filtering by topic0.
Other
- deps:
tortoise-ormupdated to 0.21.2.
7.5.7 - 2024-05-30
Fixed
- config: Fixed setting logging levels according to the config.
- evm.subsquid.events: Fixed matching logs when filtering by topic0.
7.5.6 - 2024-05-16
Fixed
- cli: Improved logging of indexer status.
- performance: Fixed estimation indexing speed in levels per second.
Changed
- api:
/performanceendpoint response format has been changed. - performance: All time intervals are now measured in seconds.
- performance: Several metrics have been renamed and new ones have been added.
8.0.0a1 - 2024-05-06
Added
- cli: Added spec_version 3.0 support to
migratecommand. - cli: Added
package verifycommand to check the package consistency. - cli: Added
--rawoption toconfig exportcommand to dump config preserving the original structure. - env: Added
DIPDUP_PACKAGE_PATHenvironment variable to override discovered package path.
Fixed
- cli: Improved logging of indexer status.
- config: Fixed (de)serialization of hex strings in config.
- performance: Fixed estimation indexing speed in levels per second.
- yaml: Fixed indentation and formatting of generated YAML files.
Changed
- api:
/performanceendpoint response format has been changed. - config: Index kinds have been renamed and grouped by the network.
- config: Index configs accept
datasourceslist instead ofdatasourcefield. - config: Index template values now can be any JSON-serializable object.
- deps: Python 3.12 is now required to run DipDup.
- performance: All time intervals are now measured in seconds.
- performance: Several metrics have been renamed and new ones have been added.
Removed
- config:
node_onlyindex config flag has been removed; addevm.nodedatasource(s) to thedatasourceslist instead. - config:
abiindex config field has been removed; addevm.etherscandatasource(s) to thedatasourceslist instead.
Other
- demos: Demo projects have been renamed to reflect the new config structure.
- deps:
datamodel-code-generatorupdated to 0.25. - deps:
pyarrowupdated to 16.0. - deps:
pydanticupdated to 2.2. - deps:
sentry-sdkupdated to 2.1. - deps:
tortoise-ormupdated to 0.20.1. - deps:
web3updated to 6.18.
7.5.5 - 2024-04-17
Added
- evm.subsquid:
evm.nodedatasources can be used as index datasources.
7.5.4 - 2024-04-09
Fixed
- config: Don't raise
ConfigurationErrorfrom some model validators. - config: Fixed crash when database path is relative and nested.
- config: Fixed issue with
fromfilter being ignored. - config: Forbid extra arguments in config mappings.
7.5.3 - 2024-03-28
Fixed
- tezos.tzkt.operations: Fixed missing operations when handler pattern contains item without entrypoint.
7.5.2 - 2024-03-20
Fixed
- evm.node: Fixed updating
dipdup_headtable when head block is received. - tezos.tzkt.operations: Fixed crash when handler definition contains optional items.
7.5.1 - 2024-03-17
Fixed
- evm.node: Fixed default ratelimit sleep time being too high.
- evm.subsquid.transactions: Fixed issue with
node_onlyflag ignored.
Performance
- evm.subsquid: Dynamically adjust the batch size when syncing with node.
7.5.0 - 2024-03-08
Added
- config: Added
http.polling_intervaloption to set the interval between polling requests (some datasources). - hasura: Allow
bulkrequest type in custom metadata files.
Fixed
- evm.etherscan: Raise
AbiNotAvailableErrorwhen contract is not verified. - cli: Fixed incorrect indexer status logging.
- evm.node: Fixed memory leak when using realtime subscriptions.
- evm.node: Fixed processing chain reorgs.
- evm.node: Respect
http.batch_sizewhen fetching block headers.
Performance
- hasura: Apply table customizations in a single request.
- performance: Collect hit/miss stats for cached models.
- performance: Decrease main loop and node polling intervals.
- performance: Drop caches when all indexes have reached realtime.
7.4.0 - 2024-02-20
Added
- cli: Added
--templateoption tonewcommand to skip template selection. - evm.subsquid.transactions: Added
evm.subsquid.transactionsindex kind to process EVM transactions.
Fixed
- cli: Fixed crash when running
initcommand with a config outside of the project directory. - codegen: Don't create intermediate
events.jsonfile in ABI directory. - evm.subsquid: When request to worker fails, ask router for another one instead of retrying the same worker.
7.3.2 - 2024-02-06
Added
- env: Added
DIPDUP_NO_VERSION_CHECKandDIPDUP_NO_SYMLINKvariables.
Fixed
- cli: Do not consider config as oneshot if
tezos.tzkt.headindex is present. - codegen: Allow dots to be used in typenames indicating nested packages.
- evm.node: Make
withdrawals_rootfield optional inEvmNodeHeadDatamodel. - http: Fixed crash on some datasource URLs.
Performance
- evm.subsquid.events: Increase indexing speed when using EVM node.
7.3.1 - 2024-01-29
Fixed
- codegen: Always cleanup jsonschemas before generating types.
- config: Make
ws_urlfield optional forevm.nodedatasource.
7.3.0 - 2024-01-23
Added
- tezos.tzkt.operations: Added new operation type
sr_executefor Etherlink smart rollups.
Fixed
- evm.etherscan: Fixed handling "rate limit reached" errors.
- cli: Fixed setting logger levels based on config and env variables.
- http: Fixed incorrect number of retries performed on failed requests.
7.2.2 - 2023-12-27
Fixed
- evm.subsquid: Last mile indexing is significantly faster now.
- tezos.tzkt: Fixed an issue with approving schema after reindexing triggered by rollback.
7.2.1 - 2023-12-12
Added
- cli: Added
DIPDUP_CONFIGandDIPDUP_ENV_FILEenvironment variables corresponding to--configand--env-fileoptions.
Fixed
- evm.node: Fixed crash on anonymous event logs during the last mile indexing.
- evm.node: Raise an exception when no realtime messages have been received in
http.connection_timeoutseconds.
7.2.0 - 2023-11-30
Added
- api: Added HTTP API to manage a running indexer.
- config: Added
http.request_timeoutoption to set the total timeout for HTTP requests. - evm.subsquid: Added Prometheus metrics required for Subsquid Cloud deployments.
- project: Added optional
package_managerfield to replay config. - project: Added Makefile to the default project template (only for new projects).
- tezos.tzkt: Added support for Etherlink smart rollups (
sr1…addresses).
Fixed
- cli: Don't suppress uncaught exceptions when performance monitoring is disabled.
- codegen: Use datamodel-code-generator from the project's virtualenv.
- evm.node: Fixed an issue with realtime subscriptions which led to indexing being stuck in some cases.
- http: Use
request_timeoutinstead ofconnection_timeoutfor total timeout. - install: Don't install datamodel-code-generator as a CLI tool.
- install: Respect package manager if specified in pyproject.toml.
Performance
- evm.subsquid.events: Request logs in batches to speed up the last mile indexing.
Security
- deps: Updated PyArrow to 14.0.1 to fix CVE-2023-47248
7.1.1 - 2023-11-07
Fixed
- cli: Fixed crash on early Python 3.11 releases.
- project: Update default Docker tag for TimescaleDB HA.
7.1.0 - 2023-10-27
Added
- cli: Added
--unsafe,--compose,--internalflags toconfig envcommand. - cli: Added missing short equivalents for options in some commands.
- cli: Relative paths to be initialized now can be passed to the
initcommand as arguments. - tezos.tzkt.token_balances: Added new index.
Fixed
- cli: Fixed
DIPDUP_DEBUGnot being applied to the package logger. - tezos.tzkt.token_transfers: Fixed filtering transfers by token_id.
7.0.2 - 2023-10-10
Added
- database: Added
dipdup_wipeanddipdup_approveSQL functions to the schema.
Fixed
- cli: Fixed
schema wipecommand for SQLite databases. - tezos.tzkt: Fixed regression in
get_transactionsmethod pagination.
7.0.1 - 2023-09-30
Added
- env: Added
DIPDUP_DEBUGenvironment variable to enable debug logging.
Fixed
- cli: Use correct data path with timescaledb-ha Docker image.
- demos: Fixed decimal overflow in
demo_uniswapproject. - evm.node: Fixed incorrect log request parameters.
- evm.subsquid.events: Fixed issue with determining the last level when syncing with node.
- hasura: Increated retry count for initial connection (healthcheck).
7.0.0 - 2023-09-25
Fixed
- cli: Import package submodules before starting indexing to fail early on import errors.
- cli: Fixed ordering of crash reports in
reportgroup commands. - evm.node: Fixed parsing topics and integers in datasource models.
- evm.subsquid.events: Fixed incorrect log request parameters.
- install: Fixed issue with interpreting user answers in some cases.
- tezos.tzkt: Fixed operation matching when contract code hash specified as a string.
- tezos.tzkt: Fixed issue with processing rollbacks while sync is in progress.
- tezos.tzkt.events: Fixed parsing contract event data.
- tezos.tzkt.operations: Fixed parsing operations with empty parameters.
7.0.0rc5 - 2023-09-06
Fixed
- evm.subsquid: Create a separate aiohttp session for each worker.
- evm.subsquid.events: Sync to
last_levelif specified in config. - evm.node: Set
timestampfield to the block timestamp.
7.0.0rc4 - 2023-08-23
Added
- models: Added optional
maxsizemeta field toCachedModelto limit the LRU cache size.
Fixed
- cli: Fixed
config export --fullcommand showing original config. - cli: Keep the last 100 reports only.
- cli: Fixed
schema wipecommand crash due todipdup_metatable being always immune. - config: Don't create empty SentryConfig if DSN is not set.
- context: Share internal state between context instances.
- evm.node: Fixed keepalive loop for websocket connection.
- evm.node: Fixed parsing empty realtime message payloads.
- jobs: Don't add jobs before scheduler is started.
- package: Fixed package detection for poetry managed projects.
- package: Fixed mypy command in default template.
- package: Create package symlink only when needed.
Changed
- cli:
reportcommand renamed toreport ls.
7.0.0rc3 - 2023-08-05
Fixed
- ci: Fixed dipdup package metadata.
- cli: Generate base template from replay only when --base flag is set.
- cli: Remove cached jsonschemas when calling init --force.
- codegen: Filter jsonschemas by prefixes supported by code generator.
- index: Fixed crash when parsing typed transactions with empty parameter.
- index: Remove Python limitation on large int<->str conversions.
- package: Create jsonschemas directory if not exists.
- package: Don't create empty pyproject.toml during init.
- package: Fixed discovery of the package when workdir is project root.
7.0.0rc2 - 2023-07-26
Fixed
- package: Create missing files from project base on init.
- package: Update replay.yaml on init.
- demos: Don't include database config in root config.
7.0.0rc1 - 2023-07-21
Added
- evm.etherscan: Added
evm.etherscandatasource to fetch ABIs from Etherscan. - api: Added
/performanceendpoint to request indexing stats. - cli: Added
reportcommand group to manage performance and crash reports created by DipDup. - config: Added
advanced.decimal_precisionfield to overwrite precision if it's not guessed correctly based on project models. - config: Added
advanced.unsafe_sqlitefield to disable journaling and data integrity checks. - config: Added
advanced.apisection to configure monitoring API exposed by DipDup. - config: Added
advanced.metricsfield to configure amount of gathered metrics. - config: Added
http.aliasfield to overwrite alias of datasource HTTP gateway. - database: Added
dipdup_metaimmune table to store arbitrary JSON values. - database: Added experimental support for immune tables in SQLite.
- evm.node: Added
evm.nodedatasource to receive events from Ethereum node and use web3 API. - evm.subsquid: Added
evm.subsquiddatasource to fetch historical data from Subsquid Archives. - evm.subsquid.events: Added
evm.subsquid.eventsindex to process event logs from Subsquid Archives.
Fixed
- database: Fixed
OperationalErrorraised in some cases after callingbulk_create. - database: Allow running project scripts and queries on SQLite.
- database: Don't cleanup model updates on every loop.
Changed
- ci: Docker images are now based on Debian 12.
- cli:
config env --fileoption renamed to--output. - cli: Commands to manage local dipdup installation moved to the
selfgroup. - cli:
init --overwrite-typesflag renamed to--forceand now also affects ABIs. - config:
advanced.rollback_depthvalue set based on indexes used in the project if not set explicitly. - config:
loggingfield now can contain either loglevel or name-loglevel mapping. - context: Signature of
add_contractmethod has changed. - database:
EnumFieldnow usesTEXTtype instead ofVARCHAR(n). - database: Querysets are no longer copied between chained method calls (
.filter().order_by().limit()) - database: Store datasource aliases instead of URLs in
dipdup_headtable. - models: User models must use field classes from
dipdup.fieldsmodule instead oftortoise.fields. - tezos.tzkt: Signatures of
[get/iter]_similar_contractsand[get/iter]_originated_contractsmethods have changed. - tezos.tzkt.head: Replaced
handlerssection with a singlecallbackfield in config.
Removed
- ci:
-slimand-pytezosDocker images are no longer published. - ci: Docker images no longer contain git, poetry and custom scripts.
- cli: Removed
dipdup-installalias todipdup.install. - cli: Removed
statuscommand. - config: Removed
similar_tofilter ofoperationindex pattern. - config: Removed
# dipdup: ignorehint used to ignore typeclass during init. - config: Removed
advanced.metadata_interfaceflag (always enabled). - sentry: Removed
crash_reportingflag and built-in DSN.
Other
- tzkt: Request plain values instead of mappings from TzKT when possible.
Help and tips -> Join our Discord
Ideas or suggestions -> Issue Tracker
GraphQL IDE -> Open Playground