# Gitcoin Grants Stack Indexer — GraphQL Schema # # Generated by PostGraphile (postgraphile + pg-simplify-inflector + connection-filter) # from the PostgreSQL database schema defined in: # https://github.com/gitcoinco/grants-stack-indexer/blob/main/src/database/schema.ts # https://github.com/gitcoinco/grants-stack-indexer/blob/main/src/database/migrate.ts # # Endpoint: https://grants-stack-indexer-v2.gitcoin.co/graphql # GraphiQL: https://grants-stack-indexer-v2.gitcoin.co/graphiql # # Notes: # - Schema is dynamically generated by PostGraphile at runtime; field names are # camelCased via PgSimplifyInflectorPlugin from snake_case PostgreSQL columns. # - Mutations are not exposed (read-only API). # - Connection types follow the Relay cursor-connection spec. # - ConnectionFilterPlugin provides `filter:` arguments on all collection queries. # - Depth limit: 4. No cost limit enforced. # ─── Scalars ───────────────────────────────────────────────────────────────── """A point in time as described by the ISO 8601 standard. May or may not include a timezone.""" scalar Datetime """ A JSON value serialized as a string (used for jsonb columns such as metadata and matchingDistribution). """ scalar JSON """A universally unique identifier as defined by RFC 4122.""" scalar UUID """An arbitrary-precision decimal, used for 256-bit on-chain integers (bigint stored as numeric(78,0)).""" scalar BigFloat """A cursor for pagination.""" scalar Cursor # ─── Enums ──────────────────────────────────────────────────────────────────── """The type of a project — canonical (Allo V2 profile) or linked (Allo V1 grant).""" enum ProjectType { CANONICAL LINKED } """The current status of a grant application in a round.""" enum ApplicationStatus { PENDING APPROVED REJECTED } """The role a wallet address holds on a Project.""" enum ProjectRoleName { OWNER MEMBER } """The role a wallet address holds on a Round.""" enum RoundRoleName { ADMIN MANAGER } # ─── Page Info ──────────────────────────────────────────────────────────────── """Information about pagination in a connection.""" type PageInfo { """Whether there are more items after the current page.""" hasNextPage: Boolean! """Whether there are more items before the current page.""" hasPreviousPage: Boolean! """The cursor for the first item in the current page.""" startCursor: Cursor """The cursor for the last item in the current page.""" endCursor: Cursor } # ─── Project ────────────────────────────────────────────────────────────────── """ A project registered on the Allo Protocol (V2 profile) or carried over from Gitcoin Grants V1. Each project belongs to a single chain and may have multiple rounds, roles, and applications. """ type Project { """Unique project identifier (bytes32 profile ID for Allo V2).""" id: String! """Human-readable project name.""" name: String! """The EVM chain this project is registered on.""" chainId: Int! """Nonce used when creating the Allo V2 profile (null for V1 projects).""" nonce: BigFloat """On-chain anchor address for the project (Allo V2 only).""" anchorAddress: String """Sequential project number within the registry (V1 only).""" projectNumber: Int """Address of the Allo registry contract.""" registryAddress: String! """IPFS CID pointing to the project's off-chain metadata JSON.""" metadataCid: String """Deserialized project metadata (title, description, website, social links, etc.).""" metadata: JSON """Address that created this project.""" createdByAddress: String! """Block number at which this project was created.""" createdAtBlock: BigFloat! """Block number at which this project was last updated.""" updatedAtBlock: BigFloat! """Array of classifier tags (e.g. ["allo-v2"]).""" tags: [String]! """Whether this is a canonical or linked project.""" projectType: ProjectType! """Roles (owner/member) assigned to this project.""" projectRoles( first: Int last: Int before: Cursor after: Cursor condition: ProjectRoleCondition filter: ProjectRoleFilter orderBy: [ProjectRolesOrderBy!] ): ProjectRolesConnection """Applications submitted for this project across rounds.""" applications( first: Int last: Int before: Cursor after: Cursor condition: ApplicationCondition filter: ApplicationFilter orderBy: [ApplicationsOrderBy!] ): ApplicationsConnection """Funding rounds created by or associated with this project.""" rounds( first: Int last: Int before: Cursor after: Cursor condition: RoundCondition filter: RoundFilter orderBy: [RoundsOrderBy!] ): RoundsConnection } type ProjectEdge { cursor: Cursor node: Project } type ProjectsConnection { nodes: [Project]! edges: [ProjectEdge]! pageInfo: PageInfo! totalCount: Int! } input ProjectCondition { id: String chainId: Int name: String projectType: ProjectType registryAddress: String createdByAddress: String tags: [String] } input ProjectFilter { id: StringFilter chainId: IntFilter name: StringFilter projectType: ProjectTypeFilter tags: StringListFilter createdByAddress: StringFilter metadataCid: StringFilter and: [ProjectFilter!] or: [ProjectFilter!] not: ProjectFilter } enum ProjectsOrderBy { NATURAL ID_ASC ID_DESC CHAIN_ID_ASC CHAIN_ID_DESC NAME_ASC NAME_DESC CREATED_AT_BLOCK_ASC CREATED_AT_BLOCK_DESC UPDATED_AT_BLOCK_ASC UPDATED_AT_BLOCK_DESC } # ─── Project Role ───────────────────────────────────────────────────────────── """An owner or member role assignment for a project.""" type ProjectRole { chainId: Int! projectId: String! address: String! role: ProjectRoleName! createdAtBlock: BigFloat! project: Project } type ProjectRoleEdge { cursor: Cursor node: ProjectRole } type ProjectRolesConnection { nodes: [ProjectRole]! edges: [ProjectRoleEdge]! pageInfo: PageInfo! totalCount: Int! } input ProjectRoleCondition { chainId: Int projectId: String address: String role: ProjectRoleName } input ProjectRoleFilter { chainId: IntFilter projectId: StringFilter address: StringFilter role: ProjectRoleNameFilter and: [ProjectRoleFilter!] or: [ProjectRoleFilter!] not: ProjectRoleFilter } enum ProjectRolesOrderBy { NATURAL CHAIN_ID_ASC CHAIN_ID_DESC PROJECT_ID_ASC PROJECT_ID_DESC ADDRESS_ASC ADDRESS_DESC CREATED_AT_BLOCK_ASC CREATED_AT_BLOCK_DESC } # ─── Round ──────────────────────────────────────────────────────────────────── """ A Gitcoin Grants funding round deployed via the Allo Protocol. Each round runs on a specific EVM chain, uses a matching strategy, and has defined donation and application windows. """ type Round { """On-chain pool/round ID (address for Allo V1, uint256 for V2).""" id: String! """The EVM chain this round is deployed on.""" chainId: Int! """Classifier tags (e.g. ["allo-v1"], ["allo-v2", "program"]).""" tags: [String]! """Total match pool amount in the match token's native units.""" matchAmount: BigFloat! """ERC-20 token address used for the match pool.""" matchTokenAddress: String! """Match pool amount converted to USD.""" matchAmountInUsd: Float! """Total amount funded into the round in native token units.""" fundedAmount: BigFloat! """Total funded amount converted to USD.""" fundedAmountInUsd: Float! """IPFS CID for the application schema metadata.""" applicationMetadataCid: String! """Parsed application form schema.""" applicationMetadata: JSON """IPFS CID for round-level metadata.""" roundMetadataCid: String """Parsed round metadata (name, description, eligibility criteria, etc.).""" roundMetadata: JSON """When applications open (null if not yet set).""" applicationsStartTime: Datetime """When applications close (null if not yet set).""" applicationsEndTime: Datetime """When donations open.""" donationsStartTime: Datetime """When donations close.""" donationsEndTime: Datetime """Address that created this round.""" createdByAddress: String! """Block number at which the round was created.""" createdAtBlock: BigFloat! """Block number at which the round was last updated.""" updatedAtBlock: BigFloat! """bytes32 role hash for round managers.""" managerRole: String! """bytes32 role hash for round admins.""" adminRole: String! """Address of the deployed funding strategy contract.""" strategyAddress: String! """Strategy template ID (keccak hash of name).""" strategyId: String! """Human-readable strategy name (e.g. "allov2.DonationVotingMerkleDistributionDirectTransferStrategy").""" strategyName: String! """Computed matching distribution (JSON array of per-project allocations).""" matchingDistribution: JSON """Transaction hash of the readyForPayout call (null until payouts are ready).""" readyForPayoutTransaction: String """ID of the project that owns this round pool.""" projectId: String! """Aggregate: total USD donated to all applications in this round.""" totalAmountDonatedInUsd: Float! """Aggregate: total number of donation transactions in this round.""" totalDonationsCount: Int! """Aggregate: number of unique donor addresses in this round.""" uniqueDonorsCount: Int! """Aggregate: total amount distributed to recipients (in match token units).""" totalDistributed: BigFloat! """The owning project record.""" project: Project """Applications submitted to this round.""" applications( first: Int last: Int before: Cursor after: Cursor condition: ApplicationCondition filter: ApplicationFilter orderBy: [ApplicationsOrderBy!] ): ApplicationsConnection """Donations made to applications in this round.""" donations( first: Int last: Int before: Cursor after: Cursor condition: DonationCondition filter: DonationFilter orderBy: [DonationsOrderBy!] ): DonationsConnection """Admin and manager role assignments for this round.""" roundRoles( first: Int last: Int before: Cursor after: Cursor condition: RoundRoleCondition filter: RoundRoleFilter orderBy: [RoundRolesOrderBy!] ): RoundRolesConnection """Payout records for approved applications in this round.""" applicationPayouts( first: Int last: Int before: Cursor after: Cursor condition: ApplicationPayoutCondition filter: ApplicationPayoutFilter orderBy: [ApplicationPayoutsOrderBy!] ): ApplicationPayoutsConnection } type RoundEdge { cursor: Cursor node: Round } type RoundsConnection { nodes: [Round]! edges: [RoundEdge]! pageInfo: PageInfo! totalCount: Int! } input RoundCondition { id: String chainId: Int projectId: String strategyName: String strategyAddress: String matchTokenAddress: String tags: [String] } input RoundFilter { id: StringFilter chainId: IntFilter projectId: StringFilter strategyName: StringFilter strategyAddress: StringFilter matchTokenAddress: StringFilter tags: StringListFilter donationsStartTime: DatetimeFilter donationsEndTime: DatetimeFilter applicationsStartTime: DatetimeFilter applicationsEndTime: DatetimeFilter totalAmountDonatedInUsd: FloatFilter totalDonationsCount: IntFilter and: [RoundFilter!] or: [RoundFilter!] not: RoundFilter } enum RoundsOrderBy { NATURAL ID_ASC ID_DESC CHAIN_ID_ASC CHAIN_ID_DESC DONATIONS_START_TIME_ASC DONATIONS_START_TIME_DESC DONATIONS_END_TIME_ASC DONATIONS_END_TIME_DESC TOTAL_AMOUNT_DONATED_IN_USD_ASC TOTAL_AMOUNT_DONATED_IN_USD_DESC TOTAL_DONATIONS_COUNT_ASC TOTAL_DONATIONS_COUNT_DESC CREATED_AT_BLOCK_ASC CREATED_AT_BLOCK_DESC } # ─── Round Role ─────────────────────────────────────────────────────────────── """An admin or manager role assignment for a round.""" type RoundRole { chainId: Int! roundId: String! address: String! role: RoundRoleName! createdAtBlock: BigFloat! round: Round } type RoundRoleEdge { cursor: Cursor node: RoundRole } type RoundRolesConnection { nodes: [RoundRole]! edges: [RoundRoleEdge]! pageInfo: PageInfo! totalCount: Int! } input RoundRoleCondition { chainId: Int roundId: String address: String role: RoundRoleName } input RoundRoleFilter { chainId: IntFilter roundId: StringFilter address: StringFilter role: RoundRoleNameFilter and: [RoundRoleFilter!] or: [RoundRoleFilter!] not: RoundRoleFilter } enum RoundRolesOrderBy { NATURAL CHAIN_ID_ASC CHAIN_ID_DESC ROUND_ID_ASC ROUND_ID_DESC ADDRESS_ASC ADDRESS_DESC CREATED_AT_BLOCK_ASC CREATED_AT_BLOCK_DESC } # ─── Application ───────────────────────────────────────────────────────────── """ A project's application to participate in a funding round. Applications go through PENDING → APPROVED or REJECTED states tracked via on-chain events. """ type Application { """Application identifier (sequential or hash depending on Allo version).""" id: String! """The EVM chain the round is on.""" chainId: Int! """The round this application belongs to.""" roundId: String! """The project that submitted this application.""" projectId: String! """Allo V2 anchor address for the applicant project (null for V1).""" anchorAddress: String """Current approval status.""" status: ApplicationStatus! """Ordered history of status transitions.""" statusSnapshots: JSON! """Transaction hash of the distribution transaction (null until distributed).""" distributionTransaction: String """IPFS CID for the application answers/metadata.""" metadataCid: String """Parsed application answers (project details, answers to eligibility questions, etc.).""" metadata: JSON """Address that submitted this application.""" createdByAddress: String! """Block number at which this application was created.""" createdAtBlock: BigFloat! """Block number at which the status was last updated.""" statusUpdatedAtBlock: BigFloat! """Aggregate: total number of donation transactions to this application.""" totalDonationsCount: Int! """Aggregate: total USD donated to this application.""" totalAmountDonatedInUsd: Float! """Aggregate: number of unique donors to this application.""" uniqueDonorsCount: Int! """Classifier tags.""" tags: [String]! """The round this application belongs to.""" round: Round """The project that applied.""" project: Project """Individual donations received by this application.""" donations( first: Int last: Int before: Cursor after: Cursor condition: DonationCondition filter: DonationFilter orderBy: [DonationsOrderBy!] ): DonationsConnection """Payout records for this application.""" applicationPayouts( first: Int last: Int before: Cursor after: Cursor condition: ApplicationPayoutCondition filter: ApplicationPayoutFilter orderBy: [ApplicationPayoutsOrderBy!] ): ApplicationPayoutsConnection } type ApplicationEdge { cursor: Cursor node: Application } type ApplicationsConnection { nodes: [Application]! edges: [ApplicationEdge]! pageInfo: PageInfo! totalCount: Int! } input ApplicationCondition { id: String chainId: Int roundId: String projectId: String anchorAddress: String status: ApplicationStatus createdByAddress: String } input ApplicationFilter { id: StringFilter chainId: IntFilter roundId: StringFilter projectId: StringFilter status: ApplicationStatusFilter createdByAddress: StringFilter totalAmountDonatedInUsd: FloatFilter totalDonationsCount: IntFilter tags: StringListFilter and: [ApplicationFilter!] or: [ApplicationFilter!] not: ApplicationFilter } enum ApplicationsOrderBy { NATURAL ID_ASC ID_DESC CHAIN_ID_ASC CHAIN_ID_DESC ROUND_ID_ASC ROUND_ID_DESC STATUS_ASC STATUS_DESC TOTAL_AMOUNT_DONATED_IN_USD_ASC TOTAL_AMOUNT_DONATED_IN_USD_DESC TOTAL_DONATIONS_COUNT_ASC TOTAL_DONATIONS_COUNT_DESC CREATED_AT_BLOCK_ASC CREATED_AT_BLOCK_DESC STATUS_UPDATED_AT_BLOCK_ASC STATUS_UPDATED_AT_BLOCK_DESC } # ─── Donation ───────────────────────────────────────────────────────────────── """ A single donation transaction from a donor to an application within a round. Indexed from AlloV1 VotingStrategy vote events and AlloV2 Allocated events. """ type Donation { """Unique donation identifier.""" id: String! """The EVM chain this donation occurred on.""" chainId: Int! """The round this donation was made in.""" roundId: String! """The application (project in a round) that received this donation.""" applicationId: String! """Donor wallet address.""" donorAddress: String! """Recipient wallet address (project payout address).""" recipientAddress: String! """The project that received this donation.""" projectId: String! """On-chain transaction hash.""" transactionHash: String! """Block number of the donation.""" blockNumber: BigFloat! """ERC-20 token address donated (or native token address).""" tokenAddress: String! """Donation amount in the token's native units.""" amount: BigFloat! """Donation amount converted to USD at time of donation.""" amountInUsd: Float! """Donation amount converted to round match token units.""" amountInRoundMatchToken: BigFloat! """Block timestamp of the donation.""" timestamp: Datetime! """The application that received this donation.""" application: Application """The round this donation belongs to.""" round: Round } type DonationEdge { cursor: Cursor node: Donation } type DonationsConnection { nodes: [Donation]! edges: [DonationEdge]! pageInfo: PageInfo! totalCount: Int! } input DonationCondition { id: String chainId: Int roundId: String applicationId: String donorAddress: String recipientAddress: String projectId: String transactionHash: String tokenAddress: String } input DonationFilter { id: StringFilter chainId: IntFilter roundId: StringFilter applicationId: StringFilter donorAddress: StringFilter recipientAddress: StringFilter projectId: StringFilter transactionHash: StringFilter tokenAddress: StringFilter amountInUsd: FloatFilter timestamp: DatetimeFilter and: [DonationFilter!] or: [DonationFilter!] not: DonationFilter } enum DonationsOrderBy { NATURAL ID_ASC ID_DESC CHAIN_ID_ASC CHAIN_ID_DESC ROUND_ID_ASC ROUND_ID_DESC DONOR_ADDRESS_ASC DONOR_ADDRESS_DESC AMOUNT_IN_USD_ASC AMOUNT_IN_USD_DESC TIMESTAMP_ASC TIMESTAMP_DESC BLOCK_NUMBER_ASC BLOCK_NUMBER_DESC } # ─── Application Payout ─────────────────────────────────────────────────────── """A payout distributed to an approved application after a round closes.""" type ApplicationPayout { id: Int! chainId: Int! roundId: String! applicationId: String! """Amount paid in the match token's native units.""" amount: BigFloat! tokenAddress: String! amountInUsd: Float! amountInRoundMatchToken: BigFloat! transactionHash: String! sender: String! timestamp: Datetime application: Application round: Round } type ApplicationPayoutEdge { cursor: Cursor node: ApplicationPayout } type ApplicationPayoutsConnection { nodes: [ApplicationPayout]! edges: [ApplicationPayoutEdge]! pageInfo: PageInfo! totalCount: Int! } input ApplicationPayoutCondition { chainId: Int roundId: String applicationId: String sender: String tokenAddress: String } input ApplicationPayoutFilter { chainId: IntFilter roundId: StringFilter applicationId: StringFilter sender: StringFilter amountInUsd: FloatFilter and: [ApplicationPayoutFilter!] or: [ApplicationPayoutFilter!] not: ApplicationPayoutFilter } enum ApplicationPayoutsOrderBy { NATURAL ID_ASC ID_DESC CHAIN_ID_ASC CHAIN_ID_DESC ROUND_ID_ASC ROUND_ID_DESC AMOUNT_IN_USD_ASC AMOUNT_IN_USD_DESC TIMESTAMP_ASC TIMESTAMP_DESC } # ─── Price ──────────────────────────────────────────────────────────────────── """ A price data point for an ERC-20 token on a chain, recorded periodically by the price fetcher to enable USD conversion of on-chain amounts. """ type Price { id: Int! chainId: Int! tokenAddress: String! priceInUsd: Float! timestamp: Datetime! blockNumber: BigFloat! } type PriceEdge { cursor: Cursor node: Price } type PricesConnection { nodes: [Price]! edges: [PriceEdge]! pageInfo: PageInfo! totalCount: Int! } input PriceCondition { chainId: Int tokenAddress: String } input PriceFilter { chainId: IntFilter tokenAddress: StringFilter priceInUsd: FloatFilter timestamp: DatetimeFilter and: [PriceFilter!] or: [PriceFilter!] not: PriceFilter } enum PricesOrderBy { NATURAL ID_ASC ID_DESC CHAIN_ID_ASC CHAIN_ID_DESC TIMESTAMP_ASC TIMESTAMP_DESC BLOCK_NUMBER_ASC BLOCK_NUMBER_DESC } # ─── Attestation ───────────────────────────────────────────────────────────── """ An EAS (Ethereum Attestation Service) attestation recording a user's cross-chain donation contribution summary. """ type Attestation { uid: String! chainId: Int! fee: BigFloat! recipient: String! refUID: String! projectsContributed: BigFloat! roundsContributed: BigFloat! chainIdsContributed: BigFloat! totalUSDAmount: BigFloat! timestamp: Datetime metadataCid: String! metadata: JSON } type AttestationEdge { cursor: Cursor node: Attestation } type AttestationsConnection { nodes: [Attestation]! edges: [AttestationEdge]! pageInfo: PageInfo! totalCount: Int! } input AttestationCondition { chainId: Int recipient: String uid: String } input AttestationFilter { chainId: IntFilter recipient: StringFilter uid: StringFilter timestamp: DatetimeFilter and: [AttestationFilter!] or: [AttestationFilter!] not: AttestationFilter } enum AttestationsOrderBy { NATURAL UID_ASC UID_DESC CHAIN_ID_ASC CHAIN_ID_DESC TIMESTAMP_ASC TIMESTAMP_DESC } # ─── Filter Input Scalars ───────────────────────────────────────────────────── input StringFilter { equalTo: String notEqualTo: String isNull: Boolean in: [String!] notIn: [String!] includes: String notIncludes: String startsWith: String endsWith: String } input IntFilter { equalTo: Int notEqualTo: Int lessThan: Int lessThanOrEqualTo: Int greaterThan: Int greaterThanOrEqualTo: Int isNull: Boolean in: [Int!] notIn: [Int!] } input FloatFilter { equalTo: Float notEqualTo: Float lessThan: Float lessThanOrEqualTo: Float greaterThan: Float greaterThanOrEqualTo: Float isNull: Boolean } input DatetimeFilter { equalTo: Datetime notEqualTo: Datetime lessThan: Datetime lessThanOrEqualTo: Datetime greaterThan: Datetime greaterThanOrEqualTo: Datetime isNull: Boolean } input StringListFilter { contains: [String] containedBy: [String] overlaps: [String] isNull: Boolean } input ProjectTypeFilter { equalTo: ProjectType notEqualTo: ProjectType in: [ProjectType!] notIn: [ProjectType!] } input ApplicationStatusFilter { equalTo: ApplicationStatus notEqualTo: ApplicationStatus in: [ApplicationStatus!] notIn: [ApplicationStatus!] } input ProjectRoleNameFilter { equalTo: ProjectRoleName notEqualTo: ProjectRoleName } input RoundRoleNameFilter { equalTo: RoundRoleName notEqualTo: RoundRoleName } # ─── Query Root ─────────────────────────────────────────────────────────────── """The root query type for the Gitcoin Grants Stack Indexer GraphQL API.""" type Query { """Returns the string 'Query' — useful as a liveness check.""" query: Query # ── Projects ────────────────────────────────────────────────────────────── """Fetch a single project by its composite primary key (id + chainId).""" project(id: String!, chainId: Int!): Project """List all projects with optional filtering, sorting, and pagination.""" projects( first: Int last: Int before: Cursor after: Cursor condition: ProjectCondition filter: ProjectFilter orderBy: [ProjectsOrderBy!] ): ProjectsConnection # ── Rounds ──────────────────────────────────────────────────────────────── """Fetch a single round by its composite primary key (id + chainId).""" round(id: String!, chainId: Int!): Round """List all rounds with optional filtering, sorting, and pagination.""" rounds( first: Int last: Int before: Cursor after: Cursor condition: RoundCondition filter: RoundFilter orderBy: [RoundsOrderBy!] ): RoundsConnection # ── Applications ────────────────────────────────────────────────────────── """Fetch a single application by its composite primary key (id + chainId + roundId).""" application(id: String!, chainId: Int!, roundId: String!): Application """List all applications with optional filtering, sorting, and pagination.""" applications( first: Int last: Int before: Cursor after: Cursor condition: ApplicationCondition filter: ApplicationFilter orderBy: [ApplicationsOrderBy!] ): ApplicationsConnection # ── Donations ───────────────────────────────────────────────────────────── """Fetch a single donation by its id.""" donation(id: String!): Donation """List all donations with optional filtering, sorting, and pagination.""" donations( first: Int last: Int before: Cursor after: Cursor condition: DonationCondition filter: DonationFilter orderBy: [DonationsOrderBy!] ): DonationsConnection # ── Application Payouts ─────────────────────────────────────────────────── """List all application payouts with optional filtering, sorting, and pagination.""" applicationPayouts( first: Int last: Int before: Cursor after: Cursor condition: ApplicationPayoutCondition filter: ApplicationPayoutFilter orderBy: [ApplicationPayoutsOrderBy!] ): ApplicationPayoutsConnection # ── Project Roles ───────────────────────────────────────────────────────── """List all project roles with optional filtering, sorting, and pagination.""" projectRoles( first: Int last: Int before: Cursor after: Cursor condition: ProjectRoleCondition filter: ProjectRoleFilter orderBy: [ProjectRolesOrderBy!] ): ProjectRolesConnection # ── Round Roles ─────────────────────────────────────────────────────────── """List all round roles with optional filtering, sorting, and pagination.""" roundRoles( first: Int last: Int before: Cursor after: Cursor condition: RoundRoleCondition filter: RoundRoleFilter orderBy: [RoundRolesOrderBy!] ): RoundRolesConnection # ── Prices ──────────────────────────────────────────────────────────────── """List token price records with optional filtering, sorting, and pagination.""" prices( first: Int last: Int before: Cursor after: Cursor condition: PriceCondition filter: PriceFilter orderBy: [PricesOrderBy!] ): PricesConnection # ── Attestations ────────────────────────────────────────────────────────── """Fetch a single EAS attestation by UID.""" attestation(uid: String!): Attestation """List all attestations with optional filtering, sorting, and pagination.""" attestations( first: Int last: Int before: Cursor after: Cursor condition: AttestationCondition filter: AttestationFilter orderBy: [AttestationsOrderBy!] ): AttestationsConnection }