Pengujian Token

Menguji logika token di Solana berarti menyiapkan mint, token account, dan otoritas sebelum Anda dapat menguji logika transfer yang sebenarnya ingin Anda uji. Plugin tokenProgram() dari @solana-program/token menyederhanakan penyiapan tersebut menjadi beberapa pemanggilan metode — dan menangani pembuatan ATA secara otomatis.

Instalasi

pnpm add @solana/kit @solana/kit-plugin-litesvm @solana/kit-plugin-signer @solana-program/token

Buat Mint

import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { litesvm } from "@solana/kit-plugin-litesvm";
import { signer } from "@solana/kit-plugin-signer";
import { tokenProgram } from "@solana-program/token";
const mySigner = await generateKeyPairSigner();
const client = createClient()
.use(signer(mySigner))
.use(litesvm())
.use(tokenProgram());
client.svm.airdrop(client.payer.address, lamports(10_000_000_000n));
const mintAuthority = await generateKeyPairSigner();
const newMint = await generateKeyPairSigner();
await client.token.instructions
.createMint({
newMint,
decimals: 9,
mintAuthority: mintAuthority.address
})
.sendTransaction();
// Verify
const mintAccount = await client.token.accounts.mint.fetch(newMint.address);
console.log(mintAccount.data.supply); // 0n
console.log(mintAccount.data.decimals); // 9

Mint Token

mintToATA menerbitkan token ke associated token account milik pemilik. Jika ATA belum ada, ATA akan dibuat dalam transaksi yang sama.

await client.token.instructions
.mintToATA({
mint: newMint.address,
owner: client.payer.address,
mintAuthority,
amount: 1_000_000_000_000n, // 1000 tokens (9 decimals)
decimals: 9
})
.sendTransaction();

Parameter decimals adalah pemeriksaan keamanan — nilainya harus cocok persis dengan desimal mint, sinon Token Program akan menolak transaksi dengan error 0x24. Ini mencegah pembuatan token yang secara tidak sengaja 1000x lebih banyak dari yang seharusnya.

Transfer Token

transferToATA memindahkan token antar pengguna. ATA penerima dibuat secara otomatis jika diperlukan.

const alice = await generateKeyPairSigner();
const bob = await generateKeyPairSigner();
// Mint to Alice
await client.token.instructions
.mintToATA({
mint: newMint.address,
owner: alice.address,
mintAuthority,
amount: 1_000_000_000_000n,
decimals: 9
})
.sendTransaction();
// Transfer 400 tokens from Alice to Bob
await client.token.instructions
.transferToATA({
mint: newMint.address,
authority: alice,
recipient: bob.address,
amount: 400_000_000_000n,
decimals: 9
})
.sendTransaction();

authority adalah penanda tangan yang memiliki token sumber. Plugin ini menurunkan baik ATA sumber maupun tujuan dari alamat mereka + mint.

Memverifikasi Saldo

Untuk membaca kembali saldo token, turunkan alamat ATA dengan findAssociatedTokenPda dan ambil akun yang telah didekode:

import {
findAssociatedTokenPda,
TOKEN_PROGRAM_ADDRESS
} from "@solana-program/token";
const [aliceAta] = await findAssociatedTokenPda({
owner: alice.address,
mint: newMint.address,
tokenProgram: TOKEN_PROGRAM_ADDRESS
});
const aliceAccount = await client.token.accounts.token.fetch(aliceAta);
console.log(aliceAccount.data.amount); // 600_000_000_000n
console.log(aliceAccount.data.mint); // newMint.address
console.log(aliceAccount.data.owner); // alice.address

Desimal

Jumlah token selalu dalam satuan mentah. 1000 token dengan 9 desimal adalah 1_000_000_000_000n, bukan 1000n.

// USDC has 6 decimals
const oneUSDC = 10n ** 6n; // 1_000_000n
// SOL has 9 decimals
const oneSOL = 10n ** 9n; // 1_000_000_000n

Selalu gunakan BigInt untuk jumlah token. Number milik JavaScript kehilangan presisi di atas 2^53.

Referensi Plugin

MethodDescription
client.token.instructions.createMint()Buat mint token SPL baru
client.token.instructions.mintToATA()Mint token ke ATA pemilik (membuat ATA jika diperlukan)
client.token.instructions.transferToATA()Transfer token ke ATA penerima (membuat ATA jika diperlukan)
client.token.accounts.mint.fetch()Ambil dan dekode mint account
client.token.accounts.token.fetch()Ambil dan dekode token account

Kesalahan Umum

ErrorCauseFix
custom program error: 0x24decimals tidak cocok dengan mintGunakan nilai desimal yang sama yang Anda berikan ke createMint
AccountNotFoundAkun belum adaPastikan mint dibuat sebelum melakukan minting
InsufficientFundslamport tidak cukup untuk rentAirdrop lebih banyak SOL ke pembayar
OwnerMismatchProgram yang salah memiliki akunPeriksa ID program

Is this page helpful?

Daftar Isi

Edit Halaman
© 2026 Yayasan Solana. Semua hak dilindungi.