Can this Ethereum node read an old account balance?
A block header can survive long after the account state at that height has left local storage. Test the read that your application needs before sending an archive workload to a new endpoint.
Run two reads at the same height
On Ethereum mainnet, the following requests look up block 10,000,000 and the balance of the zero address at the end of that block. Send each JSON body separately to your HTTP RPC endpoint using POST and Content-Type: application/json.
{"jsonrpc":"2.0","id":1,"method":"eth_getBlockByNumber","params":["0x989680",false]}
{"jsonrpc":"2.0","id":2,"method":"eth_getBalance","params":["0x0000000000000000000000000000000000000000","0x989680"]}
Interpret the two responses
Record the hash returned by the first call. A hexadecimal quantity in the second response gives the balance in wei, including a valid balance of 0x0. If the header is available and the balance request reports unavailable state, repeat the balance request with latest. A successful current read isolates the problem to the historical request. Save the full error because a gateway access policy can also reject that call.
Match the test to the workload
A successful read establishes one address and height. Repeat at the oldest block in your reporting period, using an account with an independently known balance. If the application also needs storage proofs, test that capability separately. Geth can retain historical balances and still lack the historical trie nodes needed for proofs. geth.ethereum.org Geth archive storage