Перейти к основному содержанию

Параметры

config
object
Объект конфигурации, содержащий следующие необязательные поля:

Ответ

result
object

Примеры кода

Базовый запрос

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

Запрос с фильтром

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

Использование web3.js

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

const connection = new Connection('https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY');

// 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);

Примечания

  1. Возвращает топ-20 счетов по балансу в lamports
  2. Результаты отсортированы в порядке убывания баланса
  3. Счета в обороте — это счета, не принадлежащие системной программе
  4. Счета вне оборота, как правило, принадлежат системной программе
  5. Ответ приходит немедленно, так как читается из текущего состояния

Рекомендации

  1. Используйте подходящий уровень подтверждения в зависимости от ваших потребностей:
    • processed для обновлений интерфейса
    • confirmed для большинства операций
    • finalized для критических операций
  2. Используйте параметр filter для фокусировки на нужных счетах
  3. Для отображения пользователям конвертируйте lamports в SOL, разделив на 1e9
  4. Рассмотрите кэширование результатов для обновлений интерфейса, чтобы снизить нагрузку на RPC

Распространённые ошибки

КодСообщениеРешение
-32602Invalid param: Invalid filterИспользуйте ‘circulating’ или ‘nonCirculating’
-32601Method not foundУбедитесь, что вы подключены к узлу Solana RPC
-32007Account information unavailableУзел может выполнять начальную загрузку или синхронизацию

Сценарии использования

  1. Анализ сети
    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. Мониторинг распределения токенов
    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. Отслеживание крупных держателей
    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;
    }