Token-Tests

Das Testen von Token-Logik auf Solana erfordert das Einrichten von Mints, token accounts und Authoritäten, bevor die eigentliche Transfer-Logik getestet werden kann. Das tokenProgram()-Plugin von @solana-program/token reduziert dieses Setup auf wenige Methodenaufrufe — und übernimmt die ATA-Erstellung automatisch.

Installation

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

Einen Mint erstellen

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 prägen

mintToATA gibt Tokens an das Associated Token Account eines Inhabers aus. Falls das ATA nicht existiert, wird es in derselben Transaktion erstellt.

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

Der Parameter decimals ist eine Sicherheitsprüfung — er muss exakt mit den Dezimalstellen des Mints übereinstimmen, sonst lehnt das Token Program die Transaktion mit Fehler 0x24 ab. Dies verhindert, dass versehentlich 1000-mal zu viele Tokens geprägt werden.

Tokens übertragen

transferToATA überträgt Tokens zwischen Nutzern. Das ATA des Empfängers wird bei Bedarf automatisch erstellt.

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

Der authority ist der Signer, dem die Quell-Tokens gehören. Das Plugin leitet sowohl das Quell- als auch das Ziel-ATA aus deren Adressen und dem Mint ab.

Guthaben überprüfen

Um Token-Salden abzurufen, leiten Sie die ATA-Adresse mit findAssociatedTokenPda ab und rufen Sie das dekodierte Konten ab:

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

Dezimalstellen

Token-Beträge werden immer in Roheinheiten angegeben. 1000 Token mit 9 Dezimalstellen sind 1_000_000_000_000n, nicht 1000n.

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

Verwenden Sie für Token-Beträge immer BigInt. JavaScripts Number verliert Präzision oberhalb von 2^53.

Plugin-Referenz

MethodeBeschreibung
client.token.instructions.createMint()Neues SPL-Token-Mint erstellen
client.token.instructions.mintToATA()Token an die ATA eines Inhabers minten (erstellt ATA bei Bedarf)
client.token.instructions.transferToATA()Token an die ATA eines Empfängers übertragen (erstellt ATA bei Bedarf)
client.token.accounts.mint.fetch()Ein mint account abrufen und dekodieren
client.token.accounts.token.fetch()Ein token account abrufen und dekodieren

Häufige Fehler

FehlerUrsacheLösung
custom program error: 0x24decimals stimmt nicht mit dem Mint übereinVerwenden Sie denselben Dezimalstellenwert, den Sie an createMint übergeben haben
AccountNotFoundKonten existiert noch nichtStellen Sie sicher, dass der Mint vor dem Minten erstellt wurde
InsufficientFundsNicht genügend lamport für rentMehr SOL an den Zahler airdroppen
OwnerMismatchFalsches Programm besitzt das KontenProgramm-ID prüfen

Is this page helpful?

Inhaltsverzeichnis

Seite bearbeiten
© 2026 Solana Foundation. Alle Rechte vorbehalten.