Mint Tokens

Mint tokens of an existing token

New Way

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

import walletSecret from '../wallet.json';

async function mintTokens() {
    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(walletSecret));

    const mint = address('ERrUbrQcDf6EzChT8gTonvsKTiRrTG9YVhMDJhruHcjP'); // make sure its already created

    const [ata] = await findAssociatedTokenPda({
        mint: mint,
        owner: payer.address,
        tokenProgram: TOKEN_PROGRAM_ADDRESS,
    });

    const instructions = [
        getMintToInstruction({
            mint: mint,
            token: ata,
            amount: BigInt(1_000_000_000),
            mintAuthority: payer.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 minted to: ${ata} Signature: ${signature}`);
    } catch (e) {
        console.error('Transaction failed:', e);
        throw e;
    }
}

mintTokens();

Old Way

import { Connection, Keypair, PublicKey } from '@solana/web3.js';
import { mintTo } from '@solana/spl-token';
import walletSecret from './wallet.json' assert { type: "json" };

const mintTokens = async () => {
    try {
        const wallet = Keypair.fromSecretKey(new Uint8Array(walletSecret));
        const connection = new Connection('http://127.0.0.1:8899', 'confirmed');

        const TOKEN = new PublicKey('4RWxatXMBct4NQxVG39SXenRbTzSsXvAYBNm8WTXEcxa');
        const TOKEN_ACCOUNT = new PublicKey('4dbNk9diMY8R4sKQEjhvotvsKCSUPEUG2m4QqWvcjpVj');

        await mintTo(
            connection,
            wallet,
            TOKEN,
            TOKEN_ACCOUNT,
            wallet.publicKey,
            10000 // number of tokens - remember to factor in the decimals
        );
        console.log(`Minted 10000 tokens to ${TOKEN_ACCOUNT.toBase58()}`);

        return {
            mintAddress: TOKEN.toBase58(),
            tokenAccountAddress: TOKEN_ACCOUNT.toBase58()
        };

    } catch (error) {
        console.error('Token creation failed:', error);
        throw error;
    }
};

mintTokens();