test.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import * as anchor from '@coral-xyz/anchor';
  2. import { Keypair, LAMPORTS_PER_SOL, type PublicKey, SystemProgram, Transaction, sendAndConfirmTransaction } from '@solana/web3.js';
  3. import type { TransferSol } from '../target/types/transfer_sol';
  4. describe('transfer-sol', () => {
  5. const provider = anchor.AnchorProvider.env();
  6. anchor.setProvider(provider);
  7. const payer = provider.wallet as anchor.Wallet;
  8. const program = anchor.workspace.TransferSol as anchor.Program<TransferSol>;
  9. // 1 SOL
  10. const transferAmount = 1 * LAMPORTS_PER_SOL;
  11. // Generate a new keypair for the recipient
  12. const recipient = new Keypair();
  13. // Generate a new keypair to create an account owned by our program
  14. const programOwnedAccount = new Keypair();
  15. it('Transfer SOL with CPI', async () => {
  16. await getBalances(payer.publicKey, recipient.publicKey, 'Beginning');
  17. await program.methods
  18. .transferSolWithCpi(new anchor.BN(transferAmount))
  19. .accounts({
  20. payer: payer.publicKey,
  21. recipient: recipient.publicKey,
  22. })
  23. .rpc();
  24. await getBalances(payer.publicKey, recipient.publicKey, 'Resulting');
  25. });
  26. it('Create and fund account owned by our program', async () => {
  27. const instruction = SystemProgram.createAccount({
  28. fromPubkey: payer.publicKey,
  29. newAccountPubkey: programOwnedAccount.publicKey,
  30. space: 0,
  31. lamports: 1 * LAMPORTS_PER_SOL, // 1 SOL
  32. programId: program.programId, // Program Owner, our program's address
  33. });
  34. const transaction = new Transaction().add(instruction);
  35. await sendAndConfirmTransaction(provider.connection, transaction, [payer.payer, programOwnedAccount]);
  36. });
  37. it('Transfer SOL with Program', async () => {
  38. await getBalances(programOwnedAccount.publicKey, payer.publicKey, 'Beginning');
  39. await program.methods
  40. .transferSolWithProgram(new anchor.BN(transferAmount))
  41. .accounts({
  42. payer: programOwnedAccount.publicKey,
  43. recipient: payer.publicKey,
  44. })
  45. .rpc();
  46. await getBalances(programOwnedAccount.publicKey, payer.publicKey, 'Resulting');
  47. });
  48. async function getBalances(payerPubkey: PublicKey, recipientPubkey: PublicKey, timeframe: string) {
  49. const payerBalance = await provider.connection.getBalance(payerPubkey);
  50. const recipientBalance = await provider.connection.getBalance(recipientPubkey);
  51. console.log(`${timeframe} balances:`);
  52. console.log(` Payer: ${payerBalance / LAMPORTS_PER_SOL}`);
  53. console.log(` Recipient: ${recipientBalance / LAMPORTS_PER_SOL}`);
  54. }
  55. });