bankrun.test.ts 2.4 KB

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