What
fetchContractEvents calls server.getEvents with limit: 100 (100 events max per response). If a contract emits more than 100 events across the fetched ledger range, the Soroban RPC returns only the first 100 and provides a cursor field for pagination. The code never checks for or follows this cursor.
Why
The remaining events are silently dropped and never indexed. On a busy network (e.g., a token with many simultaneous transfers), this causes permanent data loss because the cursor advances past those ledgers.
Scope
- Implement pagination by following the cursor from the response
- Process all events in the ledger range
Acceptance Criteria
Technical Context
- File:
src/indexer/event-listener.ts, lines 142-152
- The Soroban RPC
getEvents response includes a cursor field when there are more results
What
fetchContractEventscallsserver.getEventswithlimit: 100(100 events max per response). If a contract emits more than 100 events across the fetched ledger range, the Soroban RPC returns only the first 100 and provides acursorfield for pagination. The code never checks for or follows this cursor.Why
The remaining events are silently dropped and never indexed. On a busy network (e.g., a token with many simultaneous transfers), this causes permanent data loss because the cursor advances past those ledgers.
Scope
Acceptance Criteria
Technical Context
src/indexer/event-listener.ts, lines 142-152getEventsresponse includes acursorfield when there are more results