跳转到主要内容

参数

此方法不接受任何参数。

响应

result
object

代码示例

基本请求

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
  };
}

注意事项

  1. 返回当前通胀率及其分配
  2. 总通胀在验证者和基金会之间分配
  3. 通胀率以百分比表示
  4. 响应是即时的,因为它从当前状态读取
  5. 通胀率可能在不同 epoch 之间变化

最佳实践

  1. 使用此方法了解当前网络通胀
  2. 在适当时缓存结果以减少 RPC 负载
  3. 考虑通胀对质押奖励的影响
  4. 监控通胀率的变化
  5. 结合其他通胀相关方法使用

常见错误

错误码消息解决方案
-32601Method not found验证是否连接到 Solana RPC 节点
-32007Inflation information unavailable节点可能正在启动或同步中

用例

  1. 通胀跟踪
    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;
    }
    
  2. 质押分析
    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
      };
    }
    
  3. 通胀告警
    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;
      }
    }