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.
Параметры
Объект конфигурации, содержащий:Уровень подтверждения (processed, confirmed, finalized)
excludeNonCirculatingAccountsList
Исключать ли не находящиеся в обороте счета из общего предложения
Ответ
Объект, содержащий:Общее предложение в lamports
Предложение в обороте в lamports
Предложение вне оборота в lamports
Массив адресов счетов, не находящихся в обороте
Примеры кода
Базовый запрос
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
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
}
}
};
}
Примечания
- Возвращает текущее предложение SOL в lamports
- Предложение разбито на общее, в обороте и вне оборота
- Ответ приходит немедленно, так как читается из текущего состояния
- Предложение может изменяться в зависимости от активности сети и инфляции
- Счета вне оборота, как правило, контролируются Фондом Solana
Рекомендации
- Используйте подходящий уровень подтверждения в зависимости от ваших потребностей
- Кэшируйте результаты там, где это уместно, для снижения нагрузки на RPC
- Отслеживайте изменения в предложении
- Рассмотрите использование подписки на websocket для обновлений в реальном времени
- Обрабатывайте сетевые ошибки и выполняйте повторные попытки при необходимости
Распространённые ошибки
| Код | Сообщение | Решение |
|---|
| -32601 | Method not found | Убедитесь, что вы подключены к узлу Solana RPC |
| -32602 | Invalid params | Проверьте параметры конфигурации |
| -32007 | Supply information unavailable | Узел может выполнять начальную загрузку или синхронизацию |
Сценарии использования
-
Анализ предложения
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
}
};
}
}
-
Мониторинг предложения
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;
}
}
-
Планирование предложения
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
}
};
}
}