Typescript
SPL токен з Web3.js

SPL токен з Web3.js

Інструкція переказу

Переміщує токени з одного рахунку на інший. Це базова операція для надсилання токенів між користувачами.

Перш ніж ми зможемо переказати будь-який токен, нам потрібно вже мати:

  • Ініціалізований рахунок Mint.
  • Вихідний рахунок Token або Associated Token, на якому вже є принаймні та сума, яку ми хочемо переказати.
  • Цільовий рахунок Token або Associated Token, який отримає токени з вихідного рахунку Token.

Кількість токенів, які ми переказуємо, "нормалізована" для десяткових знаків. Це означає, що якщо ми хочемо переказати 1 токен, який має 6 десяткових знаків, нам потрібно буде вказати 1e6 як суму

Raw Instruction

Використовуючи лише "сиру" інструкцію без будь-якої абстракції, переказ токена виглядатиме так:

ts
const destination = Keypair.generate();
 
const destinationTokenAccount = await getAssociatedTokenAddress(
    mint.publicKey,
    destination.publicKey,
);
 
// Create ATA creation instruction
const createAtaInstruction = createAssociatedTokenAccountIdempotentInstruction(
    keypair.publicKey, // payer
    destinationTokenAccount, // associated token account address
    destination.publicKey, // owner
    mint.publicKey, // mint
);
 
// Transfer tokens to ATA 
const transferInstruction = createTransferInstruction(
    sourceTokenAccount, // source token account pubkey
    destinationTokenAccount, // destination token account pubkey
    keypair.publicKey, // owner of the source token account
    1e6, // amount
);
 
const transaction = new Transaction().add(
    createAtaInstruction,
    transferInstruction,
);
 
const signature = await sendAndConfirmTransaction(connection, transaction, [keypair]);
 
console.log(`Token accounts created and tokens transferred! Check out your TX here: https://explorer.solana.com/tx/${signature}?cluster=devnet`);

Abstracted Instruction

Ось як ті самі інструкції виглядатимуть з абстракцією за допомогою інструкції transfer():

ts
const destination = Keypair.generate();
 
const destinationAta = await getOrCreateAssociatedTokenAccount(
    connection,
    keypair,
    mint,
    destination.publicKey
);
 
console.log(`This is your ATA: ${ata.address}!`)
  
let tx = await transfer(
    connection, // connection
    keypair, // payer
    sourceAta, // source token account
    destinationAta, // destination token account
    keypair.publicKey, // owner of the source token account
    1e6, // amount to transfer
);
 
console.log(`Succesfully Transferred!. Transaction Here: https://explorer.solana.com/tx/${tx}?cluster=devnet`)

Checked Instruction

Blueshift © 2025Commit: 6d01265