From 78b8a8a6dbbd40af96bebcd9e4a0baffa0842d64 Mon Sep 17 00:00:00 2001 From: Brooks Prumo Date: Fri, 8 Jul 2022 13:26:54 -0500 Subject: [PATCH] Remove `get_total_resize_remaining()` and `total_resize_limit` from `TransactionContext` (#26504) --- cli/src/program.rs | 2 +- program-runtime/src/invoke_context.rs | 41 ++++---------------- programs/bpf_loader/benches/serialization.rs | 2 +- programs/bpf_loader/src/serialization.rs | 2 +- programs/bpf_loader/src/syscalls.rs | 2 +- programs/stake/src/stake_state.rs | 9 ++--- programs/vote/benches/process_vote.rs | 3 +- rbpf-cli/src/main.rs | 3 +- runtime/src/bank.rs | 3 -- runtime/src/message_processor.rs | 6 +-- runtime/src/nonce_keyed_account.rs | 2 +- runtime/src/system_instruction_processor.rs | 2 +- sdk/src/transaction_context.rs | 15 ------- 13 files changed, 22 insertions(+), 70 deletions(-) diff --git a/cli/src/program.rs b/cli/src/program.rs index b3dc020f12..b2c2135d2a 100644 --- a/cli/src/program.rs +++ b/cli/src/program.rs @@ -2060,7 +2060,7 @@ fn read_and_verify_elf(program_location: &str) -> Result, Box R>( preparation.transaction_accounts, ComputeBudget::default().max_invoke_depth.saturating_add(1), 1, - MAX_ACCOUNTS_DATA_LEN, ); let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); invoke_context @@ -1183,7 +1182,6 @@ pub fn mock_process_instruction( preparation.transaction_accounts, ComputeBudget::default().max_invoke_depth.saturating_add(1), 1, - MAX_ACCOUNTS_DATA_LEN, ); let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); if let Some(sysvar_cache) = sysvar_cache_override { @@ -1357,7 +1355,7 @@ mod tests { }); } let mut transaction_context = - TransactionContext::new(accounts, ComputeBudget::default().max_invoke_depth, 1, 0); + TransactionContext::new(accounts, ComputeBudget::default().max_invoke_depth, 1); let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); // Check call depth increases and has a limit @@ -1465,7 +1463,7 @@ mod tests { let accounts = vec![(solana_sdk::pubkey::new_rand(), AccountSharedData::default())]; let instruction_accounts = vec![]; let program_indices = vec![0]; - let mut transaction_context = TransactionContext::new(accounts, 1, 1, 0); + let mut transaction_context = TransactionContext::new(accounts, 1, 1); let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); invoke_context .push(&instruction_accounts, &program_indices, &[]) @@ -1510,7 +1508,7 @@ mod tests { is_writable: instruction_account_index < 2, }) .collect::>(); - let mut transaction_context = TransactionContext::new(accounts, 2, 8, 0); + let mut transaction_context = TransactionContext::new(accounts, 2, 8); let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, builtin_programs); @@ -1642,7 +1640,7 @@ mod tests { fn test_invoke_context_compute_budget() { let accounts = vec![(solana_sdk::pubkey::new_rand(), AccountSharedData::default())]; - let mut transaction_context = TransactionContext::new(accounts, 1, 3, 0); + let mut transaction_context = TransactionContext::new(accounts, 1, 3); let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); invoke_context.compute_budget = ComputeBudget::new(compute_budget::DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64); @@ -1677,8 +1675,7 @@ mod tests { process_instruction: mock_process_instruction, }]; - let mut transaction_context = - TransactionContext::new(accounts, 1, 3, user_account_data_len * 2); + let mut transaction_context = TransactionContext::new(accounts, 1, 3); let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &builtin_programs); @@ -1688,13 +1685,7 @@ mod tests { invoke_context .accounts_data_meter .set_maximum(user_account_data_len as u64 * 3); - let remaining_account_data_len = invoke_context - .transaction_context - .get_total_resize_remaining(); - assert_eq!( - remaining_account_data_len, - invoke_context.accounts_data_meter.remaining(), - ); + let remaining_account_data_len = invoke_context.accounts_data_meter.remaining(); let instruction_accounts = [ InstructionAccount { @@ -1729,12 +1720,6 @@ mod tests { assert!(result.is_ok()); assert_eq!(invoke_context.accounts_data_meter.remaining(), 0); - assert_eq!( - invoke_context - .transaction_context - .get_total_resize_remaining(), - 0 - ); } // Test 2: Resize the account to *the same size*, so not consuming any additional size; this must succeed @@ -1753,12 +1738,6 @@ mod tests { assert!(result.is_ok()); assert_eq!(invoke_context.accounts_data_meter.remaining(), 0); - assert_eq!( - invoke_context - .transaction_context - .get_total_resize_remaining(), - 0 - ); } // Test 3: Resize the account to exceed the budget; this must fail @@ -1781,12 +1760,6 @@ mod tests { Err(solana_sdk::instruction::InstructionError::MaxAccountsDataSizeExceeded) )); assert_eq!(invoke_context.accounts_data_meter.remaining(), 0); - assert_eq!( - invoke_context - .transaction_context - .get_total_resize_remaining(), - 0 - ); } } } diff --git a/programs/bpf_loader/benches/serialization.rs b/programs/bpf_loader/benches/serialization.rs index c119d4266c..2be8073bf0 100644 --- a/programs/bpf_loader/benches/serialization.rs +++ b/programs/bpf_loader/benches/serialization.rs @@ -101,7 +101,7 @@ fn create_inputs() -> TransactionContext { }, ) .collect::>(); - let mut transaction_context = TransactionContext::new(transaction_accounts, 1, 1, 0); + let mut transaction_context = TransactionContext::new(transaction_accounts, 1, 1); let instruction_data = vec![1u8, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; transaction_context .push(&[0], &instruction_accounts, &instruction_data, true) diff --git a/programs/bpf_loader/src/serialization.rs b/programs/bpf_loader/src/serialization.rs index 8b32e8c63f..6f3f0add6c 100644 --- a/programs/bpf_loader/src/serialization.rs +++ b/programs/bpf_loader/src/serialization.rs @@ -454,7 +454,7 @@ mod tests { &program_indices, ); let mut transaction_context = - TransactionContext::new(preparation.transaction_accounts, 1, 1, 0); + TransactionContext::new(preparation.transaction_accounts, 1, 1); let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); invoke_context .push( diff --git a/programs/bpf_loader/src/syscalls.rs b/programs/bpf_loader/src/syscalls.rs index d67c5cc3ed..38e4afd80a 100644 --- a/programs/bpf_loader/src/syscalls.rs +++ b/programs/bpf_loader/src/syscalls.rs @@ -3373,7 +3373,7 @@ mod tests { ), ($program_key, AccountSharedData::new(0, 0, &$loader_key)), ]; - let mut $transaction_context = TransactionContext::new(transaction_accounts, 1, 1, 0); + let mut $transaction_context = TransactionContext::new(transaction_accounts, 1, 1); let mut $invoke_context = InvokeContext::new_mock(&mut $transaction_context, &[]); $invoke_context.push(&[], &[0, 1], &[]).unwrap(); }; diff --git a/programs/stake/src/stake_state.rs b/programs/stake/src/stake_state.rs index f45916935d..539dc83152 100644 --- a/programs/stake/src/stake_state.rs +++ b/programs/stake/src/stake_state.rs @@ -2785,7 +2785,6 @@ mod tests { )], 1, 1, - 0, ) } @@ -2895,7 +2894,7 @@ mod tests { #[test] fn test_things_can_merge() { - let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1, 0); + let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1); let invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); let good_stake = Stake { credits_observed: 4242, @@ -2994,7 +2993,7 @@ mod tests { #[test] fn test_metas_can_merge() { - let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1, 0); + let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1); let invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); // Identical Metas can merge assert!(MergeKind::metas_can_merge( @@ -3141,7 +3140,7 @@ mod tests { #[test] fn test_merge_kind_get_if_mergeable() { - let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1, 0); + let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1); let invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); let authority_pubkey = Pubkey::new_unique(); let initial_lamports = 4242424242; @@ -3380,7 +3379,7 @@ mod tests { #[test] fn test_merge_kind_merge() { - let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1, 0); + let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1); let invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); let clock = Clock::default(); let lamports = 424242; diff --git a/programs/vote/benches/process_vote.rs b/programs/vote/benches/process_vote.rs index 43c4a019f9..f939c6c26f 100644 --- a/programs/vote/benches/process_vote.rs +++ b/programs/vote/benches/process_vote.rs @@ -107,8 +107,7 @@ fn bench_process_vote_instruction( instruction_data: Vec, ) { bencher.iter(|| { - let mut transaction_context = - TransactionContext::new(transaction_accounts.clone(), 1, 1, 0); + let mut transaction_context = TransactionContext::new(transaction_accounts.clone(), 1, 1); let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); invoke_context .push(&instruction_accounts, &[0], &instruction_data) diff --git a/rbpf-cli/src/main.rs b/rbpf-cli/src/main.rs index 0dc51d6deb..13601e549c 100644 --- a/rbpf-cli/src/main.rs +++ b/rbpf-cli/src/main.rs @@ -216,8 +216,7 @@ native machine code before execting it in the virtual machine.", let program_indices = [0, 1]; let preparation = prepare_mock_invoke_context(transaction_accounts, instruction_accounts, &program_indices); - let mut transaction_context = - TransactionContext::new(preparation.transaction_accounts, 1, 1, 0); + let mut transaction_context = TransactionContext::new(preparation.transaction_accounts, 1, 1); let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); invoke_context .push( diff --git a/runtime/src/bank.rs b/runtime/src/bank.rs index 46a583a83e..d0d0f2479e 100644 --- a/runtime/src/bank.rs +++ b/runtime/src/bank.rs @@ -4283,8 +4283,6 @@ impl Bank { transaction_accounts, compute_budget.max_invoke_depth.saturating_add(1), tx.message().instructions().len(), - self.accounts_data_size_limit() - .saturating_sub(prev_accounts_data_len), ); let pre_account_state_info = @@ -18567,7 +18565,6 @@ pub(crate) mod tests { loaded_txs[0].0.as_ref().unwrap().accounts.clone(), compute_budget.max_invoke_depth.saturating_add(1), number_of_instructions_at_transaction_level, - 0, ); assert_eq!( diff --git a/runtime/src/message_processor.rs b/runtime/src/message_processor.rs index 359ad628ed..d3e760de28 100644 --- a/runtime/src/message_processor.rs +++ b/runtime/src/message_processor.rs @@ -282,7 +282,7 @@ mod tests { create_loadable_account_for_test("mock_system_program"), ), ]; - let mut transaction_context = TransactionContext::new(accounts, 1, 3, 0); + let mut transaction_context = TransactionContext::new(accounts, 1, 3); let program_indices = vec![vec![2]]; let executors = Rc::new(RefCell::new(Executors::default())); let account_keys = transaction_context.get_keys_of_accounts().to_vec(); @@ -502,7 +502,7 @@ mod tests { create_loadable_account_for_test("mock_system_program"), ), ]; - let mut transaction_context = TransactionContext::new(accounts, 1, 3, 0); + let mut transaction_context = TransactionContext::new(accounts, 1, 3); let program_indices = vec![vec![2]]; let executors = Rc::new(RefCell::new(Executors::default())); let account_metas = vec![ @@ -661,7 +661,7 @@ mod tests { (secp256k1_program::id(), secp256k1_account), (mock_program_id, mock_program_account), ]; - let mut transaction_context = TransactionContext::new(accounts, 1, 2, 0); + let mut transaction_context = TransactionContext::new(accounts, 1, 2); let message = SanitizedMessage::Legacy(Message::new( &[ diff --git a/runtime/src/nonce_keyed_account.rs b/runtime/src/nonce_keyed_account.rs index 59ce1a808f..a129b45053 100644 --- a/runtime/src/nonce_keyed_account.rs +++ b/runtime/src/nonce_keyed_account.rs @@ -328,7 +328,7 @@ mod test { is_writable: true, }, ]; - let mut transaction_context = TransactionContext::new(accounts, 1, 2, 0); + let mut transaction_context = TransactionContext::new(accounts, 1, 2); let mut $invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); }; } diff --git a/runtime/src/system_instruction_processor.rs b/runtime/src/system_instruction_processor.rs index a4082c1ccb..2eb7621cf5 100644 --- a/runtime/src/system_instruction_processor.rs +++ b/runtime/src/system_instruction_processor.rs @@ -786,7 +786,7 @@ mod tests { #[test] fn test_address_create_with_seed_mismatch() { - let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1, 0); + let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1); let invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]); let from = Pubkey::new_unique(); let seed = "dull boy"; diff --git a/sdk/src/transaction_context.rs b/sdk/src/transaction_context.rs index d073c91898..51bc4c7267 100644 --- a/sdk/src/transaction_context.rs +++ b/sdk/src/transaction_context.rs @@ -48,7 +48,6 @@ pub struct TransactionContext { number_of_instructions_at_transaction_level: usize, instruction_trace: InstructionTrace, return_data: TransactionReturnData, - total_resize_limit: u64, total_resize_delta: RefCell, } @@ -58,7 +57,6 @@ impl TransactionContext { transaction_accounts: Vec, instruction_context_capacity: usize, number_of_instructions_at_transaction_level: usize, - total_resize_limit: u64, ) -> Self { let (account_keys, accounts): (Vec, Vec>) = transaction_accounts @@ -73,7 +71,6 @@ impl TransactionContext { number_of_instructions_at_transaction_level, instruction_trace: Vec::with_capacity(number_of_instructions_at_transaction_level), return_data: TransactionReturnData::default(), - total_resize_limit, total_resize_delta: RefCell::new(0), } } @@ -254,18 +251,6 @@ impl TransactionContext { pub fn get_instruction_trace(&self) -> &InstructionTrace { &self.instruction_trace } - - /// Returns (in bytes) how much data can still be allocated - pub fn get_total_resize_remaining(&self) -> u64 { - let total_resize_delta = *self.total_resize_delta.borrow(); - if total_resize_delta >= 0 { - self.total_resize_limit - .saturating_sub(total_resize_delta as u64) - } else { - self.total_resize_limit - .saturating_add(total_resize_delta.saturating_neg() as u64) - } - } } /// Return data at the end of a transaction