Skip to Content
Events & Indexing

Events and indexing

Canonical sources

WhatWhere
Event signaturessrc/lib/Events.sol
Decoding rulesdocs/analytics/dune-integration-pack-v1.0.0.md
ABIsabis/<network>/*.abi.json
Addressesdeployments/<network>.json

Rule: Filter logs by evt_block_number >= startBlock.

Event codebooks (immutable)

EnumValues
ShareholderClaim.mode0=ETH, 1=LOCK_FURNACE
AutoCompoundPaused.reasonCode1=NOT_OWNER, 2=LISTED, 3=EXPIRED, 4=INVALID_TOKEN_ID
FurnaceEnter.mode0=ENTER_WITH_ETH, 1=ENTER_WITH_CLAIM, 2=LOCK_FURNACE, 3=ENTER_WITH_TOKEN
LockDelisted.reason0=NORMAL, 1=EMERGENCY, 2=SETTLED_BY_FURNACE, 3=SOLD_TO_FURNACE, 4=EXPIRED

Key event groups

MineCore: EntryTokenRegistrySet, Takeover, ReignFinalized, TakeoversPausedChanged, KingWithdrawal

VeClaimNFT: LockCreated, LockExtended, LockAmountIncreased, LockMerged, LockUnlocked, AutoMaxSet

ShareholderRoyalties: ShareholderTakeoverAllocation, ShareholderFlush, ShareholderClaim, ShareholderAutoCompound*

Furnace: FurnaceEnter, BonusPaid, LpOverflowDripPaid, LockSoldToFurnace, ListingSettled, ReserveCredited, LockingPausedChanged

LpStakingVault7D: LpStaked, LpUnbondStarted, LpUnbondWithdrawn, LpRewardsNotified, LpRewardsClaimed, LpRewardsLocked, AutoCompound*, LpFeesHarvestedToRewards

MarketRouter: LockListed (limit sell / Market listing: minClaimOut + expiresAtTime), LockDelisted, ListingSettled, MarketSellToFurnace, TradingPausedChanged, BonusTargetEscrow* (limit buy / Buy intent: Created, AutoFurnaceExecuted, Expired, Cancelled, Extended)

MaintenanceHub: Poked

Genesis: GenesisFinalized, Locked, LockExtended, WithdrawLp

Decoding notes

  • Furnace LP stream: BonusPaid.lpTopupClaim and LpOverflowDripPaid.dripAmount fund the stream; LP vault receives via LpRewardsNotified on tick.
  • enterWithToken: FurnaceEnter doesn’t include tokenIn/amountIn; recover from calldata or ERC20 Transfer logs.
  • EntryTokenRegistry: MineCore and Furnace emit EntryTokenRegistrySet independently.

Indexing strategy

  • Use shipped ABIs as single decoding input
  • Prefer event-driven state (e.g., LockCreated/Extended/Unlocked for lifecycle)
  • Storage reads only for spot dashboard values
  • Follow docs/analytics/metrics-canon-v1.0.0.md for metrics
  • Leaderboards: docs/analytics/indexer-and-dune-implementation-guide-v1.0.0.md

Agent tooling

Repo tooling for offchain agents lives in agents/sdk/. It includes:

  • getGameStateSnapshot() (AgentLens-first, multicall fallback)
  • JSONL event streamer (RPC logs, optional subgraph backfill)
  • subgraph lag/address parity checker

Run the streamer:

RPC_URL=... npm -C agents/sdk run example:events

Backfill recent history from the subgraph before live RPC logs:

RPC_URL=... SUBGRAPH_URL=... npm -C agents/sdk run example:events -- --backfill --backfill-limit 100

Validate subgraph health + address parity:

RPC_URL=... SUBGRAPH_URL=... npm -C agents/sdk run example:subgraph-health -- --pretty

Dune integration

ResourcePath
Event decoding + codebooksdocs/analytics/dune-integration-pack-v1.0.0.md
Metric meaningsdocs/analytics/metrics-canon-v1.0.0.md
Leaderboardsdocs/analytics/leaderboards-ui-and-dune-compatible-v1.0.0.md
SQL templatesanalytics/dune/

Usage: Get addresses from manifests → decode with ABIs → filter by startBlock → build from templates.

Achievements engine

Cosmetic badges computed offchain in chat worker.

Endpoint: GET /api/achievements?address=0x...&chainId=8453

Config (workers/chat): SUBGRAPH_URL (required), SUBGRAPH_AUTH_TOKEN (optional), ACHIEVEMENTS_SYNC_ENABLED, ACHIEVEMENTS_SYNC_OVERLAP_BLOCKS, ACHIEVEMENTS_SYNC_BATCH_SIZE

Required subgraph entities: Takeover, ReignFinalizedEvent, VeLock*Event, ShareholderClaimEvent, FurnaceEnterEvent, MarketLockListedEvent, MarketSellToFurnaceEvent, BonusTargetEscrowEvent, LpStakedEvent, etc. See subgraph/schema.graphql.