bankrun.test.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { describe, it } from 'node:test';
  2. import * as anchor from '@coral-xyz/anchor';
  3. import { getAssociatedTokenAddressSync } from '@solana/spl-token';
  4. import { Keypair } from '@solana/web3.js';
  5. import { PublicKey } from '@solana/web3.js';
  6. import { BankrunProvider } from 'anchor-bankrun';
  7. import { startAnchor } from 'solana-bankrun';
  8. import type { SplTokenMinter } from '../target/types/spl_token_minter';
  9. const IDL = require('../target/idl/spl_token_minter.json');
  10. const PROGRAM_ID = new PublicKey(IDL.address);
  11. const METADATA_PROGRAM_ID = new PublicKey('metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s');
  12. describe('SPL Token Minter', async () => {
  13. const context = await startAnchor(
  14. '',
  15. [
  16. { name: 'spl_token_minter', programId: PROGRAM_ID },
  17. { name: 'token_metadata', programId: METADATA_PROGRAM_ID },
  18. ],
  19. [],
  20. );
  21. const provider = new BankrunProvider(context);
  22. anchor.setProvider(provider);
  23. const payer = provider.wallet as anchor.Wallet;
  24. const program = new anchor.Program<SplTokenMinter>(IDL, provider);
  25. const metadata = {
  26. name: 'Solana Gold',
  27. symbol: 'GOLDSOL',
  28. uri: 'https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json',
  29. };
  30. // Generate new keypair to use as address for mint account.
  31. const mintKeypair = new Keypair();
  32. it('Create an SPL Token!', async () => {
  33. const transactionSignature = await program.methods
  34. .createToken(metadata.name, metadata.symbol, metadata.uri)
  35. .accounts({
  36. payer: payer.publicKey,
  37. mintAccount: mintKeypair.publicKey,
  38. })
  39. .signers([mintKeypair])
  40. .rpc();
  41. console.log('Success!');
  42. console.log(` Mint Address: ${mintKeypair.publicKey}`);
  43. console.log(` Transaction Signature: ${transactionSignature}`);
  44. });
  45. it('Mint some tokens to your wallet!', async () => {
  46. // Derive the associated token address account for the mint and payer.
  47. const associatedTokenAccountAddress = getAssociatedTokenAddressSync(mintKeypair.publicKey, payer.publicKey);
  48. // Amount of tokens to mint.
  49. const amount = new anchor.BN(100);
  50. // Mint the tokens to the associated token account.
  51. const transactionSignature = await program.methods
  52. .mintToken(amount)
  53. .accounts({
  54. mintAuthority: payer.publicKey,
  55. recipient: payer.publicKey,
  56. mintAccount: mintKeypair.publicKey,
  57. associatedTokenAccount: associatedTokenAccountAddress,
  58. })
  59. .rpc();
  60. console.log('Success!');
  61. console.log(` Associated Token Account Address: ${associatedTokenAccountAddress}`);
  62. console.log(` Transaction Signature: ${transactionSignature}`);
  63. });
  64. });