diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 3e8649fe4814ee..f4ce470ea1f9bf 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -2026,7 +2026,7 @@ impl Bank { &self, vote_account_hashmap: &HashMap, rent_to_be_distributed: u64, - ) { + ) -> u64 { let mut total_staked = 0; let mut rent_distributed_in_initial_round = 0; @@ -2082,6 +2082,7 @@ impl Bank { account.lamports += rent_to_be_paid; self.store_account(&pubkey, &account); }); + leftover_lamports } fn distribute_rent(&self) { @@ -2099,7 +2100,12 @@ impl Bank { return; } - self.distribute_rent_to_validators(&self.vote_accounts(), rent_to_be_distributed); + let leftover = + self.distribute_rent_to_validators(&self.vote_accounts(), rent_to_be_distributed); + if leftover != 0 { + warn!("There was leftover from rent distribution: {}", leftover); + self.capitalization.fetch_sub(leftover, Ordering::Relaxed); + } } fn collect_rent( diff --git a/runtime/src/snapshot_utils.rs b/runtime/src/snapshot_utils.rs index aad8ac36c42a76..c7b4736b3d020a 100644 --- a/runtime/src/snapshot_utils.rs +++ b/runtime/src/snapshot_utils.rs @@ -14,7 +14,12 @@ use fs_extra::dir::CopyOptions; use log::*; use regex::Regex; use solana_measure::measure::Measure; -use solana_sdk::{clock::Slot, genesis_config::GenesisConfig, hash::Hash, pubkey::Pubkey}; +use solana_sdk::{ + clock::Slot, + genesis_config::{ClusterType, GenesisConfig}, + hash::Hash, + pubkey::Pubkey, +}; use std::{ cmp::Ordering, fmt, @@ -585,6 +590,17 @@ pub fn bank_from_archive>( if !bank.verify_snapshot_bank() { panic!("Snapshot bank for slot {} failed to verify", bank.slot()); } + if genesis_config.cluster_type == ClusterType::Testnet { + let old = bank.set_capitalization(); + if old != bank.capitalization() { + warn!( + "Capitalization was recalculated: {} => {}", + old, + bank.capitalization() + ) + } + } + measure.stop(); info!("{}", measure);