Solana memungkinkan transfer token global secara instan dengan biaya di bawah $0,001. Baik Anda membangun remitansi lintas negara, pencairan gaji, atau operasi perbendaharaan, pembayaran stablecoin dasar diselesaikan dalam waktu kurang dari satu detik dan biayanya hanya sebagian kecil dari satu sen.
Cara kerjanya
Pembayaran memindahkan stablecoin dari token account pengirim ke token account penerima. Jika penerima menerima token ini untuk pertama kalinya, token account mereka dapat dibuat sebagai bagian dari transaksi yang sama.
Lihat How Payments Work on Solana untuk konsep pembayaran inti.
Plugin token2022Program() dari @solana-program/token-2022 memperluas klien
@solana/kit Anda dengan helper client.token2022.
Metode transferToATA-nya menangani derivasi ATA dan pembangunan transaksi
secara otomatis, yang ideal untuk transfer pembayaran tunggal.
Langkah-langkah di bawah ini menunjukkan alur inti. Lihat Demo untuk kode lengkap yang dapat dijalankan.
Buat token helper
Tambahkan plugin token2022Program() ke klien Anda dengan
.use(token2022Program()). Ini mengekspos client.token2022, yang
instructions-nya menyediakan metode untuk operasi token yang umum.
Gunakan token2022Program() untuk mint yang dimiliki oleh program Token-2022,
atau tokenProgram() dari @solana-program/token untuk mint yang dimiliki oleh
Token Program asli.
Kirim pembayaran
Gunakan transferToATA() untuk mentransfer token antar dompet. Metode ini
menangani:
- Resolusi ATA: Secara otomatis menurunkan Associated Token Accounts (ATA) untuk pengirim dan penerima. Jika ATA penerima belum ada, instruksi untuk membuat akun tersebut akan otomatis ditambahkan ke transaksi yang sama.
- Jumlah Terverifikasi: Masukkan
amountdalam satuan dasar besertadecimalsdari mint. Transfer diverifikasi terhadap desimal mint secara on-chain (misalnya 250000 satuan dasar -> 0,25 token, jika mint memiliki 6 desimal) - Pembangunan Transaksi:
sendTransaction()membangun, menandatangani, dan mengirim transaksi, yang menghasilkan sebuah result yangcontext.signature-nya menyimpan tanda tangan transaksi
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();
Verifikasi saldo
Setelah transfer selesai, baca saldo token dari RPC. Turunkan ATA setiap dompet
dengan findAssociatedTokenPda(), lalu panggil getTokenAccountBalance() untuk
mengambil saldo akun tersebut.
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?