Solana permet des transferts de tokens instantanés et mondiaux avec des frais inférieurs à 0,001 $. Que vous développiez des transferts de fonds transfrontaliers, des versements de salaires ou des opérations de trésorerie, un paiement de stablecoin de base se règle en moins d'une seconde et coûte une fraction de centime.
Comment ça fonctionne
Un paiement déplace des stablecoins du token account de l'expéditeur vers le token account du destinataire. Si le destinataire reçoit ce token pour la première fois, son token account peut être créé dans le cadre de la même transaction.
Consultez Comment fonctionnent les paiements sur Solana pour les concepts de paiement fondamentaux.
Le plugin token2022Program() de @solana-program/token-2022 étend votre
client @solana/kit avec un helper client.token2022.
Sa méthode transferToATA gère automatiquement la dérivation des ATA et la
construction des transactions, ce qui est idéal pour les transferts de paiement
uniques.
Les étapes ci-dessous montrent le flux principal. Consultez la Démo pour le code complet exécutable.
Créer l'assistant de token
Ajoutez le plugin token2022Program() à votre client avec
.use(token2022Program()). Cela expose client.token2022, dont les
instructions fournissent des méthodes pour les opérations courantes sur les
tokens.
Utilisez token2022Program() pour les mints appartenant au programme
Token-2022, ou tokenProgram() de @solana-program/token pour les mints
appartenant au Token Program d'origine.
Envoyer le paiement
Utilisez transferToATA() pour transférer des tokens entre portefeuilles. La
méthode gère :
- Résolution des ATA : Dérive automatiquement les Associated Token Accounts (ATAs) pour l'expéditeur et le destinataire. Si l'ATA du destinataire n'existe pas, l'instruction de création du compte est automatiquement ajoutée à la même transaction.
- Montants vérifiés : Passez
amounten unités de base ainsi que lesdecimalsdu mint. Le transfert est vérifié par rapport aux décimales du mint on-chain (ex. : 250 000 unités de base -> 0,25 tokens, si le mint a 6 décimales) - Construction des transactions :
sendTransaction()construit, signe et envoie la transaction, qui se résout en un résultat dontcontext.signaturecontient la signature de la transaction
const client = createClient().use(signer(sender)).use(solanaLocalRpc()).use(token2022Program());const result = await client.token2022.instructions.transferToATA({mint: mint.address,authority: sender,recipient: recipient.address,amount: 250_000n,decimals: 6}).sendTransaction();
Vérifier les soldes
Une fois le transfert terminé, lisez les soldes de tokens depuis le RPC. Dérivez
l'ATA de chaque portefeuille avec findAssociatedTokenPda(), puis appelez
getTokenAccountBalance() pour récupérer le solde de ce compte.
const client = createClient().use(signer(sender)).use(solanaLocalRpc()).use(token2022Program());const result = await client.token2022.instructions.transferToATA({mint: mint.address,authority: sender,recipient: recipient.address,amount: 250_000n,decimals: 6}).sendTransaction();const [senderAta] = await findAssociatedTokenPda({mint: mint.address,owner: sender.address,tokenProgram: TOKEN_2022_PROGRAM_ADDRESS});const [recipientAta] = await findAssociatedTokenPda({mint: mint.address,owner: recipient.address,tokenProgram: TOKEN_2022_PROGRAM_ADDRESS});const senderBalance = await client.rpc.getTokenAccountBalance(senderAta).send();const recipientBalance = await client.rpc.getTokenAccountBalance(recipientAta).send();
Démo
// Generate signers for sender and recipientconst sender = await generateKeyPairSigner();const recipient = await generateKeyPairSigner();console.log("Sender Address:", sender.address);console.log("Recipient Address:", recipient.address);// Demo Setup: Create client, mint account, and fund the sender with initial tokensconst { client, mint } = await demoSetup(sender);console.log("\nMint Address:", mint.address);// =============================================================================// Basic Token Payment Demo// =============================================================================// Transfer tokens from sender to recipient. The source and destination ATAs are// derived automatically, and the recipient's ATA is created if it does not exist.const result = await client.token2022.instructions.transferToATA({mint: mint.address,authority: sender,recipient: recipient.address,amount: 250_000n, // 0.25 tokens (base units for a mint with 6 decimals)decimals: 6}).sendTransaction();console.log("\n=== Token Payment Complete ===");console.log("Transaction Signature:", result.context.signature);// Derive the sender and recipient ATAs to read their balancesconst [senderAta] = await findAssociatedTokenPda({mint: mint.address,owner: sender.address,tokenProgram: TOKEN_2022_PROGRAM_ADDRESS});const [recipientAta] = await findAssociatedTokenPda({mint: mint.address,owner: recipient.address,tokenProgram: TOKEN_2022_PROGRAM_ADDRESS});// Fetch final token account balances via RPCconst senderBalance = await client.rpc.getTokenAccountBalance(senderAta).send();const recipientBalance = await client.rpc.getTokenAccountBalance(recipientAta).send();console.log("\nSender Token Account Balance:",senderBalance.value.uiAmountString);console.log("Recipient Token Account Balance:",recipientBalance.value.uiAmountString);// =============================================================================// Demo Setup Helper Function// =============================================================================
Is this page helpful?