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);
}
})();
@coral-xyz/anchor
- 0.30.1