Skip to main content

ContractSignature

EIP-1271 contract signature verification primitive. Enables verification of signatures from smart contract wallets using the isValidSignature standard interface.

Overview

EIP-1271 allows smart contracts to validate signatures, enabling:
  • Smart contract wallets (Gnosis Safe, Argent, etc.)
  • Multi-signature schemes
  • Custom signature validation logic
  • Account abstraction

Installation

Basic Usage

Verify Contract Signature

Unified EOA + Contract Verification

API Reference

Functions

isValidSignature(provider, contractAddress, hash, signature)

Verify signature using EIP-1271 contract method. Parameters:
  • provider: JSON-RPC provider with request method
  • contractAddress: Contract address (string or Uint8Array)
  • hash: Message hash (32 bytes)
  • signature: Signature bytes
Returns: Promise<boolean> - True if signature is valid Example:

VerifySignature({ keccak256, recoverPublicKey, addressFromPublicKey })

Factory function that creates a unified signature verifier for both EOA and contract accounts. Parameters:
  • keccak256: Keccak256 hash function
  • recoverPublicKey: secp256k1 public key recovery function
  • addressFromPublicKey: Address derivation function
Returns: Async function that verifies signatures Example:

Constants

The magic value 0x1626ba7e is bytes4(keccak256("isValidSignature(bytes32,bytes)")).

How It Works

Detection Logic

VerifySignature automatically detects the account type:
  1. Calls eth_getCode to check if address has contract code
  2. If no code (0x): Uses EOA verification (ecrecover)
  3. If has code: Uses EIP-1271 contract verification

Contract Interface

EIP-1271 contracts must implement:
Valid signatures return 0x1626ba7e, invalid signatures return anything else.

Usage Examples

With Gnosis Safe

With Personal Message

Custom Provider

Error Handling

Smart Contract Example

Example EIP-1271 implementation:

See Also

  • Address - Ethereum address handling
  • Abi - ABI encoding for contract calls