Allow program accounts to be passed as program and parameter (#8907)
This commit is contained in:
@ -158,6 +158,14 @@ pub fn process_instruction(
|
|||||||
if is_executable(keyed_accounts)? {
|
if is_executable(keyed_accounts)? {
|
||||||
let mut keyed_accounts_iter = keyed_accounts.iter();
|
let mut keyed_accounts_iter = keyed_accounts.iter();
|
||||||
let program = next_keyed_account(&mut keyed_accounts_iter)?;
|
let program = next_keyed_account(&mut keyed_accounts_iter)?;
|
||||||
|
|
||||||
|
let parameter_accounts = keyed_accounts_iter.as_slice();
|
||||||
|
let parameter_bytes = serialize_parameters(
|
||||||
|
program.unsigned_key(),
|
||||||
|
parameter_accounts,
|
||||||
|
&instruction_data,
|
||||||
|
)?;
|
||||||
|
{
|
||||||
let program_account = program.try_account_ref_mut()?;
|
let program_account = program.try_account_ref_mut()?;
|
||||||
let (mut vm, heap_region) = match create_vm(&program_account.data) {
|
let (mut vm, heap_region) = match create_vm(&program_account.data) {
|
||||||
Ok(info) => info,
|
Ok(info) => info,
|
||||||
@ -166,12 +174,6 @@ pub fn process_instruction(
|
|||||||
return Err(BPFLoaderError::VirtualMachineCreationFailed.into());
|
return Err(BPFLoaderError::VirtualMachineCreationFailed.into());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let parameter_accounts = keyed_accounts_iter.as_slice();
|
|
||||||
let parameter_bytes = serialize_parameters(
|
|
||||||
program.unsigned_key(),
|
|
||||||
parameter_accounts,
|
|
||||||
&instruction_data,
|
|
||||||
)?;
|
|
||||||
|
|
||||||
info!("Call BPF program");
|
info!("Call BPF program");
|
||||||
match vm.execute_program(parameter_bytes.as_slice(), &[], &[heap_region]) {
|
match vm.execute_program(parameter_bytes.as_slice(), &[], &[heap_region]) {
|
||||||
@ -187,6 +189,7 @@ pub fn process_instruction(
|
|||||||
return Err(BPFLoaderError::VirtualMachineFailedToRunProgram.into());
|
return Err(BPFLoaderError::VirtualMachineFailedToRunProgram.into());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
deserialize_parameters(parameter_accounts, ¶meter_bytes)?;
|
deserialize_parameters(parameter_accounts, ¶meter_bytes)?;
|
||||||
info!("BPF program success");
|
info!("BPF program success");
|
||||||
} else if !keyed_accounts.is_empty() {
|
} else if !keyed_accounts.is_empty() {
|
||||||
|
693
programs/librapay/Cargo.lock
generated
693
programs/librapay/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user