A wallet can display a token balance without asking you to pay for a new blockchain transaction each time. Reading contract state and submitting a transaction that changes state are different operations. Confusing them makes both development and wallet prompts harder to understand.
The Ethereum execution API documentation for eth_call describes executing a call without creating a transaction on the blockchain. A node evaluates it against a selected state and returns a result; the call does not persist a new on-chain state change.
“No paid transaction” is a narrower claim than “free”
A standalone read through an RPC provider does not normally require the user to submit an on-chain transaction fee. The provider may still charge for API access or impose usage limits. The node also performs computation, so requests can have execution limits even though no fee-paying transaction is mined.
Furthermore, a function being read-only does not mean it contributes no gas when called as part of a real transaction. Context matters. A contract operation inside a submitted transaction participates in that transaction’s execution.
Ask which state answered the question
A balance queried at one block can differ from a later balance. Record the network, contract address, account and block context when the result matters. A development test that silently switches networks can return a plausible-looking answer from the wrong place.
- Separate reads from signing or transaction submission in the interface.
- Validate the expected network and contract.
- Handle provider errors and limits explicitly.
- Label stale or historical results where relevant.
A wallet request to sign or submit something deserves attention even when a page describes the action as “checking” information. The application’s label is not enough; understand whether the actual operation is a read, a signature request or a state-changing transaction.

