Instructions Approve et Revoke
Approve
accorde à un délégué le pouvoir de transférer un montant spécifique de jetons au nom du propriétaire du compte. Cela permet d'effectuer des transferts de jetons de manière programmatique sans donner le contrôle total du compte.
Revoke
supprime le pouvoir du délégué actuel sur le compte, redonnant ainsi le contrôle total au propriétaire du compte.
Avant de pouvoir déléguer ou révoquer un compte de jetons, nous devons déjà avoir :
- Initialisé un compte de
Mint
- Initialisé un compte de
Token
ouAssociated Token
que nous allons prendre le contrôle
Instruction Brute
En utilisant uniquement une instruction "brute" sans aucune abstraction, voici à quoi ressemble l'approbation d'un jeton :
const tokenAccount = Keypair.generate();
const tokenAccount = await getAssociatedTokenAddress(
mint.publicKey,
tokenAccount.publicKey,
);
// Create ATA creation instruction
const createAtaInstruction = createAssociatedTokenAccountIdempotentInstruction(
keypair.publicKey, // payer
tokenAccount, // associated token account address
destination.publicKey, // owner
mint.publicKey, // mint
);
// Delegate an ATA
const approveInstruction = createApproveInstruction(
tokenAccount // account
delegate.publicKey, // delegate
keypair.publickey // owner
1e6, // amount of tokens
);
const transaction = new Transaction().add(
createAtaInstruction,
approveInstruction,
);
const signature = await sendAndConfirmTransaction(connection, transaction, [keypair]);
console.log(`Token accounts created and delegated! Check out your TX here: https://explorer.solana.com/tx/${signature}?cluster=devnet`);
En utilisant uniquement une instruction "brute" sans aucune abstraction, voici à quoi ressemble la révocation d'un jeton :
// Revoke the delegate of an ATA
const revokeInstruction = createRevokeInstruction(
tokenAccount // account
keypair.publickey // owner
);
const transaction = new Transaction().add(revokeInstruction);
const signature = await sendAndConfirmTransaction(connection, transaction, [keypair]);
console.log(`Token account delegate revoked! Check out your TX here: https://explorer.solana.com/tx/${signature}?cluster=devnet`);
Instruction Abstraite
Voici à quoi ressemble la même instruction si elle est abstraite à l'aide de l'instruction approve()
:
const tokenAccount = Keypair.generate();
const ata = await getOrCreateAssociatedTokenAccount(
connection,
keypair,
mint,
tokenAccount.publicKey
);
console.log(`This is your ATA: ${ata.address}!`)
let tx = await approve(
connection,
keypair,
ata.address, // token Account
delegate-publicKey, // delegate
keypair.publicKey, // owner
1e6, // amount
);
console.log(`Succesfully Delegated!. Transaction Here: https://explorer.solana.com/tx/${tx}?cluster=devnet`)
Voici à quoi ressemble la même instruction si elle est abstraite à l'aide de l'instruction revoke()
:
let tx = await revoke(
connection,
keypair,
ata.address, // token Account
keypair.publicKey, // owner
);
console.log(`Succesfully Revoked Delegate!. Transaction Here: https://explorer.solana.com/tx/${tx}?cluster=devnet`)