diff --git a/programs/storage_program/tests/storage_processor.rs b/programs/storage_program/tests/storage_processor.rs index c590171b80..2875136af3 100644 --- a/programs/storage_program/tests/storage_processor.rs +++ b/programs/storage_program/tests/storage_processor.rs @@ -122,7 +122,7 @@ fn test_proof_bounds() { Hash::default(), ); // the proof is for segment 0, need to move the slot into segment 2 - let mut current_account = current::create_account(1); + let mut current_account = current::create_account(1, 0, 0, 0); Current::to( &Current { slot: SLOTS_PER_SEGMENT * 2, @@ -152,7 +152,7 @@ fn test_serialize_overflow() { let tick_pubkey = Pubkey::new_rand(); let mut keyed_accounts = Vec::new(); let mut user_account = Account::default(); - let mut current_account = current::create_account(1); + let mut current_account = current::create_account(1, 0, 0, 0); keyed_accounts.push(KeyedAccount::new(&pubkey, true, &mut user_account)); keyed_accounts.push(KeyedAccount::new(&tick_pubkey, false, &mut current_account)); @@ -181,7 +181,7 @@ fn test_invalid_accounts_len() { Hash::default(), ); // move tick height into segment 1 - let mut current_account = current::create_account(1); + let mut current_account = current::create_account(1, 0, 0, 0); Current::to( &Current { slot: 16, @@ -240,7 +240,7 @@ fn test_submit_mining_ok() { Hash::default(), ); // move slot into segment 1 - let mut current_account = current::create_account(1); + let mut current_account = current::create_account(1, 0, 0, 0); Current::to( &Current { slot: SLOTS_PER_SEGMENT, diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 8268167856..04561bb0d2 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -32,7 +32,7 @@ use solana_sdk::inflation::Inflation; use solana_sdk::native_loader; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, Signature}; -use solana_sdk::syscall::current::{self, Current}; +use solana_sdk::syscall::current; use solana_sdk::syscall::fees::{self, Fees}; use solana_sdk::syscall::slot_hashes::{self, SlotHashes}; use solana_sdk::syscall::tick_height::{self, TickHeight}; @@ -402,15 +402,15 @@ impl Bank { } fn update_current(&self) { - let mut account = current::create_account(1); - let current = Current { - slot: self.slot, - epoch: self.epoch_schedule.get_epoch(self.slot), - stakers_epoch: self.epoch_schedule.get_stakers_epoch(self.slot), - }; - current.to(&mut account).unwrap(); - - self.store_account(¤t::id(), &account); + self.store_account( + ¤t::id(), + ¤t::create_account( + 1, + self.slot, + self.epoch_schedule.get_epoch(self.slot), + self.epoch_schedule.get_stakers_epoch(self.slot), + ), + ); } fn update_slot_hashes(&self) { diff --git a/sdk/src/account.rs b/sdk/src/account.rs index 4601e70190..b24a3f1180 100644 --- a/sdk/src/account.rs +++ b/sdk/src/account.rs @@ -46,6 +46,20 @@ impl Account { } } + pub fn new_data( + lamports: u64, + state: &T, + owner: &Pubkey, + ) -> Result { + let data = bincode::serialize(state)?; + Ok(Account { + lamports, + data, + owner: *owner, + executable: false, + }) + } + pub fn deserialize_data(&self) -> Result { bincode::deserialize(&self.data) } diff --git a/sdk/src/syscall/current.rs b/sdk/src/syscall/current.rs index 8755cc6040..7bb8dae111 100644 --- a/sdk/src/syscall/current.rs +++ b/sdk/src/syscall/current.rs @@ -32,8 +32,17 @@ impl Current { } } -pub fn create_account(lamports: u64) -> Account { - Account::new(lamports, Current::size_of(), &syscall::id()) +pub fn create_account(lamports: u64, slot: u64, epoch: u64, stakers_epoch: u64) -> Account { + Account::new_data( + lamports, + &Current { + slot, + epoch, + stakers_epoch, + }, + &syscall::id(), + ) + .unwrap() } #[cfg(test)] @@ -42,7 +51,7 @@ mod tests { #[test] fn test_create_account() { - let account = create_account(1); + let account = create_account(1, 0, 0, 0); let current = Current::from(&account).unwrap(); assert_eq!(current, Current::default()); }