@ -7,8 +7,11 @@ use libloading::os::windows::*;
|
|||||||
use log::*;
|
use log::*;
|
||||||
use num_derive::{FromPrimitive, ToPrimitive};
|
use num_derive::{FromPrimitive, ToPrimitive};
|
||||||
use solana_sdk::{
|
use solana_sdk::{
|
||||||
account::KeyedAccount, entrypoint_native, instruction::InstructionError,
|
account::KeyedAccount,
|
||||||
program_utils::DecodeError, pubkey::Pubkey,
|
entrypoint_native,
|
||||||
|
instruction::InstructionError,
|
||||||
|
program_utils::{next_keyed_account, DecodeError},
|
||||||
|
pubkey::Pubkey,
|
||||||
};
|
};
|
||||||
use std::{env, path::PathBuf, str};
|
use std::{env, path::PathBuf, str};
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
@ -85,9 +88,10 @@ pub fn invoke_entrypoint(
|
|||||||
instruction_data: &[u8],
|
instruction_data: &[u8],
|
||||||
symbol_cache: &SymbolCache,
|
symbol_cache: &SymbolCache,
|
||||||
) -> Result<(), InstructionError> {
|
) -> Result<(), InstructionError> {
|
||||||
// dispatch it
|
let mut keyed_accounts_iter = keyed_accounts.iter();
|
||||||
let (names, params) = keyed_accounts.split_at(1);
|
let program = next_keyed_account(&mut keyed_accounts_iter)?;
|
||||||
let name_vec = &names[0].try_account_ref()?.data;
|
let params = keyed_accounts_iter.as_slice();
|
||||||
|
let name_vec = &program.try_account_ref()?.data;
|
||||||
if let Some(entrypoint) = symbol_cache.read().unwrap().get(name_vec) {
|
if let Some(entrypoint) = symbol_cache.read().unwrap().get(name_vec) {
|
||||||
unsafe {
|
unsafe {
|
||||||
return entrypoint(program_id, params, instruction_data);
|
return entrypoint(program_id, params, instruction_data);
|
||||||
|
Reference in New Issue
Block a user