5

I'm trying to add metadata for a fungible SPL token, which was done via token-list before. I have tried using strata protocol, but it does not show up on the list so cannot be done. Is there a simple js codeblock or CLI command to add the metadata easily?

1
  • On Strata just paste the mint address and it will work
    – Andres
    Commented Oct 2, 2022 at 19:22

2 Answers 2

2

You can use Metaboss to create an SPL-Token with Metadata or add Metadata to an existing token.

https://metaboss.rs/create.html

Metadata

Decorate an existing SPL token mint with metadata.

Usage

Specify the existing mint address and path to a metadata file that contains the name, symbol and uri fields in a JSON format.

metaboss create metadata -a <mint_address> -m <metadata_file>
2

To create metadata account on any SPL token you can create use version 2 of @metaplex-foundation/mpl-token-metadata@2.

Version 3 exists, but is significantly more complex.

npm i "@metaplex-foundation/mpl-token-metadata@2"
const createMetadataAccount = async (
  metadataPDA: PublicKey,
  mint: PublicKey,
  payer: PublicKey,
  metadataData: any
) => {
  const tx = new Transaction().add(
    createCreateMetadataAccountV2Instruction(
      {
        metadata: metadataPDA,
        mint: mint,
        mintAuthority: payer,
        payer: payer,
        updateAuthority: payer,
      },
      {
        createMetadataAccountArgsV2: {
          data: metadataData,
          isMutable: true,
        },
      }
    )
  );
  return tx;
};

To get the metadata PDA

const TOKEN_METADATA_PROGRAM_ID = new PublicKey(
  "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
);

const getMetadata = async (mint: PublicKey): Promise<PublicKey> => {
  return (
    await PublicKey.findProgramAddress(
      [
        Buffer.from("metadata"),
        TOKEN_METADATA_PROGRAM_ID.toBuffer(),
        mint.toBuffer(),
      ],
      TOKEN_METADATA_PROGRAM_ID
    )
  )[0];
};

The data part which is being passed in instruction looks like:

const metadataData = {
  name: "Test Token",
  symbol: "Test",
  uri: uri, // Arweave URI link which uses metaplex standard
  sellerFeeBasisPoints: 0,
  creators: null,
  collection: null,
  uses: null,
};

Creating the transaction and passing the parameters :

const addMetadata = (mintAddress: PublicKey, connection: Connection) => {
  const payer = Keypair.fromSecretKey(
    new Uint8Array(JSON.parse(fs.readFileSync(keypair, { encoding: "utf8" })))
  );
  const metadataAccount = await getMetadata(mintAddress);
  const tx = await createMetadataAccount(
    metadataAccount,
    mintAddress,
    payer,
    metadataData
  );
  const transactionId = await sendAndConfirmTransaction(connection, tx);
};
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.