v0.3.3 stable · V2 ZK PoC live on Base Sepolia    Uniswap v4 Hook

Compliance is the hook.

The verified-flow liquidity layer for institutional DeFi.

PROVE ELIGIBILITY · TRADE PRIVATELY · GET A BETTER DEAL ON UNISWAP V4

ILAL RELEASE STATUS v0.3.3
deploymentBase Sepolia
attestationMockEAS demo
ZKexperimental
tests188
software stable · demo active

Live Base Sepolia evidence

Reproducible source.
Honest deployment status.

These v0.3.3 transactions show Safe-controlled ownership, credential issuance, bounded liquidity and swap execution, plus an expected rejection for an uncredentialed wallet. This is an unaudited MockEAS testnet demo, not a production deployment.

Final acceptance Compliant institution allowed. Non-compliant wallet blocked.

Customers

Built for the desks
that cannot trade naked.

ILAL is not another whitelist UI. It is an execution layer for regulated flow: private eligibility, lower cost per trade, and an on-chain route that market makers can integrate into existing systems.

Institutional trader

Enter DeFi without exposing identity.

Prove eligibility once, hold a CNF, then sign short-lived sessions locally. Compliance status is binary; identity and KYC documents never touch the pool.

Outcome: private access + 0.055% verified path
Market maker

Quote compliant flow as better flow.

Integrate the ILALRouter into internal trading infrastructure. Valid sessions unlock a lower LP fee path while rejected wallets never reach execution.

Outcome: better spreads without leaking strategy
RWA issuer

Launch compliant liquidity without rebuilding KYC.

Deploy your own CNFIssuer, bind a pool policy, and manage eligible wallets through EAS or ZK roots. Your credential controls your pool.

Outcome: issuer-owned compliance perimeter

Product suite

Protocol, tools,
and proof surface.

Protocol

ComplianceHook

Uniswap v4 hook that enforces CNF validity, pool policy, router binding, action binding, deadline, signature, and nonce replay protection.

  • beforeSwap fee override → 0.05%
  • beforeAddLiquidity / beforeRemoveLiquidity gated
  • authorizedRouter immutable on current stack
Credential

CNFIssuer

Soulbound ERC-721 compliance credential with EAS or ZK issuance, timelocked root/verifier updates, revocation, expiry, and on-chain issuer metadata.

Execution

ILALRouter

User-facing Uniswap v4 IUnlockCallback router. Current source supports bounded swap output, LP maximum spends, LP minimum receipts, and fees on actual consumed input.

Developer

CLI + npm

Local v0.3.3 candidate for proof, CNF, sessions, liquidity, swaps, encrypted keystores, RPC-managed accounts, and Safe proposals. npm 0.3.2 is deprecated.

git clone github.com/rpnny/ilal
Audit

Security package

188 Solidity tests plus an expanded CLI suite above the 19-test baseline, 256 fuzz runs, archived chain evidence, and regression coverage for signer, Safe, ERC-1271, policy, expiry, fees, and amount bounds.

The problem

Compliance. Cost. Privacy.
Pick two.

CEX

Centralized exchange → defeats the purpose of on-chain settlement. You don't own the liquidity.

Vanilla Uniswap

No restrictions → non-compliant wallets can interact. Regulators say no.

Custom restrictions

Fragmented liquidity, high dev cost, every RWA issuer reinvents the same wheel.

Full KYC on-chain

Institutions and market makers leak identity. Competitive positions exposed publicly.

ILAL's answer

Users prove eligibility through an issuer attestation or a privacy-preserving ZK proof. A soulbound credential mints once. A Uniswap v4 hook verifies on every swap. Verified flow becomes a liquidity signal and gets 0.05% LP fee. The hook enforces everything — no hosted API, no custody, no KYC leak. Old KYC hooks decide who can pass; ILAL decides who can pass and gives that flow a better deal.

How it works

Four steps.
One issuer-backed credential.

01

Prove issuer eligibility

EAS OR ZK

The public demo uses a MockEAS attestation. ZK-enabled issuers can instead run the Groth16 circuit locally and prove Merkle membership without revealing the full eligibility record.

$ ilal credential mint --attestation 0xUID
02

Mint soulbound credential (CNF)

ON-CHAIN · ~350k gas

The issuer's configured EAS or ZK trust path is checked on-chain. If valid, a soulbound ERC-721 credential mints to the wallet. One credential, valid for 90 days. No re-KYC needed for every trade.

CNF minted · token #3 · expires 2026-08-14
03

Sign a session token

LOCAL · 0 gas

Before each trade, sign a 10-minute EIP-712 SessionToken locally. It binds caller identity, the specific pool, the router address, and a one-time nonce — all without touching the chain.

Session signed · expires in 600s · nonce consumed on swap
04

Swap with verified fee path

HOOK · beforeSwap()

The ComplianceHook runs six checks before every swap: session signature, deadline, caller binding, pool policy match, CNF validity, and one-time nonce. Pass all six → LP fee drops to 0.05%. Fail any → revert.

Swap executed via ILAL channel · fair flow · verified swap fee 0.05%
ComplianceHook.sol — beforeSwap() execution path · Uniswap v4
Institution
ILALRouter
.swap()
Uniswap v4 Hook
beforeSwap()
✓ session signature ✓ authorizedCaller ✓ CNF credential ✓ pool policy match ✓ nonce consumed
LP fee override → 0.05%
PoolManager
Swap
executes ✓
Standard 30bps pool (Uniswap v4) 0.30%
ILAL verified LP fee  hook-enforced 0.05%
ILAL protocol fee 0.005%
Total verified path 0.055% 5.45× lower than standard
Standard 30bps pool0.30%
ILAL verified path0.055%

