Solana Fundamentals Best Practices
The foundations to internalize before writing programs, clients, or infrastructure on Agave 4.1.1.
Search across all documentation pages
The foundations to internalize before writing programs, clients, or infrastructure on Agave 4.1.1.
bigint in TypeScript; avoid f64 casts in Rust programs.getMinimumBalanceForRentExemption before init.solana-test-validator) for CI.solana genesis-hash confirms you are on the intended network.*.json key files to .gitignore; use secrets managers in production.isSigner: true. Missing signer flags cause runtime rejection.confirmed commitment for most dapp actions. Reserve finalized for high-value settlements.State lives in accounts, not inside programs. Design account layouts before writing instruction logic.
Localnet. Surfpool 0.12.0 or solana-test-validator avoids rate limits and cluster instability.
JavaScript number cannot represent all lamport values exactly. Use bigint end-to-end.
confirmed for display. Consider finalized before releasing funds from escrow.
Explorer link with ?cluster= param matching the network where the tx was sent.
Before designing any "one contract stores everything" pattern. Solana needs account-per-entity design.
Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, @solana/kit 7.0.0 per this site's manifest.
No. Transactions can be dropped or reordered at processed. Wait for confirmed minimum.
solana config get, solana balance, solana airdrop 1, send 0.001 SOL, confirm in explorer with correct cluster param.
No. Use @solana/kit 7.0.0 for new TypeScript clients. web3.js v1 is legacy.
solana config set --url devnet && solana airdrop 2Slots (~400 ms) drive block production. User confirmation should track commitment levels, not slot counts.
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 16, 2026