1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { describe, test } from 'node:test';
- import { Keypair, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction } from '@solana/web3.js';
- import { start } from 'solana-bankrun';
- import { InstructionType, createTransferInstruction } from './instruction';
- describe('transfer-sol', async () => {
- const PROGRAM_ID = PublicKey.unique();
- const context = await start([{ name: 'transfer_sol_program', programId: PROGRAM_ID }], []);
- const client = context.banksClient;
- const payer = context.payer;
- const transferAmount = 1 * LAMPORTS_PER_SOL;
- const test1Recipient = Keypair.generate();
- const test2Recipient1 = Keypair.generate();
- const test2Recipient2 = Keypair.generate();
- test('Transfer between accounts using the system program', async () => {
- await getBalances(payer.publicKey, test1Recipient.publicKey, 'Beginning');
- const ix = createTransferInstruction(payer.publicKey, test1Recipient.publicKey, PROGRAM_ID, InstructionType.CpiTransfer, transferAmount);
- const tx = new Transaction();
- const [blockhash, _] = await client.getLatestBlockhash();
- tx.recentBlockhash = blockhash;
- tx.add(ix).sign(payer);
- await client.processTransaction(tx);
- await getBalances(payer.publicKey, test1Recipient.publicKey, 'Resulting');
- });
- test('Create two accounts for the following test', async () => {
- const ix = (pubkey: PublicKey) => {
- return SystemProgram.createAccount({
- fromPubkey: payer.publicKey,
- newAccountPubkey: pubkey,
- space: 0,
- lamports: 2 * LAMPORTS_PER_SOL,
- programId: PROGRAM_ID,
- });
- };
- const tx = new Transaction();
- const [blockhash, _] = await client.getLatestBlockhash();
- tx.recentBlockhash = blockhash;
- tx.add(ix(test2Recipient1.publicKey)).add(ix(test2Recipient2.publicKey)).sign(payer, test2Recipient1, test2Recipient2);
- await client.processTransaction(tx);
- });
- test('Transfer between accounts using our program', async () => {
- await getBalances(test2Recipient1.publicKey, test2Recipient2.publicKey, 'Beginning');
- const ix = createTransferInstruction(
- test2Recipient1.publicKey,
- test2Recipient2.publicKey,
- PROGRAM_ID,
- InstructionType.ProgramTransfer,
- transferAmount,
- );
- const tx = new Transaction();
- const [blockhash, _] = await client.getLatestBlockhash();
- tx.recentBlockhash = blockhash;
- tx.add(ix).sign(payer, test2Recipient1);
- await client.processTransaction(tx);
- await getBalances(test2Recipient1.publicKey, test2Recipient2.publicKey, 'Resulting');
- });
- async function getBalances(payerPubkey: PublicKey, recipientPubkey: PublicKey, timeframe: string) {
- const payerBalance = await client.getBalance(payerPubkey);
- const recipientBalance = await client.getBalance(recipientPubkey);
- console.log(`${timeframe} balances:`);
- console.log(` Payer: ${payerBalance}`);
- console.log(` Recipient: ${recipientBalance}`);
- }
- });
|