test.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID } from "@metaplex-foundation/mpl-token-metadata";
  2. import * as anchor from "@coral-xyz/anchor";
  3. import { TokenMinter } from "../target/types/token_minter";
  4. import { PublicKey, SYSVAR_RENT_PUBKEY, SystemProgram } from "@solana/web3.js";
  5. import {
  6. getAssociatedTokenAddressSync,
  7. ASSOCIATED_TOKEN_PROGRAM_ID,
  8. TOKEN_PROGRAM_ID,
  9. } from "@solana/spl-token";
  10. describe("NFT Minter", () => {
  11. const provider = anchor.AnchorProvider.env();
  12. anchor.setProvider(provider);
  13. const payer = provider.wallet as anchor.Wallet;
  14. const program = anchor.workspace.TokenMinter as anchor.Program<TokenMinter>;
  15. // Derive the PDA to use as mint account address.
  16. // This same PDA is also used as the mint authority.
  17. const [mintPDA] = PublicKey.findProgramAddressSync(
  18. [Buffer.from("mint")],
  19. program.programId
  20. );
  21. const metadata = {
  22. name: "Solana Gold",
  23. symbol: "GOLDSOL",
  24. uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json",
  25. };
  26. it("Create a token!", async () => {
  27. // Derive the metadata account address.
  28. const [metadataAddress] = PublicKey.findProgramAddressSync(
  29. [
  30. Buffer.from("metadata"),
  31. TOKEN_METADATA_PROGRAM_ID.toBuffer(),
  32. mintPDA.toBuffer(),
  33. ],
  34. TOKEN_METADATA_PROGRAM_ID
  35. );
  36. const transactionSignature = await program.methods
  37. .createToken(metadata.name, metadata.symbol, metadata.uri)
  38. .accounts({
  39. payer: payer.publicKey,
  40. mintAccount: mintPDA,
  41. metadataAccount: metadataAddress,
  42. tokenProgram: TOKEN_PROGRAM_ID,
  43. tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
  44. systemProgram: SystemProgram.programId,
  45. rent: SYSVAR_RENT_PUBKEY,
  46. })
  47. .rpc();
  48. console.log("Success!");
  49. console.log(` Mint Address: ${mintPDA}`);
  50. console.log(` Transaction Signature: ${transactionSignature}`);
  51. });
  52. it("Mint 1 Token!", async () => {
  53. // Derive the associated token address account for the mint and payer.
  54. const associatedTokenAccountAddress = getAssociatedTokenAddressSync(
  55. mintPDA,
  56. payer.publicKey
  57. );
  58. // Amount of tokens to mint.
  59. const amount = new anchor.BN(100);
  60. const transactionSignature = await program.methods
  61. .mintToken(amount)
  62. .accounts({
  63. payer: payer.publicKey,
  64. mintAccount: mintPDA,
  65. associatedTokenAccount: associatedTokenAccountAddress,
  66. tokenProgram: TOKEN_PROGRAM_ID,
  67. associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
  68. systemProgram: SystemProgram.programId,
  69. })
  70. .rpc();
  71. console.log("Success!");
  72. console.log(
  73. ` Associated Token Account Address: ${associatedTokenAccountAddress}`
  74. );
  75. console.log(` Transaction Signature: ${transactionSignature}`);
  76. });
  77. });