Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Withdrawing

How to withdraw ETH privately from Shinobi Cash.

Overview

Withdrawing uses a zero-knowledge proof to verify you own a deposit without revealing which one. The recipient can be any address on any supported chain.

Withdrawal Steps

  1. Navigate to Withdraw — Select the Withdraw tab
  2. Select a Note — Choose a note with available balance
  3. Enter Amount — Up to the note's full balance
  4. Enter Recipient — Any valid Ethereum address
  5. Select Destination Chain — Where funds should arrive
  6. Review Fees — Relay fee + solver fee (if cross-chain)
  7. Confirm — Proof generates in your browser, then submits

Proof Generation

When you confirm a withdrawal, your browser generates a Groth16 SNARK proof:

Generating proof... (~5-15 seconds)

This proof verifies:

  • You know the secret for a valid commitment
  • The commitment is in the state tree
  • The commitment is in the ASP tree (compliant)
  • The nullifier hasn't been spent

Keep the tab active — Proof generation uses your browser's compute resources.

No Wallet Gas Required

Shinobi Cash uses ERC-4337 Account Abstraction to relay withdrawals:

  • You don't need ETH in your wallet for gas
  • Transaction is relayed via standard ERC-4337 bundlers (no custom relayer)
  • A paymaster sponsors the gas upfront
  • Gas cost is deducted from your withdrawal amount (relay fee)

This means you can withdraw to a fresh address without needing to fund it with gas first.

Same-Chain Withdrawal

When withdrawing on the pool chain (Arbitrum Sepolia):

  1. Proof validates in the pool contract
  2. Funds transfer directly to recipient
  3. Paymaster sponsors gas

Fees: Relay fee only (covers gas)

Cross-Chain Withdrawal

When withdrawing to another chain (e.g., Base Sepolia):

  1. Proof validates on pool chain
  2. Intent created with escrowed funds
  3. Solver fills on destination chain
  4. Recipient receives funds
  5. Solver claims escrow after proving fill

Fees: Relay fee + 5% solver fee

What Happens Behind the Scenes

Your browser generates ZK proof


Entrypoint validates → Pool spends nullifier → InputSettler (escrow)

                                  Solver detects ◄────┘


                        WithdrawalOutputSettler → Recipient gets ETH

                        Solver claims escrow

Change Notes

If you don't withdraw the full balance, a change note is created:

Original Note: 1.0 ETH
Withdrawal:    0.3 ETH
Change Note:   0.7 ETH (minus fees)

This mirrors how cash transactions work — you get change back.

Fee Structure

FeeAmountWhen
Relay FeeUp to 15%Always (covers gas)
Solver Fee5%Cross-chain only

The relay fee is dynamic based on gas prices. Maximum 15%.

Withdrawal States

StatusMeaning
PreparingGenerating ZK proof
SubmittingTransaction being sent
ConfirmingWaiting for block confirmation
ConfirmedOn-chain, waiting for indexer
IndexedComplete

Tips

Troubleshooting

Proof generation is slow

  • Keep the browser tab active and focused
  • Close other resource-heavy tabs
  • Normal time: 5-15 seconds

Transaction failed

  • Check the note is still available (not spent elsewhere)
  • Verify recipient address is valid
  • Ensure ASP approval is complete

Cross-chain withdrawal stuck

  • Solvers usually fill within minutes
  • If expired, funds return as a refund commitment
  • Refund can be withdrawn normally

What Can Go Wrong?

IssueImpactRecovery
Browser crash during proof genProof not generatedRetry; no funds lost
Transaction revertsWithdrawal failsCheck error; retry with valid note
Solver doesn't fill (cross-chain)Withdrawal delayedIntent expires → refund commitment created
Wrong recipient addressFunds sent to wrong addressUnrecoverable — double-check before confirming
Note already spentTransaction failsNote was used in another session/device

Next Steps