Add --warp-epoch and --force-inflation to ledger-tool cap. (#11107)
* Add --warp-epoch and --force-inflation to ledger-tool cap. * Add more arguments * Address review comments * Fix message * Fix various typos...
This commit is contained in:
@ -377,9 +377,18 @@ impl Accounts {
|
||||
.collect()
|
||||
}
|
||||
|
||||
pub fn load_by_program_slot(&self, slot: Slot, program_id: &Pubkey) -> Vec<(Pubkey, Account)> {
|
||||
pub fn load_by_program_slot(
|
||||
&self,
|
||||
slot: Slot,
|
||||
program_id: Option<&Pubkey>,
|
||||
) -> Vec<(Pubkey, Account)> {
|
||||
self.scan_slot(slot, |stored_account| {
|
||||
if stored_account.account_meta.owner == *program_id {
|
||||
let hit = match program_id {
|
||||
None => true,
|
||||
Some(program_id) => stored_account.account_meta.owner == *program_id,
|
||||
};
|
||||
|
||||
if hit {
|
||||
Some((stored_account.meta.pubkey, stored_account.clone_account()))
|
||||
} else {
|
||||
None
|
||||
@ -1371,11 +1380,11 @@ mod tests {
|
||||
let account2 = Account::new(1, 0, &Pubkey::new(&[3; 32]));
|
||||
accounts.store_slow(0, &pubkey2, &account2);
|
||||
|
||||
let loaded = accounts.load_by_program_slot(0, &Pubkey::new(&[2; 32]));
|
||||
let loaded = accounts.load_by_program_slot(0, Some(&Pubkey::new(&[2; 32])));
|
||||
assert_eq!(loaded.len(), 2);
|
||||
let loaded = accounts.load_by_program_slot(0, &Pubkey::new(&[3; 32]));
|
||||
let loaded = accounts.load_by_program_slot(0, Some(&Pubkey::new(&[3; 32])));
|
||||
assert_eq!(loaded, vec![(pubkey2, account2)]);
|
||||
let loaded = accounts.load_by_program_slot(0, &Pubkey::new(&[4; 32]));
|
||||
let loaded = accounts.load_by_program_slot(0, Some(&Pubkey::new(&[4; 32])));
|
||||
assert_eq!(loaded, vec![]);
|
||||
}
|
||||
|
||||
|
@ -2538,7 +2538,11 @@ impl Bank {
|
||||
) -> Vec<(Pubkey, Account)> {
|
||||
self.rc
|
||||
.accounts
|
||||
.load_by_program_slot(self.slot(), program_id)
|
||||
.load_by_program_slot(self.slot(), Some(program_id))
|
||||
}
|
||||
|
||||
pub fn get_all_accounts_modified_since_parent(&self) -> Vec<(Pubkey, Account)> {
|
||||
self.rc.accounts.load_by_program_slot(self.slot(), None)
|
||||
}
|
||||
|
||||
pub fn get_account_modified_since_parent(&self, pubkey: &Pubkey) -> Option<(Account, Slot)> {
|
||||
@ -2683,6 +2687,34 @@ impl Bank {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn calculate_capitalization(&self) -> u64 {
|
||||
self.get_program_accounts(None)
|
||||
.into_iter()
|
||||
.map(|(_pubkey, account)| {
|
||||
let is_specially_retained = solana_sdk::native_loader::check_id(&account.owner)
|
||||
|| solana_sdk::sysvar::check_id(&account.owner);
|
||||
|
||||
if is_specially_retained {
|
||||
// specially retained accounts are ensured to exist by
|
||||
// always having a balance of 1 lamports, which is
|
||||
// outside the capitalization calculation.
|
||||
account.lamports - 1
|
||||
} else {
|
||||
account.lamports
|
||||
}
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
|
||||
/// Forcibly overwrites current capitalization by actually recalculating accounts' balances.
|
||||
/// This should only be used for developing purposes.
|
||||
pub fn set_capitalization(&self) -> u64 {
|
||||
let old = self.capitalization();
|
||||
self.capitalization
|
||||
.store(self.calculate_capitalization(), Ordering::Relaxed);
|
||||
old
|
||||
}
|
||||
|
||||
pub fn get_accounts_hash(&self) -> Hash {
|
||||
self.rc.accounts.accounts_db.get_accounts_hash(self.slot)
|
||||
}
|
||||
|
Reference in New Issue
Block a user