Create Metadata

Create and add metadata for a Solana SPL token

import { createV1, findMetadataPda, mplTokenMetadata, TokenStandard } from "@metaplex-foundation/mpl-token-metadata";
import { mplToolbox } from "@metaplex-foundation/mpl-toolbox";
import { percentAmount, publicKey, keypairIdentity } from "@metaplex-foundation/umi";
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
import { base58 } from "@metaplex-foundation/umi/serializers";

import walletSecret from './wallet.json' assert { type: "json" };
const secretKey = new Uint8Array(walletSecret);

const umi = createUmi("https://api.devnet.solana.com")
    .use(mplTokenMetadata())
    .use(mplToolbox());

const keypair = umi.eddsa.createKeypairFromSecretKey(secretKey);
umi.use(keypairIdentity(keypair));

const tokenMetadata = {
    name: "Supa Token",
    symbol: "SUPA",
    uri: "https://api.supapump.fun/a78a3ff1-f7d6-43f0-8cff-b8993e7ec2f1",
};

const mint = publicKey("FE1SNALhVFzk7AG3W7CfbdLyU6RumPkGFte7z4HXUGbG");

async function main() {
    try {
        const metadataAccountAddress = await findMetadataPda(umi, {
            mint: mint,
        });

        console.log("Metadata Account PDA:", metadataAccountAddress.toString());

        const tx = await createV1(umi, {
            mint,
            authority: umi.identity,
            payer: umi.identity,
            updateAuthority: umi.identity,
            name: tokenMetadata.name,
            symbol: tokenMetadata.symbol,
            uri: tokenMetadata.uri,
            sellerFeeBasisPoints: percentAmount(5.5), // 5.5%
            tokenStandard: TokenStandard.Fungible,
        }).sendAndConfirm(umi);

        const txSig = base58.deserialize(tx.signature)[0];
        console.log(`Transaction successful! Signature: ${txSig}`);
    } catch (error) {
        console.error("Error adding metadata:", error);
    }
}

main();

These instructions are adapted from Metaplex: https://developers.metaplex.com/guides/javascript/how-to-add-metadata-to-spl-tokens