Pagamento base

Solana consente trasferimenti di token istantanei e globali con commissioni inferiori a $0,001. Che tu stia costruendo rimesse transfrontaliere, erogazioni di stipendi o operazioni di tesoreria, un pagamento base in stablecoin si completa in meno di un secondo e costa una frazione di centesimo.

Come funziona

Un pagamento sposta stablecoin dal token account del mittente al token account del destinatario. Se il destinatario riceve questo token per la prima volta, il suo token account può essere creato come parte della stessa transazione.

Consulta Come funzionano i pagamenti su Solana per i concetti fondamentali sui pagamenti.

Il plugin token2022Program() di @solana-program/token-2022 estende il tuo client @solana/kit con un helper client.token2022. Il suo metodo transferToATA gestisce automaticamente la derivazione ATA e la costruzione delle transazioni, il che lo rende ideale per i trasferimenti di pagamento singoli.

I passaggi seguenti mostrano il flusso principale. Consulta la Demo per il codice completo eseguibile.

Crea l'helper token

Aggiungi il plugin token2022Program() al tuo client con .use(token2022Program()). Questo espone client.token2022, le cui instructions forniscono metodi per le operazioni comuni sui token.

Usa token2022Program() per i mint di proprietà del programma Token-2022, oppure tokenProgram() da @solana-program/token per i mint di proprietà del Token program originale.

Invia il pagamento

Usa transferToATA() per trasferire token tra wallet. Il metodo gestisce:

  • Risoluzione ATA: Deriva automaticamente gli Associated Token Accounts (ATA) per il mittente e il destinatario. Se l'ATA del destinatario non esiste, l'istruzione per creare l'account viene aggiunta automaticamente alla stessa transazione.
  • Importi verificati: Passa amount in unità base insieme ai decimals del mint. Il trasferimento viene verificato rispetto ai decimali del mint on-chain (es. 250000 unità base -> 0,25 token, se il mint ha 6 decimali)
  • Costruzione della transazione: sendTransaction() costruisce, firma e invia la transazione, restituendo un risultato il cui context.signature contiene la firma della transazione
Basic Payment
const client = createClient()
.use(signer(sender))
.use(solanaLocalRpc())
.use(token2022Program());
const result = await client.token2022.instructions
.transferToATA({
mint: mint.address,
authority: sender,
recipient: recipient.address,
amount: 250_000n,
decimals: 6
})
.sendTransaction();

Verifica i saldi

Al termine del trasferimento, leggi i saldi dei token dall'RPC. Deriva l'ATA di ciascun wallet con findAssociatedTokenPda(), quindi chiama getTokenAccountBalance() per recuperare il saldo di quell'account.

Basic Payment
const client = createClient()
.use(signer(sender))
.use(solanaLocalRpc())
.use(token2022Program());
const result = await client.token2022.instructions
.transferToATA({
mint: mint.address,
authority: sender,
recipient: recipient.address,
amount: 250_000n,
decimals: 6
})
.sendTransaction();
const [senderAta] = await findAssociatedTokenPda({
mint: mint.address,
owner: sender.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});
const [recipientAta] = await findAssociatedTokenPda({
mint: mint.address,
owner: recipient.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});
const senderBalance = await client.rpc.getTokenAccountBalance(senderAta).send();
const recipientBalance = await client.rpc
.getTokenAccountBalance(recipientAta)
.send();

Crea l'helper token

Aggiungi il plugin token2022Program() al tuo client con .use(token2022Program()). Questo espone client.token2022, le cui instructions forniscono metodi per le operazioni comuni sui token.

Usa token2022Program() per i mint di proprietà del programma Token-2022, oppure tokenProgram() da @solana-program/token per i mint di proprietà del Token program originale.

Invia il pagamento

Usa transferToATA() per trasferire token tra wallet. Il metodo gestisce:

  • Risoluzione ATA: Deriva automaticamente gli Associated Token Accounts (ATA) per il mittente e il destinatario. Se l'ATA del destinatario non esiste, l'istruzione per creare l'account viene aggiunta automaticamente alla stessa transazione.
  • Importi verificati: Passa amount in unità base insieme ai decimals del mint. Il trasferimento viene verificato rispetto ai decimali del mint on-chain (es. 250000 unità base -> 0,25 token, se il mint ha 6 decimali)
  • Costruzione della transazione: sendTransaction() costruisce, firma e invia la transazione, restituendo un risultato il cui context.signature contiene la firma della transazione

Verifica i saldi

Al termine del trasferimento, leggi i saldi dei token dall'RPC. Deriva l'ATA di ciascun wallet con findAssociatedTokenPda(), quindi chiama getTokenAccountBalance() per recuperare il saldo di quell'account.

Basic Payment
const client = createClient()
.use(signer(sender))
.use(solanaLocalRpc())
.use(token2022Program());

Demo

Demo
// Generate signers for sender and recipient
const sender = await generateKeyPairSigner();
const recipient = await generateKeyPairSigner();
console.log("Sender Address:", sender.address);
console.log("Recipient Address:", recipient.address);
// Demo Setup: Create client, mint account, and fund the sender with initial tokens
const { client, mint } = await demoSetup(sender);
console.log("\nMint Address:", mint.address);
// =============================================================================
// Basic Token Payment Demo
// =============================================================================
// Transfer tokens from sender to recipient. The source and destination ATAs are
// derived automatically, and the recipient's ATA is created if it does not exist.
const result = await client.token2022.instructions
.transferToATA({
mint: mint.address,
authority: sender,
recipient: recipient.address,
amount: 250_000n, // 0.25 tokens (base units for a mint with 6 decimals)
decimals: 6
})
.sendTransaction();
console.log("\n=== Token Payment Complete ===");
console.log("Transaction Signature:", result.context.signature);
// Derive the sender and recipient ATAs to read their balances
const [senderAta] = await findAssociatedTokenPda({
mint: mint.address,
owner: sender.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});
const [recipientAta] = await findAssociatedTokenPda({
mint: mint.address,
owner: recipient.address,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS
});
// Fetch final token account balances via RPC
const senderBalance = await client.rpc.getTokenAccountBalance(senderAta).send();
const recipientBalance = await client.rpc
.getTokenAccountBalance(recipientAta)
.send();
console.log(
"\nSender Token Account Balance:",
senderBalance.value.uiAmountString
);
console.log(
"Recipient Token Account Balance:",
recipientBalance.value.uiAmountString
);
// =============================================================================
// Demo Setup Helper Function
// =============================================================================
Console
Click to execute the code.

Is this page helpful?

Indice dei contenuti

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