All packages

uniswap-database-changes-uniswap-x-digest-tempo

ciyengar3
v0.0.1/3 downloads

Package ref

uniswap-database-changes-uniswap-x-digest-tempo@v0.0.1

Run package

CLI

Run db_out from the command line.

substreams run uniswap-database-changes-uniswap-x-digest-tempo@v0.0.1 db_out -e tempo --start-block -1
Authenticate by running substreams auth or directly on thegraph.market (see docs).

README

uniswap-x-digest

One uniswap_x_digest_block row per block, empty blocks included, holding every UniswapX event in the block grouped by transaction: reactor Fill, OwnershipTransferred and ProtocolFeeControllerSet; Permit2 Approval, Lockdown, NonceInvalidation, Permit and UnorderedNonceInvalidation; and the ERC-20 and native transfers inside reactor call trees. Schema: ../proto/evm/uniswap/x_digest/uniswap-x-digest.proto.

The events come from the uniswap-x package's map_events, so the digest matches the same reactors and Permit2 address per chain. It does not start where uniswap-x does: chains.json here carries its own start_block per chain, a block mined on 2026-10-27, because the digest writes one GCS object per block, empty blocks included, and nothing needs the historical rows. A module may start later than its inputs, and map_events is a stateless map, so the earlier uniswap-x start block costs nothing.

Block is annotated payload_delivery = PAYLOAD_DELIVERY_GCS: the sink uploads each row to uniswap-substreams-payloads-{env} and publishes a GcsPayloadRef pointer (Pub/Sub attribute payloadEventType = "UniswapXDigestBlock") in its place, like tx_digest.

Modules

  • map_x_digest(uniswap_x:map_events): the typed Block. Transactions in block order, each event array in ordinal order. A transaction carries the fields of its AssociatedEvmTransaction (from, to, value, gas, type, status, calldata).
  • db_out(params, clock, block, map_x_digest): one DatabaseChanges row per block for the sink. A block without UniswapX events still gets a row, with no transactions and event_count 0, so consumers see every block. The block input is unused; it keeps db_out running on those blocks, since Substreams skips a module whose map inputs are all empty (Clock does not count).
    • ordering_key=<str>: the Pub/Sub ordering key. Generated manifests use uniswap_x_digest:<chain_id>, one key per chain, with the chain id from this package's chains.json.

Build

make test
make pack NETWORK=mainnet VERSION=v0.0.1   # or ../build-database-changes-spkg.sh mainnet v0.0.1 uniswap-x-digest
make run NETWORK=mainnet START_BLOCK=23600000

scripts/build.sh packs the uniswap-x parent into ../local/uniswap-labs-x-<chain>.spkg first. map_events is a stateless map, so the provider has no stores to rebuild for it.

Modules

Execution graph

3 modules
mapMain

db_out

One uniswap_x_digest_block row per block, empty blocks included.

from #46150000

Output

sf.substreams.sink.database.v1.DatabaseChanges

Inputs

paramssf.substreams.v1.Clocksf.ethereum.type.v2.Blockmap_x_digest
Show 1 dependency