A Solana permite transferências instantâneas e globais de tokens com taxas inferiores a $0,001. Seja você construindo remessas internacionais, desembolsos de folha de pagamento ou operações de tesouraria, um pagamento básico de stablecoin é liquidado em menos de um segundo e custa uma fração de centavo.
Como funciona
Um pagamento move stablecoins da token account do remetente para a token account do destinatário. Se o destinatário estiver recebendo este token pela primeira vez, sua token account pode ser criada como parte da mesma transação.
Consulte Como funcionam os pagamentos na Solana para conceitos fundamentais de pagamento.
O plugin token2022Program() de @solana-program/token-2022 estende o seu
cliente @solana/kit com um helper client.token2022.
O seu método transferToATA trata da derivação de ATA e da construção de
transações automaticamente, sendo ideal para transferências de pagamento únicas.
As etapas abaixo mostram o fluxo principal. Consulte a Demonstração para código executável completo.
Criar o auxiliar de token
Adicione o plugin token2022Program() ao seu cliente com
.use(token2022Program()). Isto expõe client.token2022, cujos instructions
fornecem métodos para operações comuns de tokens.
Use token2022Program() para mints pertencentes ao programa Token-2022, ou
tokenProgram() de @solana-program/token para mints pertencentes ao Token
Program original.
Enviar o pagamento
Use transferToATA() para transferir tokens entre carteiras. O método trata de:
- Resolução de ATA: Deriva automaticamente Associated Token Accounts (ATAs) para o remetente e o destinatário. Se a ATA do destinatário não existir, a instrução para criar a conta é adicionada automaticamente à mesma transação.
- Valores Verificados: Passe
amountem unidades base juntamente com osdecimalsdo mint. A transferência é verificada em relação às casas decimais do mint on-chain (ex.: 250000 unidades base -> 0,25 tokens, se o mint tiver 6 casas decimais) - Construção de Transações:
sendTransaction()constrói, assina e envia a transação, resolvendo para um resultado cujocontext.signaturecontém a assinatura da transação
Verificar saldos
Após a conclusão da transferência, leia os saldos de tokens a partir do RPC.
Derive a ATA de cada carteira com findAssociatedTokenPda(), e depois chame
getTokenAccountBalance() para obter o saldo dessa conta.
Demonstração
// Generate signers for sender and recipientconst 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 tokensconst { 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 balancesconst [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 RPCconst 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// =============================================================================
Is this page helpful?