Tornadocash Withdrawal Stuck? What Can Be Fixed

A stuck Tornado Cash withdrawal is usually a failure in one of three handoffs: the note is not ready to prove, the relayer has not submitted the Ethereum transaction, or the transaction is pending or reverted on-chain. The fix depends on which handoff failed; reconnecting a wallet or submitting a second withdrawal blindly can make the diagnosis worse.

What a withdrawal is waiting for before it can complete

A Tornado Cash deposit creates a private note and a public commitment. The deposit must be visible to the correct pool contract and included in the protocol’s Merkle-tree state before the withdrawal proof can be accepted. The note itself is essential: losing it means losing the information needed to prove the deposit belongs to the withdrawal.

For a broader map of notes, pools, and withdrawal stages, the Tornado Cash troubleshooting guide explains the surrounding workflow. That context matters because a withdrawal screen can look frozen even when the deposit is simply waiting to become usable.

Can Tornadocash withdrawals be fixed after they get stuck?

Yes, but only when the note remains intact and the withdrawal has not already succeeded. First identify whether a withdrawal transaction hash exists. No hash usually means the request is still at the interface or relayer stage; a hash means the Ethereum network has something concrete to inspect.

When the note is the part that failed

If the deposit is confirmed but the interface cannot find the note, check the original wallet, browser storage, and any encrypted backup used during deposit. Do not paste the note into a support chat or website. Also confirm that the selected network, token denomination, and pool match the original deposit.

A nullifier hash is the public value checked by the contract to prevent the same note being withdrawn twice; the Tornado Cash compliance-tool documentation defines the nullifier hash and shows where it appears after withdrawal. If the nullifier is already marked as spent, the withdrawal has been processed or the note has been used; repeating the request will not recover anything.

How a relayer problem appears before Ethereum sees anything

A relayer is a third party that submits the withdrawal transaction and pays its gas, normally deducting a fee from the transferred amount. The protocol’s relayer documentation explains that role. If the interface shows a selected relayer but no transaction hash appears, the problem may be the relayer’s availability, fee calculation, RPC connection, or balance.

Use the interface’s supported retry or relayer-change option if one is available. Do not create a second withdrawal using the same note until the first request’s status is clear. The settled point is simple: without a transaction hash, an explorer cannot show a failed Ethereum transaction because Ethereum has not received one.

What a pending transaction means on-chain

Ethereum’s transaction lifecycle is separate from Tornado Cash’s interface. After submission, a transaction enters a pool of pending transactions until a validator includes it in a block. Ethereum’s documentation states: “Transactions require a fee and must be included in a validated block.” — Ethereum.org’s transaction documentation

Check the hash on an explorer for the correct network. A pending status means the transaction has not completed; it does not mean the note has been spent. A reverted or failed status means execution was attempted but the contract rejected the call or ran into an execution error. The state change is rolled back, but the gas fee can still be charged, as explained in the Ethereum gas and fees documentation.

What the interface showsWhat it usually meansSafe next check
Deposit confirmed, withdrawal unavailableThe commitment or Merkle-tree state is not readyKeep the note and verify the pool and network
Withdrawal requested, no hashThe relayer has not broadcast the transactionUse a supported relayer retry or wait
PendingEthereum has the transaction, but no validator has included itInspect nonce, fee settings, and network
Reverted or failedThe call reached execution but did not completeConfirm the nullifier remains unspent before retrying
SuccessThe withdrawal transaction completedCheck the destination address, token, and correct chain

Which checks tell delay, failure, or finality apart

  1. Confirm the deposit transaction succeeded on the same network and pool.
  2. Confirm the note is complete and privately backed up.
  3. Look for a withdrawal transaction hash.
  4. Read the explorer’s status and transaction logs, not just the app’s spinner.
  5. Only retry when the transaction failed, the nullifier is unspent, and the interface offers a valid route.

This sequence separates a missing note, an unavailable relayer, a pending transaction, and a genuinely completed withdrawal. Once the explorer shows success and the destination address has received the asset, the issue is no longer a stuck Tornado Cash withdrawal.

FAQ

Can a pending withdrawal be cancelled?

Usually not in the protocol itself. A replacement transaction may be possible from the submitting account, but only the relayer controls that account.

Does a failed withdrawal spend the note?

Normally no, because a reverted call rolls back its state changes. Verify the nullifier status before retrying.

What if the withdrawal succeeded but the balance is missing?

Check the destination address, token contract, network, and hidden-token settings in the wallet.

Should the same note be withdrawn again?

Only after confirming that no successful withdrawal exists and the nullifier remains unspent.

Leave a Reply

Your email address will not be published. Required fields are marked *