> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbitflare.com/llms.txt
> Use this file to discover all available pages before exploring further.

# getLargestAccounts

> Возвращает 20 крупнейших счетов по балансу lamport

## Параметры

<ParamField query="config" type="object" optional>
  Объект конфигурации, содержащий следующие необязательные поля:

  <Expandable title="Поля конфигурации">
    <ParamField query="commitment" type="string" optional>
      Уровень подтверждения:

      * `processed`: Последний блок (неподтверждённый)
      * `confirmed`: Подтверждён супербольшинством
      * `finalized`: Финализирован супербольшинством
    </ParamField>

    <ParamField query="filter" type="string" optional>
      Фильтр результатов по типу счёта:

      * `circulating`: Фильтровать по счетам в обороте
      * `nonCirculating`: Фильтровать по счетам вне оборота
    </ParamField>
  </Expandable>
</ParamField>

## Ответ

<ResponseField name="result" type="object">
  <Expandable title="Поля результата">
    <ResponseField name="context" type="object">
      <ResponseField name="slot" type="number">
        Slot, на котором был обработан запрос
      </ResponseField>
    </ResponseField>

    <ResponseField name="value" type="array">
      Массив объектов с информацией о счёте:

      <ResponseField name="address" type="string">
        Адрес счёта (в кодировке base-58)
      </ResponseField>

      <ResponseField name="lamports" type="number">
        Количество lamports на счёте
      </ResponseField>
    </ResponseField>
  </Expandable>
</ResponseField>

## Примеры кода

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

```bash theme={null}
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"
}'
```

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

```bash theme={null}
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

```typescript theme={null}
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

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

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

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

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