Solana, 0,001 doların altında ücretlerle anında, küresel token transferleri sağlar. İster sınır ötesi havale, ister bordro ödemeleri veya hazine operasyonları oluşturuyor olun, temel bir stablecoin ödemesi bir saniyenin altında gerçekleşir ve bir sentin çok küçük bir kısmına mal olur.
Nasıl çalışır
Bir ödeme, gönderenin token hesabından alıcının token hesabına stablecoin'leri taşır. Alıcı bu token'ı ilk kez alıyorsa, token hesabı aynı işlemin bir parçası olarak oluşturulabilir.
Temel ödeme kavramları için Solana'da ödemeler nasıl çalışır bölümüne bakın.
@solana-program/token-2022'dan gelen token2022Program() eklentisi,
@solana/kit istemcinizi bir client.token2022
yardımcısıyla genişletir. transferToATA metodu, ATA türetme ve işlem oluşturma
süreçlerini otomatik olarak yönetir; bu da tek seferlik ödeme transferleri için
idealdir.
Aşağıdaki adımlar temel akışı gösterir. Tam çalıştırılabilir kod için Demo bölümüne bakın.
Token yardımcısını oluşturun
.use(token2022Program()) kullanarak token2022Program() eklentisini
istemcinize ekleyin. Bu işlem, yaygın token işlemleri için metotlar sunan
instructions'e sahip client.token2022'ı kullanıma açar.
Token-2022 programına ait mintler için token2022Program() kullanın; orijinal
Token Program'a ait mintler için ise @solana-program/token'dan gelen
tokenProgram()'ı kullanın.
Ödemeyi gönderin
Cüzdanlar arasında token transferi yapmak için transferToATA() kullanın. Metot
şunları yönetir:
- ATA Çözümleme: Gönderici ve alıcı için Associated Token Account'ları (ATA) otomatik olarak türetir. Alıcının associated token account'ı mevcut değilse, hesabı oluşturmak için gereken talimat aynı işleme otomatik olarak eklenir.
- Kontrollü Miktarlar: Temel birimler cinsinden
amountile birlikte minting'indecimalsdeğerini girin. Transfer, zincir üzerinde minting'in ondalık basamaklarına göre kontrol edilir (ör. 250000 temel birim -> mint 6 ondalık basamağa sahipse 0,25 token) - İşlem Oluşturma:
sendTransaction()işlemi oluşturur, imzalar ve gönderir;context.signaturealanı işlem imzasını içeren bir sonuçla çözümlenir
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();
Bakiyeleri doğrula
Transfer tamamlandıktan sonra RPC'den token bakiyelerini okuyun.
findAssociatedTokenPda() ile her cüzdanın ATA'sını türetin, ardından o hesabın
bakiyesini almak için getTokenAccountBalance()'i çağırın.
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();
Demo
// 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?