runtime: add rent debit charges to block metadata
This commit is contained in:
committed by
mergify[bot]
parent
e9bc1c6b07
commit
97eab7edf9
@@ -5,7 +5,8 @@ use crate::{
|
||||
accounts_index::{AccountSecondaryIndexes, IndexKey},
|
||||
ancestors::Ancestors,
|
||||
bank::{
|
||||
NonceRollbackFull, NonceRollbackInfo, TransactionCheckResult, TransactionExecutionResult,
|
||||
NonceRollbackFull, NonceRollbackInfo, RentDebits, TransactionCheckResult,
|
||||
TransactionExecutionResult,
|
||||
},
|
||||
blockhash_queue::BlockhashQueue,
|
||||
rent_collector::RentCollector,
|
||||
@@ -99,12 +100,14 @@ pub type TransactionAccounts = Vec<AccountSharedData>;
|
||||
pub type TransactionAccountDeps = Vec<(Pubkey, AccountSharedData)>;
|
||||
pub type TransactionRent = u64;
|
||||
pub type TransactionLoaders = Vec<Vec<(Pubkey, AccountSharedData)>>;
|
||||
pub type TransactionRentDebits = RentDebits;
|
||||
#[derive(PartialEq, Debug, Clone)]
|
||||
pub struct LoadedTransaction {
|
||||
pub accounts: TransactionAccounts,
|
||||
pub account_deps: TransactionAccountDeps,
|
||||
pub loaders: TransactionLoaders,
|
||||
pub rent: TransactionRent,
|
||||
pub rent_debits: TransactionRentDebits,
|
||||
}
|
||||
|
||||
pub type TransactionLoadResult = (Result<LoadedTransaction>, Option<NonceRollbackFull>);
|
||||
@@ -206,6 +209,7 @@ impl Accounts {
|
||||
let demote_sysvar_write_locks =
|
||||
feature_set.is_active(&feature_set::demote_sysvar_write_locks::id());
|
||||
let mut key_check = MessageProgramIdsCache::new(&message);
|
||||
let mut rent_debits = RentDebits::default();
|
||||
for (i, key) in message.account_keys.iter().enumerate() {
|
||||
let account = if key_check.is_non_loader_key(key, i) {
|
||||
if payer_index.is_none() {
|
||||
@@ -258,6 +262,8 @@ impl Accounts {
|
||||
}
|
||||
|
||||
tx_rent += rent;
|
||||
rent_debits.push(key, rent, account.lamports());
|
||||
|
||||
account
|
||||
}
|
||||
} else {
|
||||
@@ -319,6 +325,7 @@ impl Accounts {
|
||||
account_deps,
|
||||
loaders,
|
||||
rent: tx_rent,
|
||||
rent_debits,
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -995,8 +1002,11 @@ impl Accounts {
|
||||
}
|
||||
}
|
||||
if account.rent_epoch() == INITIAL_RENT_EPOCH {
|
||||
loaded_transaction.rent +=
|
||||
rent_collector.collect_from_created_account(&key, account);
|
||||
let rent = rent_collector.collect_from_created_account(&key, account);
|
||||
loaded_transaction.rent += rent;
|
||||
loaded_transaction
|
||||
.rent_debits
|
||||
.push(key, rent, account.lamports());
|
||||
}
|
||||
accounts.push((key, &*account));
|
||||
}
|
||||
@@ -1968,6 +1978,7 @@ mod tests {
|
||||
account_deps: vec![],
|
||||
loaders: transaction_loaders0,
|
||||
rent: transaction_rent0,
|
||||
rent_debits: RentDebits::default(),
|
||||
}),
|
||||
None,
|
||||
);
|
||||
@@ -1981,6 +1992,7 @@ mod tests {
|
||||
account_deps: vec![],
|
||||
loaders: transaction_loaders1,
|
||||
rent: transaction_rent1,
|
||||
rent_debits: RentDebits::default(),
|
||||
}),
|
||||
None,
|
||||
);
|
||||
@@ -2363,6 +2375,7 @@ mod tests {
|
||||
account_deps: vec![],
|
||||
loaders: transaction_loaders,
|
||||
rent: transaction_rent,
|
||||
rent_debits: RentDebits::default(),
|
||||
}),
|
||||
nonce_rollback,
|
||||
);
|
||||
@@ -2481,6 +2494,7 @@ mod tests {
|
||||
account_deps: vec![],
|
||||
loaders: transaction_loaders,
|
||||
rent: transaction_rent,
|
||||
rent_debits: RentDebits::default(),
|
||||
}),
|
||||
nonce_rollback,
|
||||
);
|
||||
|
Reference in New Issue
Block a user