Derive Macro shank::ShankInstruction
source · [−]#[derive(ShankInstruction)]
{
// Attributes available to this derive:
#[account]
}
Expand description
Annotates the program Instruction Enum
in order to include #[account]
attributes.
The #[account]
attributes indicate for each instruction variant which accounts it expects
and how they should be configured.
#[account]
attribute
This attribute allows you to configure each account that is provided to the particular instruction. These annotations need to follow the order in which the accounts are provided. They take the following general form:
#[account(index?, (writable|signer)?, optional?, name="<account_name>", desc?="optional description")]
index
: optionally provides the account index in the provided accounts array which needs to match its position of#[account]
attributessigner
|sign
|sig
: indicates that the account is signerwritable
|write
|writ
|mut
: indicates that the account is writable which means it may be mutated as part of processing the particular instructionoptional | option | opt
: indicates that this account is optionalname
: (required) provides the name for the accountdesc
|description
: allows to provide a description of the account
Known Accounts
If an account name
matches either of the a known accounts indicated below then
solita generated SDK code won’t require providing
it as the program id is known.
token_program
usesTOKEN_PROGRAM_ID
ata_program
usesASSOCIATED_TOKEN_PROGRAM_ID
system_program
usesSystemProgram.programId
rent
usesSYSVAR_RENT_PUBKEY
Examples
use borsh::{BorshDeserialize, BorshSerialize};
use shank::ShankInstruction;
#[derive(Debug, Clone, ShankInstruction, BorshSerialize, BorshDeserialize)]
#[rustfmt::skip]
pub enum VaultInstruction {
/// Initialize a token vault, starts inactivate. Add tokens in subsequent instructions, then activate.
#[account(0, writable, name="fraction_mint",
desc="Initialized fractional share mint with 0 tokens in supply, authority on mint must be pda of program with seed [prefix, programid]")]
#[account(1, writable, name="redeem_treasury",
desc = "Initialized redeem treasury token account with 0 tokens in supply, owner of account must be pda of program like above")]
#[account(2, writable, name="fraction_treasury",
desc = "Initialized fraction treasury token account with 0 tokens in supply, owner of account must be pda of program like above")]
#[account(3, writable, name="vault",
desc = "Uninitialized vault account")]
#[account(4, name="authority",
desc = "Authority on the vault")]
#[account(5, name="pricing_lookup_address",
desc = "Pricing Lookup Address")]
#[account(6, name="token_program",
desc = "Token program")]
#[account(7, name="rent",
desc = "Rent sysvar")]
InitVault(InitVaultArgs),
/// Activates the vault, distributing initial shares into the fraction treasury.
/// Tokens can no longer be removed in this state until Combination.
#[account(0, writable, name="vault", desc = "Initialized inactivated fractionalized token vault")]
#[account(1, writable, name="fraction_mint", desc = "Fraction mint")]
#[account(2, writable, name="fraction_treasury", desc = "Fraction treasury")]
#[account(3, name="fraction_mint_authority", desc = "Fraction mint authority for the program - seed of [PREFIX, program_id]")]
#[account(4, signer, name="vault_authority", desc = "Authority on the vault")]
#[account(5, name="token_program", desc = "Token program")]
ActivateVault(NumberOfShareArgs)
}