#pragma once /** * @brief Solana Cross-Program Invocation */ #include #include #include #ifdef __cplusplus extern "C" { #endif /** * Account Meta */ typedef struct { SolPubkey *pubkey; /** An account's public key */ bool is_writable; /** True if the `pubkey` can be loaded as a read-write account */ bool is_signer; /** True if an Instruction requires a Transaction signature matching `pubkey` */ } SolAccountMeta; /** * Instruction */ typedef struct { SolPubkey *program_id; /** Pubkey of the instruction processor that executes this instruction */ SolAccountMeta *accounts; /** Metadata for what accounts should be passed to the instruction processor */ uint64_t account_len; /** Number of SolAccountMetas */ uint8_t *data; /** Opaque data passed to the instruction processor */ uint64_t data_len; /** Length of the data in bytes */ } SolInstruction; /** * Internal cross-program invocation function */ #ifndef SOL_SBFV2 uint64_t sol_invoke_signed_c( const SolInstruction *, const SolAccountInfo *, int, const SolSignerSeeds *, int ); #else typedef uint64_t(*sol_invoke_signed_c_pointer_type)( const SolInstruction *, const SolAccountInfo *, int, const SolSignerSeeds *, int ); static uint64_t sol_invoke_signed_c( const SolInstruction * arg1, const SolAccountInfo * arg2, int arg3, const SolSignerSeeds * arg4, int arg5) { sol_invoke_signed_c_pointer_type sol_invoke_signed_c_pointer = (sol_invoke_signed_c_pointer_type) 2720767109; return sol_invoke_signed_c_pointer(arg1, arg2, arg3, arg4, arg5); } #endif /** * Invoke another program and sign for some of the keys * * @param instruction Instruction to process * @param account_infos Accounts used by instruction * @param account_infos_len Length of account_infos array * @param seeds Seed bytes used to sign program accounts * @param seeds_len Length of the seeds array */ static uint64_t sol_invoke_signed( const SolInstruction *instruction, const SolAccountInfo *account_infos, int account_infos_len, const SolSignerSeeds *signers_seeds, int signers_seeds_len ) { return sol_invoke_signed_c( instruction, account_infos, account_infos_len, signers_seeds, signers_seeds_len ); } /** * Invoke another program * * @param instruction Instruction to process * @param account_infos Accounts used by instruction * @param account_infos_len Length of account_infos array */ static uint64_t sol_invoke( const SolInstruction *instruction, const SolAccountInfo *account_infos, int account_infos_len ) { const SolSignerSeeds signers_seeds[] = {{}}; return sol_invoke_signed( instruction, account_infos, account_infos_len, signers_seeds, 0 ); } #ifdef __cplusplus } #endif /**@}*/