> ## 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.

# getSupply

> Возвращает текущее предложение SOL

## Параметры

<ResponseField name="config" type="object" optional>
  Объект конфигурации, содержащий:

  <ResponseField name="commitment" type="string" optional>
    Уровень подтверждения (processed, confirmed, finalized)
  </ResponseField>

  <ResponseField name="excludeNonCirculatingAccountsList" type="boolean" optional>
    Исключать ли не находящиеся в обороте счета из общего предложения
  </ResponseField>
</ResponseField>

## Ответ

<ResponseField name="result" type="object">
  Объект, содержащий:

  <ResponseField name="total" type="number">
    Общее предложение в lamports
  </ResponseField>

  <ResponseField name="circulating" type="number">
    Предложение в обороте в lamports
  </ResponseField>

  <ResponseField name="nonCirculating" type="number">
    Предложение вне оборота в lamports
  </ResponseField>

  <ResponseField name="nonCirculatingAccounts" type="array" optional>
    Массив адресов счетов, не находящихся в обороте
  </ResponseField>
</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": "getSupply",
  "params": []
}'
```

### Использование 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 supply
const supply = await connection.getSupply();
console.log('Supply:', supply);

// Get supply with analysis
async function getSupplyWithAnalysis(
  config?: { commitment?: string; excludeNonCirculatingAccountsList?: boolean }
) {
  const supply = await connection.getSupply(config);
  
  return {
    supply,
    analysis: {
      totalInSOL: supply.total / 1e9,
      circulatingInSOL: supply.circulating / 1e9,
      nonCirculatingInSOL: supply.nonCirculating / 1e9,
      circulatingPercentage: (supply.circulating / supply.total) * 100,
      metadata: {
        timestamp: Date.now(),
        commitment: config?.commitment
      }
    }
  };
}
```

## Примечания

1. Возвращает текущее предложение SOL в lamports
2. Предложение разбито на общее, в обороте и вне оборота
3. Ответ приходит немедленно, так как читается из текущего состояния
4. Предложение может изменяться в зависимости от активности сети и инфляции
5. Счета вне оборота, как правило, контролируются Фондом Solana

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

1. Используйте подходящий уровень подтверждения в зависимости от ваших потребностей
2. Кэшируйте результаты там, где это уместно, для снижения нагрузки на RPC
3. Отслеживайте изменения в предложении
4. Рассмотрите использование подписки на websocket для обновлений в реальном времени
5. Обрабатывайте сетевые ошибки и выполняйте повторные попытки при необходимости

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

| Код    | Сообщение                      | Решение                                                   |
| ------ | ------------------------------ | --------------------------------------------------------- |
| -32601 | Method not found               | Убедитесь, что вы подключены к узлу Solana RPC            |
| -32602 | Invalid params                 | Проверьте параметры конфигурации                          |
| -32007 | Supply information unavailable | Узел может выполнять начальную загрузку или синхронизацию |

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

1. **Анализ предложения**
   ```typescript theme={null}
   interface SupplyAnalysis {
     supply: {
       total: number;
       circulating: number;
       nonCirculating: number;
     };
     metrics: {
       totalInSOL: number;
       circulatingInSOL: number;
       nonCirculatingInSOL: number;
       circulatingPercentage: number;
       inflationRate?: number;
     };
     metadata: {
       timestamp: number;
       commitment?: string;
     };
   }

   class SupplyAnalyzer {
     private previousSupply: number | null = null;
     
     async analyzeSupply(
       config?: { commitment?: string; excludeNonCirculatingAccountsList?: boolean }
     ): Promise<SupplyAnalysis> {
       const supply = await connection.getSupply(config);
       const currentTimestamp = Date.now();
       
       const metrics = {
         totalInSOL: supply.total / 1e9,
         circulatingInSOL: supply.circulating / 1e9,
         nonCirculatingInSOL: supply.nonCirculating / 1e9,
         circulatingPercentage: (supply.circulating / supply.total) * 100
       };
       
       if (this.previousSupply !== null) {
         const timeElapsed = (currentTimestamp - this.previousSupply) / (1000 * 60 * 60 * 24); // Days
         const supplyChange = supply.total - this.previousSupply;
         metrics.inflationRate = (supplyChange / this.previousSupply) * (365 / timeElapsed) * 100;
       }
       
       this.previousSupply = supply.total;
       
       return {
         supply,
         metrics,
         metadata: {
           timestamp: currentTimestamp,
           commitment: config?.commitment
         }
       };
     }
   }
   ```

2. **Мониторинг предложения**
   ```typescript theme={null}
   interface SupplyChange {
     previousSupply: {
       total: number;
       circulating: number;
       nonCirculating: number;
     };
     currentSupply: {
       total: number;
       circulating: number;
       nonCirculating: number;
     };
     changes: {
       total: number;
       circulating: number;
       nonCirculating: number;
     };
     metadata: {
       timestamp: number;
     };
   }

   class SupplyMonitor {
     private previousSupply: {
       total: number;
       circulating: number;
       nonCirculating: number;
     } | null = null;
     
     async monitorSupply(
       config?: { commitment?: string; excludeNonCirculatingAccountsList?: boolean }
     ): Promise<SupplyChange | null> {
       const currentSupply = await connection.getSupply(config);
       
       if (this.previousSupply === null) {
         this.previousSupply = currentSupply;
         return null;
       }
       
       const changes = {
         total: currentSupply.total - this.previousSupply.total,
         circulating: currentSupply.circulating - this.previousSupply.circulating,
         nonCirculating: currentSupply.nonCirculating - this.previousSupply.nonCirculating
       };
       
       if (changes.total !== 0 || changes.circulating !== 0 || changes.nonCirculating !== 0) {
         const change: SupplyChange = {
           previousSupply: this.previousSupply,
           currentSupply,
           changes,
           metadata: {
             timestamp: Date.now()
           }
         };
         
         this.previousSupply = currentSupply;
         return change;
       }
       
       return null;
     }
   }
   ```

3. **Планирование предложения**
   ```typescript theme={null}
   interface SupplyProjection {
     currentSupply: {
       total: number;
       circulating: number;
       nonCirculating: number;
     };
     projections: Array<{
       days: number;
       total: number;
       circulating: number;
       nonCirculating: number;
     }>;
     metadata: {
       timestamp: number;
       inflationRate: number;
     };
   }

   class SupplyPlanner {
     private readonly defaultInflationRate = 0.08; // 8% annual inflation
     
     async projectSupply(
       config?: { commitment?: string; excludeNonCirculatingAccountsList?: boolean },
       days: number[] = [30, 90, 365]
     ): Promise<SupplyProjection> {
       const currentSupply = await connection.getSupply(config);
       const currentTimestamp = Date.now();
       
       const projections = days.map(daysAhead => {
         const years = daysAhead / 365;
         const total = currentSupply.total * Math.pow(1 + this.defaultInflationRate, years);
         const circulating = currentSupply.circulating * Math.pow(1 + this.defaultInflationRate, years);
         const nonCirculating = currentSupply.nonCirculating * Math.pow(1 + this.defaultInflationRate, years);
         
         return {
           days: daysAhead,
           total,
           circulating,
           nonCirculating
         };
       });
       
       return {
         currentSupply,
         projections,
         metadata: {
           timestamp: currentTimestamp,
           inflationRate: this.defaultInflationRate
         }
       };
     }
   }
   ```
