test.ts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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 your 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.mintToYourWallet(
  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("Mint to another person's wallet (airdrop)!", async () => {
  79. const recipientKeypair = anchor.web3.Keypair.generate();
  80. await provider.connection.confirmTransaction(
  81. await provider.connection.requestAirdrop(recipientKeypair.publicKey, 1 * anchor.web3.LAMPORTS_PER_SOL)
  82. );
  83. console.log(`Recipient pubkey: ${recipientKeypair.publicKey}`);
  84. const [mintAuthorityPda, mintAuthorityPdaBump] = await anchor.web3.PublicKey.findProgramAddress(
  85. [
  86. Buffer.from("mint_authority_"),
  87. mintKeypair.publicKey.toBuffer(),
  88. ],
  89. program.programId,
  90. );
  91. const amountToMint = 1;
  92. const tokenAddress = await anchor.utils.token.associatedAddress({
  93. mint: mintKeypair.publicKey,
  94. owner: recipientKeypair.publicKey
  95. });
  96. console.log(`Token Address: ${tokenAddress}`);
  97. await program.methods.mintToAnotherWallet(
  98. new anchor.BN(amountToMint), mintAuthorityPdaBump
  99. )
  100. .accounts({
  101. mintAccount: mintKeypair.publicKey,
  102. mintAuthority: mintAuthorityPda,
  103. recipient: recipientKeypair.publicKey,
  104. tokenAccount: tokenAddress,
  105. payer: payer.publicKey,
  106. rent: anchor.web3.SYSVAR_RENT_PUBKEY,
  107. systemProgram: anchor.web3.SystemProgram.programId,
  108. tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID,
  109. associatedTokenProgram: anchor.utils.token.ASSOCIATED_PROGRAM_ID,
  110. })
  111. .signers([payer.payer])
  112. .rpc();
  113. });
  114. it("Transfer to another person's wallet!", async () => {
  115. const recipientWallet = anchor.web3.Keypair.generate();
  116. await provider.connection.confirmTransaction(
  117. await provider.connection.requestAirdrop(recipientWallet.publicKey, 2 * anchor.web3.LAMPORTS_PER_SOL)
  118. );
  119. console.log(`Recipient Pubkey: ${recipientWallet.publicKey}`);
  120. const amountToTransfer = 1;
  121. const ownerTokenAddress = await anchor.utils.token.associatedAddress({
  122. mint: mintKeypair.publicKey,
  123. owner: payer.publicKey
  124. });
  125. console.log(`Owner Token Address: ${ownerTokenAddress}`);
  126. const recipientTokenAddress = await anchor.utils.token.associatedAddress({
  127. mint: mintKeypair.publicKey,
  128. owner: recipientWallet.publicKey
  129. });
  130. console.log(`Recipient Token Address: ${recipientTokenAddress}`);
  131. await program.methods.transferToAnotherWallet(
  132. new anchor.BN(amountToTransfer)
  133. )
  134. .accounts({
  135. mintAccount: mintKeypair.publicKey,
  136. ownerTokenAccount: ownerTokenAddress,
  137. recipientTokenAccount: recipientTokenAddress,
  138. owner: payer.publicKey,
  139. recipient: recipientWallet.publicKey,
  140. rent: anchor.web3.SYSVAR_RENT_PUBKEY,
  141. systemProgram: anchor.web3.SystemProgram.programId,
  142. tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID,
  143. associatedTokenProgram: anchor.utils.token.ASSOCIATED_PROGRAM_ID,
  144. })
  145. .signers([payer.payer])
  146. .rpc();
  147. });
  148. });