Validate a message signed by an Ethereum contract wallet

The owner of a contract wallet can rotate, and its authorization policy can involve multiple signers. Ask the wallet whether it accepts a specific signature for a specific digest.

Check the returned magic value

Encode isValidSignature(bytes32,bytes) with the exact digest expected by the application and the supplied signature bytes. Send eth_call to the wallet address. Decode the response as ABI bytes4.

isValidSignature(digest, signature) → 0x1626ba7e

A decoded value of 0x1626ba7e signals acceptance. A different value or revert does not establish authorization. Avoid recovering a single EOA address and treating that as the wallet’s policy.

Record when validation took place

Use the state at the intended block and retain its hash. A signature accepted before a signer rotation can fail later, and a wallet may apply time-dependent rules. Historical rechecks also require state availability for the block being queried. eips.ethereum.org EIP-1271