Pembayaran dasar

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 amount dalam satuan dasar beserta decimals dari 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 yang context.signature-nya menyimpan tanda tangan transaksi
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();

Verifikasi saldo

Setelah transfer selesai, baca saldo token dari RPC. Turunkan ATA setiap dompet dengan findAssociatedTokenPda(), lalu panggil getTokenAccountBalance() untuk mengambil saldo akun tersebut.

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

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 amount dalam satuan dasar beserta decimals dari 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 yang context.signature-nya menyimpan tanda tangan transaksi

Verifikasi saldo

Setelah transfer selesai, baca saldo token dari RPC. Turunkan ATA setiap dompet dengan findAssociatedTokenPda(), lalu panggil getTokenAccountBalance() untuk mengambil saldo akun tersebut.

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

Demo

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?

Daftar Isi

Edit Halaman
© 2026 Yayasan Solana. Semua hak dilindungi.