Test dei Token

Testare la logica dei token su Solana significa configurare mint, token account e autorità prima di poter testare la logica di trasferimento che interessa davvero. Il plugin tokenProgram() di @solana-program/token riduce quella configurazione a poche chiamate di metodo — e gestisce automaticamente la creazione degli ATA.

Installazione

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

Crea un 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

Emetti Token

mintToATA emette token sull'associated token account del proprietario. Se l'ATA non esiste, viene creato nella stessa transazione.

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

Il parametro decimals è un controllo di sicurezza — deve corrispondere esattamente ai decimali del mint, altrimenti il Token Program rifiuta la transazione con l'errore 0x24. Questo evita di emettere accidentalmente 1000 volte più token del previsto.

Trasferisci Token

transferToATA sposta token tra utenti. L'ATA del destinatario viene creato automaticamente se necessario.

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

Il authority è il firmatario che possiede i token sorgente. Il plugin deriva sia l'ATA sorgente che quello di destinazione dai loro indirizzi e dal mint.

Verifica dei Saldi

Per leggere i saldi dei token, deriva l'indirizzo ATA con findAssociatedTokenPda e recupera l'account decodificato:

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

Decimali

Gli importi dei token sono sempre in unità grezze. 1000 token con 9 decimali corrisponde a 1_000_000_000_000n, non 1000n.

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

Usa sempre BigInt per gli importi dei token. Il tipo Number di JavaScript perde precisione oltre 2^53.

Riferimento Plugin

MetodoDescrizione
client.token.instructions.createMint()Crea un nuovo mint SPL token
client.token.instructions.mintToATA()Esegue il mint di token sull'ATA del proprietario (crea l'ATA se necessario)
client.token.instructions.transferToATA()Trasferisce token all'ATA del destinatario (crea l'ATA se necessario)
client.token.accounts.mint.fetch()Recupera e decodifica un mint account
client.token.accounts.token.fetch()Recupera e decodifica un token account

Errori Comuni

ErroreCausaSoluzione
custom program error: 0x24decimals non corrisponde al mintUsa lo stesso valore decimals passato a createMint
AccountNotFoundL'account non esiste ancoraAssicurati che il mint sia creato prima di eseguire il minting
InsufficientFundslamport insufficienti per il rentEsegui un airdrop di SOL aggiuntivo al pagante
OwnerMismatchIl programma proprietario dell'account non è correttoVerifica il program ID

Is this page helpful?

Indice dei contenuti

Modifica pagina
© 2026 Solana Foundation. Tutti i diritti riservati.