Developers
Indexer
Protocol truth is the chain. The indexer is convenience.
- 01Contracts
- 02Events
- 03Ponder
- 04PostgreSQL
- 05HTTP API
- 06Web app
Two rules the handlers follow
- 01Nothing is invented. Every column traces to an event argument or to a contract read performed in the same handler. Where the protocol emits nothing — a token's name, say — the column stays null and the app reads it from the chain.
- 02Handlers are idempotent under reorg. Aggregates are only incremented inside a handler keyed by a unique event id, never recomputed from outside state.
Running it
pnpm --filter @tapezero/indexer dev
# local fork
PONDER_CHAIN_ID=31337 PONDER_RPC_URL=http://127.0.0.1:8545 \
pnpm --filter @tapezero/indexer devChain and start block come from the published deployment, so nothing needs editing when the protocol is deployed somewhere new. With no deployment for the chain it throws at startup rather than indexing block 0 of an empty address.
Point the app at it with NEXT_PUBLIC_INDEXER_URL. Unset, list views read the chain directly and history panels say they need the indexer.
What it deliberately does not do
- No market-cap ordering. The index has no live price, so it cannot sort by market cap.
openingFdvsorts by the FDV requested at launch and is named for what it is. - No per-trade token amounts.
QuoteFeeTakenreports the quote-side notional, not the token amount, so the API reports the same. - No candles. A chart assembled from fee events alone would silently omit swaps that pay no fee, and be wrong in a way a user cannot see. Charts render an explicit empty state until a real price-history provider exists.
TAPEZERO is an independent protocol and is not affiliated with Robinhood, Uniswap or Chainlink. The contracts are unaudited. Nothing here is investment advice.