Parameters

config
object

Configuration object containing the following optional fields:

Response

result
object

Code Examples

Basic Request

curl https://rpc.orbitflare.com -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getLargestAccounts"
}'

Request with Filter

curl https://rpc.orbitflare.com -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getLargestAccounts",
  "params": [
    {
      "filter": "circulating"
    }
  ]
}'

Using web3.js

import { Connection } from '@solana/web3.js';

const connection = new Connection('https://rpc.orbitflare.com');

// Get all largest accounts
const largestAccounts = await connection.getLargestAccounts();
console.log('Largest accounts:', largestAccounts);

// Get circulating accounts only
const circulatingAccounts = await connection.getLargestAccounts({
  filter: 'circulating'
});
console.log('Largest circulating accounts:', circulatingAccounts);

Notes

  1. Returns the top 20 accounts by lamport balance
  2. Results are sorted in descending order by balance
  3. Circulating accounts are those not owned by the system program
  4. Non-circulating accounts are typically owned by the system program
  5. The response is immediate as it reads from the current state

Best Practices

  1. Use appropriate commitment level based on your needs:
    • processed for UI updates
    • confirmed for most operations
    • finalized for critical operations
  2. Use the filter parameter to focus on relevant accounts
  3. Convert lamports to SOL by dividing by 1e9 when displaying to users
  4. Consider caching results for UI updates to reduce RPC load

Common Errors

CodeMessageSolution
-32602Invalid param: Invalid filterUse either ‘circulating’ or ‘nonCirculating’
-32601Method not foundVerify you’re connected to a Solana RPC node
-32007Account information unavailableNode may be bootstrapping or syncing

Use Cases

  1. Network Analysis

    async function analyzeNetworkDistribution() {
      const accounts = await connection.getLargestAccounts();
      const total = accounts.reduce((sum, acc) => sum + acc.lamports, 0);
      const top20Percentage = accounts.reduce((sum, acc) => sum + acc.lamports, 0) / total;
      console.log(`Top 20 accounts hold ${top20Percentage * 100}% of total SOL`);
    }
    
  2. Token Distribution Monitoring

    async function monitorTokenDistribution() {
      const circulating = await connection.getLargestAccounts({ filter: 'circulating' });
      const nonCirculating = await connection.getLargestAccounts({ filter: 'nonCirculating' });
      
      const circulatingTotal = circulating.reduce((sum, acc) => sum + acc.lamports, 0);
      const nonCirculatingTotal = nonCirculating.reduce((sum, acc) => sum + acc.lamports, 0);
      
      console.log('Circulating supply:', circulatingTotal / 1e9, 'SOL');
      console.log('Non-circulating supply:', nonCirculatingTotal / 1e9, 'SOL');
    }
    
  3. Whale Watching

    interface WhaleAlert {
      address: string;
      balance: number;
      change: number;
    }
    
    async function trackWhaleMovements(previousAccounts: any[]) {
      const currentAccounts = await connection.getLargestAccounts();
      const alerts: WhaleAlert[] = [];
      
      for (const current of currentAccounts) {
        const previous = previousAccounts.find(p => p.address === current.address);
        if (previous) {
          const change = current.lamports - previous.lamports;
          if (Math.abs(change) > 1e9) { // Alert on changes > 1 SOL
            alerts.push({
              address: current.address,
              balance: current.lamports / 1e9,
              change: change / 1e9
            });
          }
        }
      }
      
      return alerts;
    }