test.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import * as anchor from "@project-serum/anchor";
  2. import { Mint2 } from "../target/types/mint_2";
  3. const TOKEN_METADATA_PROGRAM_ID = new anchor.web3.PublicKey(
  4. "metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"
  5. );
  6. describe("mint-token", () => {
  7. const provider = anchor.AnchorProvider.env();
  8. anchor.setProvider(provider);
  9. const payer = provider.wallet as anchor.Wallet;
  10. const program = anchor.workspace.Mint2 as anchor.Program<Mint2>;
  11. const testTokenTitle = "Solana Gold";
  12. const testTokenSymbol = "GOLDSOL";
  13. const testTokenUri = "https://raw.githubusercontent.com/solana-developers/program-examples/main/tokens/mint-2/anchor/tests/token_metadata.json";
  14. const mintKeypair: anchor.web3.Keypair = anchor.web3.Keypair.generate();
  15. console.log(`New token: ${mintKeypair.publicKey}`);
  16. it("Create the mint", async () => {
  17. const [mintAuthorityPda, mintAuthorityPdaBump] = await anchor.web3.PublicKey.findProgramAddress(
  18. [
  19. Buffer.from("mint_authority_"),
  20. mintKeypair.publicKey.toBuffer(),
  21. ],
  22. program.programId,
  23. );
  24. const metadataAddress = (await anchor.web3.PublicKey.findProgramAddress(
  25. [
  26. Buffer.from("metadata"),
  27. TOKEN_METADATA_PROGRAM_ID.toBuffer(),
  28. mintKeypair.publicKey.toBuffer(),
  29. ],
  30. TOKEN_METADATA_PROGRAM_ID
  31. ))[0];
  32. await program.methods.createTokenMint(
  33. testTokenTitle, testTokenSymbol, testTokenUri, mintAuthorityPdaBump
  34. )
  35. .accounts({
  36. metadataAccount: metadataAddress,
  37. mintAccount: mintKeypair.publicKey,
  38. mintAuthority: mintAuthorityPda,
  39. payer: payer.publicKey,
  40. rent: anchor.web3.SYSVAR_RENT_PUBKEY,
  41. systemProgram: anchor.web3.SystemProgram.programId,
  42. tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID,
  43. tokenMetadataProgram: TOKEN_METADATA_PROGRAM_ID,
  44. })
  45. .signers([mintKeypair, payer.payer])
  46. .rpc();
  47. });
  48. it("Mint to a wallet!", async () => {
  49. const [mintAuthorityPda, mintAuthorityPdaBump] = await anchor.web3.PublicKey.findProgramAddress(
  50. [
  51. Buffer.from("mint_authority_"),
  52. mintKeypair.publicKey.toBuffer(),
  53. ],
  54. program.programId,
  55. );
  56. const amountToMint = 1;
  57. const tokenAddress = await anchor.utils.token.associatedAddress({
  58. mint: mintKeypair.publicKey,
  59. owner: payer.publicKey
  60. });
  61. console.log(`Token Address: ${tokenAddress}`);
  62. await program.methods.mintToWallet(
  63. new anchor.BN(amountToMint), mintAuthorityPdaBump
  64. )
  65. .accounts({
  66. mintAccount: mintKeypair.publicKey,
  67. mintAuthority: mintAuthorityPda,
  68. tokenAccount: tokenAddress,
  69. payer: payer.publicKey,
  70. rent: anchor.web3.SYSVAR_RENT_PUBKEY,
  71. systemProgram: anchor.web3.SystemProgram.programId,
  72. tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID,
  73. associatedTokenProgram: anchor.utils.token.ASSOCIATED_PROGRAM_ID,
  74. })
  75. .signers([payer.payer])
  76. .rpc();
  77. });
  78. it("Transfer to a wallet!", async () => {
  79. const recipientWallet = anchor.web3.Keypair.generate();
  80. await provider.connection.confirmTransaction(
  81. await provider.connection.requestAirdrop(recipientWallet.publicKey, 2 * anchor.web3.LAMPORTS_PER_SOL)
  82. );
  83. console.log(`Recipient Pubkey: ${recipientWallet.publicKey}`);
  84. const amountToTransfer = 1;
  85. const ownerTokenAddress = await anchor.utils.token.associatedAddress({
  86. mint: mintKeypair.publicKey,
  87. owner: payer.publicKey
  88. });
  89. console.log(`Owner Token Address: ${ownerTokenAddress}`);
  90. const recipientTokenAddress = await anchor.utils.token.associatedAddress({
  91. mint: mintKeypair.publicKey,
  92. owner: recipientWallet.publicKey
  93. });
  94. console.log(`Recipient Token Address: ${recipientTokenAddress}`);
  95. await program.methods.transferToWallet(
  96. new anchor.BN(amountToTransfer)
  97. )
  98. .accounts({
  99. mintAccount: mintKeypair.publicKey,
  100. ownerTokenAccount: ownerTokenAddress,
  101. recipientTokenAccount: recipientTokenAddress,
  102. owner: payer.publicKey,
  103. recipient: recipientWallet.publicKey,
  104. rent: anchor.web3.SYSVAR_RENT_PUBKEY,
  105. systemProgram: anchor.web3.SystemProgram.programId,
  106. tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID,
  107. associatedTokenProgram: anchor.utils.token.ASSOCIATED_PROGRAM_ID,
  108. })
  109. .signers([payer.payer, recipientWallet])
  110. .rpc();
  111. });
  112. });