Transfer Tokens

Send Solana SPL tokens using Solana Web3 JS

New Way

import { address, appendTransactionMessageInstructions, createSolanaRpc, createSolanaRpcSubscriptions, createTransactionMessage, getSignatureFromTransaction, lamports, pipe, sendAndConfirmTransactionFactory, setTransactionMessageFeePayerSigner, setTransactionMessageLifetimeUsingBlockhash, signTransactionMessageWithSigners, createKeyPairSignerFromBytes } from "@solana/web3.js";
import { getTransferInstruction } from "@solana-program/token";
import wallet1 from './wallet1.json';
import wallet2 from './wallet2.json';

const WALLET1 = 'Acbc1PgicEHLPWZJBn9wQKueFFeXXzL7da2vqWakWWfW';
const WALLET2 = '5N1f1eyAocyfEf6SDfRzrECeMejDxQHAets83qJtkRAd'
const TOKEN = 'DqKJ7P8tpAQ6j4XfCegX8mJ5eUDuoUnnsnCPgBcYy5xo'

const TOKEN_ACCOUNT1 = address("3PVXQ7it7ecGTQhuUefM1sLGVUM8DwnCgVLbpm3ZCtxk");
const TOKEN_ACCOUNT2 = address("3CCpBnCv3PbQQTuSGGWGi8Q171kpChgA4qg5r5Uncfwf");

const rpc = createSolanaRpc(`http://localhost:8899`);
const rpcSubscriptions = createSolanaRpcSubscriptions(`ws://localhost:8900`);

const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions });

const transferToken = async () => {

    const keypairSigner = await createKeyPairSignerFromBytes(new Uint8Array(wallet1));

    const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();

    const transaction = pipe(
        createTransactionMessage({ version: 0 }),
        m => setTransactionMessageFeePayerSigner(keypairSigner, m),
        m => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, m),
        m => appendTransactionMessageInstructions(
            [
                getTransferInstruction({
                    source: TOKEN_ACCOUNT1,
                    destination: TOKEN_ACCOUNT2,
                    amount: 1n,
                    authority: keypairSigner,
                }),
            ],
            m,
        ),
    );

    const signedTransaction = await signTransactionMessageWithSigners(transaction);

    try {
        await sendAndConfirmTransaction(signedTransaction, {
            commitment: 'processed',
            skipPreflight: true
        });
        const signature = getSignatureFromTransaction(signedTransaction);
        console.log(`Transferred: ${TOKEN_ACCOUNT2} Signature: ${signature}`);
    } catch (error) {
        console.error('Transaction failed:', error);
        throw error;
    }

};

transferToken();

Old Way