Protocol
On-Chain
Entrypoint, vaults, and verifier contracts.
Smart contracts live in siphon-contracts (Solidity on EVM).
Entrypoint
The Entrypoint is the user-facing router:
initializeVaults— deploy Vault per asset viaCREATE2deposit— route ETH or ERC-20 into vaults; mint commitmentswithdraw— verify Groth16 proofs; send to bound recipient- Pause — deposits/swaps pausable; withdrawals always open
Vault + MerkleTree
Each Vault owns a MerkleTree (depth 32, Poseidon hashing). Only the vault can insert leaves.
Nullifiers are tracked in a mapping(uint256 => bool) — spent nullifiers cannot be reused.
Verifier families
| Family | Variants | Use |
|---|---|---|
| Withdrawal | N = 1…6 inputs | Send to recipient + change note |
| Merge | N = 2…6 inputs | Consolidate notes in-vault |
| Swap | 1 input | Uniswap V3 route with bound params |
| Split | 1 → 8 slices | Portfolio / partial execution |
Public signals are pinned at verification — relayers cannot substitute recipients, pools, or slippage floors.
DEX routing
Swaps route through Uniswap V3 on EVM. Pool, fee tier, destination token, and minAmountOut are proof-bound.
Security notes
- Only Entrypoint may call state-changing vault functions
- Fee-on-transfer tokens: commitment minted for amount actually received
- Two-step ownership transfer; emergency pause on state-advancing entry points