in-solana by Supanode

getSupply — Solana RPC Method

getSupply returns the current SOL supply broken down into total, circulating, and non-circulating amounts. It can optionally include the list of non-circulating account addresses.

Parameters

NameTypeRequiredDescription
commitmentstringNoprocessed, confirmed, or finalized. Default: finalized.
excludeNonCirculatingAccountsListboolNoIf true, omits the nonCirculatingAccounts array from the response. Default: false.

Request

curl -X POST https://api.mainnet-beta.solana.com \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getSupply",
    "params": [
      {"excludeNonCirculatingAccountsList": true}
    ]
  }'

TypeScript (@solana/kit)

import { createSolanaRpc } from "@solana/kit";

const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
const supply = await rpc
  .getSupply({ excludeNonCirculatingAccountsList: true })
  .send();

const totalSOL = Number(supply.value.total) / 1_000_000_000;
const circSOL = Number(supply.value.circulating) / 1_000_000_000;
console.log(`Total: ${totalSOL.toLocaleString()} SOL`);
console.log(`Circulating: ${circSOL.toLocaleString()} SOL`);

Response

{
  "jsonrpc": "2.0",
  "result": {
    "context": { "slot": 341200000, "apiVersion": "2.2.4" },
    "value": {
      "total": 590000000000000000,
      "circulating": 480000000000000000,
      "nonCirculating": 110000000000000000,
      "nonCirculatingAccounts": []
    }
  },
  "id": 1
}
FieldTypeDescription
totalu64Total supply of SOL in lamports.
circulatingu64Circulating supply in lamports.
nonCirculatingu64Non-circulating supply in lamports.
nonCirculatingAccountsstring[]List of non-circulating account addresses. Empty when excludeNonCirculatingAccountsList is true.

Common errors

This method rarely fails. The main issue is that including the non-circulating accounts list can produce a large response.

Performance

With excludeNonCirculatingAccountsList: true, the response is small and fast. With the list included, the response can be larger as it enumerates all non-circulating accounts.

FAQ

What counts as non-circulating supply? Non-circulating SOL includes foundation-held accounts, grant accounts with lockup restrictions, and other reserved accounts that are not freely transferable on the open market.

How does total supply increase? Total supply increases through inflation (new SOL minted as staking rewards each epoch). The rate of increase follows the inflation schedule from getInflationGovernor.

Is circulating supply the same as total supply minus staked SOL? No. Circulating supply is total minus non-circulating (locked/reserved). Staked SOL is circulating — it is delegated but still owned by the staker and can be undelegated.

How accurate is this data? The supply data is computed from the actual on-chain account state and is exact at the reported slot. It updates with every block as transactions modify account balances and inflation is distributed.

Parameters

ParameterTypeRequiredDescriptionDefault
commitmentstringNoCommitment level: processed, confirmed, or finalized.finalized
excludeNonCirculatingAccountsListboolNoIf true, omits the list of non-circulating account addresses.—

Updated: