test.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import {
  2. PROGRAM_ID as TOKEN_METADATA_PROGRAM_ID
  3. } from '@metaplex-foundation/mpl-token-metadata';
  4. import * as anchor from "@project-serum/anchor";
  5. import { ASSOCIATED_PROGRAM_ID } from '@project-serum/anchor/dist/cjs/utils/token';
  6. import { NftMinter } from "../target/types/nft_minter";
  7. describe("NFT Minter", () => {
  8. const provider = anchor.AnchorProvider.env();
  9. anchor.setProvider(provider);
  10. const payer = provider.wallet as anchor.Wallet;
  11. const program = anchor.workspace.NftMinter as anchor.Program<NftMinter>;
  12. const nftTitle = "Homer NFT";
  13. const nftSymbol = "HOMR";
  14. const nftUri = "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json";
  15. const mintKeypair: anchor.web3.Keypair = anchor.web3.Keypair.generate();
  16. it("Create an NFT!", async () => {
  17. const metadataAddress = (anchor.web3.PublicKey.findProgramAddressSync(
  18. [
  19. Buffer.from("metadata"),
  20. TOKEN_METADATA_PROGRAM_ID.toBuffer(),
  21. mintKeypair.publicKey.toBuffer(),
  22. ],
  23. TOKEN_METADATA_PROGRAM_ID
  24. ))[0];
  25. const sx = await program.methods.createToken(
  26. nftTitle, nftSymbol, nftUri
  27. )
  28. .accounts({
  29. metadataAccount: metadataAddress,
  30. mintAccount: mintKeypair.publicKey,
  31. mintAuthority: payer.publicKey,
  32. payer: payer.publicKey,
  33. rent: anchor.web3.SYSVAR_RENT_PUBKEY,
  34. systemProgram: anchor.web3.SystemProgram.programId,
  35. tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID,
  36. tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
  37. })
  38. .signers([mintKeypair, payer.payer])
  39. .rpc();
  40. console.log("Success!");
  41. console.log(` Mint Address: ${mintKeypair.publicKey}`);
  42. console.log(` Tx Signature: ${sx}`);
  43. });
  44. it("Mint some tokens to your wallet!", async () => {
  45. const metadataAddress = (anchor.web3.PublicKey.findProgramAddressSync(
  46. [
  47. Buffer.from("metadata"),
  48. TOKEN_METADATA_PROGRAM_ID.toBuffer(),
  49. mintKeypair.publicKey.toBuffer(),
  50. ],
  51. TOKEN_METADATA_PROGRAM_ID
  52. ))[0];
  53. const editionAddress = (anchor.web3.PublicKey.findProgramAddressSync(
  54. [
  55. Buffer.from("metadata"),
  56. TOKEN_METADATA_PROGRAM_ID.toBuffer(),
  57. mintKeypair.publicKey.toBuffer(),
  58. Buffer.from("edition"),
  59. ],
  60. TOKEN_METADATA_PROGRAM_ID
  61. ))[0];
  62. const associatedTokenAccountAddress = await anchor.utils.token.associatedAddress({
  63. mint: mintKeypair.publicKey,
  64. owner: payer.publicKey,
  65. });
  66. const sx = await program.methods.mintTo()
  67. .accounts({
  68. associatedTokenAccount: associatedTokenAccountAddress,
  69. editionAccount: editionAddress,
  70. metadataAccount: metadataAddress,
  71. mintAccount: mintKeypair.publicKey,
  72. mintAuthority: payer.publicKey,
  73. payer: payer.publicKey,
  74. rent: anchor.web3.SYSVAR_RENT_PUBKEY,
  75. systemProgram: anchor.web3.SystemProgram.programId,
  76. tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID,
  77. associatedTokenProgram: ASSOCIATED_PROGRAM_ID,
  78. tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
  79. })
  80. .signers([payer.payer])
  81. .rpc({skipPreflight: true});
  82. console.log("Success!");
  83. console.log(` ATA Address: ${associatedTokenAccountAddress}`);
  84. console.log(` Tx Signature: ${sx}`);
  85. });
  86. });