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