eth_getBalance - Moonbeam RPC Method
Query account balance on Moonbeam. Essential for wallet applications and cross-chain DeFi, multi-chain dApps, and Ethereum-to-Polkadot bridging via XCM, Axelar, LayerZero, and Wormhole on the cross-chain connected EVM platform on Polkadot with $65M+ TVL and 100+ projects.
Returns the balance of a given address on Moonbeam.
Why Moonbeam? Build on the cross-chain connected EVM platform on Polkadot with $65M+ TVL and 100+ projects with full EVM compatibility on Polkadot, native XCM cross-chain messaging, 10K+ TPS, 24% staking APR, and $0.015 transaction costs.
When to Use This Method
eth_getBalance is fundamental for cross-chain dApp developers, Polkadot builders, and teams requiring multi-chain interoperability:
- Wallet applications: Display user balances and enable balance-dependent operations on Moonbeam
- Transaction validation: Verify accounts have sufficient funds before submitting transactions to Moonbeam
- DeFi monitoring: Track collateral positions, liquidity pools, and TVL across cross-chain DeFi, multi-chain dApps, and Ethereum-to-Polkadot bridging via XCM, Axelar, LayerZero, and Wormhole
- Accounting and reconciliation: Cross-reference on-chain balances against off-chain ledger entries for financial reporting
Common Use Cases
1. Display Formatted Wallet Balance with Ether Conversion
Retrieve and display a human-readable balance for any address on Moonbeam. Convert the wei result to ether client-side using your web3 library.
import { JsonRpcProvider, formatEther } from 'ethers';
const provider = new JsonRpcProvider('https://api-moonbeam.n.dwellir.com/YOUR_API_KEY');
async function displayBalance(address) {
const balanceWei = await provider.getBalance(address);
const balance = formatEther(balanceWei);
console.log(`Balance: ${balance} Moonbeam`);
return balance;
}
displayBalance('0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045');2. Monitor Whale Wallet Activity with Polling and Threshold Alerts
Poll a high-value wallet on Moonbeam at regular intervals. Trigger an alert when the balance crosses a defined threshold, useful for tracking DeFi movements or exchange hot wallet activity.
from web3 import Web3
import time
w3 = Web3(Web3.HTTPProvider('https://api-moonbeam.n.dwellir.com/YOUR_API_KEY'))
address = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
threshold_wei = w3.to_wei(100, 'ether')
def monitor_balance():
previous_balance = w3.eth.get_balance(address)
while True:
time.sleep(15)
current_balance = w3.eth.get_balance(address)
if abs(current_balance - previous_balance) > threshold_wei:
print(f'Balance changed by more than 100 Moonbeam')
if current_balance > w3.to_wei(1000, 'ether'):
print(f'Whale alert: wallet exceeds 1000 Moonbeam')
previous_balance = current_balance
monitor_balance()3. Historical Balance Tracking Using Block Tags
Query an account's balance at a specific block height to build a historical balance timeline. This is essential for audit trails, tax reporting, and analyzing wallet behavior over time on Moonbeam.
package main
import (
"context"
"fmt"
"log"
"math/big"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)
func main() {
client, _ := ethclient.Dial("https://api-moonbeam.n.dwellir.com/YOUR_API_KEY")
address := common.HexToAddress("0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045")
// Query balance at a specific block number
blockNumber := big.NewInt(1000000)
historicalBalance, _ := client.BalanceAt(context.Background(), address, blockNumber)
fmt.Printf("Historical balance at block 1,000,000: %s wei\n", historicalBalance.String())
// Query latest balance for comparison
currentBalance, _ := client.BalanceAt(context.Background(), address, nil)
change := new(big.Int).Sub(currentBalance, historicalBalance)
fmt.Printf("Balance change: %s wei\n", change.String())
}Best Practices
- Cache balances with short TTL: Set a 2-5 second cache duration for balance queries to reduce RPC calls while keeping data fresh enough for most UI use cases
- Convert wei to ether client-side: Use
formatEther(ethers.js) orfromWei(web3.py) rather than relying on node-side conversion, which the JSON-RPC does not provide - Use
pendingtag cautiously: Balances returned with thependingblock tag may reflect unconfirmed state changes and differ from finalized on-chain values - For batch balance queries, use
eth_callwith multicall: When querying balances for many addresses, bundle them through a multicall contract to reduce individual RPC round-trips
Code Examples
Error Handling
| Error Code | Message | Description |
|---|---|---|
| -32602 | Invalid params | Invalid address format or block parameter |
| -32000 | Execution error | Node execution error |
Related Methods
eth_getCode- Get contract bytecodeeth_getTransactionCount- Get account nonce
eth_getBlockReceipts
Return every transaction receipt in a block on Moonbeam. Useful for indexers, analytics pipelines, and event backfills across cross-chain DeFi, multi-chain dApps, and Ethereum-to-Polkadot bridging via XCM, Axelar, LayerZero, and Wormhole.
eth_getCode
Get contract bytecode on Moonbeam. Essential for verifying smart contracts for cross-chain DeFi, multi-chain dApps, and Ethereum-to-Polkadot bridging via XCM, Axelar, LayerZero, and Wormhole.