67 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #pragma once
 | ||
|  | /**
 | ||
|  |  * @brief Solana program entrypoint | ||
|  |  */ | ||
|  | 
 | ||
|  | #include <sol/types.h>
 | ||
|  | #include <sol/pubkey.h>
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * Keyed Account | ||
|  |  */ | ||
|  | typedef struct { | ||
|  |   SolPubkey *key;      /** Public key of the account */ | ||
|  |   uint64_t *lamports;  /** Number of lamports owned by this account */ | ||
|  |   uint64_t data_len;   /** Length of data in bytes */ | ||
|  |   uint8_t *data;       /** On-chain data within this account */ | ||
|  |   SolPubkey *owner;    /** Program that owns this account */ | ||
|  |   uint64_t rent_epoch; /** The epoch at which this account will next owe rent */ | ||
|  |   bool is_signer;      /** Transaction was signed by this account's key? */ | ||
|  |   bool is_writable;    /** Is the account writable? */ | ||
|  |   bool executable;     /** This account's data contains a loaded program (and is now read-only) */ | ||
|  | } SolAccountInfo; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * The Solana runtime provides a memory region that is available to programs at | ||
|  |  * a fixed virtual address and length. The builtin functions `sol_calloc` and | ||
|  |  * `sol_free` call into the Solana runtime to allocate from this memory region | ||
|  |  * for heap operations.  Because the memory region is directly available to | ||
|  |  * programs another option is a program can implement their own heap directly on | ||
|  |  * top of that region.  If a program chooses to implement their own heap they | ||
|  |  * should not call the builtin heap functions because they will conflict. | ||
|  |  * `HEAP_START_ADDRESS` and `HEAP_LENGTH` specify the memory region's start | ||
|  |  * virtual address and length. | ||
|  |  */ | ||
|  | #define HEAP_START_ADDRESS (uint64_t)0x300000000
 | ||
|  | #define HEAP_LENGTH (uint64_t)(32 * 1024)
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * Structure that the program's entrypoint input data is deserialized into. | ||
|  |  */ | ||
|  | typedef struct { | ||
|  |   SolAccountInfo* ka; /** Pointer to an array of SolAccountInfo, must already
 | ||
|  |                           point to an array of SolAccountInfos */ | ||
|  |   uint64_t ka_num; /** Number of SolAccountInfo entries in `ka` */ | ||
|  |   const uint8_t *data; /** pointer to the instruction data */ | ||
|  |   uint64_t data_len; /** Length in bytes of the instruction data */ | ||
|  |   const SolPubkey *program_id; /** program_id of the currently executing program */ | ||
|  | } SolParameters; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * Program instruction entrypoint | ||
|  |  * | ||
|  |  * @param input Buffer of serialized input parameters.  Use sol_deserialize() to decode | ||
|  |  * @return 0 if the instruction executed successfully | ||
|  |  */ | ||
|  | uint64_t entrypoint(const uint8_t *input); | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /**@}*/ |