arazzo: 1.0.1 info: title: Solana Analyze an SPL Token Mint and Its Largest Holders summary: Read a mint's total supply, list its 20 largest token accounts, and inspect the top holder. description: >- The concentration analysis behind token dashboards and due-diligence tooling. The workflow reads the current total supply for an SPL Token mint, lists the twenty largest token accounts holding that mint, and then inspects the largest holder's account in parsed form to reveal who owns it. Supply and top-holder balances together give the caller the concentration ratio that indicates whether a token is widely distributed or controlled by a handful of accounts. Every step spells out its JSON-RPC request inline so the flow can be read and executed without opening the underlying OpenAPI description. version: 1.0.0 sourceDescriptions: - name: solanaRpcApi url: ../openapi/solana-rpc-api-openapi.yml type: openapi workflows: - workflowId: token-mint-analytics summary: Profile an SPL Token mint's supply and holder concentration. description: >- Combines total supply with the largest holding accounts and the identity of the top holder. inputs: type: object required: - mintAddress properties: mintAddress: type: string description: Base58-encoded public key of the SPL Token mint. steps: - stepId: totalSupply description: >- Read the mint's current total supply, returned as a raw amount plus the decimals needed to render it. operationId: getTokenSupply requestBody: contentType: application/json payload: jsonrpc: "2.0" id: 1 method: getTokenSupply params: - $inputs.mintAddress successCriteria: - condition: $statusCode == 200 - context: $response.body condition: $.result.value type: jsonpath outputs: amount: $response.body#/result/value/amount decimals: $response.body#/result/value/decimals uiAmountString: $response.body#/result/value/uiAmountString - stepId: largestHolders description: >- List the twenty largest token accounts for the mint, ordered by balance, which is the raw material for a concentration calculation. operationId: getTokenLargestAccounts requestBody: contentType: application/json payload: jsonrpc: "2.0" id: 1 method: getTokenLargestAccounts params: - $inputs.mintAddress successCriteria: - condition: $statusCode == 200 - context: $response.body condition: $.result.value type: jsonpath outputs: holders: $response.body#/result/value topHolderAddress: $response.body#/result/value/0/address topHolderAmount: $response.body#/result/value/0/amount topHolderUiAmountString: $response.body#/result/value/0/uiAmountString onSuccess: - name: hasHolders type: goto stepId: inspectTopHolder criteria: - context: $response.body condition: $.result.value.length > 0 type: jsonpath - stepId: inspectTopHolder description: >- Inspect the largest token account in parsed form so the owning wallet behind the balance is visible rather than just the token account address. operationId: getAccountInfo requestBody: contentType: application/json payload: jsonrpc: "2.0" id: 1 method: getAccountInfo params: - $steps.largestHolders.outputs.topHolderAddress - encoding: jsonParsed successCriteria: - condition: $statusCode == 200 - context: $response.body condition: $.result.value type: jsonpath outputs: accountData: $response.body#/result/value/data accountOwnerProgram: $response.body#/result/value/owner lamports: $response.body#/result/value/lamports outputs: supplyAmount: $steps.totalSupply.outputs.amount supplyUiAmountString: $steps.totalSupply.outputs.uiAmountString decimals: $steps.totalSupply.outputs.decimals largestHolders: $steps.largestHolders.outputs.holders topHolderAddress: $steps.largestHolders.outputs.topHolderAddress topHolderAmount: $steps.largestHolders.outputs.topHolderAmount topHolderAccountData: $steps.inspectTopHolder.outputs.accountData