Solana mahdollistaa välittömät, globaalit token-siirrot alle 0,001 dollarin maksuilla. Rakensitpa rajat ylittäviä rahalähetyksiä, palkanlaskentaa tai treasury-toimintoja, perus-stablecoin-maksu toteutuu alle sekunnissa ja maksaa murto-osan sentistä.
Miten se toimii
Maksu siirtää stablecoineja lähettäjän token-tilin vastaanottajan token-tilille. Jos vastaanottaja saa tätä tokenia ensimmäistä kertaa, hänen token-tilinsä voidaan luoda osana samaa transaktiota.
Katso How Payments Work on Solana maksun peruskäsitteistä.
token2022Program()-lisäosa @solana-program/token-2022-paketista laajentaa
@solana/kit-asiakastasi
client.token2022-apuvälineellä. Sen transferToATA-metodi käsittelee
ATA-johdannan ja tapahtuman rakentamisen automaattisesti, mikä tekee siitä
ihanteellisen yksittäisten maksusiirtojen käyttöön.
Alla olevat vaiheet näyttävät peruskulun. Katso Demo täydellisestä ajettavasta koodista.
Luo token-apufunktio
Lisää token2022Program()-lisäosa asiakkaallesi
.use(token2022Program())-komennolla. Tämä paljastaa
client.token2022-objektin, jonka instructions tarjoavat metodeja yleisiin
token-operaatioihin.
Käytä token2022Program()-lisäosaa Token-2022-ohjelman omistamille minteille
tai tokenProgram()-lisäosaa @solana-program/token-paketista alkuperäisen
Token Program -ohjelman omistamille minteille.
Lähetä maksu
Käytä transferToATA()-metodia tokenien siirtämiseen lompakkojen välillä.
Metodi käsittelee:
- ATA-selvitys: Johtaa automaattisesti Associated Token Accounts (ATAs) -tilit lähettäjälle ja vastaanottajalle. Jos vastaanottajan ATA ei ole olemassa, tilin luomisohje lisätään automaattisesti samaan tapahtumaan.
- Tarkistetut määrät: Anna
amountperusyksiköissä yhdessä mintindecimals-arvon kanssa. Siirto tarkistetaan mintin desimaaleja vastaan ketjussa (esim. 250000 perusyksikköä -> 0,25 tokenia, jos mintillä on 6 desimaalia) - Tapahtuman rakentaminen:
sendTransaction()rakentaa, allekirjoittaa ja lähettää tapahtuman, palauttaen tuloksen, jonkacontext.signaturesisältää tapahtuman allekirjoituksen
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();
Tarkista saldot
Siirron valmistuttua lue token-saldot RPC:ltä. Johda kunkin lompakon ATA
findAssociatedTokenPda()-metodilla, sitten kutsu getTokenAccountBalance()
hakeaksesi kyseisen tilin saldon.
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?