1 个不稳定版本

0.1.0 2024年5月2日

#14#entrypoint


硝酸盐 中使用

Apache-2.0

15KB
167

nitrate-macro

是使用 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