Le Programme de Jetons
Sur Solana, tout ce qui concerne les jetons est géré par le Programme SPL-Token et Token2022 Program : framework de jeton natif de Solana qui définit la manière dont tous les jetons sont créés, gérés et transférés.
Il s'agit d'un programme unique et unifié qui gère toutes les opérations liées aux jetons sur l'ensemble du réseau, garantissant ainsi la cohérence et l'interopérabilité.
Pour Anchor, tout ce qui concerne les jetons se trouve dans la crate anchor-spl
. Pour cette raison, après avoir initialisé un espace de travail Anchor
, nous pouvons simplement faire :
cargo add anchor-spl
Comptes de Mint et Comptes de Jeton
Si vous êtes familier avec Anchor
, vous savez qu'il dispose d'un ensemble de macros qui aident l'utilisateur à simplifier bon nombre des complexités liées à l'initialisation des comptes.
Il en va de même ici pour les comptes de Mint
, de Token
et Associated Token
.
Compte de Mint
Grâce aux macros proposées par Anchor
, voici comment créer facilement un compte de Mint
:
#[derive(Accounts)]
pub struct CreateMint<'info> {
#[account(mut)]
pub signer: Signer<'info>,
#[account(
init,
payer = signer,
mint::decimals = 6,
mint::authority = signer.key(),
)]
pub mint: Account<'info, Mint>,
pub system_program: Program<'info, System>,
pub token_program: Program<'info, Token>,
}
Compte de Token
Il en va de même pour le compte de Token
. La création d'un compte de Token
à l'aide de macros ressemble à ceci :
#[derive(Accounts)]
pub struct CreateToken<'info> {
#[account(mut)]
pub signer: Signer<'info>,
pub mint: Account<'info, Mint>,
#[account(
mut,
token::mint = mint,
token::authority = signer,
)]
pub token: Account<'info, TokenAccount>,
pub system_program: Program<'info, System>,
pub token_program: Program<'info, Token>,
}
Compte Associated Token
Il en va de même pour le compte Associated Token
. La création de comptes Associated Token
à l'aide de macros est similaire à la création d'un compte de Token
. La seule différence est dans la contrainte. Voici à quoi cela ressemble :
#[derive(Accounts)]
pub struct CreateToken<'info> {
#[account(mut)]
pub signer: Signer<'info>,
pub mint: Account<'info, Mint>,
#[account(
mut,
associated_token::mint = mint,
associated_token::authority = signer,
)]
pub token: Account<'info, TokenAccount>,
pub system_program: Program<'info, System>,
pub token_program: Program<'info, Token>,
pub associated_token_program: Program<'info, AssociatedToken>,
}