Solana permite transferencias de tokens instantáneas y globales con tarifas inferiores a $0.001. Ya sea que estés construyendo remesas transfronterizas, desembolsos de nómina u operaciones de tesorería, un pago básico de stablecoin se liquida en menos de un segundo y cuesta una fracción de centavo.
Cómo funciona
Un pago mueve stablecoins desde la cuenta de token del remitente a la cuenta de token del destinatario. Si el destinatario está recibiendo este token por primera vez, su cuenta de token puede crearse como parte de la misma transacción.
Consulta Cómo funcionan los pagos en Solana para conocer los conceptos básicos de pagos.
El helper splToken de
@solana/client maneja la derivación
de ATA, conversión de decimales y construcción de transacciones automáticamente.
Esto es ideal para transferencias de pago únicas.
Los pasos a continuación muestran el flujo principal. Consulta la Demo para ver el código completo ejecutable.
Crear el helper de token
Configura el helper splToken() llamando a client.splToken() con la dirección
de mint. El helper proporciona métodos para operaciones comunes de tokens.
Establecer tokenProgram: "auto" detecta automáticamente si la cuenta de mint
es propiedad del programa Token o Token-2022.
Enviar el pago
Usa sendTransfer() para transferir tokens entre billeteras. El método maneja:
- Resolución de ATA: Deriva automáticamente las cuentas de token asociadas (ATA) para el remitente y el destinatario. Si la ATA del destinatario no existe, la instrucción para crear la cuenta se agrega automáticamente a la misma transacción.
- Conversión de decimales: Acepta cantidades de tokens y las convierte automáticamente a unidades base según los decimales del mint (por ejemplo, 0.25 tokens -> 250000 unidades base, si el mint tiene 6 decimales)
- Construcción de transacción: Crea, firma y envía la transacción con la instrucción de transferencia
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});
Verificar saldos
Una vez completada la transferencia, utiliza fetchBalance() para verificar los
saldos de tokens. Este método toma una dirección de billetera y deriva
automáticamente la ATA correspondiente para obtener el 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?