Parameters

This method does not take any parameters.

Response

result
object

Code Examples

Basic Request

curl https://rpc.orbitflare.com -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getInflationGovernor"
}'

Using web3.js

import { Connection } from '@solana/web3.js';

const connection = new Connection('https://rpc.orbitflare.com');

// Get inflation governor parameters
const inflationGovernor = await connection.getInflationGovernor();
console.log('Initial inflation:', inflationGovernor.initial);
console.log('Terminal inflation:', inflationGovernor.terminal);
console.log('Taper rate:', inflationGovernor.taper);
console.log('Foundation percentage:', inflationGovernor.foundation);
console.log('Foundation term:', inflationGovernor.foundationTerm);

// Calculate current inflation rate
async function calculateCurrentInflation() {
  const inflationGovernor = await connection.getInflationGovernor();
  const epochInfo = await connection.getEpochInfo();
  
  const yearsSinceGenesis = epochInfo.absoluteSlot / (432000 * 365); // Approximate years
  const currentInflation = Math.max(
    inflationGovernor.terminal,
    inflationGovernor.initial - (inflationGovernor.taper * yearsSinceGenesis)
  );
  
  return {
    currentInflation,
    yearsSinceGenesis,
    initialInflation: inflationGovernor.initial,
    terminalInflation: inflationGovernor.terminal,
    taperRate: inflationGovernor.taper
  };
}

Notes

  1. Returns the parameters that govern inflation on the Solana network
  2. Inflation decreases over time according to the taper rate
  3. Foundation inflation is separate from validator inflation
  4. The response is immediate as it reads from the current state
  5. These parameters are set by governance and can change

Best Practices

  1. Use this method to understand the network’s inflation schedule
  2. Cache results when appropriate to reduce RPC load
  3. Consider the impact of inflation on staking rewards
  4. Monitor for changes in inflation parameters
  5. Use in conjunction with other inflation-related methods

Common Errors

CodeMessageSolution
-32601Method not foundVerify you’re connected to a Solana RPC node
-32007Inflation information unavailableNode may be bootstrapping or syncing

Use Cases

  1. Inflation Analysis

    interface InflationMetrics {
      currentInflation: number;
      yearsSinceGenesis: number;
      initialInflation: number;
      terminalInflation: number;
      taperRate: number;
      foundationPercentage: number;
      foundationTerm: number;
      validatorInflation: number;
      foundationInflation: number;
    }
    
    async function analyzeInflation(): Promise<InflationMetrics> {
      const inflationGovernor = await connection.getInflationGovernor();
      const epochInfo = await connection.getEpochInfo();
      
      const yearsSinceGenesis = epochInfo.absoluteSlot / (432000 * 365);
      const currentInflation = Math.max(
        inflationGovernor.terminal,
        inflationGovernor.initial - (inflationGovernor.taper * yearsSinceGenesis)
      );
      
      const foundationInflation = yearsSinceGenesis < inflationGovernor.foundationTerm
        ? currentInflation * inflationGovernor.foundation
        : 0;
      
      return {
        currentInflation,
        yearsSinceGenesis,
        initialInflation: inflationGovernor.initial,
        terminalInflation: inflationGovernor.terminal,
        taperRate: inflationGovernor.taper,
        foundationPercentage: inflationGovernor.foundation,
        foundationTerm: inflationGovernor.foundationTerm,
        validatorInflation: currentInflation - foundationInflation,
        foundationInflation
      };
    }
    
  2. Staking Reward Projection

    interface StakingProjection {
      currentAPY: number;
      futureAPY: number[];
      years: number[];
    }
    
    async function projectStakingRewards(
      totalStaked: number,
      totalSupply: number,
      years: number = 10
    ): Promise<StakingProjection> {
      const inflationGovernor = await connection.getInflationGovernor();
      const epochInfo = await connection.getEpochInfo();
      
      const currentYear = epochInfo.absoluteSlot / (432000 * 365);
      const yearsArray = Array.from({ length: years }, (_, i) => i);
      
      const futureAPY = yearsArray.map(year => {
        const inflation = Math.max(
          inflationGovernor.terminal,
          inflationGovernor.initial - (inflationGovernor.taper * (currentYear + year))
        );
        
        const foundationInflation = (currentYear + year) < inflationGovernor.foundationTerm
          ? inflation * inflationGovernor.foundation
          : 0;
        
        const validatorInflation = inflation - foundationInflation;
        return (validatorInflation * totalSupply) / totalStaked;
      });
      
      return {
        currentAPY: futureAPY[0],
        futureAPY,
        years: yearsArray
      };
    }
    
  3. Inflation Monitoring

    interface InflationAlert {
      type: 'high' | 'low' | 'change';
      message: string;
      currentInflation: number;
      expectedInflation: number;
      difference: number;
    }
    
    async function monitorInflation(
      threshold: number = 0.01
    ): Promise<InflationAlert[]> {
      const inflationGovernor = await connection.getInflationGovernor();
      const epochInfo = await connection.getEpochInfo();
      
      const yearsSinceGenesis = epochInfo.absoluteSlot / (432000 * 365);
      const expectedInflation = Math.max(
        inflationGovernor.terminal,
        inflationGovernor.initial - (inflationGovernor.taper * yearsSinceGenesis)
      );
      
      const currentInflation = await connection.getInflationRate();
      const difference = Math.abs(currentInflation - expectedInflation);
      
      const alerts: InflationAlert[] = [];
      
      if (difference > threshold) {
        alerts.push({
          type: 'change',
          message: `Inflation differs from expected by ${difference.toFixed(4)}`,
          currentInflation,
          expectedInflation,
          difference
        });
      }
      
      if (currentInflation > inflationGovernor.initial) {
        alerts.push({
          type: 'high',
          message: `Inflation is above initial rate`,
          currentInflation,
          expectedInflation,
          difference
        });
      }
      
      if (currentInflation < inflationGovernor.terminal) {
        alerts.push({
          type: 'low',
          message: `Inflation is below terminal rate`,
          currentInflation,
          expectedInflation,
          difference
        });
      }
      
      return alerts;
    }