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.
Winner · Zama Developer Program — Mainnet Season 2
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.
“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
The problem
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.
How it works
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.
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.
Per-investor exposure ceilings and the issuer-wide cap are
encrypted euint64 values. The issuer can decrypt
its own thresholds; the market cannot.
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.
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
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.
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
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
| AttesterRegistry | 0xf714…0B3d |
| AttestRailRegistry | 0x7275…9000 |
| AttestRailPolicy | 0xc3F4…6A4D |
| PrivateEligibilityGate | 0x803F…929d |
| MockRWAToken | 0x34ED…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
RWA issuer, transfer agent, or fund administrator exploring confidential eligibility? We are starting design-partner conversations.