{"jsonrpc":"2.0","method":...,"params":[...]} envelope) but uses different primitives. This page covers the concepts that show up across almost every Solana method.
Slots vs blocks
A slot is a ~400ms window in which a designated leader may produce a block. Not every slot produces a block (leaders can skip), so block height ≤ slot height. When EVM code reaches foreth_blockNumber, the Solana equivalent is usually getSlot; use getBlockHeight only when you specifically need produced-block count.
Commitment levels
Most read methods accept acommitment field that controls how finalized the data must be:
| Commitment | Meaning | Use when |
|---|---|---|
processed | The node has processed the slot; may be skipped or rolled back. | Lowest latency, optimistic UIs. |
confirmed | A supermajority of the cluster has voted on the block. | The sensible default for most apps. |
finalized | The block has 31+ confirmed blocks on top; effectively irreversible. | Accounting, settlement, anything that must not roll back. |
Lamports
SOL balances are denominated in lamports:1 SOL = 1,000,000,000 lamports (10⁹). getBalance returns lamports; divide by 1e9 to display SOL. This is the analogue of wei on EVM chains, but with 9 decimals instead of 18.
Accounts, programs, and PDAs
Everything on Solana is an account: wallets, token balances, and program (smart contract) state all live in accounts identified by a base-58 pubkey. Accounts are owned by a program;getProgramAccounts enumerates every account a program owns. SPL token balances live in dedicated token accounts; list a wallet’s holdings with getTokenAccountsByOwner.
Encodings
Account and transaction data can be returned in several encodings, selected via theencoding config field:
| Encoding | Returns |
|---|---|
base58 | Raw bytes, base-58 (small data only). |
base64 | Raw bytes, base-64. |
base64+zstd | Raw bytes, zstd-compressed then base-64 (large accounts). |
jsonParsed | Program-decoded, human-readable JSON where a parser exists (e.g. SPL token accounts). Falls back to base64. |
jsonParsed for readability; use base64/base64+zstd when you’ll decode the bytes yourself. The dataSlice: { offset, length } option limits how many bytes are returned for large accounts.
Versioned transactions
Solana supports versioned transactions (with Address Lookup Tables). Methods that return transactions (getTransaction, getBlock, blockSubscribe) require you to opt in by setting maxSupportedTransactionVersion: 0, otherwise a versioned transaction returns an error. Always set it unless you specifically want legacy-only transactions.
Sending a transaction
The typical send flow:getLatestBlockhash: fetch a recent blockhash and itslastValidBlockHeight.- Build, sign, and (optionally)
simulateTransactionto preview the result. sendTransaction: broadcast; returns the signature immediately.getSignatureStatuses(poll) orsignatureSubscribe(push): confirm.
getRecentPrioritizationFees, and re-send with a fresh blockhash once lastValidBlockHeight is exceeded.
WebSocket subscriptions
Real-time updates use a separate WebSocket endpoint:*Unsubscribe method (or, with @solana/kit, by aborting the subscription’s AbortController). See accountSubscribe, logsSubscribe, and programSubscribe.
Solana method reference
Every Solana method, grouped by category.
Quickstart
Your first Solana call in under a minute.