This reverts commit 401c542d2a.
			
			
This commit is contained in:
		@@ -13,7 +13,6 @@ use {
 | 
			
		||||
            TransactionExecutionResult,
 | 
			
		||||
        },
 | 
			
		||||
        blockhash_queue::BlockhashQueue,
 | 
			
		||||
        cost_model::ExecutionCost,
 | 
			
		||||
        rent_collector::RentCollector,
 | 
			
		||||
        system_instruction_processor::{get_system_account_kind, SystemAccountKind},
 | 
			
		||||
    },
 | 
			
		||||
@@ -115,7 +114,6 @@ pub struct LoadedTransaction {
 | 
			
		||||
    pub program_indices: TransactionProgramIndices,
 | 
			
		||||
    pub rent: TransactionRent,
 | 
			
		||||
    pub rent_debits: RentDebits,
 | 
			
		||||
    pub estimated_execution_cost: ExecutionCost,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub type TransactionLoadResult = (Result<LoadedTransaction>, Option<NonceFull>);
 | 
			
		||||
@@ -233,7 +231,6 @@ impl Accounts {
 | 
			
		||||
        error_counters: &mut ErrorCounters,
 | 
			
		||||
        rent_collector: &RentCollector,
 | 
			
		||||
        feature_set: &FeatureSet,
 | 
			
		||||
        estimated_execution_cost: ExecutionCost,
 | 
			
		||||
    ) -> Result<LoadedTransaction> {
 | 
			
		||||
        // Copy all the accounts
 | 
			
		||||
        let message = tx.message();
 | 
			
		||||
@@ -377,7 +374,6 @@ impl Accounts {
 | 
			
		||||
                    program_indices,
 | 
			
		||||
                    rent: tx_rent,
 | 
			
		||||
                    rent_debits,
 | 
			
		||||
                    estimated_execution_cost,
 | 
			
		||||
                })
 | 
			
		||||
            } else {
 | 
			
		||||
                error_counters.account_not_found += 1;
 | 
			
		||||
@@ -471,7 +467,7 @@ impl Accounts {
 | 
			
		||||
        txs.iter()
 | 
			
		||||
            .zip(lock_results)
 | 
			
		||||
            .map(|etx| match etx {
 | 
			
		||||
                (tx, (Ok(execution_cost), nonce)) => {
 | 
			
		||||
                (tx, (Ok(()), nonce)) => {
 | 
			
		||||
                    let lamports_per_signature = nonce
 | 
			
		||||
                        .as_ref()
 | 
			
		||||
                        .map(|nonce| nonce.lamports_per_signature())
 | 
			
		||||
@@ -491,7 +487,6 @@ impl Accounts {
 | 
			
		||||
                        error_counters,
 | 
			
		||||
                        rent_collector,
 | 
			
		||||
                        feature_set,
 | 
			
		||||
                        execution_cost,
 | 
			
		||||
                    ) {
 | 
			
		||||
                        Ok(loaded_transaction) => loaded_transaction,
 | 
			
		||||
                        Err(e) => return (Err(e), None),
 | 
			
		||||
@@ -957,14 +952,11 @@ impl Accounts {
 | 
			
		||||
    pub fn lock_accounts<'a>(
 | 
			
		||||
        &self,
 | 
			
		||||
        txs: impl Iterator<Item = &'a SanitizedTransaction>,
 | 
			
		||||
    ) -> Vec<Result<ExecutionCost>> {
 | 
			
		||||
    ) -> Vec<Result<()>> {
 | 
			
		||||
        let keys: Vec<_> = txs.map(|tx| tx.get_account_locks()).collect();
 | 
			
		||||
        let account_locks = &mut self.account_locks.lock().unwrap();
 | 
			
		||||
        keys.into_iter()
 | 
			
		||||
            .map(|keys| {
 | 
			
		||||
                self.lock_account(account_locks, keys.writable, keys.readonly)
 | 
			
		||||
                    .map(|_| 0)
 | 
			
		||||
            })
 | 
			
		||||
            .map(|keys| self.lock_account(account_locks, keys.writable, keys.readonly))
 | 
			
		||||
            .collect()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -973,12 +965,12 @@ impl Accounts {
 | 
			
		||||
    pub fn lock_accounts_with_results<'a>(
 | 
			
		||||
        &self,
 | 
			
		||||
        txs: impl Iterator<Item = &'a SanitizedTransaction>,
 | 
			
		||||
        results: impl Iterator<Item = Result<ExecutionCost>>,
 | 
			
		||||
    ) -> Vec<Result<ExecutionCost>> {
 | 
			
		||||
        results: impl Iterator<Item = Result<()>>,
 | 
			
		||||
    ) -> Vec<Result<()>> {
 | 
			
		||||
        let key_results: Vec<_> = txs
 | 
			
		||||
            .zip(results)
 | 
			
		||||
            .map(|(tx, result)| match result {
 | 
			
		||||
                Ok(execution_cost) => Ok((tx.get_account_locks(), execution_cost)),
 | 
			
		||||
                Ok(()) => Ok(tx.get_account_locks()),
 | 
			
		||||
                Err(e) => Err(e),
 | 
			
		||||
            })
 | 
			
		||||
            .collect();
 | 
			
		||||
@@ -986,9 +978,7 @@ impl Accounts {
 | 
			
		||||
        key_results
 | 
			
		||||
            .into_iter()
 | 
			
		||||
            .map(|key_result| match key_result {
 | 
			
		||||
                Ok((keys, execution_cost)) => self
 | 
			
		||||
                    .lock_account(account_locks, keys.writable, keys.readonly)
 | 
			
		||||
                    .map(|_| execution_cost),
 | 
			
		||||
                Ok(keys) => self.lock_account(account_locks, keys.writable, keys.readonly),
 | 
			
		||||
                Err(e) => Err(e),
 | 
			
		||||
            })
 | 
			
		||||
            .collect()
 | 
			
		||||
@@ -999,7 +989,7 @@ impl Accounts {
 | 
			
		||||
    pub fn unlock_accounts<'a>(
 | 
			
		||||
        &self,
 | 
			
		||||
        txs: impl Iterator<Item = &'a SanitizedTransaction>,
 | 
			
		||||
        results: &[Result<ExecutionCost>],
 | 
			
		||||
        results: &[Result<()>],
 | 
			
		||||
    ) {
 | 
			
		||||
        let keys: Vec<_> = txs
 | 
			
		||||
            .zip(results)
 | 
			
		||||
@@ -1283,7 +1273,7 @@ mod tests {
 | 
			
		||||
        accounts.load_accounts(
 | 
			
		||||
            &ancestors,
 | 
			
		||||
            &[sanitized_tx],
 | 
			
		||||
            vec![(Ok(0), None)],
 | 
			
		||||
            vec![(Ok(()), None)],
 | 
			
		||||
            &hash_queue,
 | 
			
		||||
            error_counters,
 | 
			
		||||
            rent_collector,
 | 
			
		||||
@@ -2427,9 +2417,9 @@ mod tests {
 | 
			
		||||
        let txs = vec![tx0, tx1, tx2];
 | 
			
		||||
 | 
			
		||||
        let qos_results = vec![
 | 
			
		||||
            Ok(0),
 | 
			
		||||
            Ok(()),
 | 
			
		||||
            Err(TransactionError::WouldExceedMaxBlockCostLimit),
 | 
			
		||||
            Ok(0),
 | 
			
		||||
            Ok(()),
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        let results = accounts.lock_accounts_with_results(txs.iter(), qos_results.into_iter());
 | 
			
		||||
@@ -2522,7 +2512,6 @@ mod tests {
 | 
			
		||||
                program_indices: vec![],
 | 
			
		||||
                rent: 0,
 | 
			
		||||
                rent_debits: RentDebits::default(),
 | 
			
		||||
                estimated_execution_cost: 0,
 | 
			
		||||
            }),
 | 
			
		||||
            None,
 | 
			
		||||
        );
 | 
			
		||||
@@ -2533,7 +2522,6 @@ mod tests {
 | 
			
		||||
                program_indices: vec![],
 | 
			
		||||
                rent: 0,
 | 
			
		||||
                rent_debits: RentDebits::default(),
 | 
			
		||||
                estimated_execution_cost: 0,
 | 
			
		||||
            }),
 | 
			
		||||
            None,
 | 
			
		||||
        );
 | 
			
		||||
@@ -2627,7 +2615,7 @@ mod tests {
 | 
			
		||||
        accounts.load_accounts(
 | 
			
		||||
            &ancestors,
 | 
			
		||||
            &[tx],
 | 
			
		||||
            vec![(Ok(0), None)],
 | 
			
		||||
            vec![(Ok(()), None)],
 | 
			
		||||
            &hash_queue,
 | 
			
		||||
            &mut error_counters,
 | 
			
		||||
            &rent_collector,
 | 
			
		||||
@@ -2963,7 +2951,6 @@ mod tests {
 | 
			
		||||
                program_indices: vec![],
 | 
			
		||||
                rent: 0,
 | 
			
		||||
                rent_debits: RentDebits::default(),
 | 
			
		||||
                estimated_execution_cost: 0,
 | 
			
		||||
            }),
 | 
			
		||||
            nonce.clone(),
 | 
			
		||||
        );
 | 
			
		||||
@@ -3074,7 +3061,6 @@ mod tests {
 | 
			
		||||
                program_indices: vec![],
 | 
			
		||||
                rent: 0,
 | 
			
		||||
                rent_debits: RentDebits::default(),
 | 
			
		||||
                estimated_execution_cost: 0,
 | 
			
		||||
            }),
 | 
			
		||||
            nonce.clone(),
 | 
			
		||||
        );
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,6 @@ use {
 | 
			
		||||
        ancestors::{Ancestors, AncestorsForSerialization},
 | 
			
		||||
        blockhash_queue::BlockhashQueue,
 | 
			
		||||
        builtins::{self, ActivationType, Builtin, Builtins},
 | 
			
		||||
        cost_model::ExecutionCost,
 | 
			
		||||
        cost_tracker::CostTracker,
 | 
			
		||||
        epoch_stakes::{EpochStakes, NodeVoteAccounts},
 | 
			
		||||
        inline_spl_token,
 | 
			
		||||
@@ -503,7 +502,7 @@ impl StatusCacheRc {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub type TransactionCheckResult<'a> = (Result<ExecutionCost>, Option<NoncePartial>);
 | 
			
		||||
pub type TransactionCheckResult = (Result<()>, Option<NoncePartial>);
 | 
			
		||||
pub type TransactionExecutionResult = (Result<()>, Option<NonceFull>);
 | 
			
		||||
pub struct TransactionResults {
 | 
			
		||||
    pub fee_collection_results: Vec<Result<()>>,
 | 
			
		||||
@@ -3093,7 +3092,7 @@ impl Bank {
 | 
			
		||||
    pub fn prepare_sanitized_batch_with_results<'a, 'b>(
 | 
			
		||||
        &'a self,
 | 
			
		||||
        transactions: &'b [SanitizedTransaction],
 | 
			
		||||
        transaction_results: impl Iterator<Item = Result<ExecutionCost>>,
 | 
			
		||||
        transaction_results: impl Iterator<Item = Result<()>>,
 | 
			
		||||
    ) -> TransactionBatch<'a, 'b> {
 | 
			
		||||
        // this lock_results could be: Ok, AccountInUse, WouldExceedBlockMaxLimit or WouldExceedAccountMaxLimit
 | 
			
		||||
        let lock_results = self
 | 
			
		||||
@@ -3108,7 +3107,7 @@ impl Bank {
 | 
			
		||||
        &'a self,
 | 
			
		||||
        transaction: SanitizedTransaction,
 | 
			
		||||
    ) -> TransactionBatch<'a, '_> {
 | 
			
		||||
        let mut batch = TransactionBatch::new(vec![Ok(0)], self, Cow::Owned(vec![transaction]));
 | 
			
		||||
        let mut batch = TransactionBatch::new(vec![Ok(())], self, Cow::Owned(vec![transaction]));
 | 
			
		||||
        batch.needs_unlock = false;
 | 
			
		||||
        batch
 | 
			
		||||
    }
 | 
			
		||||
@@ -3204,29 +3203,23 @@ impl Bank {
 | 
			
		||||
        self.rc.accounts.accounts_db.set_shrink_paths(paths);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn check_age<'a, T>(
 | 
			
		||||
    fn check_age<'a>(
 | 
			
		||||
        &self,
 | 
			
		||||
        txs: impl Iterator<Item = &'a SanitizedTransaction>,
 | 
			
		||||
        lock_results: impl Iterator<Item = T>,
 | 
			
		||||
        lock_results: &[Result<()>],
 | 
			
		||||
        max_age: usize,
 | 
			
		||||
        error_counters: &mut ErrorCounters,
 | 
			
		||||
    ) -> Vec<TransactionCheckResult>
 | 
			
		||||
    where
 | 
			
		||||
        T: std::borrow::Borrow<Result<ExecutionCost>>,
 | 
			
		||||
    {
 | 
			
		||||
    ) -> Vec<TransactionCheckResult> {
 | 
			
		||||
        let hash_queue = self.blockhash_queue.read().unwrap();
 | 
			
		||||
        txs.zip(lock_results)
 | 
			
		||||
            .map(|(tx, lock_res)| match lock_res.borrow() {
 | 
			
		||||
                Ok(execution_cost) => {
 | 
			
		||||
            .map(|(tx, lock_res)| match lock_res {
 | 
			
		||||
                Ok(()) => {
 | 
			
		||||
                    let recent_blockhash = tx.message().recent_blockhash();
 | 
			
		||||
                    let hash_age = hash_queue.check_hash_age(recent_blockhash, max_age);
 | 
			
		||||
                    if hash_age == Some(true) {
 | 
			
		||||
                        (Ok(*execution_cost), None)
 | 
			
		||||
                        (Ok(()), None)
 | 
			
		||||
                    } else if let Some((address, account)) = self.check_transaction_for_nonce(tx) {
 | 
			
		||||
                        (
 | 
			
		||||
                            Ok(*execution_cost),
 | 
			
		||||
                            Some(NoncePartial::new(address, account)),
 | 
			
		||||
                        )
 | 
			
		||||
                        (Ok(()), Some(NoncePartial::new(address, account)))
 | 
			
		||||
                    } else if hash_age == Some(false) {
 | 
			
		||||
                        error_counters.blockhash_too_old += 1;
 | 
			
		||||
                        (Err(TransactionError::BlockhashNotFound), None)
 | 
			
		||||
@@ -3296,16 +3289,13 @@ impl Bank {
 | 
			
		||||
            })
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn check_transactions<T>(
 | 
			
		||||
    pub fn check_transactions(
 | 
			
		||||
        &self,
 | 
			
		||||
        sanitized_txs: &[SanitizedTransaction],
 | 
			
		||||
        lock_results: impl Iterator<Item = T>,
 | 
			
		||||
        lock_results: &[Result<()>],
 | 
			
		||||
        max_age: usize,
 | 
			
		||||
        error_counters: &mut ErrorCounters,
 | 
			
		||||
    ) -> Vec<TransactionCheckResult>
 | 
			
		||||
    where
 | 
			
		||||
        T: std::borrow::Borrow<Result<ExecutionCost>>,
 | 
			
		||||
    {
 | 
			
		||||
    ) -> Vec<TransactionCheckResult> {
 | 
			
		||||
        let age_results =
 | 
			
		||||
            self.check_age(sanitized_txs.iter(), lock_results, max_age, error_counters);
 | 
			
		||||
        self.check_status_cache(sanitized_txs, age_results, error_counters)
 | 
			
		||||
@@ -3528,7 +3518,7 @@ impl Bank {
 | 
			
		||||
        let mut check_time = Measure::start("check_transactions");
 | 
			
		||||
        let check_results = self.check_transactions(
 | 
			
		||||
            sanitized_txs,
 | 
			
		||||
            batch.lock_results().iter(),
 | 
			
		||||
            batch.lock_results(),
 | 
			
		||||
            max_age,
 | 
			
		||||
            &mut error_counters,
 | 
			
		||||
        );
 | 
			
		||||
@@ -3607,7 +3597,6 @@ impl Bank {
 | 
			
		||||
                                &self.builtin_programs.vec,
 | 
			
		||||
                                legacy_message,
 | 
			
		||||
                                &loaded_transaction.program_indices,
 | 
			
		||||
                                loaded_transaction.estimated_execution_cost,
 | 
			
		||||
                                &account_refcells,
 | 
			
		||||
                                self.rent_collector.rent,
 | 
			
		||||
                                log_collector.clone(),
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,6 @@ use {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const MAX_WRITABLE_ACCOUNTS: usize = 256;
 | 
			
		||||
pub type ExecutionCost = u64;
 | 
			
		||||
 | 
			
		||||
// costs are stored in number of 'compute unit's
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
@@ -24,7 +23,7 @@ pub struct TransactionCost {
 | 
			
		||||
    pub signature_cost: u64,
 | 
			
		||||
    pub write_lock_cost: u64,
 | 
			
		||||
    pub data_bytes_cost: u64,
 | 
			
		||||
    pub execution_cost: ExecutionCost,
 | 
			
		||||
    pub execution_cost: u64,
 | 
			
		||||
    // `cost_weight` is a multiplier could be applied to transaction cost,
 | 
			
		||||
    // if set to zero allows the transaction to bypass cost limit check.
 | 
			
		||||
    pub cost_weight: u32,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,9 @@
 | 
			
		||||
use {
 | 
			
		||||
    crate::cost_model::ExecutionCost,
 | 
			
		||||
    serde::{Deserialize, Serialize},
 | 
			
		||||
    solana_measure::measure::Measure,
 | 
			
		||||
    solana_program_runtime::{
 | 
			
		||||
        instruction_recorder::InstructionRecorder,
 | 
			
		||||
        invoke_context::{
 | 
			
		||||
            BuiltinProgram, Executors, InvokeContext, ProcessInstructionResult,
 | 
			
		||||
            TransactionAccountRefCell,
 | 
			
		||||
        },
 | 
			
		||||
        invoke_context::{BuiltinProgram, Executors, InvokeContext, TransactionAccountRefCell},
 | 
			
		||||
        log_collector::LogCollector,
 | 
			
		||||
        timings::ExecuteDetailsTimings,
 | 
			
		||||
    },
 | 
			
		||||
@@ -49,7 +45,6 @@ impl MessageProcessor {
 | 
			
		||||
        builtin_programs: &[BuiltinProgram],
 | 
			
		||||
        message: &Message,
 | 
			
		||||
        program_indices: &[Vec<usize>],
 | 
			
		||||
        estimated_execution_cost: ExecutionCost,
 | 
			
		||||
        accounts: &[TransactionAccountRefCell],
 | 
			
		||||
        rent: Rent,
 | 
			
		||||
        log_collector: Option<Rc<RefCell<LogCollector>>>,
 | 
			
		||||
@@ -110,21 +105,16 @@ impl MessageProcessor {
 | 
			
		||||
                    Some(&instruction_recorders[instruction_index]);
 | 
			
		||||
            }
 | 
			
		||||
            let mut time = Measure::start("execute_instruction");
 | 
			
		||||
            let ProcessInstructionResult {
 | 
			
		||||
                compute_units_consumed,
 | 
			
		||||
                result,
 | 
			
		||||
            } = invoke_context.process_instruction(message, instruction, program_indices, &[], &[]);
 | 
			
		||||
            let compute_meter_consumption = invoke_context
 | 
			
		||||
                .process_instruction(message, instruction, program_indices, &[], &[])
 | 
			
		||||
                .map_err(|err| TransactionError::InstructionError(instruction_index as u8, err))?;
 | 
			
		||||
            time.stop();
 | 
			
		||||
            timings.accumulate_program(
 | 
			
		||||
                instruction.program_id(&message.account_keys),
 | 
			
		||||
                time.as_us(),
 | 
			
		||||
                compute_units_consumed,
 | 
			
		||||
                estimated_execution_cost,
 | 
			
		||||
                result.is_err(),
 | 
			
		||||
                compute_meter_consumption,
 | 
			
		||||
            );
 | 
			
		||||
            timings.accumulate(&invoke_context.timings);
 | 
			
		||||
            result
 | 
			
		||||
                .map_err(|err| TransactionError::InstructionError(instruction_index as u8, err))?;
 | 
			
		||||
        }
 | 
			
		||||
        Ok(())
 | 
			
		||||
    }
 | 
			
		||||
@@ -240,7 +230,6 @@ mod tests {
 | 
			
		||||
            builtin_programs,
 | 
			
		||||
            &message,
 | 
			
		||||
            &program_indices,
 | 
			
		||||
            0,
 | 
			
		||||
            &accounts,
 | 
			
		||||
            rent_collector.rent,
 | 
			
		||||
            None,
 | 
			
		||||
@@ -270,7 +259,6 @@ mod tests {
 | 
			
		||||
            builtin_programs,
 | 
			
		||||
            &message,
 | 
			
		||||
            &program_indices,
 | 
			
		||||
            0,
 | 
			
		||||
            &accounts,
 | 
			
		||||
            rent_collector.rent,
 | 
			
		||||
            None,
 | 
			
		||||
@@ -304,7 +292,6 @@ mod tests {
 | 
			
		||||
            builtin_programs,
 | 
			
		||||
            &message,
 | 
			
		||||
            &program_indices,
 | 
			
		||||
            0,
 | 
			
		||||
            &accounts,
 | 
			
		||||
            rent_collector.rent,
 | 
			
		||||
            None,
 | 
			
		||||
@@ -449,7 +436,6 @@ mod tests {
 | 
			
		||||
            builtin_programs,
 | 
			
		||||
            &message,
 | 
			
		||||
            &program_indices,
 | 
			
		||||
            0,
 | 
			
		||||
            &accounts,
 | 
			
		||||
            rent_collector.rent,
 | 
			
		||||
            None,
 | 
			
		||||
@@ -483,7 +469,6 @@ mod tests {
 | 
			
		||||
            builtin_programs,
 | 
			
		||||
            &message,
 | 
			
		||||
            &program_indices,
 | 
			
		||||
            0,
 | 
			
		||||
            &accounts,
 | 
			
		||||
            rent_collector.rent,
 | 
			
		||||
            None,
 | 
			
		||||
@@ -514,7 +499,6 @@ mod tests {
 | 
			
		||||
            builtin_programs,
 | 
			
		||||
            &message,
 | 
			
		||||
            &program_indices,
 | 
			
		||||
            0,
 | 
			
		||||
            &accounts,
 | 
			
		||||
            rent_collector.rent,
 | 
			
		||||
            None,
 | 
			
		||||
@@ -572,7 +556,6 @@ mod tests {
 | 
			
		||||
            builtin_programs,
 | 
			
		||||
            &message,
 | 
			
		||||
            &[vec![0], vec![1]],
 | 
			
		||||
            0,
 | 
			
		||||
            &accounts,
 | 
			
		||||
            RentCollector::default().rent,
 | 
			
		||||
            None,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
use {
 | 
			
		||||
    crate::{bank::Bank, cost_model::ExecutionCost},
 | 
			
		||||
    crate::bank::Bank,
 | 
			
		||||
    solana_sdk::transaction::{Result, SanitizedTransaction},
 | 
			
		||||
    std::borrow::Cow,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Represents the results of trying to lock a set of accounts
 | 
			
		||||
pub struct TransactionBatch<'a, 'b> {
 | 
			
		||||
    lock_results: Vec<Result<ExecutionCost>>,
 | 
			
		||||
    lock_results: Vec<Result<()>>,
 | 
			
		||||
    bank: &'a Bank,
 | 
			
		||||
    sanitized_txs: Cow<'b, [SanitizedTransaction]>,
 | 
			
		||||
    pub(crate) needs_unlock: bool,
 | 
			
		||||
@@ -14,7 +14,7 @@ pub struct TransactionBatch<'a, 'b> {
 | 
			
		||||
 | 
			
		||||
impl<'a, 'b> TransactionBatch<'a, 'b> {
 | 
			
		||||
    pub fn new(
 | 
			
		||||
        lock_results: Vec<Result<ExecutionCost>>,
 | 
			
		||||
        lock_results: Vec<Result<()>>,
 | 
			
		||||
        bank: &'a Bank,
 | 
			
		||||
        sanitized_txs: Cow<'b, [SanitizedTransaction]>,
 | 
			
		||||
    ) -> Self {
 | 
			
		||||
@@ -27,7 +27,7 @@ impl<'a, 'b> TransactionBatch<'a, 'b> {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn lock_results(&self) -> &Vec<Result<ExecutionCost>> {
 | 
			
		||||
    pub fn lock_results(&self) -> &Vec<Result<()>> {
 | 
			
		||||
        &self.lock_results
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user