Transfer Tokens
- show how to transfer tokens
How to Transfer Tokens between Token Accounts
https://beta.solpg.io/660ced84cffcf4b13384d013
Starter Code
- open solana playground
- starter code
client.ts
import {
Connection,
Transaction,
clusterApiUrl,
sendAndConfirmTransaction,
Keypair,
} from "@solana/web3.js";
import {
createMint,
TOKEN_2022_PROGRAM_ID,
getOrCreateAssociatedTokenAccount,
mintTo,
createTransferInstruction,
} from "@solana/spl-token";
const wallet = pg.wallet;
const connection = new Connection(clusterApiUrl("devnet"), "confirmed");
// Create new Mint Account
const mint = await createMint(
connection,
wallet.keypair, // payer
wallet.publicKey, // mint authority
wallet.publicKey, // freeze authority
2, // decimals
new Keypair(), // keypair for mint account
null,
TOKEN_2022_PROGRAM_ID,
);
// Create token account for sender
const sourceTokenAccount = await getOrCreateAssociatedTokenAccount(
connection,
wallet.keypair, // payer
mint, // mint address
wallet.publicKey, // token account owner
false,
"confirmed",
null,
TOKEN_2022_PROGRAM_ID,
);
// Create token account for recipient
const destinationTokenAccount = await getOrCreateAssociatedTokenAccount(
connection,
wallet.keypair, // payer
mint,
new Keypair().publicKey, // token account owner
false,
"confirmed",
null,
TOKEN_2022_PROGRAM_ID,
);
// Mint tokens to sourceTokenAccount
await mintTo(
connection,
wallet.keypair, // payer
mint, // mint address
sourceTokenAccount.address, // destination
wallet.publicKey, // mint authority
100, // amount
[],
{
commitment: "confirmed",
},
TOKEN_2022_PROGRAM_ID,
);
Build Token Transfer Instruction
client.ts
// Create instruction to transfer tokens
const instruction = createTransferInstruction(
sourceTokenAccount.address, // transfer from
destinationTokenAccount.address, // transfer to
wallet.publicKey, // source token account owner
100, // amount
[],
TOKEN_2022_PROGRAM_ID,
);
Add Instruction to Transaction
client.ts
const transaction = new Transaction().add(instruction);
Send Transaction
client.ts
const transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[
wallet.keypair, // payer, owner
],
);
client.ts
console.log(
"\nTransaction Signature:",
`https://explorer.solana.com/tx/${transactionSignature}?cluster=devnet`,
);
Run script
Terminal
run
Output
Running client...
client.ts:
Transaction Signature: https://explorer.solana.com/tx/4gxedNShayeu9EVp29qBv6kypjCxEX14s46BFE85XTmt3YiPz2uU37Whptt27CY5HvRvRUCBxMXTFSQeeFAKdNy1?cluster=devnet