Burn Tokens

Burn 1 or more SPL tokens

New Way

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

const TOKEN = address("AJ2zpjTy9mSCGNo9sgsRohcVS3EwTNnBQtWwqmoLHq87");
const TOKEN_ACCOUNT = address("HM5ZgL6J9fRsrM8fj5dbJtVVq7Bz8J4eW48Caa1hT337");
const AMOUNT = 1_000_000_000;

const burnToken = async () => {
    try {

        const rpc = createSolanaRpc('http://127.0.0.1:8899');
        const rpcSubscriptions = createSolanaRpcSubscriptions('ws://127.0.0.1:8900');
        const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions });

        const payer = await createKeyPairSignerFromBytes(new Uint8Array(wallet));

        const instructions = [
            getBurnCheckedInstruction({
                account: TOKEN_ACCOUNT,
                mint: TOKEN,
                authority: payer.address,
                amount: AMOUNT,
                decimals: 9,
            }, {
                programAddress: TOKEN_PROGRAM_ADDRESS
            })
        ];

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

        const transaction = pipe(
            createTransactionMessage({ version: 0 }),
            (tx) => setTransactionMessageFeePayerSigner(payer, tx),
            (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),
            (tx) => appendTransactionMessageInstructions(instructions, tx)
        );

        const signedTransaction = await signTransactionMessageWithSigners(transaction);

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

    } catch (error) {
        console.error(error);
    }
}

burnToken();

Old Way