Quick Start
Transfer Tokens

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