我如何正确使用' close_account '函数来关闭关联令牌帐户?



我正试图从程序内部关闭关联令牌帐户(ATA)。ATA属于该计划。我发现了一个叫做close_account的函数,但我还没有弄清楚如何正确使用它。我正在使用锚。

我的程序的期望流程是:

  1. 从程序ATA向用户ATA发送令牌(我已经成功地完成了这一点)
  2. 关闭用于令牌
  3. 的程序ATA

close_account的实现如下:

pub fn close_account<'a, 'b, 'c, 'info>(
ctx: CpiContext<'a, 'b, 'c, 'info, CloseAccount<'info>>,
) -> Result<()> {
let ix = spl_token::instruction::close_account(
&spl_token::ID,
ctx.accounts.account.key,
ctx.accounts.destination.key,
ctx.accounts.authority.key,
&[], // TODO: support multisig
)?;
solana_program::program::invoke_signed(
&ix,
&[
ctx.accounts.account.clone(),
ctx.accounts.destination.clone(),
ctx.accounts.authority.clone(),
],
ctx.signer_seeds,
)
.map_err(Into::into)
}

CloseAccount结构体如下:

#[derive(Accounts)]
pub struct CloseAccount<'info> {
pub account: AccountInfo<'info>,
pub destination: AccountInfo<'info>,
pub authority: AccountInfo<'info>,
}

(我假设)帐户是ATA,权限是我的程序-但是目的地是什么在这种情况下?为什么关闭账户需要目的地,我应该使用哪个账户作为目的地账户?

在这种情况下目的地是什么?为什么关闭账户需要目的地,我应该使用哪个账户作为目的地账户?

由于令牌帐户与Solana中的任何其他帐户一样,它们必须有足够的SOL来满足最低余额要求。在关闭账户时,您必须将该SOL发送到其他地方,因此称为"目的地"。最好的选择是使用一个只用于SOL的钱包/SOL帐户。

更多信息请访问https://spl.solana.com/token#closing-accounts

相关内容

  • 没有找到相关文章

最新更新