{{ brand }}

Confidential ETH, settled on Base.

Shield ETH into a private note pool, transfer value invisibly, and withdraw to any address. Zero-knowledge proofs — no trusted setup, no public balances.

Shared shielded pool
Your balance is a private note, indistinguishable from every other.
Gasless withdrawals
A facilitator can pay gas — and provably cannot redirect your funds.
Your keys, your notes
Notes live in your browser. Export an encrypted backup anytime.
Base Sepolia · testnet · no real funds at risk
live shielded pool
notes in tree2,184,907
total locked41,209 ETH
tree depth24 levels
proof systemUltraHonk
commitment scheme
Poseidon4(secret, nullifier,
amount, asset_id
)
Shielded {{ shieldedStr }} ETH
{{ addrShort }}
Agent session active Actions are proposed as unsigned transactions — you sign. The MCP server never holds your key. Non-custodial.

Vault

Your private notes and recent activity.

Shielded balance
{{ shieldedStr }}ETH
{{ shieldedCount }} private notes · hidden on-chain
Public wallet
{{ publicStr }}ETH
{{ addrShort }} · visible

Private notes · {{ shieldedCount }}

{{ n.amountStr }} ETHShielded
leaf #{{ n.leafIndex }} · {{ n.ago }}
commitment {{ n.commitShort }}
No private notes yet
Shield some ETH to create your first confidential note.

Recent activity

{{ a.icon }}
{{ a.label }}via agent
{{ a.sub }}
{{ a.amount }}
{{ a.ago }}

Shield ETH

Move ETH into the private pool. Your balance becomes a confidential note only you can spend.

Asset
Ξ
ETH
USDCsoon
WETHsoon
Denomination
Fixed denominations keep deposits indistinguishable in the pool.
Pre-deposit screening {{ addrShort }} · pass
Depositor screened against sanctions feeds (TRM · Chainalysis · Elliptic). Enforced at protocol entry — a blocked address reverts on-chain, so agents and direct callers can't bypass it. Roadmap
Deposit{{ shieldAmountStr }} ETH
Protocol fee · 0.25%{{ shieldFeeStr }} ETH
You pay{{ shieldTotalStr }} ETH
Private note created{{ shieldReceiveStr }} ETH
What happens on-chain
commitment =
Poseidon4(secret, nullifier, amount, asset_id)
public inputs → verifier:
[amount, asset_id, commitment]
Only the commitment + leaf index are emitted. The amount is never published.
per-address limit50 ETH / hour

Unshield

Burn a private note and release ETH to a public address.

Select a note
Destination
Enter a valid 42-character 0x address.
The recipient is bound inside the proof — the facilitator can submit but cannot redirect funds.
Association set Roadmap
Withdrawal proves ZK membership in a clean set without revealing your deposit. If a deposit is later flagged, the ragequit path lets you dissociate and withdraw to source.
Withdraw{{ unAmountStr }} ETH
Protocol fee · 0.25%{{ unFeeStr }} ETH
Recipient receives{{ unNetStr }} ETH
burn proof
nullifier_hash =
Poseidon2(nullifier, leaf_index)
public inputs:
[root, nullifier_hash, amount, asset_id, recipient]
No notes to unshield. Shield some ETH first.

Private transfer

Send a note to another 0zk address. The amount stays hidden on-chain — only that a transfer occurred is visible.

Note to send
Recipient
Enter a valid 0zk1… address.
Sending{{ trAmountStr }} ETH
Visible on-chainamount hidden
Protocol feenone
transfer proof
public inputs:
[root, nullifier_hash, new_commitment, asset_id]
amount is a private input — same in and out. Value preserved, never revealed.
No notes to send. Shield some ETH first.

0zk addresses

Human-readable private addresses for receiving transfers. Share yours freely — it reveals nothing about your balance or history.

Your receiving address
QR
{{ zkAddrShort }}
spending key · BabyJubjub (EdDSA)
viewing key · Ed25519 / X25519 (ECDH)
masterPublicKey = Poseidon4(spendPub.x, spendPub.y, nullifyingKey, 0)

Contacts

{{ c.initial }}
{{ c.name }}
{{ c.short }}
Add a contact

Backup & restore

Your notes live in this browser. Back them up — they are the only way to spend your shielded ETH.

