For the complete documentation index, see llms.txt. This page is also available as Markdown.

Signed Reads

A signed read is a Seismic transaction (type 0x4a) sent to eth_call instead of eth_sendRawTransaction. It lets contracts authenticate the reader's msg.sender for read-only queries — e.g., "only the owner can view their balance."

Why signed reads exist

In the EVM, anyone can set the from field of an eth_call to spoof any address. Seismic closes this in two parts:

  1. Vanilla eth_call has its from field zeroed out by the node — msg.sender == 0 inside contract code

  2. A signed read is a Seismic tx where the validator recovers the signer from the signature and uses that address as msg.sender

How signed reads differ from write txs

A signed read is built exactly like a write tx (same SeismicElements, same encryption flow — see Tx Lifecycle and Cryptography). The differences are:

  • Sent to eth_call, not eth_sendRawTransaction. Either a raw tx or an EIP-712 envelope (message_version = 2)

  • The signed_read field should be set to true (default in our clients). The tx-pool rejects signed_read = true at write submission, so an intercepted signed read can't be replayed as a write tx

  • The validator decrypts the calldata, runs the call inside the EVM, and returns the result encrypted to the client's encryption_pubkey — an on-path interceptor can't read the response either

  • Signed simulations, including signed eth_call and eth_estimateGas requests, require signed_read = true. For gas estimation, clients build a separate signed-read twin of the write with fresh encryption metadata, simulate that request, and then sign the final write with signed_read = false. This keeps the estimate non-broadcastable and avoids reusing an AES-GCM nonce between the simulation and the write

Last updated