Identity Proofs (EVM)

How we represent KYC/AML eligibility on EVM networks using attestation-led identity proofs with EAS + PolicyEngine, separating long-term KYC verification timestamps from short-term sanctions epochs.

Background

On EVM chains, Fairway doesn’t mint identity tokens. Instead, compliance status is expressed through EAS attestations that encode:

  • When the user last passed KYC (kyc_verified_at).

  • Current sanctions/risk freshness (sanctions_epoch).

  • Optional compliance claims (jurisdiction, accreditation, risk score).

  • Commitment root linking to Midnight proofs.

These attestations are:

  • Issued off-chain by the Fairway Cloud Agent (Witness) after reading KYC data from decentralized storage.

  • Anchored on-chain in the EAS registry.

  • Referenced in dApps through the Fairway PolicyEngine:

(bool ok, uint32 reason) = policyEngine.isEligible(user, ruleBytes);

Components

  • EAS (Ethereum Attestation Service) β†’ canonical registry of typed attestations.

  • Fairway Verifier β†’ contract that validates attestations, issuer trust, timestamp, and sanctions epoch.

  • PolicyEngine β†’ single-call YES/NO eligibility check for dApps.

  • IdentityRegistry β†’ governance-controlled list of trusted issuers and rules.

  • Optional faΓ§ade tokens β†’ ERC-5484 / ERC-5192 for UX or whitelist compatibility.


Flow


Example Attestation Schema


Rule Encoding

Policies are defined once in the IdentityRegistry.

dApps pack rules as ruleBytes:


Validator Checks

  1. Attestation validity β†’ issuer signature + schema match.

  2. KYC freshness β†’ block.timestamp - kyc_verified_at <= maxKycAge.

  3. Sanctions freshness β†’ sanctions_epoch == latestEpochRoot.

  4. Other claims β†’ jurisdiction, accreditation, or risk score thresholds.


Benefits

  • PII-free β†’ no sensitive docs stored on-chain.

  • Separation of duties β†’ KYC timestamp (long-lived) + sanctions epoch (short-lived).

  • Compliant β†’ FATF/AMLD rules enforced per jurisdiction by dApp-defined max age.

  • Interoperable β†’ compatible with ERC-3643 TransferManager, EAS tooling, and SBT faΓ§ades.

  • Simple DX β†’ dApps use a single isEligible() call.

  • Auditable β†’ commitmentRoot links attestations back to Midnight ZK proofs.


Next Steps

Last updated

Was this helpful?