Typescript
使用Web3.js的SPL代幣

使用Web3.js的SPL代幣

轉帳指令

將代幣從一個帳戶轉移到另一個帳戶。這是用戶之間傳送代幣的基本操作。

在我們可以轉移任何代幣之前,我們需要已經具備以下條件:

  • 已初始化的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: ${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`)

Checked Instruction

Blueshift © 2025Commit: e573eab