import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata"; import * as anchor from "@coral-xyz/anchor"; import { TOKEN_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/utils/token"; import { CreateToken } from "../target/types/create_token"; import { PublicKey, Keypair, SYSVAR_RENT_PUBKEY, SystemProgram, } from "@solana/web3.js"; describe("Create Tokens", () => { const provider = anchor.AnchorProvider.env(); anchor.setProvider(provider); const payer = provider.wallet as anchor.Wallet; const program = anchor.workspace.CreateToken as anchor.Program; const metadata = { name: "Solana Gold", symbol: "GOLDSOL", uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json", }; it("Create an SPL Token!", async () => { // Generate new keypair to use as address for mint account. const mintKeypair = new Keypair(); // Derive the PDA of the metadata account for the mint. const [metadataAddress] = PublicKey.findProgramAddressSync( [ Buffer.from("metadata"), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer(), ], TOKEN_METADATA_PROGRAM_ID ); // SPL Token default = 9 decimals const transactionSignature = await program.methods .createTokenMint(metadata.name, metadata.symbol, metadata.uri, 9) .accounts({ payer: payer.publicKey, metadataAccount: metadataAddress, mintAccount: mintKeypair.publicKey, rent: SYSVAR_RENT_PUBKEY, systemProgram: SystemProgram.programId, tokenProgram: TOKEN_PROGRAM_ID, tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, }) .signers([mintKeypair]) .rpc(); console.log("Success!"); console.log(` Mint Address: ${mintKeypair.publicKey}`); console.log(` Transaction Signature: ${transactionSignature}`); }); it("Create an NFT!", async () => { // Generate new keypair to use as address for mint account. const mintKeypair = new Keypair(); // Derive the PDA of the metadata account for the mint. const [metadataAddress] = PublicKey.findProgramAddressSync( [ Buffer.from("metadata"), TOKEN_METADATA_PROGRAM_ID.toBuffer(), mintKeypair.publicKey.toBuffer(), ], TOKEN_METADATA_PROGRAM_ID ); // NFT default = 0 decimals const transactionSignature = await program.methods .createTokenMint(metadata.name, metadata.symbol, metadata.uri, 0) .accounts({ payer: payer.publicKey, metadataAccount: metadataAddress, mintAccount: mintKeypair.publicKey, rent: SYSVAR_RENT_PUBKEY, systemProgram: SystemProgram.programId, tokenProgram: TOKEN_PROGRAM_ID, tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID, }) .signers([mintKeypair]) .rpc(); console.log("Success!"); console.log(` Mint Address: ${mintKeypair.publicKey}`); console.log(` Transaction Signature: ${transactionSignature}`); }); });