参数
响应
代码示例
基本请求
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);
注意事项
- 返回按 lamport 余额排序的前 20 个账户
- 结果按余额降序排序
- 流通账户是不属于系统程序的账户
- 非流通账户通常属于系统程序
- 响应是即时的,因为它从当前状态读取
最佳实践
- 根据需求使用适当的 commitment 级别:
processed用于 UI 更新confirmed用于大多数操作finalized用于关键操作
- 使用
filter参数关注相关账户 - 在向用户显示时除以 1e9 将 lamports 转换为 SOL
- 考虑缓存结果以用于 UI 更新以减少 RPC 负载
常见错误
| 错误码 | 消息 | 解决方案 |
|---|---|---|
| -32602 | Invalid param: Invalid filter | 使用 ‘circulating’ 或 ‘nonCirculating’ |
| -32601 | Method not found | 验证是否连接到 Solana RPC 节点 |
| -32007 | Account information unavailable | 节点可能正在启动或同步中 |
用例
-
网络分析
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`); } -
代币分布监控
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'); } -
巨鲸监控
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; }