Examples
Account Setup
Set up test accounts and state with LiteSVM
Account Setup Example
Demonstrates setting up test account state directly without transactions.
Basic Account Setup
import { address, createEmptyClient, lamports } from '@solana/kit';
import { litesvm } from '@solana/kit-plugins';
const client = createEmptyClient().use(litesvm());
// Calculate minimum balance for rent exemption
const dataSize = 100n;
const minBalance = client.svm.minimumBalanceForRentExemption(dataSize);
console.log(`Minimum balance for ${dataSize} bytes:`, minBalance, 'lamports');
// Set account state directly (no transaction needed)
const programId = address('11111111111111111111111111111111');
const accountData = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
const testAddress = address('REPLACE_WITH_TEST_ADDRESS'); // or use generateKeyPairSigner()
client.svm.setAccount({
address: testAddress,
data: accountData,
executable: false,
lamports: lamports(minBalance),
programAddress: programId,
space: BigInt(accountData.length),
});
console.log('Account state set successfully');
// Retrieve the account data
const retrieved = client.svm.getAccount(testAddress);
if (retrieved.exists) {
console.log('Retrieved account:');
console.log(' Address:', retrieved.address);
console.log(' Lamports:', retrieved.lamports);
console.log(' Owner:', retrieved.programAddress);
console.log(' Executable:', retrieved.executable);
console.log(' Data:', Array.from(retrieved.data));
}
// Get balance separately
const balance = client.svm.getBalance(testAddress);
console.log('Balance:', balance, 'lamports');Setting Up Multiple Accounts
import { address, createEmptyClient, lamports } from '@solana/kit';
import { litesvm } from '@solana/kit-plugins';
const client = createEmptyClient().use(litesvm());
const programId = address('11111111111111111111111111111111');
// Set up multiple accounts with different data
const account1 = address('Account111111111111111111111111111'); // replace or generateKeyPairSigner()
const account2 = address('Account211111111111111111111111111'); // replace or generateKeyPairSigner()
const account3 = address('Account311111111111111111111111111'); // replace or generateKeyPairSigner()
const account4 = address('Account411111111111111111111111111'); // replace or generateKeyPairSigner()
const account5 = address('Account511111111111111111111111111'); // replace or generateKeyPairSigner()
const accounts = [account1, account2, account3, account4, account5];
for (const [index, accountAddress] of accounts.entries()) {
const customData = new Uint8Array([index, index + 1, index + 2]);
client.svm.setAccount({
address: accountAddress,
data: customData,
executable: false,
lamports: lamports(1_000_000n),
programAddress: programId,
space: BigInt(customData.length),
});
console.log(`Account ${index}: ${accountAddress}`);
}
// Verify accounts via RPC
console.log('\nVerifying via RPC:');
const { value: rpcAccounts } = await client.rpc
.getMultipleAccounts(accounts)
.send();
rpcAccounts.forEach((acc, i) => {
if (acc) {
console.log(` Account ${i}: ${acc.lamports} lamports, data: ${acc.data[0]}`);
}
});Program Data Account Setup
Set up a program-owned data account:
import { address, createEmptyClient, lamports } from '@solana/kit';
import { litesvm } from '@solana/kit-plugins';
const client = createEmptyClient().use(litesvm());
// Your program ID
const programId = address('YourProgramId111111111111111111111111111'); // replace or generateKeyPairSigner()
const dataAccountAddress = address('DataAccount111111111111111111111111111'); // replace or generateKeyPairSigner()
// Serialize your account data structure
// This example uses a simple layout: [u8 discriminator, u64 counter, pubkey owner]
const data = new Uint8Array(1 + 8 + 32);
const view = new DataView(data.buffer);
// Set discriminator
data[0] = 0x01;
// Set counter (u64 little-endian)
view.setBigUint64(1, 100n, true);
// Set owner pubkey (32 bytes)
// In practice, you'd decode a real address here
// Calculate rent-exempt minimum
const minBalance = client.svm.minimumBalanceForRentExemption(BigInt(data.length));
// Set the account
client.svm.setAccount({
address: dataAccountAddress,
data,
executable: false,
lamports: lamports(minBalance),
programAddress: programId,
space: BigInt(data.length),
});
console.log('Program data account set up:', dataAccountAddress);Using setAccount is faster than executing transactions for bulk account setup.
Key Points
- Direct State:
setAccountsets account state without transactions - Rent Exemption: Use
minimumBalanceForRentExemptionto calculate required lamports - Account Structure: Provide all required fields: address, data, executable, lamports, programAddress, space
- Verification: Use
getAccountorclient.rpc.getAccountInfoto verify