/api/sol/funding/* endpoints, exposed over GraphQL. GraphQL is the preferred surface for large wallet sets: REST caps at 150 wallets per request to fit under proxy URL-length limits, while GraphQL takes the same [String!]! list in the JSON body with no URL-length constraint. The same per-request work cap (150) still applies inside the resolver.
All five fields share two side effects with their REST twins:
enrichmentEnqueued: any wallet without an observed funding row is queued for an async RPC backfill. The next request returns the resolved event (or a terminalrpc_unresolvedrow).- CEX noise filter (
fundingClusteronly): a “cluster” covering more than 50% of the input wallets is treated as a CEX/exchange hot wallet, dropped, and its members demoted tounclustered.
fundingLookup
For each wallet, returns the first observed inbound SOL funding event.
Arguments
Return type
Example
fundedBy
Reverse lookup — for each funder, the wallets it has funded, ordered by fundedAt DESC.
Arguments
Return type
Example
fundingChain
Walks funding ancestry up to depth levels for each input wallet. One ClickHouse round trip per level (batched across all chain heads).
Arguments
Return type
depth is exceeded.
fundingCluster
Groups wallets that share a common funding ancestor within depth levels. The single most useful primitive — bubblemap clustering, sniper-farm detection, and “wallets bought from the same dispenser” all reduce to this.
Arguments
Return type
holderEdges
Direct user-to-user transfer edges among a wallet set, scoped to one mint. Edges are canonical (a < b lex), undirected, and aggregated — repeated transfers between the same pair collapse to one row with a transfers count.
