test.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. await program.methods.mintToWallet(
  62. new anchor.BN(amountToMint), mintAuthorityPdaBump
  63. )
  64. .accounts({
  65. mintAccount: mintKeypair.publicKey,
  66. mintAuthority: mintAuthorityPda,
  67. tokenAccount: tokenAddress,
  68. payer: payer.publicKey,
  69. rent: anchor.web3.SYSVAR_RENT_PUBKEY,
  70. systemProgram: anchor.web3.SystemProgram.programId,
  71. tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID,
  72. associatedTokenProgram: anchor.utils.token.ASSOCIATED_PROGRAM_ID,
  73. })
  74. .signers([payer.payer])
  75. .rpc();
  76. });
  77. it("Transfer to a wallet!", async () => {
  78. const recipientWallet = anchor.web3.Keypair.generate();
  79. await provider.connection.confirmTransaction(
  80. await provider.connection.requestAirdrop(recipientWallet.publicKey, 2 * anchor.web3.LAMPORTS_PER_SOL)
  81. );
  82. console.log(`Recipient Pubkey: ${recipientWallet.publicKey}`);
  83. const amountToTransfer = 1;
  84. const ownerTokenAddress = await anchor.utils.token.associatedAddress({
  85. mint: mintKeypair.publicKey,
  86. owner: payer.publicKey
  87. });
  88. const recipientTokenAddress = await anchor.utils.token.associatedAddress({
  89. mint: mintKeypair.publicKey,
  90. owner: recipientWallet.publicKey
  91. });
  92. await program.methods.transferToWallet(
  93. new anchor.BN(amountToTransfer)
  94. )
  95. .accounts({
  96. mintAccount: mintKeypair.publicKey,
  97. ownerTokenAccount: ownerTokenAddress,
  98. recipientTokenAccount: recipientTokenAddress,
  99. owner: payer.publicKey,
  100. recipient: recipientWallet.publicKey,
  101. rent: anchor.web3.SYSVAR_RENT_PUBKEY,
  102. systemProgram: anchor.web3.SystemProgram.programId,
  103. tokenProgram: anchor.utils.token.TOKEN_PROGRAM_ID,
  104. associatedTokenProgram: anchor.utils.token.ASSOCIATED_PROGRAM_ID,
  105. })
  106. .signers([payer.payer, recipientWallet])
  107. .rpc();
  108. });
  109. });