diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index cbaad4eef9..1d899ddc90 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -33,9 +33,9 @@ use solana_sdk::native_loader; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, Signature}; use solana_sdk::syscall::current; -use solana_sdk::syscall::fees::{self, Fees}; +use solana_sdk::syscall::fees; use solana_sdk::syscall::slot_hashes::{self, SlotHashes}; -use solana_sdk::syscall::tick_height::{self, TickHeight}; +use solana_sdk::syscall::tick_height; use solana_sdk::system_transaction; use solana_sdk::timing::{duration_as_ms, duration_as_ns, duration_as_us, MAX_RECENT_BLOCKHASHES}; use solana_sdk::transaction::{Result, Transaction, TransactionError}; @@ -424,25 +424,14 @@ impl Bank { } fn update_fees(&self) { - let mut account = self - .get_account(&fees::id()) - .unwrap_or_else(|| fees::create_account(1)); - - let mut fees = Fees::from(&account).unwrap(); - fees.fee_calculator = self.fee_calculator.clone(); - fees.to(&mut account).unwrap(); - - self.store_account(&fees::id(), &account); + self.store_account(&fees::id(), &fees::create_account(1, &self.fee_calculator)); } fn update_tick_height(&self) { - let mut account = self - .get_account(&tick_height::id()) - .unwrap_or_else(|| tick_height::create_account(1)); - - TickHeight::to(self.tick_height(), &mut account).unwrap(); - - self.store_account(&tick_height::id(), &account); + self.store_account( + &tick_height::id(), + &tick_height::create_account(1, self.tick_height()), + ); } // update reward for previous epoch @@ -1401,6 +1390,8 @@ mod tests { use solana_sdk::instruction::InstructionError; use solana_sdk::poh_config::PohConfig; use solana_sdk::signature::{Keypair, KeypairUtil}; + use solana_sdk::syscall::fees::Fees; + use solana_sdk::syscall::tick_height::TickHeight; use solana_sdk::system_instruction; use solana_sdk::system_transaction; use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT; @@ -2519,7 +2510,7 @@ mod tests { } let tick_account = bank.get_account(&tick_height::id()).unwrap(); - let tick_height = TickHeight::from(&tick_account).unwrap(); + let tick_height = TickHeight::from(&tick_account).unwrap().0; assert_eq!(bank.tick_height(), tick_height); assert_eq!(tick_height, 10); } diff --git a/sdk/src/pubkey.rs b/sdk/src/pubkey.rs index 134edd82f9..f853f1ba46 100644 --- a/sdk/src/pubkey.rs +++ b/sdk/src/pubkey.rs @@ -118,7 +118,11 @@ macro_rules! solana_name_id( #[cfg(test)] #[test] fn test_name_id() { - assert_eq!(id().to_string(), $name); + // un-comment me to see what the id should look like, given a name + // if id().to_string() != $name { + // panic!("id for `{}` should be `{:?}`", $name, bs58::decode($name).into_vec().unwrap()); + // } + assert_eq!(id().to_string(), $name) } ) ); diff --git a/sdk/src/syscall/fees.rs b/sdk/src/syscall/fees.rs index 845373a118..5fdc80a187 100644 --- a/sdk/src/syscall/fees.rs +++ b/sdk/src/syscall/fees.rs @@ -1,7 +1,6 @@ //! This account contains the current cluster fees //! use crate::account::Account; -use crate::account_utils::State; use crate::fee_calculator::FeeCalculator; use crate::syscall; use bincode::serialized_size; @@ -22,10 +21,10 @@ pub struct Fees { impl Fees { pub fn from(account: &Account) -> Option { - account.state().ok() + account.deserialize_data().ok() } pub fn to(&self, account: &mut Account) -> Option<()> { - account.set_state(self).ok() + account.serialize_data(self).ok() } pub fn size_of() -> usize { @@ -33,8 +32,15 @@ impl Fees { } } -pub fn create_account(lamports: u64) -> Account { - Account::new(lamports, Fees::size_of(), &syscall::id()) +pub fn create_account(lamports: u64, fee_calculator: &FeeCalculator) -> Account { + Account::new_data( + lamports, + &Fees { + fee_calculator: fee_calculator.clone(), + }, + &syscall::id(), + ) + .unwrap() } #[cfg(test)] @@ -44,11 +50,8 @@ mod tests { #[test] fn test_fees_create_account() { let lamports = 42; - let account = create_account(lamports); + let account = create_account(lamports, &FeeCalculator::default()); let fees = Fees::from(&account).unwrap(); - assert_eq!( - fees.fee_calculator.lamports_per_signature, - FeeCalculator::default().lamports_per_signature - ); + assert_eq!(fees.fee_calculator, FeeCalculator::default()); } } diff --git a/sdk/src/syscall/mod.rs b/sdk/src/syscall/mod.rs index a2d972bc9d..4738502319 100644 --- a/sdk/src/syscall/mod.rs +++ b/sdk/src/syscall/mod.rs @@ -4,6 +4,7 @@ use crate::pubkey::Pubkey; pub mod current; pub mod fees; +pub mod rewards; pub mod slot_hashes; pub mod tick_height; diff --git a/sdk/src/syscall/rewards.rs b/sdk/src/syscall/rewards.rs new file mode 100644 index 0000000000..b13097943a --- /dev/null +++ b/sdk/src/syscall/rewards.rs @@ -0,0 +1,60 @@ +//! This account contains the current cluster rewards point values +//! +use crate::account::Account; +use crate::syscall; +use bincode::serialized_size; + +/// account pubkey +const ID: [u8; 32] = [ + 6, 167, 211, 138, 69, 219, 174, 221, 84, 28, 161, 202, 169, 28, 9, 210, 255, 70, 57, 99, 48, + 156, 150, 32, 59, 104, 53, 117, 192, 0, 0, 0, +]; + +crate::solana_name_id!(ID, "Sysca11Rewards11111111111111111111111111111"); + +#[repr(C)] +#[derive(Serialize, Deserialize, Debug, Default, PartialEq)] +pub struct Rewards { + pub validator_point_value: f64, + pub replicator_point_value: f64, +} + +impl Rewards { + pub fn from(account: &Account) -> Option { + account.deserialize_data().ok() + } + pub fn to(&self, account: &mut Account) -> Option<()> { + account.serialize_data(self).ok() + } + pub fn size_of() -> usize { + serialized_size(&Self::default()).unwrap() as usize + } +} + +pub fn create_account( + lamports: u64, + validator_point_value: f64, + replicator_point_value: f64, +) -> Account { + Account::new_data( + lamports, + &Rewards { + validator_point_value, + replicator_point_value, + }, + &syscall::id(), + ) + .unwrap() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_create_account() { + let account = create_account(1, 0.0, 0.0); + let rewards = Rewards::from(&account).unwrap(); + assert_eq!(rewards, Rewards::default()); + } +} diff --git a/sdk/src/syscall/slot_hashes.rs b/sdk/src/syscall/slot_hashes.rs index ef533eca5c..42e2a6f4f0 100644 --- a/sdk/src/syscall/slot_hashes.rs +++ b/sdk/src/syscall/slot_hashes.rs @@ -3,7 +3,6 @@ //! this account carries the Bank's most recent blockhashes for some N parents //! use crate::account::Account; -use crate::account_utils::State; use crate::hash::Hash; use crate::pubkey::Pubkey; use crate::syscall; @@ -35,10 +34,10 @@ pub struct SlotHashes { impl SlotHashes { pub fn from(account: &Account) -> Option { - account.state().ok() + account.deserialize_data().ok() } pub fn to(&self, account: &mut Account) -> Option<()> { - account.set_state(self).ok() + account.serialize_data(self).ok() } pub fn size_of() -> usize { diff --git a/sdk/src/syscall/tick_height.rs b/sdk/src/syscall/tick_height.rs index 84fbfc21ae..13cc419d1b 100644 --- a/sdk/src/syscall/tick_height.rs +++ b/sdk/src/syscall/tick_height.rs @@ -1,7 +1,6 @@ //! This account contains the current cluster tick height //! use crate::account::Account; -use crate::account_utils::State; use crate::syscall; use bincode::serialized_size; @@ -16,14 +15,14 @@ crate::solana_name_id!(ID, "Sysca11TickHeight11111111111111111111111111"); #[repr(C)] #[derive(Serialize, Deserialize, Debug, Default)] -pub struct TickHeight(u64); +pub struct TickHeight(pub u64); impl TickHeight { - pub fn from(account: &Account) -> Option { - account.state().ok().map(|res: Self| res.0) + pub fn from(account: &Account) -> Option { + account.deserialize_data().ok() } - pub fn to(tick_height: u64, account: &mut Account) -> Option<()> { - account.set_state(&TickHeight(tick_height)).ok() + pub fn to(&self, account: &mut Account) -> Option<()> { + account.serialize_data(self).ok() } pub fn size_of() -> usize { @@ -31,8 +30,8 @@ impl TickHeight { } } -pub fn create_account(lamports: u64) -> Account { - Account::new(lamports, TickHeight::size_of(), &syscall::id()) +pub fn create_account(lamports: u64, tick_height: u64) -> Account { + Account::new_data(lamports, &TickHeight(tick_height), &syscall::id()).unwrap() } #[cfg(test)] @@ -41,8 +40,8 @@ mod tests { #[test] fn test_tick_height_create_account() { - let account = create_account(1); + let account = create_account(1, 1); let tick_height = TickHeight::from(&account).unwrap(); - assert_eq!(tick_height, 0); + assert_eq!(tick_height.0, 1); } }