Indexer registry cleanup, BuyViaKumbaya ingest, platform-usage API, cursor pagination #319
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega#319
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
Gap analysis follow-up from #309.
Current codebase
DoubPresaleVesting: Listed in
indexer/address-registry.megaeth-mainnet.jsonbut not inRegistryContracts/index_addresses()— contract removed from tree (#243). Approved: remove from registry.BuyViaKumbaya: Emitted by
TimeArenaBuyRouter.solL64; not decoded; router excluded from log filter (config.rsindex_addresses()).INDEXER_REGISTRY_REQUIRE_BUY_ROUTERdocumented but unwired.Platform-usage API (#231): No
/v1/arena/platform-usageroute; frontendindexerApi.tsstubs returnnull; UI scaffolding exists (platformUsagePagination.ts).Silent data loss: Referral list handlers use
filter_map+try_getfailures dropped silently (api.rsL215–450);next_offsetfrom SQL count can lie.Pagination: Design doc requests cursor/block watermarks; all lists use
limit/offset(api.rs,api_arena.rs).Why needed
Approved: Remove vesting registry entry; ingest BuyViaKumbaya; implement platform-usage API; fix silent row drops; add cursor pagination.
Constraints / guardrails
(block_number, log_index)or block height perdocs/onchain/security-and-threat-model.md.idx_arena_buy+ WarBow tables perdocs/indexer/design.mdL122.Relevant files
indexer/address-registry.megaeth-mainnet.jsonindexer/src/config.rs,indexer/src/decoder.rs,indexer/src/persist.rsindexer/src/api.rs,indexer/src/api_arena.rs,indexer/src/arena_wallet_stats.rsfrontend/src/lib/indexerApi.ts,frontend/src/lib/platformUsagePagination.tsdocs/indexer/design.mdRecommended direction
DoubPresaleVestingfrom mainnet registry; updateINV-INDEXER-112/INV-REMOVAL-243.TimeArenaBuyRoutertoindex_addresses(); decodeBuyViaKumbaya; link toidx_arena_buywithpayKind.GET /v1/arena/platform-usage(+ wallet leaderboard pagination).filter_mapdrops with error logs or 500; fix offset metadata.Acceptance criteria
/v1/arena/buyswith pay kind.Test plan
cd indexer && cargo test.bash scripts/verify-time-arena-buy-router-anvil.sh.cd frontend && npm test—indexerApi.test.ts.Attack / abuse test plan
Verification criteria
mentioned in issue #309
mentioned in commit
c2f9dc9383mentioned in merge request !472
mentioned in commit
eb908c587ementioned in commit
b6d9b3501fmentioned in commit
5b201b5babmentioned in commit
889ab2e0aementioned in merge request !478
mentioned in commit
0f34b77db6mentioned in merge request !481
mentioned in commit
f1d01175eementioned in commit
f7cf193dd7Verification — #319 (agent:verify)
Verdict: FAIL — acceptance criteria are not met on
main(a0d325c5). Issue remains open for implementation.Acceptance criteria
indexer/address-registry.megaeth-mainnet.jsonstill listsDoubPresaleVestinginabiHashesSha256andcontracts(0xb4128c9f…).jq -e '.contracts.DoubPresaleVesting'returns the address./v1/arena/buyswith pay kindTimeArenaBuyRouteris inRegistryContractsbut excluded fromindex_addresses()(config.rsL113–130: only TimeArena, PodiumVaults, AdminSellVault, ReferralRegistry). NoBuyViaKumbayadecode indecoder.rs; nopay_kindfield anywhere underindexer/src/./v1/arena/platform-usageroute inapi_arena.rs. Live indexer:GET /v1/arena/platform-usage→ 404.frontend/src/lib/indexerApi.tsstill stubsfetchArenaPlatformUsage→nullandarenaPlatformUsageApiPath→/v1/arena/timers.filter_map+try_get().ok()?(api.rsL215–227, L322–331, L441–445) — bad rows are dropped without log or 500.PageParamsislimit+offsetonly (api.rsL35–40).GET /v1/arena/activity?limit=1returns keysitems,limit,next_offset,offset— nocursor/next_cursor.Test plan (issue body)
cd indexer && cargo testbash scripts/verify-time-arena-buy-router-anvil.shTimeArenaBuyRouterwired on Anvil, forge fork test passes). Does not prove indexerBuyViaKumbayaingest.cd frontend && npm testindexerApi.test.tsstill expects platform-usage stub →/v1/arena/timers(#266 retirement), not restored API.Verification criteria (issue body)
indexer/tests/How verified
glab issue view 319 --commentsbash scripts/verify-cloud-postgres.sh— PASScd indexer && cargo testbash scripts/verify-time-arena-buy-router-anvil.shcd frontend && npm testconfig.rs,decoder.rs,api.rs,api_arena.rs,indexerApi.ts, mainnet registry JSONINGESTION_ENABLED=0):curlon:3100for platform-usage 404 and offset-only paginationFollow-ups
BuyViaKumbayadecode +idx_arena_buy.pay_kind,GET /v1/arena/platform-usage, error surfacing for corrupt rows, cursor pagination on buys/activity.INV-INDEXER-112/INV-REMOVAL-243and frontendindexerApi.test.tsonce platform-usage ships.agent:implementwhen ready; re-runagent:verifyafter merge.mentioned in merge request !487
mentioned in commit
f5632269afmentioned in merge request !492
Verification — #319 (agent:verify)
Verdict: PASS — all acceptance criteria met on
main(6c822804).Acceptance criteria
jq -e '.contracts.DoubPresaleVesting' indexer/address-registry.megaeth-mainnet.json→ null (exit 1).rg DoubPresaleVestingon registry JSON → no matches./v1/arena/buyswith pay kindTimeArenaBuyRouterincluded inindex_addresses()(config.rsL124–131).BuyViaKumbayadecoded indecoder.rs;pay_kindpersisted + exposed inapi_arena.rs. Integrationapi_buy_via_kumbaya_pay_kind_smokeinpostgres_stage2_persist_all_events_and_rollback_afterasserts APIpay_kind+entry_pay_asset.GET /v1/arena/platform-usageinapi_arena.rs/arena_platform_usage.rs. Live indexer:curl -sf http://127.0.0.1:3199/v1/arena/platform-usage?limit=5&velocity_window=1h→ JSON keystotal_buys,warbow,velocity,wallets(schema 2.12.0).frontend/src/lib/indexerApi.tstargets/v1/arena/platform-usage(stub removed).pg_row_required→internal_db_error_response(500); nofilter_map+ silenttry_getdrops inapi.rs.api_cursor.rs+ListPageParams.cursor. Live:GET /v1/arena/buys?limit=1returnsnext_cursor;GET /v1/arena/activity?cursor=not-a-cursor→ 400. Integrationapi_buys_cursor_smokeasserts cursor round-trip + distinct pages.Test plan (issue body)
bash scripts/verify-cloud-postgres.shcd indexer && cargo testapi_platform_usage_smoke,api_buys_cursor_smoke,api_buy_via_kumbaya_pay_kind_smokeviapostgres_stage2_persist_all_events_and_rollback_after)bash scripts/verify-time-arena-buy-router-anvil.shcd frontend && npm testindexerApi.test.tsexpects/v1/arena/platform-usage(#319)Verification criteria (issue body)
verify-time-arena-buy-router-anvil.shcovers on-chain router path)api_platform_usage_smoke)Invariants
INV-INDEXER-319-REGISTRY-VESTINGINV-INDEXER-319-KUMBAYA-BUYINV-INDEXER-319-PLATFORM-USAGEINV-INDEXER-319-CURSOR-PAGEINV-INDEXER-319-NO-SILENT-DROPHow verified
glab issue view 319 --commentsconfig.rs,decoder.rs,persist.rs,api.rs,api_arena.rs,api_cursor.rs,arena_platform_usage.rs,indexerApi.ts, mainnet registry JSONINGESTION_ENABLED=1, port 3199): platform-usage 200, buys/activitynext_cursor, malformed cursor 400Follow-ups
verify-*wrapper that executes a livebuyViaKumbayaon Anvil and asserts indexerpay_kindvia HTTP (today covered byapi_buy_via_kumbaya_pay_kind_smoke+verify-time-arena-buy-router-anvil.shcontract path).