rust 初始化令牌帐户错误-“处理指令0时出错:自定义程序错误:0x 0英寸

fjaof16o  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(159)

在我的程序中,我尝试初始化PDA Token Accounts,以便程序可以存储指定薄荷糖的代币,如下所示:

#[derive(Accounts)]
pub struct StartAuction<'info> {
    #[account(init, seeds=[&state.positions_count.to_ne_bytes()], bump, payer = authority, space = 5000)]
    pub position: Account<'info, Position>,

    #[account(mut, seeds=[b"state"], bump)]
    pub state: Account<'info, State>,

    pub token: Account<'info, Mint>,
    pub token2: Account<'info, Mint>,

    #[account(init, payer = authority, token::mint = token, token::authority = position)]
    pub vault: Account<'info, TokenAccount>,

    // #[account(init, payer = authority, token::mint = token2, token::authority = position)]
    // pub token2_vault: Account<'info, TokenAccount>,

    #[account(mut)]
    pub authority: Signer<'info>,

    pub token_program: Program<'info, Token>,
    pub rent: Sysvar<'info, Rent>,
    pub system_program: Program<'info, System>
}

如果token2_vault账户被注解,如上图所示,一切都很好。但是当我取消注解时(为不同的薄荷糖设置两个令牌账户),我得到了一个令人困惑的错误:* * 交易模拟失败:处理指令0时出错:自定义程序错误:0**
假设这是这里指定的NotRentExempt("Lamport余额低于免租阈值")SPL错误,并且authority帐户肯定有足够的lamport,完全不清楚为什么我可以初始化一个帐户,而不是两个帐户,出现这样奇怪的错误。
先谢了!

pgvzfuti

pgvzfuti1#

我通过向帐户定义添加种子来解决这个问题,如下所示:

#[derive(Accounts)]
pub struct StartAuction<'info> {
    #[account(init, seeds=[b"vault1".as_ref()], payer = authority, token::mint = token, token::authority = position)]
    pub vault: Account<'info, TokenAccount>,

    #[account(init, seeds=[b"vault2".as_ref()], payer = authority, token::mint = token2, token::authority = position)]
    pub token2_vault: Account<'info, TokenAccount>
}

我猜在没有定义种子的情况下,这两个帐户有相同的地址,导致了错误。为什么会产生0x0NotRentExempt错误还不清楚。

相关问题