Skip to content

Commit

Permalink
C header updates
Browse files Browse the repository at this point in the history
  • Loading branch information
Tyera Eulberg committed Aug 21, 2020
1 parent c6dee60 commit 016fd10
Showing 1 changed file with 127 additions and 35 deletions.
162 changes: 127 additions & 35 deletions token/program2/inc/token2.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,81 @@
*/
#define Token_MIN_SIGNERS 1

/**
* Account state.
*/
enum Token_AccountState
#ifdef __cplusplus
: uint8_t
#endif // __cplusplus
{
/**
* Account is not yet initialized
*/
Token_AccountState_Uninitialized,
/**
* Account is initialized; the account owner and/or delegate may perform permitted operations
* on this account
*/
Token_AccountState_Initialized,
/**
* Account has been frozen by the mint freeze authority. Neither the account owner nor
* the delegate are able to perform operations on this account.
*/
Token_AccountState_Frozen,
};
#ifndef __cplusplus
typedef uint8_t Token_AccountState;
#endif // __cplusplus

/**
* Specifies the authority type for SetAuthority instructions
*/
enum Token_AuthorityType
#ifdef __cplusplus
: uint8_t
#endif // __cplusplus
{
/**
* General authority, valid for Account and Mint
*/
Token_AuthorityType_Owner,
/**
* Freeze authority, only valid for Mint
*/
Token_AuthorityType_Freezer,
};
#ifndef __cplusplus
typedef uint8_t Token_AuthorityType;
#endif // __cplusplus

typedef uint8_t Token_Pubkey[32];

/**
* A C representation of Rust's `std::option::Option`
*/
typedef enum Token_COption_Pubkey_Tag {
/**
* No value
*/
Token_COption_Pubkey_None_Pubkey,
/**
* Some value `T`
*/
Token_COption_Pubkey_Some_Pubkey,
} Token_COption_Pubkey_Tag;

typedef struct Token_COption_Pubkey_Token_Some_Body_Pubkey {
Token_Pubkey _0;
} Token_COption_Pubkey_Token_Some_Body_Pubkey;

typedef struct Token_COption_Pubkey {
Token_COption_Pubkey_Tag tag;
union {
Token_COption_Pubkey_Token_Some_Body_Pubkey some;
};
} Token_COption_Pubkey;

