Skip to main content

Withdrawal Checks

When funds leave Bermuda's shielded pool, the protocol performs withdrawal checks. For compliant funds, Bermuda implements these checks through a private Proof of Innocence (POI): a zero-knowledge proof that the withdrawn funds exclude blacklisted deposit_id lineage under the current blacklist state.

How It Works

At withdrawal time, the SDK constructs a zero-knowledge proof that demonstrates:

  1. The withdrawal is valid — The shielded inputs, outputs, nullifiers, and balance transition are correct.
  2. The withdrawal excludes blacklisted lineage — The deposit_id values involved in the withdrawal are proven against the current blacklist root using exclusion proofs.
  3. The exit remains private — The pool can verify the withdrawal on-chain without revealing the user's identity, balance, or full transaction history.

This proof is submitted alongside the withdrawal transaction and checked by the pool against the active blacklist root published through the compliance gateway.

Technical Details

In Bermuda, the private withdrawal path is implemented as an exclusion proof against the current blacklist root: the client proves that the withdrawal excludes blacklisted deposit_id lineage, and the pool verifies that proof on-chain.

The public withdrawal path does the opposite: the relevant deposit_id values become public, inclusion proofs show that the withdrawn funds belong to blacklisted lineage, and the compliance engine can use the deposit_id -> depositor address mapping recorded at deposit time to relate the withdrawal back to the original deposit.

Withdrawal Checks in Practice

ScenarioHow withdrawal checks help
Withdrawing to a centralized exchangeThe exchange can verify the withdrawal check to accept the deposit without additional KYC friction
Receiving a private paymentThe recipient can confirm the funds are not tainted
Regulatory auditCompliance teams can verify withdrawal checks without accessing user data
Cross-chain transfersDestination chains or bridges can run withdrawal checks before accepting funds