For RWA issuers

Your pool.
Your credential. Your rules.

Each RWA issuer deploys their own CNFIssuer with their own schemaUID. The pool policy binds to that specific issuer and credential type. Other issuers' credentials cannot enter your pool. Full isolation, composable with any Uniswap v4 pool.

01
Deploy CNFIssuer Your own ERC-721 credential registry with your schemaUID
02
Register pool policy Bind poolId → (cnfIssuer, credentialType)
03
Approve wallets Add KYC'd wallets to Merkle tree, update root on-chain
04
Institutions trade Credentialed wallets get 0.05% fee. Others are excluded by the hook.
Deploy your stack
# Deploy CNFIssuer + ComplianceHook + ILALRouter + pool
forge script script/DeployDemo.s.sol \
  --rpc-url https://sepolia.base.org \
  --broadcast

# Operator queues the updated Merkle root, then activates after timelock
node dist/index.js oracle propose-root --root <newMerkleRoot>
node dist/index.js oracle activate-root

# Bind proofs to this issuer and schema (72h timelock)
node dist/index.js credential zk-root --wallet <wallet> --expires-at <unix> --issuer <cnfIssuer>
node dist/index.js oracle propose-domain --issuer-hash <issuerHash> --schema-hash <schemaHash>
node dist/index.js oracle activate-domain

# Set pool policy to require your credential type
node dist/index.js pool policy set \
  --pool-id  0xYourPoolId \
  --issuer   0xYourCNFIssuer

Integration

Install v0.3.3.
Verify before trust.

Step 01

Install the stable CLI

v0.3.3 is the current source and stable package. npm 0.3.2 is deprecated; 0.2.21 is a legacy old-ABI release.

git clone https://github.com/rpnny/ilal
cd ilal/cli && npm ci && npm run build
node dist/index.js init
node dist/index.js --version # 0.3.3

# Public testnet prototype.
# Production use requires audited contracts
# and a real KYC/KYB attester.
Step 02

Check credential status

New wallets can inspect whether they already hold a CNF credential. If not, the CLI routes them to the ZK proof path or the EAS attestation path.

ilal credential status \
  --wallet 0xYourInstitutionWallet

# Output:
# credential: none
# Path A: generate ZK proof
# Path B: mint from EAS attestation
Step 03

Optional: configure the ZK path

ZK is experimental and disabled in the active public demo. Local proof generation requires a separately configured verifier, root, domain, and non-production proving artifacts.

ilal credential zk-root \
  --wallet 0xYourInstitutionWallet \
  --expires-at 1800000000

ilal --keystore ./wallet.json credential prove \
  --wallet 0xYourInstitutionWallet \
  --expires-at 1800000000

# Output:
# ✓ Proof generated & verified locally
# mintWithProof()
# active root and proof expiry match
Step 04

Sign a zero-gas session

Signs a fresh 10-minute EIP-712 SessionToken locally with an encrypted keystore or a capability-checked RPC account. Safe administrative proposals are separate; native custody-vendor adapters are not claimed.

ilal --keystore ./wallet.json session sign \
  --pool 0xYourPoolId \
  --action swap \
  --hook 0x9B894a...59CA80 \
  --caller 0x2ccd39...ef99A77

# Output:
# ✓ Session signed locally
# hookData ready
# gas spent: 0
Step 05

Simulate or execute swap

Simulate the verified-flow path first, then send a real transaction once the wallet holds a valid CNF. Production scripts must pass a positive quoted output floor; this public testnet walkthrough uses an explicit unsafe opt-out.

ilal --keystore ./wallet.json swap \
  --amount-in 1 \
  --token-in  0xToken \
  --min-amount-out <quotedMinRaw>

# Output:
# ✓ Allowance ok
# ✓ Session signed (expires in 600s)
# ✓ Gate checks ready
# LP fee: 0.05%
# ILAL fee: 0.005%

Full CLI reference

ilal statusDashboard: credential · issuer config · pool policy
ilal credential statusCheck whether a wallet holds a valid CNF credential
ilal credential zk-rootCompute the ZK Merkle root for a wallet and expiry
ilal credential proveTrader flow: local ZK proof → mint or renew CNF
ilal swapCompliant swap via ILALRouter with a required slippage floor
ilal oracleTimelocked root, verifier, and proof-domain updates
ilal pool add-liquidityAdd liquidity with maximum token spend bounds
ilal pool remove-liquidityRemove liquidity with minimum token receive bounds
ilal pool policy setRegister compliance policy for a pool
ilal session signSign a standalone SessionToken
ilal policy proof generateGenerate and locally verify a private V2 eligibility proof
ilal policy grant activateCache a short-lived pool grant after on-chain proof verification
ilal deploy --admin 0xSafeDeploy an issuer-owned stack with custom EAS trust domain

Active · Base Sepolia v0.3.3

Safe-controlled demo.
Verifiable on-chain.

UHI10 · July 2026
beforeSwap() hook entry point
dynamic fee flag 0x800000
IUnlockCallback router pattern

Pool

Pool ID (dynamic fee, verified flow 0.05%) 0x1a05b4…82d1ad
PoolManager (Base Sepolia) 0x05E733…3408

Public candidate · V2 ZK policy grants

Prove private eligibility once.
Trade on a cached grant.

Base Sepolia PoC only. The proving key uses a development ceremony and the testnet admin remains an EOA.

V2 candidate pool

Pool ID 0x524f78…a104a4
Deployment classification public testnet PoC · unaudited