LiteSVM Docs
API Reference

Account Management

Methods for managing accounts, balances, and rent in TypeScript

Account Management

Methods for managing accounts, balances, and setting account state.

airdrop

airdrop(address: Address, lamports: Lamports): TransactionMetadata | FailedTransactionMetadata | null

Fund an account with lamports.

import { lamports } from '@solana/kit';

// Airdrop 5 SOL
const result = client.svm.airdrop(account.address, lamports(5_000_000_000n));

if (result) {
    // Note: Result properties are getter functions
    console.log('Compute units:', result.computeUnitsConsumed());
}

setAccount

setAccount(account: EncodedAccount): LiteSVM

Directly set account state without a transaction.

import { address, lamports } from '@solana/kit';

client.svm.setAccount({
    address: myAddress,
    data: new Uint8Array([1, 2, 3, 4]),
    executable: false,
    lamports: lamports(1_000_000n),
    programAddress: address('11111111111111111111111111111111'),
    space: 4n,
});

EncodedAccount Properties

PropertyTypeDescription
addressAddressAccount public key
dataUint8ArrayAccount data bytes
executablebooleanWhether account is executable
lamportsLamportsSOL balance
programAddressAddressOwner program
spacebigintData size in bytes

getAccount

getAccount(address: Address): MaybeEncodedAccount

Retrieve account data.

const account = client.svm.getAccount(myAddress);

if (account.exists) {
    console.log('Address:', account.address);
    console.log('Lamports:', account.lamports);
    console.log('Owner:', account.programAddress);
    console.log('Data:', account.data);
    console.log('Executable:', account.executable);
}

getBalance

getBalance(address: Address): Lamports | null

Get account SOL balance. Returns null if account doesn't exist.

const balance = client.svm.getBalance(account.address);

if (balance !== null) {
    console.log('Balance:', balance, 'lamports');
    console.log('Balance:', Number(balance) / 1e9, 'SOL');
} else {
    console.log('Account does not exist');
}

minimumBalanceForRentExemption

minimumBalanceForRentExemption(dataLen: bigint): bigint

Calculate the minimum lamports needed for rent exemption.

const dataSize = 100n;
const minBalance = client.svm.minimumBalanceForRentExemption(dataSize);

console.log(`Rent-exempt minimum for ${dataSize} bytes:`, minBalance, 'lamports');

// Use when setting up accounts
client.svm.setAccount({
    address: myAddress,
    data: new Uint8Array(Number(dataSize)),
    executable: false,
    lamports: lamports(minBalance),
    programAddress: programId,
    space: dataSize,
});

Program Management

addProgram

addProgram(programId: Address, programBytes: Uint8Array): LiteSVM

Load a program from bytes.

const programBytes = fs.readFileSync('path/to/program.so');
client.svm.addProgram(programId, programBytes);

addProgramFromFile

addProgramFromFile(programId: Address, path: string): LiteSVM

Load a program from a .so file path.

import { generateKeyPairSigner } from '@solana/kit';

const programId = await generateKeyPairSigner().then(s => s.address);
client.svm.addProgramFromFile(
    programId,
    '/path/to/target/deploy/my_program.so'
);

Batch Account Setup

For testing, you can set up multiple accounts efficiently:

// Set up multiple test accounts
const accounts = await Promise.all(
    Array.from({ length: 10 }, () => generateKeyPairSigner())
);

for (const [index, account] of accounts.entries()) {
    client.svm.setAccount({
        address: account.address,
        data: new Uint8Array([index]),
        executable: false,
        lamports: lamports(1_000_000n),
        programAddress: address('11111111111111111111111111111111'),
        space: 1n,
    });
}

Using setAccount is faster than airdrop for bulk account setup since it doesn't execute transactions.