Derive Macro anchor_derive_accounts::Accounts [−][src]
#[derive(Accounts)] { // Attributes available to this derive: #[account] }
Implements an Accounts
deserializer on the given
struct, applying any constraints specified via inert #[account(..)]
attributes upon deserialization.
Example
ⓘ
#[derive(Accounts)] pub struct Auth<'info> { #[account(mut, has_one = authority)] pub data: ProgramAccount<'info, MyData>, #[account(signer)] pub authority: AccountInfo<'info>, } #[account] pub struct MyData { authority: Pubkey, protected_data: u64, }
Here, any instance of the Auth
struct created via
try_accounts
is guaranteed
to have been both
- Signed by
authority
. - Checked that
&data.authority == authority.key
.
The full list of available attributes is as follows.
Attribute | Location | Description |
---|---|---|
#[account(signer)] | On raw AccountInfo structs. | Checks the given account signed the transaction. |
#[account(mut)] | On AccountInfo , ProgramAccount or CpiAccount structs. | Marks the account as mutable and persists the state transition. |
#[account(init)] | On ProgramAccount structs. | Marks the account as being initialized, skipping the account discriminator check. |
#[account(belongs_to = <target>)] | On ProgramAccount or CpiAccount structs | Checks the target field on the account matches the target field in the struct deriving Accounts . |
#[account(has_one = <target>)] | On ProgramAccount or CpiAccount structs | Semantically different, but otherwise the same as belongs_to . |
#[account(seeds = [<seeds>])] | On AccountInfo structs | Seeds for the program derived address an AccountInfo struct represents. |
#[account("<literal>")] | On any type deriving Accounts | Executes the given code literal as a constraint. The literal should evaluate to a boolean. |
#[account(rent_exempt = <skip>)] | On AccountInfo or ProgramAccount structs | Optional attribute to skip the rent exemption check. By default, all accounts marked with #[account(init)] will be rent exempt, and so this should rarely (if ever) be used. Similarly, omitting = skip will mark the account rent exempt. |