Solana ermöglicht sofortige, globale Token-Überweisungen mit Gebühren unter 0,001 $. Egal, ob Sie grenzüberschreitende Überweisungen, Gehaltsauszahlungen oder Treasury- Operationen aufbauen – eine grundlegende Stablecoin-Zahlung wird in unter einer Sekunde abgewickelt und kostet einen Bruchteil eines Cents.
So funktioniert es
Eine Zahlung verschiebt Stablecoins vom Token-Konto des Absenders zum Token-Konto des Empfängers. Wenn der Empfänger diesen Token zum ersten Mal erhält, kann sein Token-Konto als Teil derselben Transaktion erstellt werden.
Siehe Wie Zahlungen auf Solana funktionieren für grundlegende Zahlungskonzepte.
Das token2022Program()-Plugin aus @solana-program/token-2022 erweitert Ihren
@solana/kit-Client um einen
client.token2022-Helper. Dessen Methode transferToATA übernimmt die
ATA-Ableitung und den Transaktionsaufbau automatisch – ideal für einzelne
Zahlungsüberweisungen.
Die folgenden Schritte zeigen den grundlegenden Ablauf. Siehe die Demo für vollständigen ausführbaren Code.
Token-Helfer erstellen
Fügen Sie das token2022Program()-Plugin mit .use(token2022Program()) zu
Ihrem Client hinzu. Dadurch wird client.token2022 verfügbar, dessen
instructions Methoden für gängige Token-Operationen bereitstellen.
Verwenden Sie token2022Program() für Mints, die dem Token-2022-Programm
gehören, oder tokenProgram() aus @solana-program/token für Mints, die dem
ursprünglichen Token Program gehören.
Zahlung senden
Verwenden Sie transferToATA(), um Token zwischen Wallets zu übertragen. Die
Methode übernimmt:
- ATA-Auflösung: Leitet automatisch Associated Token Accounts (ATAs) für den Sender und Empfänger ab. Falls die ATA des Empfängers nicht existiert, wird die Anweisung zur Erstellung des Konten automatisch zur selben Transaktion hinzugefügt.
- Geprüfte Beträge: Übergeben Sie
amountin Basiseinheiten zusammen mit dendecimalsdes Mints. Die Übertragung wird on-chain gegen die Dezimalstellen des Mints geprüft (z. B. 250000 Basiseinheiten -> 0,25 Token, wenn der Mint 6 Dezimalstellen hat) - Transaktionsaufbau:
sendTransaction()erstellt, signiert und sendet die Transaktion und liefert ein Ergebnis, dessencontext.signaturedie Transaktionssignatur enthält
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();
Guthaben überprüfen
Nach Abschluss der Übertragung können die Token-Salden vom RPC abgerufen werden.
Leiten Sie die ATA jeder Wallet mit findAssociatedTokenPda() ab und rufen Sie
anschließend getTokenAccountBalance() auf, um den Saldo für das jeweilige
Konten abzurufen.
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?