test.ts 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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 { SplTokenMinter } from "../target/types/spl_token_minter";
  4. import {
  5. PublicKey,
  6. Keypair,
  7. SYSVAR_RENT_PUBKEY,
  8. SystemProgram,
  9. } from "@solana/web3.js";
  10. import {
  11. getAssociatedTokenAddressSync,
  12. ASSOCIATED_TOKEN_PROGRAM_ID,
  13. TOKEN_PROGRAM_ID,
  14. } from "@solana/spl-token";
  15. describe("SPL Token Minter", () => {
  16. const provider = anchor.AnchorProvider.env();
  17. anchor.setProvider(provider);
  18. const payer = provider.wallet as anchor.Wallet;
  19. const program = anchor.workspace
  20. .SplTokenMinter as anchor.Program<SplTokenMinter>;
  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. // Generate new keypair to use as address for mint account.
  27. const mintKeypair = new Keypair();
  28. it("Create an SPL Token!", async () => {
  29. // Derive the metadata account address.
  30. const [metadataAddress] = PublicKey.findProgramAddressSync(
  31. [
  32. Buffer.from("metadata"),
  33. TOKEN_METADATA_PROGRAM_ID.toBuffer(),
  34. mintKeypair.publicKey.toBuffer(),
  35. ],
  36. TOKEN_METADATA_PROGRAM_ID
  37. );
  38. const transactionSignature = await program.methods
  39. .createToken(metadata.name, metadata.symbol, metadata.uri)
  40. .accounts({
  41. payer: payer.publicKey,
  42. mintAccount: mintKeypair.publicKey,
  43. metadataAccount: metadataAddress,
  44. tokenProgram: TOKEN_PROGRAM_ID,
  45. tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
  46. systemProgram: SystemProgram.programId,
  47. rent: SYSVAR_RENT_PUBKEY,
  48. })
  49. .signers([mintKeypair])
  50. .rpc();
  51. console.log("Success!");
  52. console.log(` Mint Address: ${mintKeypair.publicKey}`);
  53. console.log(` Transaction Signature: ${transactionSignature}`);
  54. });
  55. it("Mint some tokens to your wallet!", async () => {
  56. // Derive the associated token address account for the mint and payer.
  57. const associatedTokenAccountAddress = getAssociatedTokenAddressSync(
  58. mintKeypair.publicKey,
  59. payer.publicKey
  60. );
  61. // Amount of tokens to mint.
  62. const amount = new anchor.BN(100);
  63. // Mint the tokens to the associated token account.
  64. const transactionSignature = await program.methods
  65. .mintToken(amount)
  66. .accounts({
  67. mintAuthority: payer.publicKey,
  68. recepient: payer.publicKey,
  69. mintAccount: mintKeypair.publicKey,
  70. associatedTokenAccount: associatedTokenAccountAddress,
  71. tokenProgram: TOKEN_PROGRAM_ID,
  72. associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
  73. systemProgram: SystemProgram.programId,
  74. })
  75. .rpc();
  76. console.log("Success!");
  77. console.log(
  78. ` Associated Token Account Address: ${associatedTokenAccountAddress}`
  79. );
  80. console.log(` Transaction Signature: ${transactionSignature}`);
  81. });
  82. });