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.
L'helper splToken di
@solana/client gestisce
automaticamente la derivazione ATA, la conversione dei decimali e la costruzione
della transazione. Questo è ideale per trasferimenti di pagamento singoli.
I passaggi seguenti mostrano il flusso principale. Consulta la Demo per il codice completo eseguibile.
Crea l'helper token
Configura l'helper splToken() chiamando client.splToken() con l'indirizzo
del mint. L'helper fornisce metodi per le operazioni token comuni.
Impostando tokenProgram: "auto" rileva automaticamente se il mint account è di
proprietà del programma Token o Token-2022.
Invia il pagamento
Usa sendTransfer() per trasferire token tra wallet. Il metodo gestisce:
- Risoluzione ATA: Deriva automaticamente gli Associated Token Account (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.
- Conversione decimali: Accetta importi di token e li converte automaticamente in unità base in base ai decimali del mint (es. 0,25 token -> 250000 unità base, se il mint ha 6 decimali)
- Costruzione transazione: Crea, firma e invia la transazione con l'istruzione di trasferimento
const client = createClient({endpoint: "http://localhost:8899",websocketEndpoint: "ws://localhost:8900",commitment: "confirmed"});const splToken = client.splToken({mint: mint.address,tokenProgram: "auto"});const signature = await splToken.sendTransfer({amount: 0.25,authority: sender,destinationOwner: recipient.address});
Verifica i saldi
Dopo il completamento del trasferimento, utilizza fetchBalance() per
verificare i saldi dei token. Questo metodo accetta un indirizzo wallet e deriva
automaticamente il corrispondente ATA per recuperare il saldo.
const client = createClient({endpoint: "http://localhost:8899",websocketEndpoint: "ws://localhost:8900",commitment: "confirmed"});const splToken = client.splToken({mint: mint.address,tokenProgram: "auto"});const signature = await splToken.sendTransfer({amount: 0.25,authority: sender,destinationOwner: recipient.address});const senderBalance = await splToken.fetchBalance(sender.address);const recipientBalance = await splToken.fetchBalance(recipient.address);
Demo
// Generate keypairs for sender and recipientconst sender = (await generateKeypair()).signer;const recipient = (await generateKeypair()).signer;console.log("Sender Address:", sender.address);console.log("Recipient Address:", recipient.address);// Demo Setup: Create client, mint account, token accounts, and fund with initial tokensconst { client, mint } = await demoSetup(sender, recipient);console.log("\nMint Address:", mint.address);// =============================================================================// Basic Token Payment Demo// =============================================================================// Create splToken helper for this mint using @solana/clientconst splToken = client.splToken({mint: mint.address,tokenProgram: "auto"});// Transfer tokens from sender to recipient (ATA and decimals handled automatically)const signature = await splToken.sendTransfer({amount: 0.25,authority: sender,destinationOwner: recipient.address});console.log("\n=== Token Payment Complete ===");console.log("Transaction Signature:", signature.toString());// Fetch final token account balances using splToken helperconst senderBalance = await splToken.fetchBalance(sender.address);const recipientBalance = await splToken.fetchBalance(recipient.address);console.log("\nSender Token Account Balance:", senderBalance);console.log("Recipient Token Account Balance:", recipientBalance);// =============================================================================// Demo Setup Helper Function// =============================================================================
Is this page helpful?