96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#pragma once
 | 
						|
/**
 | 
						|
 * @brief Solana Cross-Program Invocation
 | 
						|
 */
 | 
						|
 | 
						|
#include <sol/types.h>
 | 
						|
#include <sol/pubkey.h>
 | 
						|
#include <sol/entrypoint.h>
 | 
						|
 | 
						|
#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
 | 
						|
 */
 | 
						|
uint64_t sol_invoke_signed_c(
 | 
						|
  const SolInstruction *instruction,
 | 
						|
  const SolAccountInfo *account_infos,
 | 
						|
  int account_infos_len,
 | 
						|
  const SolSignerSeeds *signers_seeds,
 | 
						|
  int signers_seeds_len
 | 
						|
);
 | 
						|
 | 
						|
/**
 | 
						|
 * 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
 | 
						|
 | 
						|
/**@}*/
 |