Skip to content

Commit 8aaa0c7

Browse files
authored
genesis: create EpochRewards at epoch 0 (#6125)
1 parent cfd4fa5 commit 8aaa0c7

File tree

4 files changed

+28
-13
lines changed

4 files changed

+28
-13
lines changed

programs/stake/src/config.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ pub fn create_account(lamports: u64, config: &Config) -> AccountSharedData {
4545
#[allow(deprecated)]
4646
pub fn add_genesis_account(genesis_config: &mut GenesisConfig) -> u64 {
4747
let mut account = create_config_account(vec![], &Config::default(), 0);
48-
let lamports = genesis_config.rent.minimum_balance(account.data().len());
48+
let lamports = std::cmp::max(genesis_config.rent.minimum_balance(account.data().len()), 1);
4949

50-
account.set_lamports(lamports.max(1));
50+
account.set_lamports(lamports);
5151

5252
genesis_config.add_account(solana_stake_interface::config::id(), account);
5353

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//! Creates the initial empty EpochRewards sysvar
2+
use {
3+
solana_account::{AccountSharedData, WritableAccount},
4+
solana_genesis_config::GenesisConfig,
5+
solana_sdk_ids::sysvar,
6+
solana_sysvar::{
7+
epoch_rewards::{self, EpochRewards},
8+
Sysvar,
9+
},
10+
};
11+
12+
pub fn add_genesis_account(genesis_config: &mut GenesisConfig) -> u64 {
13+
let data = vec![0; EpochRewards::size_of()];
14+
let lamports = std::cmp::max(genesis_config.rent.minimum_balance(data.len()), 1);
15+
16+
let account = AccountSharedData::create(lamports, data, sysvar::id(), false, u64::MAX);
17+
18+
genesis_config.add_account(epoch_rewards::id(), account);
19+
20+
lamports
21+
}

programs/stake/src/lib.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,16 @@ pub use solana_sdk_ids::stake::{check_id, id};
88
use {solana_genesis_config::GenesisConfig, solana_native_token::LAMPORTS_PER_SOL};
99

1010
pub mod config;
11+
pub mod epoch_rewards;
1112
#[deprecated(since = "2.2.0")]
1213
pub mod points;
1314
pub mod stake_instruction;
1415
pub mod stake_state;
1516

1617
pub fn add_genesis_accounts(genesis_config: &mut GenesisConfig) -> u64 {
17-
config::add_genesis_account(genesis_config)
18+
let config_lamports = config::add_genesis_account(genesis_config);
19+
let rewards_lamports = epoch_rewards::add_genesis_account(genesis_config);
20+
config_lamports.saturating_add(rewards_lamports)
1821
}
1922

2023
/// The minimum stake amount that can be delegated, in lamports.

runtime/src/bank/partitioned_epoch_rewards/mod.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -611,13 +611,7 @@ mod tests {
611611
);
612612

613613
assert!(curr_bank.is_calculated());
614-
615-
if slot == SLOTS_PER_EPOCH {
616-
// cap should increase because of new epoch rewards
617-
assert!(post_cap > pre_cap);
618-
} else {
619-
assert_eq!(post_cap, pre_cap);
620-
}
614+
assert_eq!(post_cap, pre_cap);
621615
} else if slot == SLOTS_PER_EPOCH + 1 {
622616
// 1. when curr_slot == SLOTS_PER_EPOCH + 1, the 2nd block of
623617
// epoch 1, reward distribution should happen in this block.
@@ -694,9 +688,6 @@ mod tests {
694688

695689
// calculation block, state should be calculated.
696690
assert!(curr_bank.is_calculated());
697-
698-
// cap should increase because of new epoch rewards
699-
assert!(post_cap > pre_cap);
700691
} else if slot == SLOTS_PER_EPOCH + 1 {
701692
// When curr_slot == SLOTS_PER_EPOCH + 1, the 2nd block of
702693
// epoch 1, reward distribution should happen in this block. The

0 commit comments

Comments
 (0)