Anchor
使用 Anchor 的 SPL 代币

使用 Anchor 的 SPL 代币

批准和撤销指令

批准允许代理人代表账户所有者转移特定数量的代币。这使得程序化的代币转移成为可能,而无需授予完整的账户控制权。

我们设置一个“批准”的金额,代理人只能转移不超过该金额的代币

撤销会移除当前代理人对账户的权限,将完整的控制权还给账户所有者。

立即取消任何现有的代理权限,并且只有账户所有者可以撤销代理(代理人本身无法撤销)

在我们可以代理或撤销任何代币账户之前,我们需要已经完成以下操作:

  • 初始化一个 Mint 账户。
  • 初始化一个 Token 账户或 Associated Token 账户,我们将对其进行控制

我们铸造的代币数量是根据小数位数“标准化”的。这意味着如果我们想铸造一个有 6 位小数的代币,我们实际上需要将金额设置为 1_000_000

以下是 CPI 到 approve() 指令的样子:

approve(
    CpiContext::new(
        ctx.accounts.token_program.to_account_info(),
        Approve {
            to: ctx.accounts.token_account.to_account_info(),
            delegate: ctx.accounts.delegate.to_account_info(),
            authority: ctx.accounts.authority.to_account_info(),
        },
    ),
    &1_000_000,
)?;

以下是 CPI 到 revoke() 指令的样子:

revoke(
    CpiContext::new(
        ctx.accounts.token_program.to_account_info(),
        Revoke {
            pub source: ctx.accounts.token_account.to_account_info(),
            authority: ctx.accounts.authority.to_account_info(),
        },
    ),
)?;
Blueshift © 2025Commit: fd080b2