From 35d2a0fd69729001f99781e65831e9187258c4c3 Mon Sep 17 00:00:00 2001 From: Ashwin Sekar Date: Sat, 14 May 2022 10:57:51 -0700 Subject: [PATCH] Serialize lamports per signature in snapshots (#25181) * Serialize lamports per signature * pr comments --- runtime/src/serde_snapshot/newer.rs | 11 ++++++++++- runtime/src/serde_snapshot/tests.rs | 2 +- sdk/program/src/fee_calculator.rs | 7 +++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/runtime/src/serde_snapshot/newer.rs b/runtime/src/serde_snapshot/newer.rs index ccdb32c9cb..9b370e6f02 100644 --- a/runtime/src/serde_snapshot/newer.rs +++ b/runtime/src/serde_snapshot/newer.rs @@ -60,6 +60,8 @@ struct DeserializableVersionedBank { unused_accounts: UnusedAccounts, epoch_stakes: HashMap, is_delta: bool, + #[serde(deserialize_with = "default_on_eof")] + lamports_per_signature: u64, } impl From for BankFieldsToDeserialize { @@ -88,7 +90,9 @@ impl From for BankFieldsToDeserialize { collector_id: dvb.collector_id, collector_fees: dvb.collector_fees, fee_calculator: dvb.fee_calculator, - fee_rate_governor: dvb.fee_rate_governor, + fee_rate_governor: dvb + .fee_rate_governor + .clone_with_lamports_per_signature(dvb.lamports_per_signature), collected_rent: dvb.collected_rent, rent_collector: dvb.rent_collector, epoch_schedule: dvb.epoch_schedule, @@ -137,10 +141,12 @@ struct SerializableVersionedBank<'a> { unused_accounts: UnusedAccounts, epoch_stakes: &'a HashMap, is_delta: bool, + lamports_per_signature: u64, } impl<'a> From> for SerializableVersionedBank<'a> { fn from(rhs: crate::bank::BankFieldsToSerialize<'a>) -> Self { + let lamports_per_signature = rhs.fee_rate_governor.lamports_per_signature; Self { blockhash_queue: rhs.blockhash_queue, ancestors: rhs.ancestors, @@ -174,6 +180,7 @@ impl<'a> From> for SerializableVersionedB unused_accounts: UnusedAccounts::default(), epoch_stakes: rhs.epoch_stakes, is_delta: rhs.is_delta, + lamports_per_signature, } } } @@ -311,6 +318,7 @@ impl<'a> TypeContext<'a> for Context { let rhs = bank_fields; let blockhash_queue = RwLock::new(rhs.blockhash_queue.clone()); let hard_forks = RwLock::new(rhs.hard_forks.clone()); + let lamports_per_signature = rhs.fee_rate_governor.lamports_per_signature; let bank = SerializableVersionedBank { blockhash_queue: &blockhash_queue, ancestors: &rhs.ancestors, @@ -344,6 +352,7 @@ impl<'a> TypeContext<'a> for Context { unused_accounts: UnusedAccounts::default(), epoch_stakes: &rhs.epoch_stakes, is_delta: rhs.is_delta, + lamports_per_signature, }; bincode::serialize_into(stream_writer, &(bank, accounts_db_fields)) diff --git a/runtime/src/serde_snapshot/tests.rs b/runtime/src/serde_snapshot/tests.rs index 1ac1a55ce2..28e51eb033 100644 --- a/runtime/src/serde_snapshot/tests.rs +++ b/runtime/src/serde_snapshot/tests.rs @@ -367,7 +367,7 @@ mod test_bank_serialize { // This some what long test harness is required to freeze the ABI of // Bank's serialization due to versioned nature - #[frozen_abi(digest = "HT9yewU4zJ6ZAgJ7aDSbHPtzZGZqASpq6rkq6ET42Kki")] + #[frozen_abi(digest = "3PiYioYfEPzm2u64FZLsLx1SUTGE3NUvALXvwqhxZuRF")] #[derive(Serialize, AbiExample)] pub struct BankAbiTestWrapperNewer { #[serde(serialize_with = "wrapper_newer")] diff --git a/sdk/program/src/fee_calculator.rs b/sdk/program/src/fee_calculator.rs index 3dd8078bf1..62d952b660 100644 --- a/sdk/program/src/fee_calculator.rs +++ b/sdk/program/src/fee_calculator.rs @@ -165,6 +165,13 @@ impl FeeRateGovernor { me } + pub fn clone_with_lamports_per_signature(&self, lamports_per_signature: u64) -> Self { + Self { + lamports_per_signature, + ..*self + } + } + /// calculate unburned fee from a fee total, returns (unburned, burned) pub fn burn(&self, fees: u64) -> (u64, u64) { let burned = fees * u64::from(self.burn_percent) / 100;