Verification Flow

Verifier Participation Flow

Key Principle: Verification parameters must be read from on-chain verificationParams, never trust off-chain data.


Model: Spec & Instance

A Verifier consists of two independent parts:

Verifier Spec (Specification Contract)

  • Defines "what this type of transaction needs to verify" — verification parameter format, EIP-712 signature structure, check() verification logic
  • Deal Contracts reference a specific Spec when written and verify the Verifier's signature legitimacy through the Spec's check()
  • Specifies the abi.encode format of specParams for off-chain services to decode on-chain parameters
  • One Spec corresponds to one type of verification business; immutable after deployment
  • Multiple Verifier instances can share the same Spec, forming a competitive market
  • Implements the VerifierSpec base contract

Verifier Instance (On-chain Contract + Off-chain Service)

  • On-chain contract: Inherits VerifierBase, exposes owner(), signer(), spec(), DOMAIN_SEPARATOR, and provides reportResult() entry
  • Off-chain service: Listens to platform messages, handles request_sign (generate signed quotes) and notify_verify (execute verification and submit results)

check() only recovers the signer address. The Deal Contract compares the recovered address against IVerifier(verifier).signer() before accepting the quote.

If you need to design a brand new verification specification (defining new parameter formats and signature structures), see Creating a Verifier Spec.