/**
* Instructions supported by the token program.
*/
Expand All @@ -35,11 +110,7 @@ typedef enum Token_TokenInstruction_Tag {
* Accounts expected by this instruction:
*
* 0. `[writable]` The mint to initialize.
* 1.
* * If supply is non-zero: `[writable]` The account to hold all the newly minted tokens.
* * If supply is zero: `[]` The owner/multisignature of the mint.
* 2. `[]` (optional) The owner/multisignature of the mint if supply is non-zero, if
* present then further minting is supported.
* 1. If supply is non-zero: `[writable]` The account to hold all the newly minted tokens.
*
*/
Token_TokenInstruction_InitializeMint,
Expand Down Expand Up @@ -142,7 +213,7 @@ typedef enum Token_TokenInstruction_Tag {
* 2. `[]` The mint's or account's multisignature owner.
* 3. ..3+M '[signer]' M signer accounts
*/
Token_TokenInstruction_SetOwner,
Token_TokenInstruction_SetAuthority,
/**
* Mints new tokens to an account. The native mint does not support minting.
*
Expand Down Expand Up @@ -194,6 +265,24 @@ typedef enum Token_TokenInstruction_Tag {
* 3. ..3+M '[signer]' M signer accounts.
*/
Token_TokenInstruction_CloseAccount,
/**
* Freeze an Initialized account or unfreeze a Frozen account, using the Mint's
* freeze_authority (if set).
*
* Accounts expected by this instruction:
*
* * Single owner
* 0. `[writable]` The account to freeze.
* 1. '[]' The token mint.
* 2. `[signer]` The mint freeze authority.
*
* * Multisignature owner
* 0. `[writable]` The account to freeze.
* 1. '[]' The token mint.
* 2. `[]` The mint's multisignature freeze authority.
* 3. ..3+M '[signer]' M signer accounts.
*/
Token_TokenInstruction_ToggleFreeze,
} Token_TokenInstruction_Tag;

typedef struct Token_TokenInstruction_Token_InitializeMint_Body {
Expand All @@ -205,6 +294,15 @@ typedef struct Token_TokenInstruction_Token_InitializeMint_Body {
* Number of base 10 digits to the right of the decimal place.
*/
uint8_t decimals;
/**
* The owner/multisignature of the mint if supply is non-zero. If present, then further
* minting is supported.
*/
Token_COption_Pubkey owner;
/**
* The freeze authority/multisignature of the mint.
*/
Token_COption_Pubkey freeze_authority;
} Token_TokenInstruction_Token_InitializeMint_Body;

typedef struct Token_TokenInstruction_Token_InitializeMultisig_Body {
Expand All @@ -228,6 +326,13 @@ typedef struct Token_TokenInstruction_Token_Approve_Body {
uint64_t amount;
} Token_TokenInstruction_Token_Approve_Body;

typedef struct Token_TokenInstruction_Token_SetAuthority_Body {
/**
* The type of authority to update.
*/
Token_AuthorityType authority_type;
} Token_TokenInstruction_Token_SetAuthority_Body;

typedef struct Token_TokenInstruction_Token_MintTo_Body {
/**
* The amount of new tokens to mint.
Expand All @@ -242,45 +347,28 @@ typedef struct Token_TokenInstruction_Token_Burn_Body {
uint64_t amount;
} Token_TokenInstruction_Token_Burn_Body;

typedef struct Token_TokenInstruction_Token_ToggleFreeze_Body {
/**
* Explicitly: whether to freeze the account if it is Initialized. `false` means to
* unfreeze if the account is Frozen.
*/
bool freeze;
} Token_TokenInstruction_Token_ToggleFreeze_Body;

typedef struct Token_TokenInstruction {
Token_TokenInstruction_Tag tag;
union {
Token_TokenInstruction_Token_InitializeMint_Body initialize_mint;
Token_TokenInstruction_Token_InitializeMultisig_Body initialize_multisig;
Token_TokenInstruction_Token_Transfer_Body transfer;
Token_TokenInstruction_Token_Approve_Body approve;
Token_TokenInstruction_Token_SetAuthority_Body set_authority;
Token_TokenInstruction_Token_MintTo_Body mint_to;
Token_TokenInstruction_Token_Burn_Body burn;
Token_TokenInstruction_Token_ToggleFreeze_Body toggle_freeze;
};
} Token_TokenInstruction;

typedef uint8_t Token_Pubkey[32];

/**
* A C representation of Rust's `std::option::Option`
*/
typedef enum Token_COption_Pubkey_Tag {
/**
* No value
*/
Token_COption_Pubkey_None_Pubkey,
/**
* Some value `T`
*/
Token_COption_Pubkey_Some_Pubkey,
} Token_COption_Pubkey_Tag;

typedef struct Token_COption_Pubkey_Token_Some_Body_Pubkey {
Token_Pubkey _0;
} Token_COption_Pubkey_Token_Some_Body_Pubkey;

typedef struct Token_COption_Pubkey {
Token_COption_Pubkey_Tag tag;
union {
Token_COption_Pubkey_Token_Some_Body_Pubkey some;
};
} Token_COption_Pubkey;

/**
* Mint data.
*/
Expand All @@ -299,6 +387,10 @@ typedef struct Token_Mint {
* Is `true` if this structure has been initialized
*/
bool is_initialized;
/**
* Optional authority to freeze token accounts.
*/
Token_COption_Pubkey freeze_authority;
} Token_Mint;

/**
Expand All @@ -323,9 +415,9 @@ typedef struct Token_Account {
*/
Token_COption_Pubkey delegate;
/**
* Is `true` if this structure has been initialized
* Whether the account has been initialized or frozen
*/
bool is_initialized;
Token_AccountState is_initialized;
/**
* Is this a native token
*/
Expand Down

0 comments on commit 016fd10

Please sign in to comment.