diff --git a/src/registry/erc8004.ts b/src/registry/erc8004.ts index 0800f644..362cdee7 100644 --- a/src/registry/erc8004.ts +++ b/src/registry/erc8004.ts @@ -615,23 +615,19 @@ export async function getRegisteredAgentsByEvents( return true; }); - // Extract token IDs and owners, most recent first + // Extract token IDs and owners, sorted by tokenId descending (most recent first). + // tokenIds are monotonically increasing on mint, so this gives correct + // newest-first ordering regardless of chunk collection order. const agents = uniqueLogs .map((log) => ({ tokenId: (log.args.tokenId!).toString(), owner: log.args.to as string, })) - .reverse() + .sort((a, b) => { + const diff = BigInt(b.tokenId) - BigInt(a.tokenId); + return diff > 0n ? 1 : diff < 0n ? -1 : 0; + }) .slice(0, limit); - - // The chunks were scanned newest-first, but within each chunk logs are - // ascending. A simple .reverse() no longer yields a correct descending - // order, so re-sort by tokenId descending (tokenIds are monotonically - // increasing on mint). - agents.sort((a, b) => { - const diff = BigInt(b.tokenId) - BigInt(a.tokenId); - return diff > 0n ? 1 : diff < 0n ? -1 : 0; - }); logger.info(`Event scan found ${agents.length} minted agents (scanned ${allLogs.length} Transfer events across ${Math.ceil(Number(currentBlock - earliestBlock) / Number(MAX_BLOCK_RANGE))} chunks)`); return agents; diff --git a/src/types.ts b/src/types.ts index 998c8ea1..4482c394 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1347,7 +1347,7 @@ export interface MessageValidationResult { export interface DiscoveryConfig { ipfsGateway: string; // default: "https://ipfs.io" - maxScanCount: number; // default: 20 + maxScanCount: number; // default: 100 maxConcurrentFetches: number; // default: 5 maxCardSizeBytes: number; // default: 64000 fetchTimeoutMs: number; // default: 10000 @@ -1355,7 +1355,7 @@ export interface DiscoveryConfig { export const DEFAULT_DISCOVERY_CONFIG: DiscoveryConfig = { ipfsGateway: "https://ipfs.io", - maxScanCount: 20, + maxScanCount: 100, maxConcurrentFetches: 5, maxCardSizeBytes: 64_000, fetchTimeoutMs: 10_000,