Token Testen

Het testen van tokenlogica op Solana betekent het instellen van mints, token accounts en autorisaties voordat je de transferlogica kunt testen die je eigenlijk wilt controleren. De tokenProgram()-plugin van @solana-program/token reduceert die setup tot een aantal methodeaanroepen — en verwerkt het aanmaken van ATA's automatisch.

Installatie

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

Een Mint Aanmaken

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

Tokens Minten

mintToATA geeft tokens uit aan de Associated Token Account van een eigenaar. Als de ATA niet bestaat, wordt deze aangemaakt in dezelfde transactie.

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

De parameter decimals is een veiligheidscontrole — deze moet exact overeenkomen met de decimalen van de mint, anders wijst het Token Program de transactie af met fout 0x24. Dit voorkomt dat je per ongeluk 1000x te veel tokens mint.

Tokens Overdragen

transferToATA verplaatst tokens tussen gebruikers. De ATA van de ontvanger wordt automatisch aangemaakt indien nodig.

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

De authority is de ondertekenaar die de brontokens bezit. De plugin leidt zowel de bron- als de bestemmings-ATA's af van hun adressen en de mint.

Saldi Verifiëren

Om tokenbalansen terug te lezen, leid het ATA-adres af met findAssociatedTokenPda en haal het gedecodeerde account op:

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

Decimalen

Tokenbedragen zijn altijd in ruwe eenheden. 1000 tokens met 9 decimalen is 1_000_000_000_000n, niet 1000n.

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

Gebruik altijd BigInt voor tokenbedragen. JavaScript's Number verliest precisie boven 2^53.

Plugin Referentie

MethodeBeschrijving
client.token.instructions.createMint()Maak een nieuw SPL token mint aan
client.token.instructions.mintToATA()Mint tokens naar de ATA van een eigenaar (maakt ATA aan indien nodig)
client.token.instructions.transferToATA()Stuur tokens over naar de ATA van een ontvanger (maakt ATA aan indien nodig)
client.token.accounts.mint.fetch()Haal een mint account op en decodeer het
client.token.accounts.token.fetch()Haal een token account op en decodeer het

Veelvoorkomende Fouten

FoutOorzaakOplossing
custom program error: 0x24decimals komt niet overeen met de mintGebruik dezelfde decimalen waarde die je hebt doorgegeven aan createMint
AccountNotFoundAccount bestaat nog nietZorg dat de mint is aangemaakt voordat je tokens mint
InsufficientFundsNiet genoeg lamports voor rentStort meer SOL bij op het betaalaccount
OwnerMismatchVerkeerd programma is eigenaar van het accountControleer het programma-ID

Is this page helpful?

Inhoudsopgave

Pagina Bewerken
© 2026 Solana Foundation. Alle rechten voorbehouden.