#pragma once
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#define TOKEN_MAJOR_VERSION 1
#define TOKEN_MINOR_VERSION 0
#define TOKEN_PATCH_VERSION 3
#define Token_MAX_SIGNERS 11
#define Token_MIN_SIGNERS 1
typedef enum Token_TokenInstruction_Tag {
InitializeMint,
InitializeAccount,
InitializeMultisig,
Transfer,
Approve,
Revoke,
SetOwner,
MintTo,
Burn,
CloseAccount,
} Token_TokenInstruction_Tag;
typedef struct Token_InitializeMint_Body {
uint64_t amount;
uint8_t decimals;
} Token_InitializeMint_Body;
typedef struct Token_InitializeMultisig_Body {
uint8_t m;
} Token_InitializeMultisig_Body;
typedef struct Token_Transfer_Body {
uint64_t amount;
} Token_Transfer_Body;
typedef struct Token_Approve_Body {
uint64_t amount;
} Token_Approve_Body;
typedef struct Token_MintTo_Body {
uint64_t amount;
} Token_MintTo_Body;
typedef struct Token_Burn_Body {
uint64_t amount;
} Token_Burn_Body;
typedef struct Token_TokenInstruction {
Token_TokenInstruction_Tag tag;
union {
Token_InitializeMint_Body initialize_mint;
Token_InitializeMultisig_Body initialize_multisig;
Token_Transfer_Body transfer;
Token_Approve_Body approve;
Token_MintTo_Body mint_to;
Token_Burn_Body burn;
};
} Token_TokenInstruction;
typedef uint8_t Token_Pubkey[32];
typedef enum Token_COption_Pubkey_Tag {
None_Pubkey,
Some_Pubkey,
} Token_COption_Pubkey_Tag;
typedef struct Token_Some_Body_Pubkey {
Token_Pubkey _0;
} Token_Some_Body_Pubkey;
typedef struct Token_COption_Pubkey {
Token_COption_Pubkey_Tag tag;
union {
Token_Some_Body_Pubkey some;
};
} Token_COption_Pubkey;
typedef struct Token_Mint {
Token_COption_Pubkey owner;
uint8_t decimals;
bool is_initialized;
} Token_Mint;
typedef struct Token_Account {
Token_Pubkey mint;
Token_Pubkey owner;
uint64_t amount;
Token_COption_Pubkey delegate;
bool is_initialized;
bool is_native;
uint64_t delegated_amount;
} Token_Account;
typedef struct Token_Multisig {
uint8_t m;
uint8_t n;
bool is_initialized;
Token_Pubkey signers[Token_MAX_SIGNERS];
} Token_Multisig;