Solana maakt directe, wereldwijde tokenoverdrachten mogelijk met kosten onder de $0,001. Of je nu grensoverschrijdende geldovermakingen, salarisuitbetalingen of treasury- operaties bouwt, een basisbetaling met stablecoins wordt in minder dan een seconde afgewikkeld en kost een fractie van een cent.
Hoe het werkt
Een betaling verplaatst stablecoins van het token account van de verzender naar het token account van de ontvanger. Als de ontvanger deze token voor het eerst ontvangt, kan hun token account worden aangemaakt als onderdeel van dezelfde transactie.
Zie Hoe betalingen werken op Solana voor kernconcepten van betalingen.
De token2022Program() plugin van @solana-program/token-2022 breidt je
@solana/kit client uit met een client.token2022
helper. De transferToATA methode verwerkt ATA-afleiding en transactieopbouw
automatisch, wat ideaal is voor enkelvoudige betalingsoverdrachten.
De onderstaande stappen tonen de kernflow. Zie de Demo voor complete uitvoerbare code.
Maak de token helper aan
Voeg de token2022Program() plugin toe aan je client met
.use(token2022Program()). Dit maakt client.token2022 beschikbaar, waarvan de
instructions methoden biedt voor veelgebruikte tokenbewerkingen.
Gebruik token2022Program() voor mints die eigendom zijn van het Token-2022
programma, of tokenProgram() van @solana-program/token voor mints die
eigendom zijn van het originele Token program.
Verstuur de betaling
Gebruik transferToATA() om tokens tussen wallets over te dragen. De methode
verwerkt:
- ATA-resolutie: Leidt automatisch Associated Token Accounts (ATAs) af voor de verzender en ontvanger. Als de ATA van de ontvanger niet bestaat, wordt de instructie om het account aan te maken automatisch toegevoegd aan dezelfde transactie.
- Gecontroleerde bedragen: Geef
amountdoor in basisunits samen met dedecimalsvan de mint. De overdracht wordt gecontroleerd aan de hand van de decimalen van de mint on-chain (bijv. 250000 basisunits -> 0,25 tokens, als de mint 6 decimalen heeft) - Transactieopbouw:
sendTransaction()bouwt, ondertekent en verstuurt de transactie, en geeft een resultaat terug waarvancontext.signaturede transactiehandtekening bevat
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();
Saldi verifiëren
Na afloop van de overdracht lees je de tokensaldi op uit de RPC. Leid de ATA van
elke wallet af met findAssociatedTokenPda(), roep vervolgens
getTokenAccountBalance() aan om het saldo van dat account op te halen.
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();
Demo
// 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?