Skip to main content
Send any SPL token by providing the token’s mint address and decimals.
import { useSolana } from "@phantom/react-sdk";
import { Connection, PublicKey, VersionedTransaction, TransactionMessage } from "@solana/web3.js";
import { getAssociatedTokenAddress, createAssociatedTokenAccountInstruction, createTransferInstruction, getAccount } from "@solana/spl-token";

function SendToken() {
  const { solana } = useSolana();

  const send = async (
    to: string,
    amount: number,
    mintAddress: string,
    decimals: number
  ) => {
    const connection = new Connection("https://api.mainnet-beta.solana.com");
    const from = new PublicKey(await solana.getPublicKey());
    const recipient = new PublicKey(to);
    const mint = new PublicKey(mintAddress);

    const fromATA = await getAssociatedTokenAddress(mint, from);
    const toATA = await getAssociatedTokenAddress(mint, recipient);

    const instructions = [];

    // Create recipient's token account if needed
    try {
      await getAccount(connection, toATA);
    } catch {
      instructions.push(
        createAssociatedTokenAccountInstruction(from, toATA, recipient, mint)
      );
    }

    instructions.push(
      createTransferInstruction(fromATA, toATA, from, amount * 10 ** decimals)
    );

    const { blockhash } = await connection.getLatestBlockhash();
    const transaction = new VersionedTransaction(
      new TransactionMessage({
        payerKey: from,
        recentBlockhash: blockhash,
        instructions,
      }).compileToV0Message()
    );

    const { signature } = await solana.signAndSendTransaction(transaction);
    return signature;
  };

  return (
    <button onClick={() => send(
      "RECIPIENT_ADDRESS",
      100,
      "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", // BONK
      5
    )}>
      Send 100 BONK
    </button>
  );
}
TokenMint AddressDecimals
USDCEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v6
USDTEs9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB6
BONKDezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB2635
JUPJUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN6
WIFEKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm6