Remove `get_total_resize_remaining()` and `total_resize_limit` from `TransactionContext` (#26504)
This commit is contained in:
parent
d1370f2c7d
commit
78b8a8a6db
|
@ -2060,7 +2060,7 @@ fn read_and_verify_elf(program_location: &str) -> Result<Vec<u8>, Box<dyn std::e
|
||||||
let mut program_data = Vec::new();
|
let mut program_data = Vec::new();
|
||||||
file.read_to_end(&mut program_data)
|
file.read_to_end(&mut program_data)
|
||||||
.map_err(|err| format!("Unable to read program file: {}", err))?;
|
.map_err(|err| format!("Unable to read program file: {}", err))?;
|
||||||
let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1, 0);
|
let mut transaction_context = TransactionContext::new(Vec::new(), 1, 1);
|
||||||
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
|
|
||||||
// Verify the program
|
// Verify the program
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
use solana_sdk::keyed_account::{create_keyed_accounts_unified, KeyedAccount};
|
use solana_sdk::keyed_account::{create_keyed_accounts_unified, KeyedAccount};
|
||||||
use {
|
use {
|
||||||
crate::{
|
crate::{
|
||||||
accounts_data_meter::{AccountsDataMeter, MAX_ACCOUNTS_DATA_LEN},
|
accounts_data_meter::AccountsDataMeter,
|
||||||
compute_budget::ComputeBudget,
|
compute_budget::ComputeBudget,
|
||||||
ic_logger_msg, ic_msg,
|
ic_logger_msg, ic_msg,
|
||||||
log_collector::LogCollector,
|
log_collector::LogCollector,
|
||||||
|
@ -1152,7 +1152,6 @@ pub fn with_mock_invoke_context<R, F: FnMut(&mut InvokeContext) -> R>(
|
||||||
preparation.transaction_accounts,
|
preparation.transaction_accounts,
|
||||||
ComputeBudget::default().max_invoke_depth.saturating_add(1),
|
ComputeBudget::default().max_invoke_depth.saturating_add(1),
|
||||||
1,
|
1,
|
||||||
MAX_ACCOUNTS_DATA_LEN,
|
|
||||||
);
|
);
|
||||||
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
invoke_context
|
invoke_context
|
||||||
|
@ -1183,7 +1182,6 @@ pub fn mock_process_instruction(
|
||||||
preparation.transaction_accounts,
|
preparation.transaction_accounts,
|
||||||
ComputeBudget::default().max_invoke_depth.saturating_add(1),
|
ComputeBudget::default().max_invoke_depth.saturating_add(1),
|
||||||
1,
|
1,
|
||||||
MAX_ACCOUNTS_DATA_LEN,
|
|
||||||
);
|
);
|
||||||
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
if let Some(sysvar_cache) = sysvar_cache_override {
|
if let Some(sysvar_cache) = sysvar_cache_override {
|
||||||
|
@ -1357,7 +1355,7 @@ mod tests {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
let mut transaction_context =
|
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, &[]);
|
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
|
|
||||||
// Check call depth increases and has a limit
|
// 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 accounts = vec![(solana_sdk::pubkey::new_rand(), AccountSharedData::default())];
|
||||||
let instruction_accounts = vec![];
|
let instruction_accounts = vec![];
|
||||||
let program_indices = vec![0];
|
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, &[]);
|
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
invoke_context
|
invoke_context
|
||||||
.push(&instruction_accounts, &program_indices, &[])
|
.push(&instruction_accounts, &program_indices, &[])
|
||||||
|
@ -1510,7 +1508,7 @@ mod tests {
|
||||||
is_writable: instruction_account_index < 2,
|
is_writable: instruction_account_index < 2,
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
let mut transaction_context = TransactionContext::new(accounts, 2, 8, 0);
|
let mut transaction_context = TransactionContext::new(accounts, 2, 8);
|
||||||
let mut invoke_context =
|
let mut invoke_context =
|
||||||
InvokeContext::new_mock(&mut transaction_context, builtin_programs);
|
InvokeContext::new_mock(&mut transaction_context, builtin_programs);
|
||||||
|
|
||||||
|
@ -1642,7 +1640,7 @@ mod tests {
|
||||||
fn test_invoke_context_compute_budget() {
|
fn test_invoke_context_compute_budget() {
|
||||||
let accounts = vec![(solana_sdk::pubkey::new_rand(), AccountSharedData::default())];
|
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, &[]);
|
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
invoke_context.compute_budget =
|
invoke_context.compute_budget =
|
||||||
ComputeBudget::new(compute_budget::DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64);
|
ComputeBudget::new(compute_budget::DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT as u64);
|
||||||
|
@ -1677,8 +1675,7 @@ mod tests {
|
||||||
process_instruction: mock_process_instruction,
|
process_instruction: mock_process_instruction,
|
||||||
}];
|
}];
|
||||||
|
|
||||||
let mut transaction_context =
|
let mut transaction_context = TransactionContext::new(accounts, 1, 3);
|
||||||
TransactionContext::new(accounts, 1, 3, user_account_data_len * 2);
|
|
||||||
let mut invoke_context =
|
let mut invoke_context =
|
||||||
InvokeContext::new_mock(&mut transaction_context, &builtin_programs);
|
InvokeContext::new_mock(&mut transaction_context, &builtin_programs);
|
||||||
|
|
||||||
|
@ -1688,13 +1685,7 @@ mod tests {
|
||||||
invoke_context
|
invoke_context
|
||||||
.accounts_data_meter
|
.accounts_data_meter
|
||||||
.set_maximum(user_account_data_len as u64 * 3);
|
.set_maximum(user_account_data_len as u64 * 3);
|
||||||
let remaining_account_data_len = invoke_context
|
let remaining_account_data_len = invoke_context.accounts_data_meter.remaining();
|
||||||
.transaction_context
|
|
||||||
.get_total_resize_remaining();
|
|
||||||
assert_eq!(
|
|
||||||
remaining_account_data_len,
|
|
||||||
invoke_context.accounts_data_meter.remaining(),
|
|
||||||
);
|
|
||||||
|
|
||||||
let instruction_accounts = [
|
let instruction_accounts = [
|
||||||
InstructionAccount {
|
InstructionAccount {
|
||||||
|
@ -1729,12 +1720,6 @@ mod tests {
|
||||||
|
|
||||||
assert!(result.is_ok());
|
assert!(result.is_ok());
|
||||||
assert_eq!(invoke_context.accounts_data_meter.remaining(), 0);
|
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
|
// 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!(result.is_ok());
|
||||||
assert_eq!(invoke_context.accounts_data_meter.remaining(), 0);
|
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
|
// Test 3: Resize the account to exceed the budget; this must fail
|
||||||
|
@ -1781,12 +1760,6 @@ mod tests {
|
||||||
Err(solana_sdk::instruction::InstructionError::MaxAccountsDataSizeExceeded)
|
Err(solana_sdk::instruction::InstructionError::MaxAccountsDataSizeExceeded)
|
||||||
));
|
));
|
||||||
assert_eq!(invoke_context.accounts_data_meter.remaining(), 0);
|
assert_eq!(invoke_context.accounts_data_meter.remaining(), 0);
|
||||||
assert_eq!(
|
|
||||||
invoke_context
|
|
||||||
.transaction_context
|
|
||||||
.get_total_resize_remaining(),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,7 +101,7 @@ fn create_inputs() -> TransactionContext {
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
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];
|
let instruction_data = vec![1u8, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
|
||||||
transaction_context
|
transaction_context
|
||||||
.push(&[0], &instruction_accounts, &instruction_data, true)
|
.push(&[0], &instruction_accounts, &instruction_data, true)
|
||||||
|
|
|
@ -454,7 +454,7 @@ mod tests {
|
||||||
&program_indices,
|
&program_indices,
|
||||||
);
|
);
|
||||||
let mut transaction_context =
|
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, &[]);
|
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
invoke_context
|
invoke_context
|
||||||
.push(
|
.push(
|
||||||
|
|
|
@ -3373,7 +3373,7 @@ mod tests {
|
||||||
),
|
),
|
||||||
($program_key, AccountSharedData::new(0, 0, &$loader_key)),
|
($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, &[]);
|
let mut $invoke_context = InvokeContext::new_mock(&mut $transaction_context, &[]);
|
||||||
$invoke_context.push(&[], &[0, 1], &[]).unwrap();
|
$invoke_context.push(&[], &[0, 1], &[]).unwrap();
|
||||||
};
|
};
|
||||||
|
|
|
@ -2785,7 +2785,6 @@ mod tests {
|
||||||
)],
|
)],
|
||||||
1,
|
1,
|
||||||
1,
|
1,
|
||||||
0,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2895,7 +2894,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_things_can_merge() {
|
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 invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
let good_stake = Stake {
|
let good_stake = Stake {
|
||||||
credits_observed: 4242,
|
credits_observed: 4242,
|
||||||
|
@ -2994,7 +2993,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_metas_can_merge() {
|
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, &[]);
|
let invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
// Identical Metas can merge
|
// Identical Metas can merge
|
||||||
assert!(MergeKind::metas_can_merge(
|
assert!(MergeKind::metas_can_merge(
|
||||||
|
@ -3141,7 +3140,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_merge_kind_get_if_mergeable() {
|
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 invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
let authority_pubkey = Pubkey::new_unique();
|
let authority_pubkey = Pubkey::new_unique();
|
||||||
let initial_lamports = 4242424242;
|
let initial_lamports = 4242424242;
|
||||||
|
@ -3380,7 +3379,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_merge_kind_merge() {
|
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 invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
let clock = Clock::default();
|
let clock = Clock::default();
|
||||||
let lamports = 424242;
|
let lamports = 424242;
|
||||||
|
|
|
@ -107,8 +107,7 @@ fn bench_process_vote_instruction(
|
||||||
instruction_data: Vec<u8>,
|
instruction_data: Vec<u8>,
|
||||||
) {
|
) {
|
||||||
bencher.iter(|| {
|
bencher.iter(|| {
|
||||||
let mut transaction_context =
|
let mut transaction_context = TransactionContext::new(transaction_accounts.clone(), 1, 1);
|
||||||
TransactionContext::new(transaction_accounts.clone(), 1, 1, 0);
|
|
||||||
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
invoke_context
|
invoke_context
|
||||||
.push(&instruction_accounts, &[0], &instruction_data)
|
.push(&instruction_accounts, &[0], &instruction_data)
|
||||||
|
|
|
@ -216,8 +216,7 @@ native machine code before execting it in the virtual machine.",
|
||||||
let program_indices = [0, 1];
|
let program_indices = [0, 1];
|
||||||
let preparation =
|
let preparation =
|
||||||
prepare_mock_invoke_context(transaction_accounts, instruction_accounts, &program_indices);
|
prepare_mock_invoke_context(transaction_accounts, instruction_accounts, &program_indices);
|
||||||
let mut transaction_context =
|
let mut transaction_context = TransactionContext::new(preparation.transaction_accounts, 1, 1);
|
||||||
TransactionContext::new(preparation.transaction_accounts, 1, 1, 0);
|
|
||||||
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
let mut invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
invoke_context
|
invoke_context
|
||||||
.push(
|
.push(
|
||||||
|
|
|
@ -4283,8 +4283,6 @@ impl Bank {
|
||||||
transaction_accounts,
|
transaction_accounts,
|
||||||
compute_budget.max_invoke_depth.saturating_add(1),
|
compute_budget.max_invoke_depth.saturating_add(1),
|
||||||
tx.message().instructions().len(),
|
tx.message().instructions().len(),
|
||||||
self.accounts_data_size_limit()
|
|
||||||
.saturating_sub(prev_accounts_data_len),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let pre_account_state_info =
|
let pre_account_state_info =
|
||||||
|
@ -18567,7 +18565,6 @@ pub(crate) mod tests {
|
||||||
loaded_txs[0].0.as_ref().unwrap().accounts.clone(),
|
loaded_txs[0].0.as_ref().unwrap().accounts.clone(),
|
||||||
compute_budget.max_invoke_depth.saturating_add(1),
|
compute_budget.max_invoke_depth.saturating_add(1),
|
||||||
number_of_instructions_at_transaction_level,
|
number_of_instructions_at_transaction_level,
|
||||||
0,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
|
|
@ -282,7 +282,7 @@ mod tests {
|
||||||
create_loadable_account_for_test("mock_system_program"),
|
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 program_indices = vec![vec![2]];
|
||||||
let executors = Rc::new(RefCell::new(Executors::default()));
|
let executors = Rc::new(RefCell::new(Executors::default()));
|
||||||
let account_keys = transaction_context.get_keys_of_accounts().to_vec();
|
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"),
|
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 program_indices = vec![vec![2]];
|
||||||
let executors = Rc::new(RefCell::new(Executors::default()));
|
let executors = Rc::new(RefCell::new(Executors::default()));
|
||||||
let account_metas = vec![
|
let account_metas = vec![
|
||||||
|
@ -661,7 +661,7 @@ mod tests {
|
||||||
(secp256k1_program::id(), secp256k1_account),
|
(secp256k1_program::id(), secp256k1_account),
|
||||||
(mock_program_id, mock_program_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(
|
let message = SanitizedMessage::Legacy(Message::new(
|
||||||
&[
|
&[
|
||||||
|
|
|
@ -328,7 +328,7 @@ mod test {
|
||||||
is_writable: true,
|
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, &[]);
|
let mut $invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -786,7 +786,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_address_create_with_seed_mismatch() {
|
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 invoke_context = InvokeContext::new_mock(&mut transaction_context, &[]);
|
||||||
let from = Pubkey::new_unique();
|
let from = Pubkey::new_unique();
|
||||||
let seed = "dull boy";
|
let seed = "dull boy";
|
||||||
|
|
|
@ -48,7 +48,6 @@ pub struct TransactionContext {
|
||||||
number_of_instructions_at_transaction_level: usize,
|
number_of_instructions_at_transaction_level: usize,
|
||||||
instruction_trace: InstructionTrace,
|
instruction_trace: InstructionTrace,
|
||||||
return_data: TransactionReturnData,
|
return_data: TransactionReturnData,
|
||||||
total_resize_limit: u64,
|
|
||||||
total_resize_delta: RefCell<i64>,
|
total_resize_delta: RefCell<i64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +57,6 @@ impl TransactionContext {
|
||||||
transaction_accounts: Vec<TransactionAccount>,
|
transaction_accounts: Vec<TransactionAccount>,
|
||||||
instruction_context_capacity: usize,
|
instruction_context_capacity: usize,
|
||||||
number_of_instructions_at_transaction_level: usize,
|
number_of_instructions_at_transaction_level: usize,
|
||||||
total_resize_limit: u64,
|
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let (account_keys, accounts): (Vec<Pubkey>, Vec<RefCell<AccountSharedData>>) =
|
let (account_keys, accounts): (Vec<Pubkey>, Vec<RefCell<AccountSharedData>>) =
|
||||||
transaction_accounts
|
transaction_accounts
|
||||||
|
@ -73,7 +71,6 @@ impl TransactionContext {
|
||||||
number_of_instructions_at_transaction_level,
|
number_of_instructions_at_transaction_level,
|
||||||
instruction_trace: Vec::with_capacity(number_of_instructions_at_transaction_level),
|
instruction_trace: Vec::with_capacity(number_of_instructions_at_transaction_level),
|
||||||
return_data: TransactionReturnData::default(),
|
return_data: TransactionReturnData::default(),
|
||||||
total_resize_limit,
|
|
||||||
total_resize_delta: RefCell::new(0),
|
total_resize_delta: RefCell::new(0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -254,18 +251,6 @@ impl TransactionContext {
|
||||||
pub fn get_instruction_trace(&self) -> &InstructionTrace {
|
pub fn get_instruction_trace(&self) -> &InstructionTrace {
|
||||||
&self.instruction_trace
|
&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
|
/// Return data at the end of a transaction
|
||||||
|
|
Loading…
Reference in New Issue