A balance and a contract call can describe different states if a reorganisation happens between requests. An explicit block hash identifies the intended state.

What the primary record establishes

EIP-1898, created on 1 April 2019 and marked Final, adds an object-form block parameter using blockHash or blockNumber to specified Ethereum JSON-RPC methods, including eth_getBalance and eth_call. Ethereum EIPs — EIP-1898: blockHash in defaultBlock methods, Final ↗

With blockHash, requireCanonical defaults to false. When set to true, it asks the node to reject a block outside its canonical chain; the specification distinguishes that case from a block the node cannot find. Ethereum EIPs — EIP-1898: blockHash in defaultBlock methods, Final ↗

What the distinction changes

The underlying reporting problem is coherence. Two requests for “latest” need not describe the same block. A wallet can otherwise combine a sender balance from one state with a recipient balance from another.

Pinning related reads to one hash identifies a common state even when a height alone could refer to a different block after a reorganisation. That improves the meaning of a snapshot without promising that the block will remain canonical forever.

What to check before drawing a conclusion

WFN would record the hash, requested canonicality and node responses with the resulting display. An unavailable historical state and a noncanonical block should remain distinguishable errors, rather than being replaced silently with current data.

Check the particular provider’s support and available state history. A Final interface specification is not evidence that every endpoint implements every option or retains all old states. Consistency, availability and finality are separate questions.