Account Setup

Account Setup Example

Demonstrates setting up test account state directly without transactions.

Basic Account Setup

import {
createClient,
address,
generateKeyPairSigner,
lamports
} from "@solana/kit";
import { litesvm } from "@solana/kit-plugin-litesvm";
import { signer } from "@solana/kit-plugin-signer";
const mySigner = await generateKeyPairSigner();
const client = createClient().use(signer(mySigner)).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 {
createClient,
address,
generateKeyPairSigner,
lamports
} from "@solana/kit";
import { litesvm } from "@solana/kit-plugin-litesvm";
import { signer } from "@solana/kit-plugin-signer";
const mySigner = await generateKeyPairSigner();
const client = createClient().use(signer(mySigner)).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 {
createClient,
address,
generateKeyPairSigner,
lamports
} from "@solana/kit";
import { litesvm } from "@solana/kit-plugin-litesvm";
import { signer } from "@solana/kit-plugin-signer";
const mySigner = await generateKeyPairSigner();
const client = createClient().use(signer(mySigner)).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

  1. Direct State: setAccount sets account state without transactions
  2. Rent Exemption: Use minimumBalanceForRentExemption to calculate required lamports
  3. Account Structure: Provide all required fields: address, data, executable, lamports, programAddress, space
  4. Verification: Use getAccount or client.rpc.getAccountInfo to verify

Is this page helpful?

Table des matières

Modifier la page
© 2026 Fondation Solana. Tous droits réservés.
Account Setup | Solana