轉帳指令
將代幣從一個帳戶轉移到另一個帳戶。這是用戶之間傳送代幣的基本操作。
在我們可以轉移任何代幣之前,我們需要已經具備以下條件:
已初始化的
Mint帳戶。一個來源
Token帳戶或Associated Token帳戶,該帳戶已經至少擁有我們想要轉移的數量。一個目標
Token帳戶或Associated Token帳戶,該帳戶將從來源Token帳戶接收代幣。
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: ${destinationAta.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`)