Demo
on testnet. Right now.
Two vaults are live on Arbitrum Sepolia: the Stage 1 Paillier reference and the Stage 2 EC-ElGamal vault. The five-step walkthrough below uses the Stage 1 Paillier vault, which has a browser UI. Stage 2 contract details are in the Reference section below.
Open the Vault →— encrypted end-to-end.
You will need: MetaMask (or any Ethereum wallet), a browser, and ~5 minutes. Everything happens on Arbitrum Sepolia testnet — no real money is used. Transaction fees are paid in testnet ETH, obtained free from the Alchemy faucet in Step 1.
You need a small amount of testnet ETH on Arbitrum Sepolia to pay transaction fees. The Alchemy faucet is the most reliable source — 0.001 ETH per drip, enough for several transactions.
Faucet: alchemy.com/faucets/arbitrum-sepolia
Alternative: sepoliafaucet.com (Ethereum Sepolia) then bridge to Arbitrum Sepolia via bridge.arbitrum.io. Bridging from Sepolia → Arbitrum Sepolia takes ~10 minutes.
If your MetaMask doesn't have Arbitrum Sepolia yet, add it manually or click "Add Network" from the vault interface. Network parameters:
- Network name: Arbitrum Sepolia
- RPC URL:
https://sepolia-rollup.arbitrum.io/rpc - Chain ID:
421614 - Currency symbol: ETH
- Block explorer:
https://sepolia.arbiscan.io
Once connected, open sunima.uk/vault and click "Connect Wallet". Approve the MetaMask connection prompt. Your wallet address should appear in the top-right corner.
Enter an amount (e.g. 0.01 ETH) into the Deposit field. Click Deposit. MetaMask will prompt you to approve two transactions:
- Transaction 1: your client encrypts the amount under the organizer's 2048-bit Paillier public key. The ciphertext is submitted to the vault contract.
- Transaction 2: the contract adds the ciphertext to your existing encrypted balance via
E(a) + E(b) = E(a+b)— no decryption required. ETH is transferred into the vault.
After confirmation, your on-chain balance is a ciphertext. Block explorers show that you deposited, not how much.
Enter a withdrawal amount. Click Withdraw. The flow:
- Your client requests a withdrawal for a specific amount (not the full balance).
- The organizer signer (operated by Sunima core team) verifies the request is within your encrypted balance, signs the authorization, and relays it to the contract.
- The contract subtracts the ciphertext of the withdrawal amount from your encrypted balance and transfers plain ETH to your wallet.
Current trust model: the organizer is a single signer operated by Sunima core team. Stage 4 will replace this with a FROST threshold-MPC committee (currently a 2-of-3 proof-of-concept; a production k-of-N committee is not yet built) — see Architecture §6.
Enter a recipient address and an amount. Click Transfer. The client encrypts the transfer amount under the organizer's public key; the contract simultaneously subtracts from your encrypted balance and adds to the recipient's — both operations are additive homomorphic.
Observers on Arbiscan see: sender wallet, recipient wallet, a ciphertext blob. They cannot see the transfer amount, the sender's balance, or the recipient's balance. Two wallets visibly interact; the value between them is encrypted.
This is Paillier additive privacy. Stage 2 — also live, on Arbitrum Sepolia at 0x3a0d9A52416847D984a17D0dBe849cdF6492209E (v0.7.1) — routes balance arithmetic through EC-ElGamal on BN254 for measured 12–18× lower gas vs the Paillier vault on the same network. Stage 3 — closed (May 2026) — adds the on-chain TFHE attestation verifier SunimaTFHEPredicatesV3 at 0x1840e8E2EF53e8AaA846941aa628d7bd70E27396, with an off-chain Rust worker (Zama tfhe-rs v1.6.0) signing EIP-191 attestations for encrypted range / compare / conditional predicates; on-chain verifyAndConsume* measured at ~33K gas median. Stage 4 will decentralise the organizer via a FROST threshold-MPC committee (currently a 2-of-3 proof-of-concept; production k-of-N not yet built).
SunimaVault Paillier is deployed, verified, and transacting today. Source is auditable on Arbiscan; the organizer signer is operated by Sunima core team. Stage 4 will replace the single signer with a FROST threshold-MPC committee (currently a 2-of-3 proof-of-concept; production k-of-N not yet built).
SunimaVaultPaillier
4216140xe5254A5E21403Ae07a6925071796d596451f7f86E(a) + E(b) = E(a+b))SunimaVaultElGamal Stage 2 · Demo deployment
EC-ElGamal additive encryption on BN254. Isolated demo keypair — distinct from the production organizer keys. Source-verified on Arbiscan. Try the live UI → or interact via cast / Foundry scripts below.
4216140x3a0d9A52416847D984a17D0dBe849cdF6492209EE(a) + E(b) = E(a+b))0x1b69e67a6773f4c6712584e4a14c534b68d0534c1c0764cdff8f02ba1f92a4a90x246a0364bdab4d072a956395f318f9ab7822cf3a2397c1c6a00c1953fff48d9e0x1840e8E2…7396