ZK Layer
Silo uses zero-knowledge proofs to create mathematical unlinkability between deposits and withdrawals in the shared vault. This page explains the cryptographic mechanism that powers that unlinkability: how commitments are generated, how proofs are verified, and why the system ensures that only the designated wallet can withdraw funds without revealing which deposit is being claimed.
The inputs are:
amount: the exact token volume being deposited.
pubKey: a hash derived from a securely generated random private key, computed as Poseidon(privateKey).
blinding: a dynamically generated 32-byte entropy number. This ensures that even if multiple users deposit identical amounts bound to the same withdrawal address, their commitments remain entirely unique and untraceable.
recipientHash: the hashed representation of the designated withdrawal wallet address.
The commitment is computed entirely off-chain. Only after the computation succeeds is the commitment data bundled into the on-chain transaction that executes the vault deposit. The commitment is then added to an on-chain Merkle tree. The secret values (private key, blinding) are managed internally by Silo’s backend. The user never sees or handles them.
The nullifier is submitted alongside a zero-knowledge proof that verifies the receiver’s right to withdraw without revealing which deposit the withdrawal corresponds to. The proof demonstrates that the withdrawer knows the secret values bound to a valid commitment in the Merkle tree, without exposing those values or identifying which commitment is being claimed.
The smart contract verifies the proof and checks that the nullifier has not been used before. If valid, the contract consumes the nullifier and releases the funds. Because each commitment produces a unique nullifier, no deposit can be claimed twice. And because the nullifier reveals nothing about which commitment it corresponds to, the on-chain link between deposit and withdrawal remains broken.
.png?fit=max&auto=format&n=d0ciqotHpLYc4JWp&q=85&s=ae327a59c8f11fff090589cb712d6323)
