How mrbeliaev/task-market-indexer works
TaskMarket Indexer is a Go service that polls TaskMarketplace events across configured EVM chains and persists indexed task and withdrawal state in PostgreSQL. The workflow starts with environment and database setup, reconciles enabled chain configurations, polls block ranges, decodes contract events, applies task lifecycle updates, and advances a per-chain cursor only after successful processing. The README documents all event categories; source excerpts show representative handlers and the polling orchestration, but not every handler implementation.
Main entry points: events.go Event filters and decoders · main.go Service entrypoint · indexer.go Multi-chain manager · db.go Task state
Components 20
Startup and config
- Service entrypoint
cmd/main.go - Global config
internal/config/config.go
Chain orchestration
- Multi-chain manager
internal/indexer/indexer.go - Per-chain indexer
internal/indexer/indexer.go - Block-range poller
internal/indexer/indexer.go
Event ingestion
- Contract ABI
internal/indexer/abi/taskmarket.json - Event filters and decoders
internal/indexer/events.go - Task lifecycle events
internal/indexer/events.go - Dispute events
internal/indexer/events.go - Withdrawal events
internal/indexer/events.go - Fee configuration events
internal/indexer/events.go
Persistence
- GORM connection
internal/db/db.go - Enabled chain config
internal/db/db.go - Indexing cursor
internal/db/db.go - Task state
internal/db/db.go - Withdrawal records
internal/db/db.go
Other components
- Service operator
- Environment variables
- PostgreSQL
- EVM chain RPC
Connections 27
- Service operator → Service entrypoint: starts
- Environment variables → Global config: configures
- Service entrypoint → Global config: loads settings
- Service entrypoint → GORM connection: connects database
- GORM connection → PostgreSQL: opens connection
- Service entrypoint → Multi-chain manager: initializes and runs
- Multi-chain manager → Enabled chain config: loads enabled chains
- Multi-chain manager → Global config: validates chains
- Multi-chain manager → Per-chain indexer: starts and reconciles
- Per-chain indexer → EVM chain RPC: connects and retries
- Per-chain indexer → Block-range poller: runs polling
- Block-range poller → EVM chain RPC: gets block height
- Block-range poller → Indexing cursor: reads and advances
- Block-range poller → Event filters and decoders: dispatches handlers
- Event filters and decoders → EVM chain RPC: fetches event logs
- Event filters and decoders → Contract ABI: decodes with
- Event filters and decoders → Task lifecycle events: routes lifecycle logs
- Event filters and decoders → Dispute events: routes dispute logs
- Event filters and decoders → Withdrawal events: routes withdrawal logs
- Event filters and decoders → Fee configuration events: routes fee logs
- Task lifecycle events → Task state: upserts and updates
- Dispute events → Task state: updates dispute state
- Withdrawal events → Withdrawal records: records withdrawals
- Task state → PostgreSQL: persists task rows
- Withdrawal records → PostgreSQL: persists records
- Indexing cursor → PostgreSQL: persists progress
- Enabled chain config → PostgreSQL: reads configuration