Refactor: Remove KeyedAccount from program runtime (#22226)

* Makes error handling in BorrowedAccount optional.
Adds BorrowedAccount ::get_rent_epoch().
Exposes InstructionContext::get_index_in_transaction().
Turns accounts and account_keys into pinned boxed slices.

* Introduces "unsafe" to InvokeContext::push().

* Turns &TransactionContext into &mut TransactionContext in InvokeContext.

* Push and pop InstructionContext in InvokeContext.
Makes test_process_cross_program and test_native_invoke symmetric.
Removes the borrow check from test_invoke_context_verify.

* Removes keyed_accounts from prepare_instruction()

* Removes usage of invoke_stack.

* Removes keyed_accounts from program-test.

* Removes caller_write_privileges.

* Removes keyed_accounts from BPF parameter (de-)serialization.
This commit is contained in:
Alexander Meißner
2022-01-03 23:30:56 +01:00
committed by GitHub
parent 672fed04cb
commit 73e6038986
18 changed files with 847 additions and 805 deletions

View File

@@ -53,7 +53,7 @@ impl MessageProcessor {
builtin_programs: &[BuiltinProgram],
message: &Message,
program_indices: &[Vec<usize>],
transaction_context: &TransactionContext,
transaction_context: &mut TransactionContext,
rent: Rent,
log_collector: Option<Rc<RefCell<LogCollector>>>,
executors: Rc<RefCell<Executors>>,
@@ -132,7 +132,6 @@ impl MessageProcessor {
let result = invoke_context.process_instruction(
&instruction.data,
&instruction_accounts,
None,
program_indices,
&mut compute_units_consumed,
);
@@ -242,7 +241,7 @@ mod tests {
create_loadable_account_for_test("mock_system_program"),
),
];
let transaction_context = TransactionContext::new(accounts, 1);
let mut transaction_context = TransactionContext::new(accounts, 1);
let program_indices = vec![vec![2]];
let executors = Rc::new(RefCell::new(Executors::default()));
let account_metas = vec![
@@ -262,7 +261,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
&transaction_context,
&mut transaction_context,
rent_collector.rent,
None,
executors.clone(),
@@ -303,7 +302,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
&transaction_context,
&mut transaction_context,
rent_collector.rent,
None,
executors.clone(),
@@ -336,7 +335,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
&transaction_context,
&mut transaction_context,
rent_collector.rent,
None,
executors,
@@ -458,7 +457,7 @@ mod tests {
create_loadable_account_for_test("mock_system_program"),
),
];
let transaction_context = TransactionContext::new(accounts, 1);
let mut transaction_context = TransactionContext::new(accounts, 1);
let program_indices = vec![vec![2]];
let executors = Rc::new(RefCell::new(Executors::default()));
let account_metas = vec![
@@ -480,7 +479,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
&transaction_context,
&mut transaction_context,
rent_collector.rent,
None,
executors.clone(),
@@ -514,7 +513,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
&transaction_context,
&mut transaction_context,
rent_collector.rent,
None,
executors.clone(),
@@ -545,7 +544,7 @@ mod tests {
builtin_programs,
&message,
&program_indices,
&transaction_context,
&mut transaction_context,
rent_collector.rent,
None,
executors,
@@ -602,7 +601,7 @@ mod tests {
(secp256k1_program::id(), secp256k1_account),
(mock_program_id, mock_program_account),
];
let transaction_context = TransactionContext::new(accounts, 1);
let mut transaction_context = TransactionContext::new(accounts, 1);
let message = Message::new(
&[
@@ -618,7 +617,7 @@ mod tests {
builtin_programs,
&message,
&[vec![0], vec![1]],
&transaction_context,
&mut transaction_context,
RentCollector::default().rent,
None,
Rc::new(RefCell::new(Executors::default())),