No recovery without a backup. If you clear this browser and have not exported, your shielded funds are permanently unrecoverable. There is no server-side copy.
Export
{{ noteCount }} unspent notes
{{ backupBlob }}
Restore
{{ importError }}

Agents & MCP

Live

Operable by AI agents out of the box. Any MCP-compatible agent — Claude Code, API agents, or a bash-only agent — can query the protocol and propose private deposits/withdrawals, non-custodially.

Awaiting your signature · {{ pendingCount }}
{{ p.icon }}
{{ p.kind }} · {{ p.summary }}
unsigned tx · proposed {{ p.ago }}
Local · stdioFull toolset
Proof generation + local note store. Secrets never leave the machine; shield returns an unsigned tx.
npx ceaser-mcp
Remote · HTTPRead-only
Six query tools for compliance & decisioning. No proof generation, no access to the note store.
{{ mcpEndpoint }}
Non-custodial by construction. The agent and server never hold your signing key. Every state-changing action returns an unsigned transaction for you to sign — and the same protocol-level screening gate applies to agents as to the UI.

Exposed tools

Read-only · stdio + HTTP
ceaser_get_denominations
ceaser_get_fees
ceaser_get_merkle_root
ceaser_get_pool_info
ceaser_check_nullifier
ceaser_get_status
Write & notes · stdio only — returns unsigned tx / stays local
ceaser_shield_eth ↗ unsigned
ceaser_unshield ↗ gasless
ceaser_list_notes · local
ceaser_import_note · local

Agent activity

{{ a.mode }}
{{ a.tool }}
{{ a.detail }}
{{ a.ago }}

Compliance

Built for a compliance desk and an operator's counsel — not just a privacy demo.

i Honesty discipline: capabilities are described as compliance-capable, never "compliant." Live vs. roadmap is labelled on every item — marketing must not outrun the deployed artifact.
Deposit screening gateRoadmap
Every depositor screened against sanctions / illicit-activity feeds at protocol entry. Blocked → the deposit reverts. Decisions logged immutably.
Association sets (ASP)Roadmap
Privacy-Pools-style proof of innocence: withdrawals prove membership in a clean, versioned set. Ragequit path for later-flagged deposits.
View keys / disclosurePartial
Per-user selective disclosure to a chosen third party. Additive to privacy — not the compliance story. Key primitives present; flow in build.
Non-custodial / no admin keysLive
No admin key can move user funds; verifiers are immutable, no proxy. Honest caveat: pause() can halt deposits/withdrawals — a censorship vector, not a theft vector.
Proving stack · UltraHonk (Noir)Live
Deployed verifiers are Noir → UltraHonk. The legacy Circom/Groth16 path is marked DO-NOT-USE; any "Groth16" claim must be reconciled before publishing.
Formal verification (Certora)In review
A Certora rule suite exists. Presented as "formal-verification-in-progress," not "formally verified," until an independent report covers the deployed artifact.
Why screening is a protocol gate, not a UI gate
Agents and direct callers hit the same on-chain entrypoints as this UI. UI-only filtering is worthless to a compliance desk and bypassable by any caller. Putting the gate in the contract is the only way it binds an autonomous agent.

Screening audit log

{{ x.verdictLabel }}
{{ x.addr }}
{{ x.list }}
{{ x.ago }}

Data room readiness

Open contract source & addressesready
Audit report for the live proving stackin review
Screening + ASP architecture documentroadmap
Verifiable circulation / supply ($S47)roadmap

Selective disclosure

Partial

Grant a chosen third party — an auditor or exchange — read-only insight into your history. Additive to privacy, scoped and revocable. Never a backdoor for anyone else.

Your viewing key
{{ viewKeyDisplay }}
Derived from your 0zk viewing key (Ed25519 / X25519, note-encryption ECDH). Anyone you share it with can decrypt the history you scope — share deliberately.
Grant access
Scope
Expires in (days)

Active grants

{{ g.name }}{{ g.statusLabel }}
{{ g.scope }} · {{ g.expiryStr }}

What the auditor sees

Read-only view a full-history grantee receives — decrypted notes & flows, no spend ability.

Auditor view · scope: full history
{{ n.amountStr }} ETH leaf #{{ n.leafIndex }} visible to grantee
{{ flowTitle }}
{{ flowSub }}
{{ s.mark }}
{{ s.label }}
{{ flowSuccessTitle }}
{{ flowSuccessMsg }}
{{ r.label }} {{ r.value }}
{{ toastText }}