solana_program::sysvar

Module epoch_rewards

Source
Expand description

Epoch rewards for current epoch

The epoch rewards sysvar provides access to the EpochRewards type, which tracks whether the rewards period (including calculation and distribution) is in progress, as well as the details needed to resume distribution when starting from a snapshot during the rewards period. The sysvar is repopulated at the start of the first block of each epoch. Therefore, the sysvar contains data about the current epoch until a new epoch begins. Fields in the sysvar include:

  • distribution starting block height
  • the number of partitions in the distribution
  • the parent-blockhash seed used to generate the partition hasher
  • the total rewards points calculated for the epoch
  • total rewards for epoch, in lamports
  • rewards for the epoch distributed so far, in lamports
  • whether the rewards period is active

EpochRewards implements Sysvar::get and can be loaded efficiently without passing the sysvar account ID to the program.

See also the Solana documentation on the epoch rewards sysvar.

§Examples

Accessing via on-chain program directly:

fn process_instruction(
    program_id: &Pubkey,
    accounts: &[AccountInfo],
    instruction_data: &[u8],
) -> ProgramResult {

    let epoch_rewards = EpochRewards::get()?;
    msg!("epoch_rewards: {:#?}", epoch_rewards);

    Ok(())
}

Accessing via on-chain program’s account parameters:

fn process_instruction(
    program_id: &Pubkey,
    accounts: &[AccountInfo],
    instruction_data: &[u8],
) -> ProgramResult {
    let account_info_iter = &mut accounts.iter();
    let epoch_rewards_account_info = next_account_info(account_info_iter)?;

    assert!(epoch_rewards::check_id(epoch_rewards_account_info.key));

    let epoch_rewards = EpochRewards::from_account_info(epoch_rewards_account_info)?;
    msg!("epoch_rewards: {:#?}", epoch_rewards);

    Ok(())
}

Accessing via the RPC client:

fn print_sysvar_epoch_rewards(client: &RpcClient) -> Result<()> {
    let epoch_rewards = client.get_account(&epoch_rewards::ID)?;
    let data: EpochRewards = bincode::deserialize(&epoch_rewards.data)?;

    Ok(())
}

Re-exports§

Constants§

  • The const program ID.

Functions§

  • Returns true if given pubkey is the program ID.
  • Returns the program ID.