Paiement de base

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 amount en unités de base ainsi que les decimals du 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 dont context.signature contient la signature de la transaction
Basic Payment
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.

Basic Payment
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();

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 amount en unités de base ainsi que les decimals du 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 dont context.signature contient la signature de la transaction

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.

Basic Payment
const client = createClient()
.use(signer(sender))
.use(solanaLocalRpc())
.use(token2022Program());

Démo

Demo
// Generate signers for sender and recipient
const 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 tokens
const { 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 balances
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
});
// Fetch final token account balances via RPC
const 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
// =============================================================================
Console
Click to execute the code.

Is this page helpful?

Table des matières

Modifier la page
© 2026 Fondation Solana. Tous droits réservés.