spl-token-coder.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import { AnchorProvider, setProvider } from "@coral-xyz/anchor";
  2. import { splTokenProgram } from "@coral-xyz/spl-token";
  3. import { Keypair, SYSVAR_RENT_PUBKEY, PublicKey } from "@solana/web3.js";
  4. import BN from "bn.js";
  5. import { assert } from "chai";
  6. describe("spl-token", () => {
  7. // Configure the client to use the local cluster.
  8. const provider = AnchorProvider.env();
  9. setProvider(provider);
  10. // Client.
  11. const program = splTokenProgram({
  12. provider,
  13. });
  14. // Constants.
  15. const mintKeypair = Keypair.generate();
  16. const aliceTokenKeypair = Keypair.generate();
  17. const bobTokenKeypair = Keypair.generate();
  18. const rent = SYSVAR_RENT_PUBKEY;
  19. it("Creates a mint", async () => {
  20. await program.methods
  21. .initializeMint(6, provider.wallet.publicKey, null)
  22. .accounts({
  23. mint: mintKeypair.publicKey,
  24. rent,
  25. })
  26. .signers([mintKeypair])
  27. .preInstructions([
  28. await program.account.mint.createInstruction(mintKeypair),
  29. ])
  30. .rpc();
  31. const mintAccount = await program.account.mint.fetch(mintKeypair.publicKey);
  32. assert.isTrue(
  33. (mintAccount.mintAuthority as PublicKey).equals(provider.wallet.publicKey)
  34. );
  35. assert.isNull(mintAccount.freezeAuthority);
  36. assert.strictEqual(mintAccount.decimals, 6);
  37. assert.isTrue(mintAccount.isInitialized);
  38. assert.strictEqual(mintAccount.supply.toNumber(), 0);
  39. });
  40. it("Creates a token account for alice", async () => {
  41. await program.methods
  42. .initializeAccount()
  43. .accounts({
  44. account: aliceTokenKeypair.publicKey,
  45. mint: mintKeypair.publicKey,
  46. owner: provider.wallet.publicKey,
  47. rent,
  48. })
  49. .signers([aliceTokenKeypair])
  50. .preInstructions([
  51. await program.account.account.createInstruction(aliceTokenKeypair),
  52. ])
  53. .rpc();
  54. const token = await program.account.account.fetch(
  55. aliceTokenKeypair.publicKey
  56. );
  57. assert.isTrue(token.owner.equals(provider.wallet.publicKey));
  58. assert.isTrue(token.mint.equals(mintKeypair.publicKey));
  59. assert.strictEqual(token.amount.toNumber(), 0);
  60. assert.isNull(token.delegate);
  61. assert.strictEqual(Object.keys(token.state)[0], "initialized");
  62. assert.isNull(token.isNative);
  63. assert.strictEqual(token.delegatedAmount.toNumber(), 0);
  64. assert.isNull(token.closeAuthority);
  65. });
  66. it("Mints a token to alice", async () => {
  67. await program.methods
  68. .mintTo(new BN(2))
  69. .accounts({
  70. mint: mintKeypair.publicKey,
  71. account: aliceTokenKeypair.publicKey,
  72. owner: provider.wallet.publicKey,
  73. })
  74. .rpc();
  75. const token = await program.account.account.fetch(
  76. aliceTokenKeypair.publicKey
  77. );
  78. const mint = await program.account.mint.fetch(mintKeypair.publicKey);
  79. assert.strictEqual(token.amount.toNumber(), 2);
  80. assert.strictEqual(mint.supply.toNumber(), 2);
  81. });
  82. it("Creates a token for bob", async () => {
  83. await program.methods
  84. .initializeAccount()
  85. .accounts({
  86. account: bobTokenKeypair.publicKey,
  87. mint: mintKeypair.publicKey,
  88. owner: provider.wallet.publicKey,
  89. rent,
  90. })
  91. .signers([bobTokenKeypair])
  92. .preInstructions([
  93. await program.account.account.createInstruction(bobTokenKeypair),
  94. ])
  95. .rpc();
  96. });
  97. it("Transfer a token from alice to bob", async () => {
  98. await program.methods
  99. .transfer(new BN(1))
  100. .accounts({
  101. source: aliceTokenKeypair.publicKey,
  102. destination: bobTokenKeypair.publicKey,
  103. authority: provider.wallet.publicKey,
  104. })
  105. .rpc();
  106. const aliceToken = await program.account.account.fetch(
  107. aliceTokenKeypair.publicKey
  108. );
  109. const bobToken = await program.account.account.fetch(
  110. bobTokenKeypair.publicKey
  111. );
  112. assert.strictEqual(aliceToken.amount.toNumber(), 1);
  113. assert.strictEqual(bobToken.amount.toNumber(), 1);
  114. });
  115. it("Alice burns a token", async () => {
  116. await program.methods
  117. .burn(new BN(1))
  118. .accounts({
  119. account: aliceTokenKeypair.publicKey,
  120. mint: mintKeypair.publicKey,
  121. authority: provider.wallet.publicKey,
  122. })
  123. .rpc();
  124. const aliceToken = await program.account.account.fetch(
  125. aliceTokenKeypair.publicKey
  126. );
  127. const mint = await program.account.mint.fetch(mintKeypair.publicKey);
  128. assert.strictEqual(aliceToken.amount.toNumber(), 0);
  129. assert.strictEqual(mint.supply.toNumber(), 1);
  130. });
  131. });