Token Testi

Solana'da token mantığını test etmek, asıl test etmek istediğiniz transfer mantığına geçmeden önce mint'leri, token account'ları ve yetki sahiplerini kurmanız anlamına gelir. tokenProgram() eklentisi, @solana-program/token'den bu kurulumu birkaç metod çağrısına indirger — ve ATA oluşturmayı otomatik olarak halleder.

Kurulum

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

Mint Oluşturma

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

Token Basma

mintToATA, token'ları bir sahibin associated token account'ına yayınlar. ATA mevcut değilse, aynı işlem içinde oluşturulur.

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

decimals parametresi bir güvenlik kontrolüdür — mint'in ondalık basamak sayısıyla tam olarak eşleşmesi gerekir; aksi takdirde Token Program işlemi 0x24 hatasıyla reddeder. Bu, yanlışlıkla 1000 kat fazla token basılmasını önler.

Token Transferi

transferToATA, token'ları kullanıcılar arasında taşır. Gerekirse alıcının associated token account'ı otomatik olarak oluşturulur.

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, kaynak token'lara sahip olan imzacıdır. Eklenti, hem kaynak hem de hedef ATA'yı adreslerinden ve mint'ten türetir.

Bakiyeleri Doğrulama

Token bakiyelerini okumak için, ATA adresini findAssociatedTokenPda ile türetin ve çözümlenmiş hesabı alın:

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

Ondalık Basamaklar

Token miktarları her zaman ham birimlerdir. 9 ondalık basamaklı 1000 token, 1_000_000_000_000n değerindedir, 1000n değil.

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

Token miktarları için her zaman BigInt kullanın. JavaScript'in Number değeri 2^53 üzerinde hassasiyetini yitirir.

Eklenti Referansı

MetodAçıklama
client.token.instructions.createMint()Yeni bir SPL token mint oluşturur
client.token.instructions.mintToATA()Bir sahibin ATA'sına token basar (gerekirse ATA oluşturur)
client.token.instructions.transferToATA()Token'ları alıcının ATA'sına aktarır (gerekirse ATA oluşturur)
client.token.accounts.mint.fetch()Bir mint account alır ve çözümler
client.token.accounts.token.fetch()Bir token account alır ve çözümler

Yaygın Hatalar

HataNedenÇözüm
custom program error: 0x24decimals mint ile eşleşmiyorcreateMint'ye geçirdiğiniz ondalık basamak değerini kullanın
AccountNotFoundHesap henüz mevcut değilToken basmadan önce mint'in oluşturulduğundan emin olun
InsufficientFundsrent için yeterli lamport yokÖdeyiciye daha fazla SOL airdrop yapın
OwnerMismatchHesabın sahibi yanlış programProgram ID'sini kontrol edin

Is this page helpful?

İçindekiler

Sayfayı Düzenle
© 2026 Solana Vakfı. Tüm hakları saklıdır.