The getBalance RPC method is a straightforward way to find out the native SOL balance of any account on the Solana blockchain. It returns the balance in lamports (1 SOL = 1,000,000,000 lamports).

This method is more lightweight than getAccountInfo if you only need the SOL balance and no other account details.

Main Use Case

  • Quickly Checking an Account’s SOL Holdings: The primary use is to determine how much SOL an account (wallet, program, etc.) holds.

Parameters

  1. publicKey (string, required): The base-58 encoded public key of the account to query.

  2. config (object, optional): A configuration object with the following fields:

    • commitment (string, optional): Specifies the commitment level to use for the query. Defaults to finalized.
      • finalized: The node will query the most recent block confirmed by the supermajority of the cluster as having reached maximum lockout.
      • confirmed: The node will query the most recent block that has been voted on by a supermajority of the cluster.
      • processed: The node will query its most recent block. Note that the block may not be complete.
    • minContextSlot (number, optional): The minimum slot that the request can be evaluated at.

Response

The result field of the JSON-RPC response will be an object containing:

  • context (object):
    • slot (number): The slot at which the balance was retrieved.
    • apiVersion (string, optional): The RPC API version (may not be present from all nodes).
  • value (number): The balance of the account in lamports (unsigned 64-bit integer).

If the account does not exist on-chain, getBalance will typically return a value of 0 lamports.

Example: Fetching an Account’s Balance

Let’s check the SOL balance of the Serum Program V3 ID (9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin) on mainnet. This program account itself holds SOL for rent exemption.

Note: Replace YOUR_API_KEY with your actual Helius API key in the examples below.

curl https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY -X POST -H "Content-Type: application/json" -d \
'{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getBalance",
  "params": [
    "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"
  ]
}'

Developer Tips

  • Simplicity for SOL Balance: If you only need an account’s SOL balance and no other on-chain data (like owner, data, or executable status), getBalance is more efficient than getAccountInfo as it fetches less data.
  • Non-Existent Accounts: If an account does not exist on-chain (has never been initialized or had SOL), getBalance will return 0. This can be a quick way to check for account existence if you only care about its SOL balance.
  • Lamports vs. SOL: Remember that the balance is returned in lamports. You’ll need to divide by LAMPORTS_PER_SOL (1,000,000,000) to convert it to SOL.
  • Commitment Levels: The choice of commitment can affect how quickly you get the balance and how confirmed that balance is. For most UI display purposes, confirmed offers a good balance. For critical financial transactions, finalized provides the highest assurance. See Solana Commitment Levels for detailed information.
  • Batching with getMultipleAccounts: While getBalance is for a single account, if you need balances for many accounts, using getMultipleAccounts and then extracting the lamport balance from each account’s info can be more performant than many individual getBalance calls.