Instrução Set Authority
Altera a autoridade de uma conta. Isso pode ser usado para revogar ou transferir autoridades em contas Mint e contas de Token.
Antes de podermos alterar qualquer autoridade, precisaremos já ter:
Inicializado uma conta
Mintou contaToken.A conta deve ter a autoridade que desejamos alterar configurada.
Instrução com Anchor
Com o Anchor, podemos usar o método set_authority do programa Token para alterar autoridades.
rust
use anchor_spl::token::{self, SetAuthority, AuthorityType};
// Definir nova autoridade
token::set_authority(
ctx.accounts.set_authority_ctx(),
Some(new_authority),
AuthorityType::MintTokens,
)?;
// Revogar autoridade (passar None)
token::set_authority(
ctx.accounts.set_authority_ctx(),
None,
AuthorityType::MintTokens,
)?;Contexto da Instrução
Aqui está como definir a estrutura de contexto para a instrução set_authority:
rust
#[derive(Accounts)]
pub struct SetTokenAuthority<'info> {
pub current_authority: Signer<'info>,
#[account(mut)]
pub account: Account<'info, TokenAccount>,
pub token_program: Program<'info, Token>,
}
impl<'info> SetTokenAuthority<'info> {
pub fn set_authority_ctx(&self) -> CpiContext<'_, '_, '_, 'info, SetAuthority<'info>> {
let cpi_program = self.token_program.to_account_info();
let cpi_accounts = SetAuthority {
current_authority: self.current_authority.to_account_info(),
account: self.account.to_account_info(),
};
CpiContext::new(cpi_program, cpi_accounts)
}
}