1

I've deployed the example: https://github.com/solana-developers/program-examples/blob/main/tokens/create-token/anchor/programs/create-token/src/lib.rs

And been trying to interact with the contract to mint an NFT but failed. Any script example for reference? Thanks.

script I'm using now:

const anchor = require('@project-serum/anchor');
const { TOKEN_PROGRAM_ID, getAssociatedTokenAddress } = require('@solana/spl-token');
const fs = require('fs');
const path = require('path');

// Path to the existing keypair file
const keypairPath = '/Users/.config/solana/id.json';  // Replace with your actual path

// Load the keypair from the file
const secretKey = Uint8Array.from(JSON.parse(fs.readFileSync(keypairPath, 'utf-8')));
const payerKeypair = anchor.web3.Keypair.fromSecretKey(secretKey);

(async () => {
  try {
    // Set up provider (connected to devnet)
    const connection = new anchor.web3.Connection("https://api.devnet.solana.com", {
      commitment: "confirmed"
    });
    const provider = new anchor.AnchorProvider(connection, new anchor.Wallet(payerKeypair), {});
    anchor.setProvider(provider);

    // Load the program ID
    const programId = new anchor.web3.PublicKey('8tKucvNwQt4jnMgQgZH26SxiV39XeHkjG1wDHzSCZi4H');

    // Load the IDL from local file
    const idlPath = path.resolve(__dirname, 'target/idl/create_token.json');
    const idl = JSON.parse(fs.readFileSync(idlPath, 'utf8'));

    // Load the program
    const program = new anchor.Program(idl, programId, provider);

    // Create a new mint keypair
    const mintKeypair = anchor.web3.Keypair.generate();
    console.log(`Mint Address: ${mintKeypair.publicKey.toBase58()}`);

    // Derive the associated token account for the mint
    const associatedTokenAccount = await getAssociatedTokenAddress(
      mintKeypair.publicKey,
      payerKeypair.publicKey
    );
    console.log(`Associated Token Account: ${associatedTokenAccount.toBase58()}`);

    // Create metadata PDA (Program Derived Address) for the token
    const [metadataAccount] = await anchor.web3.PublicKey.findProgramAddress(
      [
        Buffer.from("metadata"),
        new anchor.web3.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s").toBuffer(),
        mintKeypair.publicKey.toBuffer(),
      ],
      new anchor.web3.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s") // Metadata program ID
    );
    console.log(`Metadata Account Address: ${metadataAccount.toBase58()}`);

    // Specify accounts for the transaction
    const tx = await program.methods.createTokenMint(
      9, // Token decimals
      "ExampleToken", // Token name
      "EXT", // Token symbol
      "https://example.com/token-metadata.json" // Token URI
    )
    .accounts({
      payer: payerKeypair.publicKey,
      metadata_account: metadataAccount,
      mint_account: mintKeypair.publicKey,
      token_metadata_program: new anchor.web3.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),
      token_program: TOKEN_PROGRAM_ID,
      system_program: anchor.web3.SystemProgram.programId,
      rent: anchor.web3.SYSVAR_RENT_PUBKEY
    })
    .signers([payerKeypair, mintKeypair]) // Mint account and payer must sign
    .rpc();

    console.log('Token minted successfully! Transaction ID:', tx);
  } catch (error) {
    console.error('Error minting token:', error);
  }
})();

4
  • what versions of the CLI suite are you running and also what versions of the crates are you using? Could you also add the error you are encountering?
    – Jimii
    Commented Sep 26 at 7:14
  • anchor-cli 0.30.1, error: Error minting token: TypeError: Cannot read properties of undefined (reading 'array')
    – mononoke
    Commented Sep 26 at 7:26
  • everything looks okay from going through it. Could you update your anchor package to use one that matches the CLI @coral-xyz/anchor - 0.30.1
    – Jimii
    Commented Sep 26 at 7:44
  • still getting the same error after updating. were you able to run the script successfully and mint?
    – mononoke
    Commented Sep 26 at 7:59

0

Your Answer

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

Browse other questions tagged or ask your own question.