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
 | |
| 
 | |
| /**@}*/
 |