Winner · Zama Developer Program — Mainnet Season 2

Confidential compliance for institutional onchain finance.

AttestRail enforces eligibility, risk, and exposure rules over fully encrypted state. Investor attributes, issuer policy thresholds, and an issuer-wide exposure aggregate stay encrypted on-chain — transfer enforcement is FHE-native via FHE.select, and only the final decision is ever revealed.

5contracts live on Sepolia
25passing tests
euint64encrypted balances & thresholds
FHE.selecttransfer gating

“AttestRail is a confidential compliance layer for tokenized RWAs: eligibility checks run on encrypted data, transfers are gated by FHE.select, and balances stay encrypted onchain. … This is the kind of primitive that makes regulated capital comfortable moving onchain.”

— Zama, Mainnet Season 2 winners announcement, May 28 2026

Three-minute demo

Encrypted eligibility, end to end, on Sepolia.

The problem

Public chains expose too much. Regulated finance needs the opposite.

RWA platforms, stablecoin issuers, and regulated DeFi must verify investor eligibility, jurisdiction, sanctions exposure, risk tier, and transaction limits. Today these checks run offchain or through public allowlists — and both leak.

  • Investor identity, jurisdiction, and risk are commercial signal.
  • Issuer exposure thresholds and aggregate utilization are commercial signal.
  • Even compliance standards keep eligibility data public: ONCHAINID's own docs warn — “Do NOT store sensitive information in the data field of a claim, even encrypted.”

How it works

Five components. One encrypted compliance flow.

  1. 1

    Approved attester signs the profile

    A KYC/AML provider verifies the investor off-chain, encrypts the attributes, and signs an EIP-712 attestation binding the encrypted handles, expiry, and a single-use nonce to the wallet.

  2. 2

    Registry verifies before storing

    submitProfile verifies the approved signer, the handle digest, expiry, and nonce — only then ingests the ciphertexts. Two proof layers: Zama's input proof and the attester signature.

  3. 3

    Issuer sets encrypted thresholds

    Per-investor exposure ceilings and the issuer-wide cap are encrypted euint64 values. The issuer can decrypt its own thresholds; the market cannot.

  4. 4

    Eligibility over encrypted state

    The gate evaluates per-investor checks plus the issuer-wide aggregate-cap check in the encrypted domain, then conditionally updates the encrypted aggregate via FHE.select — blocked checks leave it untouched, with no public branch.

  5. 5

    FHE-native transfer enforcement

    Token balances are encrypted euint64; the transfer moves FHE.select(eligible, amount, 0). No decryption sits on the enforcement path — the public eligible bit exists only for UI and compliance-officer visibility.

Why FHE, not ZK

Shared, evolving state that no transfer-time prover knows.

ZK proves what the prover knows

Zero-knowledge proofs suit static per-user claims: a credential, a list inclusion, a balance the prover holds in cleartext. There is always someone who knows the secret.

FHE evaluates what no one knows

AttestRail's issuer-wide exposure aggregate evolves with every investor's check. No transfer-time prover knows its value — so there is nothing to prove in ZK. FHE compares and updates it directly in the encrypted domain via FHE.select.

The cap and its utilization are never published on-chain. The issuer can privately audit its own aggregate; investors, counterparties, and the market learn nothing.

ERC-3643 · T-REX

The eligibility leg of confidential RWA compliance.

ERC-3643 solved compliance enforcement — identity and eligibility rules travel with the asset. Zama, the protocol AttestRail is built on, is the confidentiality layer of the T-REX Ledger, bringing encrypted settlement to the $32B+ ERC-3643 pipeline. What stays exposed is the eligibility layer's data itself: claims metadata, issuer policy parameters, and aggregate exposure.

AttestRail is building the confidential eligibility module for this stack: a pre-clearance compliance module — the spec-correct shape, since ERC-3643's canTransfer path is view-only and FHE operations are state-changing. Our attesters map onto ONCHAINID's ClaimIssuer role; encrypted attributes complement ONCHAINID claims rather than replacing them.

Live on Sepolia

Verified contracts, measured numbers.

AttesterRegistry0xf714…0B3d
AttestRailRegistry0x7275…9000
AttestRailPolicy0xc3F4…6A4D
PrivateEligibilityGate0x803F…929d
MockRWAToken0x34ED…A3E3

25 passing tests across eligible, blocked (sanctions / per-investor cap / aggregate cap), trust-layer rejection, and selective-disclosure paths. Measured end-to-end latency on Sepolia: ~48s median across the full three-transaction demo flow — the decryption step is UI-only, enforcement needs two transactions. Testnet deployment; contracts are unaudited.

Roadmap

Where this goes next.

Shipped

  • Zama Mainnet Season 2 — Builder Track winner
  • 5 contracts live on Sepolia, 25 passing tests
  • EIP-712 attester trust layer
  • Encrypted thresholds + issuer-wide aggregate cap
  • FHE-native transfer enforcement

In progress

  • ERC-3643 compliance-module reference implementation
  • T-REX ecosystem & AppStore application
  • Attester-side encryption for fresh-wallet onboarding
  • Public eligible-bit read endpoint

Next

  • Multi-issuer shared exposure caps
  • Real attester integrations (regulated KYC/AML providers)
  • Security audit
  • Design-partner pilots

Building confidential compliance on Zama.

RWA issuer, transfer agent, or fund administrator exploring confidential eligibility? We are starting design-partner conversations.