test.ts 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 { TOKEN_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/utils/token";
  4. import { CreateToken } from "../target/types/create_token";
  5. import {
  6. PublicKey,
  7. Keypair,
  8. SYSVAR_RENT_PUBKEY,
  9. SystemProgram,
  10. } from "@solana/web3.js";
  11. describe("Create Tokens", () => {
  12. const provider = anchor.AnchorProvider.env();
  13. anchor.setProvider(provider);
  14. const payer = provider.wallet as anchor.Wallet;
  15. const program = anchor.workspace.CreateToken as anchor.Program<CreateToken>;
  16. const metadata = {
  17. name: "Solana Gold",
  18. symbol: "GOLDSOL",
  19. uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json",
  20. };
  21. it("Create an SPL Token!", async () => {
  22. // Generate new keypair to use as address for mint account.
  23. const mintKeypair = new Keypair();
  24. // Derive the PDA of the metadata account for the mint.
  25. const [metadataAddress] = PublicKey.findProgramAddressSync(
  26. [
  27. Buffer.from("metadata"),
  28. TOKEN_METADATA_PROGRAM_ID.toBuffer(),
  29. mintKeypair.publicKey.toBuffer(),
  30. ],
  31. TOKEN_METADATA_PROGRAM_ID
  32. );
  33. // SPL Token default = 9 decimals
  34. const transactionSignature = await program.methods
  35. .createTokenMint(metadata.name, metadata.symbol, metadata.uri, 9)
  36. .accounts({
  37. payer: payer.publicKey,
  38. metadataAccount: metadataAddress,
  39. mintAccount: mintKeypair.publicKey,
  40. rent: SYSVAR_RENT_PUBKEY,
  41. systemProgram: SystemProgram.programId,
  42. tokenProgram: TOKEN_PROGRAM_ID,
  43. tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
  44. })
  45. .signers([mintKeypair])
  46. .rpc();
  47. console.log("Success!");
  48. console.log(` Mint Address: ${mintKeypair.publicKey}`);
  49. console.log(` Transaction Signature: ${transactionSignature}`);
  50. });
  51. it("Create an NFT!", async () => {
  52. // Generate new keypair to use as address for mint account.
  53. const mintKeypair = new Keypair();
  54. // Derive the PDA of the metadata account for the mint.
  55. const [metadataAddress] = PublicKey.findProgramAddressSync(
  56. [
  57. Buffer.from("metadata"),
  58. TOKEN_METADATA_PROGRAM_ID.toBuffer(),
  59. mintKeypair.publicKey.toBuffer(),
  60. ],
  61. TOKEN_METADATA_PROGRAM_ID
  62. );
  63. // NFT default = 0 decimals
  64. const transactionSignature = await program.methods
  65. .createTokenMint(metadata.name, metadata.symbol, metadata.uri, 0)
  66. .accounts({
  67. payer: payer.publicKey,
  68. metadataAccount: metadataAddress,
  69. mintAccount: mintKeypair.publicKey,
  70. rent: SYSVAR_RENT_PUBKEY,
  71. systemProgram: SystemProgram.programId,
  72. tokenProgram: TOKEN_PROGRAM_ID,
  73. tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
  74. })
  75. .signers([mintKeypair])
  76. .rpc();
  77. console.log("Success!");
  78. console.log(` Mint Address: ${mintKeypair.publicKey}`);
  79. console.log(` Transaction Signature: ${transactionSignature}`);
  80. });
  81. });