Siphon Docs
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 via CREATE2
  • deposit — route ETH or ERC-20 into vaults; mint commitments
  • withdraw — 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

FamilyVariantsUse
WithdrawalN = 1…6 inputsSend to recipient + change note
MergeN = 2…6 inputsConsolidate notes in-vault
Swap1 inputUniswap V3 route with bound params
Split1 → 8 slicesPortfolio / 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

On this page