LogoAnchor 中文文档

Account Types

Anchor 账户类型示例

Anchor 的账户类型的最小化参考示例。
查看账户类型的 源码 了解实现细节。

账户类型

Account<'info, T>

描述:在反序列化时检查所有权的账户容器
示例: Github | Solpg

代码片段
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {


    pub account: Account<'info, CustomAccountType>,
}
 
#[account]
pub struct CustomAccountType {
    data: u64,
}

AccountInfo<'info>

描述:AccountInfo 可以作为类型使用,但应改用 Unchecked Account
示例: Github | Solpg

代码片段
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {
    /// CHECK: AccountInfo 是一个未检查的账户


    pub unchecked_account: AccountInfo<'info>,
}

AccountLoader<'info, T>

描述:用于按需零拷贝反序列化的类型
示例: Github | Solpg

代码片段
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {


    pub account: AccountLoader<'info, ZeroCopyAccountType>,
}
 
#[account(zero_copy)]
pub struct ZeroCopyAccountType {
    data: u64,
}

Box<Account<'info, T>>

描述:用于节省栈空间的 Box 类型
示例: Github | Solpg

代码片段
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {


    pub account: Box<Account<'info, AccountType>>,
}

Interface<'info, T>

描述:验证账户属于给定程序集之一的类型
示例: Github | Solpg

代码片段
// Token 程序或 Token2022 程序
use anchor_spl::token_interface::TokenInterface;
 
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {


    pub program: Interface<'info, TokenInterface>,
}

InterfaceAccount<'info, T>

描述:在反序列化时检查所有权的账户容器
示例: Github | Solpg

代码片段
// Token 程序或 Token2022 程序的 Mint/TokenAccount
use anchor極spl::token_interface::{Mint, TokenAccount, TokenInterface};
 
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {


    pub mint: InterfaceAccount<'info, Mint>,
    pub token: InterfaceAccount<'info, TokenAccount>,
    pub program: Interface<'info, TokenInterface>,
}

Option<Account<'info, T>>

描述:用于可选账户的 Option 类型
示例: Github | Solpg

代码片段
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {


    pub account: Option<Account<'info, AccountType>>,
}

Program<'info, T>

描述:验证账户是指定程序类型
示例: Github | Solpg

代码片段
use anchor_spl::token::Token;
 
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {


    pub system_program: Program<'info, System>,
    pub token_program: Program<'info, Token>,
}
極```
 
### `Signer<'info>`
 
描述:验证账户已签署交易的类型  
示例: [Github](https://github.com/solana-developers/anchor-examples/tree/main/account-types/Signer)
|
[Solpg](https://beta.solpg.io/https://github.com/solana-developers/anchor-examples/tree/main/account-types/Signer)
 
```rust title="代码片段"
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {


    pub signer: Signer<'info>,
}

SystemAccount<'info>

描述:验证账户由系统程序拥有的类型
示例: Github | Solpg

代码片段
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {


    pub account: SystemAccount<'info>,
}

Sysvar<'info, T>

描述:验证账户是 sysvar 并对其进行反序列化的类型
示例: Github | Solpg

代码片段
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {


    pub rent: Sysvar<'info, Rent>,
    pub clock: Sysvar<'info, Clock>,
}

UncheckedAccount<'info>

描述:AccountInfo 类型的显式包装器,强调不执行检查
示例: Github | Solpg

代码片段
#[derive(Accounts)]
pub struct InstructionAccounts<'info> {
    // CHECK: 没有执行任何检查


    pub account: UncheckedAccount<'info>,
}

On this page

在GitHub上编辑