参数
此方法不接受任何参数。响应
代码示例
基本请求
复制
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": "getInflationRate"
}'
使用 web3.js
复制
import { Connection } from '@solana/web3.js';
const connection = new Connection('https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY');
// Get current inflation rate
const inflationRate = await connection.getInflationRate();
console.log('Total inflation:', inflationRate.total);
console.log('Validator inflation:', inflationRate.validator);
console.log('Foundation inflation:', inflationRate.foundation);
console.log('Current epoch:', inflationRate.epoch);
// Calculate staking APY
async function calculateStakingAPY(totalStaked: number, totalSupply: number) {
const inflationRate = await connection.getInflationRate();
const validatorAPY = (inflationRate.validator * totalSupply) / totalStaked;
return {
validatorAPY,
totalInflation: inflationRate.total,
validatorInflation: inflationRate.validator,
foundationInflation: inflationRate.foundation,
epoch: inflationRate.epoch
};
}
注意事项
- 返回当前通胀率及其分配
- 总通胀在验证者和基金会之间分配
- 通胀率以百分比表示
- 响应是即时的,因为它从当前状态读取
- 通胀率可能在不同 epoch 之间变化
最佳实践
- 使用此方法了解当前网络通胀
- 在适当时缓存结果以减少 RPC 负载
- 考虑通胀对质押奖励的影响
- 监控通胀率的变化
- 结合其他通胀相关方法使用
常见错误
| 错误码 | 消息 | 解决方案 |
|---|---|---|
| -32601 | Method not found | 验证是否连接到 Solana RPC 节点 |
| -32007 | Inflation information unavailable | 节点可能正在启动或同步中 |
用例
-
通胀跟踪
复制
interface InflationHistory { epoch: number; total: number; validator: number; foundation: number; timestamp: number; } async function trackInflationHistory( epochs: number = 10 ): Promise<InflationHistory[]> { const history: InflationHistory[] = []; const currentEpoch = (await connection.getEpochInfo()).epoch; for (let i = 0; i < epochs; i++) { const epoch = currentEpoch - i; const inflationRate = await connection.getInflationRate(); history.push({ epoch: inflationRate.epoch, total: inflationRate.total, validator: inflationRate.validator, foundation: inflationRate.foundation, timestamp: Date.now() }); // Add delay to avoid rate limiting await new Promise(resolve => setTimeout(resolve, 1000)); } return history; } -
质押分析
复制
interface StakingMetrics { currentAPY: number; projectedAPY: number; totalStaked: number; totalSupply: number; inflationRate: number; validatorInflation: number; } async function analyzeStakingMetrics(): Promise<StakingMetrics> { const inflationRate = await connection.getInflationRate(); const supply = await connection.getSupply(); const voteAccounts = await connection.getVoteAccounts(); const totalStaked = voteAccounts.current .concat(voteAccounts.delinquent) .reduce((sum, account) => sum + account.activatedStake, 0); const currentAPY = (inflationRate.validator * supply.value.total) / totalStaked; // Project future APY based on current trends const projectedAPY = currentAPY * 0.95; // Assuming 5% decrease return { currentAPY, projectedAPY, totalStaked, totalSupply: supply.value.total, inflationRate: inflationRate.total, validatorInflation: inflationRate.validator }; } -
通胀告警
复制
interface InflationAlert { type: 'high' | 'low' | 'change'; message: string; currentRate: number; previousRate: number; difference: number; } class InflationMonitor { private previousRate: number | null = null; private threshold: number; constructor(threshold: number = 0.01) { this.threshold = threshold; } async checkInflation(): Promise<InflationAlert[]> { const inflationRate = await connection.getInflationRate(); const alerts: InflationAlert[] = []; if (this.previousRate !== null) { const difference = Math.abs(inflationRate.total - this.previousRate); if (difference > this.threshold) { alerts.push({ type: 'change', message: `Inflation rate changed by ${difference.toFixed(4)}`, currentRate: inflationRate.total, previousRate: this.previousRate, difference }); } } // Check for unusually high or low rates if (inflationRate.total > 0.08) { // 8% threshold alerts.push({ type: 'high', message: `Inflation rate is unusually high: ${inflationRate.total}`, currentRate: inflationRate.total, previousRate: this.previousRate || inflationRate.total, difference: 0 }); } if (inflationRate.total < 0.01) { // 1% threshold alerts.push({ type: 'low', message: `Inflation rate is unusually low: ${inflationRate.total}`, currentRate: inflationRate.total, previousRate: this.previousRate || inflationRate.total, difference: 0 }); } this.previousRate = inflationRate.total; return alerts; } }