Hoist load_loaders()

This makes execute_transactions() stateless.
This commit is contained in:
Greg Fitzgerald
2018-11-26 22:44:10 -07:00
parent f549d8ac74
commit 08dc169f94

View File

@ -773,12 +773,11 @@ impl Bank {
/// This method calls each instruction in the transaction over the set of loaded Accounts /// This method calls each instruction in the transaction over the set of loaded Accounts
/// The accounts are committed back to the bank only if every instruction succeeds /// The accounts are committed back to the bank only if every instruction succeeds
fn execute_transaction( fn execute_transaction(
&self,
tx: &Transaction, tx: &Transaction,
loaders: &mut [Vec<(Pubkey, Account)>],
tx_accounts: &mut [Account], tx_accounts: &mut [Account],
tick_height: u64, tick_height: u64,
) -> Result<()> { ) -> Result<()> {
let mut loaders = self.load_loaders(tx)?;
for (instruction_index, instruction) in tx.instructions.iter().enumerate() { for (instruction_index, instruction) in tx.instructions.iter().enumerate() {
let ref mut executable_accounts = &mut loaders[instruction.program_ids_index as usize]; let ref mut executable_accounts = &mut loaders[instruction.program_ids_index as usize];
Self::with_subset(tx_accounts, &instruction.accounts, |program_accounts| { Self::with_subset(tx_accounts, &instruction.accounts, |program_accounts| {
@ -902,7 +901,10 @@ impl Bank {
.zip(txs.iter()) .zip(txs.iter())
.map(|(acc, tx)| match acc { .map(|(acc, tx)| match acc {
Err(e) => Err(e.clone()), Err(e) => Err(e.clone()),
Ok(ref mut accounts) => self.execute_transaction(tx, accounts, tick_height), Ok(ref mut accounts) => {
let mut loaders = self.load_loaders(tx)?;
Self::execute_transaction(tx, &mut loaders, accounts, tick_height)
}
}).collect(); }).collect();
let execution_elapsed = now.elapsed(); let execution_elapsed = now.elapsed();
let now = Instant::now(); let now = Instant::now();