token-extensions.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import * as anchor from "@coral-xyz/anchor";
  2. import { Program } from "@coral-xyz/anchor";
  3. import { PublicKey, Keypair } from "@solana/web3.js";
  4. import { TokenExtensions } from "../target/types/token_extensions";
  5. import { ASSOCIATED_PROGRAM_ID } from "@coral-xyz/anchor/dist/cjs/utils/token";
  6. import { it } from "node:test";
  7. const TOKEN_2022_PROGRAM_ID = new anchor.web3.PublicKey(
  8. "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
  9. );
  10. export function associatedAddress({
  11. mint,
  12. owner,
  13. }: {
  14. mint: PublicKey;
  15. owner: PublicKey;
  16. }): PublicKey {
  17. return PublicKey.findProgramAddressSync(
  18. [owner.toBuffer(), TOKEN_2022_PROGRAM_ID.toBuffer(), mint.toBuffer()],
  19. ASSOCIATED_PROGRAM_ID
  20. )[0];
  21. }
  22. describe("token extensions", () => {
  23. const provider = anchor.AnchorProvider.env();
  24. anchor.setProvider(provider);
  25. const program = anchor.workspace.TokenExtensions as Program<TokenExtensions>;
  26. const payer = Keypair.generate();
  27. it("airdrop payer", async () => {
  28. await provider.connection.confirmTransaction(
  29. await provider.connection.requestAirdrop(payer.publicKey, 10000000000),
  30. "confirmed"
  31. );
  32. });
  33. let mint = new Keypair();
  34. it("Create mint account test passes", async () => {
  35. const [extraMetasAccount] = PublicKey.findProgramAddressSync(
  36. [
  37. anchor.utils.bytes.utf8.encode("extra-account-metas"),
  38. mint.publicKey.toBuffer(),
  39. ],
  40. program.programId
  41. );
  42. await program.methods
  43. .createMintAccount({
  44. name: "hello",
  45. symbol: "hi",
  46. uri: "https://hi.com",
  47. })
  48. .accountsStrict({
  49. payer: payer.publicKey,
  50. authority: payer.publicKey,
  51. receiver: payer.publicKey,
  52. mint: mint.publicKey,
  53. mintTokenAccount: associatedAddress({
  54. mint: mint.publicKey,
  55. owner: payer.publicKey,
  56. }),
  57. extraMetasAccount: extraMetasAccount,
  58. systemProgram: anchor.web3.SystemProgram.programId,
  59. associatedTokenProgram: ASSOCIATED_PROGRAM_ID,
  60. tokenProgram: TOKEN_2022_PROGRAM_ID,
  61. })
  62. .signers([mint, payer])
  63. .rpc();
  64. });
  65. it("mint extension constraints test passes", async () => {
  66. await program.methods
  67. .checkMintExtensionsConstraints()
  68. .accountsStrict({
  69. authority: payer.publicKey,
  70. mint: mint.publicKey,
  71. })
  72. .signers([payer])
  73. .rpc();
  74. });
  75. });