1 个不稳定版本
0.1.0 | 2024年5月2日 |
---|
#14 在 #entrypoint
在 硝酸盐 中使用
15KB
167 行
是使用 nitrate
入口点的程序的伴随宏。它创建结构体以提供轻松访问指令账户的方法,同时比使用 solana_program::account_info::next_account_info
迭代器更高效。
入门
该宏是 nitrate
包的一部分
cargo add nitrate
[!重要] 为了使用
entrypoint!
derive 宏,您需要在包上定义自定义的Accounts
。
示例
使用 Accounts
derive 注解您的指令枚举
#[derive(BorshDeserialize, BorshSerialize, Clone, Debug, ShankInstruction, Accounts)]
pub struct Instruction {
#[account(0, signer, writable, name="buffer", desc = "The unitialized buffer account")]
#[account(1, writable, name="recipient", desc = "The account receiving refunded rent")]
Close,
#[account(0, writable, name="asset", desc = "Asset account")]
#[account(1, signer, writable, name="signer", desc = "The owner or burn delegate of the asset")]
#[account(2, optional, writable, name="recipient", desc = "The account receiving refunded rent")]
#[account(3, optional, writable, name="group", desc = "Asset account of the group")]
Burn,
}
这将创建一个包含每个枚举变体(指令)的结构体的 accounts
模块
use nitrate::program::AccountInfo;
mod accounts {
pub struct Close<'a> {
pub buffer: &'a AccountInfo,
pub recipient: &'a AccountInfo,
}
pub struct Burn<'a> {
pub asset: &'a AccountInfo,
pub signer: &'a AccountInfo,
pub recipient: Option<&'a AccountInfo>,
pub group: Option<&'a AccountInfo>,
}
}
在您的指令处理器中,您可以创建一个 Context
以访问指令的账户
let ctx = Burn::context(accounts)?;
msg!("Burn asset: {:?}", ctx.accounts.asset.key());
许可证
版权所有 (c) 2024 nifty-oss 维护者
根据 Apache License, Version 2.0 (“许可证”)许可;除非根据适用法律或书面同意,否则不得使用此文件,除非遵守许可证。您可以在以下位置获得许可证的副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言,请参阅许可证。
依赖关系
~1.5MB
~35K SLoC