Historical contract reads
Use read_contract_at when the block number is already a typed BIGINT value or comes from block_at.
The ABI and function name remain planning-time constants so the exact scalar or STRUCT return type can be inferred.
- NULL block numbers return NULL without an RPC request.
- Negative block numbers are rejected locally.
- Use read_contract options instead when you need a block tag, on_error, or a dynamic return schema.