How to use GothamCash

It's fairly easy to use GothamCash, but here's a detailed how-to to make you understand every step in the process.

Let's hide your transactions on Binance Smart Chain. In order to break the chain and receive untraceable BNB tokens, you will need the following:

Let's hide your transactions on Binance Smart Chain. In order to break the chain and receive untraceable BNB tokens, you will need the following:

  • A wallet with at least 0.1 BNB + gas fees

  • A browser with Metamask installed, connected to Binance Smart Chain mainnet RPC

  • An internet connection

  • (Optional) A VPN if you want to obfuscate your crypto transactions on your network

1. Connect your Metamask wallet to GothamCash

First of all, to use the dApp, you need to connect your web3 wallet. We currently only support Metamask. Make sure you have selected the BSC mainnet network before proceeding. Selecting an incorrect chain may cause a funds loss.

Click the button to connect your wallet (or a specific one) using Metamask.

Once connected, the button will change to "Wallet connected!", and the bottom box will remind you which wallet is connected to the service:

It means that your wallet is connected to GothamCash using Metamask through web3.
The wallet you have selected is connected and in-use on GothamCash.

2. Create a salt

To ensure the uniqueness and unpredictability of your deposit, a salt is used—commonly referred to as a secret in the note format. This salt is a random 32-byte hex value generated locally in your browser using secure cryptographic randomness. It adds entropy to your commitment and makes it infeasible for anyone to precompute or guess your deposit hash—even if they use the same nullifier or secret keyword.

Insert anything in this field, that will create entropy, and strenghtens your deposit

You should never reuse a salt across multiple notes. Every new deposit must have a fresh nullifier and salt pair to preserve unlinkability. Although the system was designed to generate different notes even if the same salt were used for several deposits, this is a practice to avoid.

Think of the salt as a private coin serial number that only you know. It’s your shield against collision and brute-force attacks.

An example of salt, that will bring more randomness to your generated note

Once done, make sure you have at least 0.1 BNB in your wallet, and click on Deposit 0.1 BNB button. The "Equivalent deposits" line indicates how much active deposits are in the current pool, giving you a hint about the pool anonymity rate (high number = high amount of deposits = dilutes even more your deposit among other depositors).

Just click the button.

Once clicked, a Metamask window will pop-up, requesting you to confirm the transaction:

If you're satisfied, click Confirm.

This will send your deposit to the 0.1 BNB pool + generate an encrypted note combining your salt and random hex numbers. Once the transaction is confirmed, the following modal window will appear:

Our deposit was made, and note was generated.

In our example:

gothamcash-01:0xad95ecc1ee072b72cfb6c7d82276d5bc82de244c49682f1dd386fcc086f84d3e:0xc5c82c009d6c3726c6ffa202aa90f96175a9e7cc1038b5daf2e95bbb216c6004

Copy your note (using your mouse/finger, the button or the QR code), then find a safe place to store it (a text file on your Desktop might not be a good idea to be honest).

3. Store your note in a safe place

As we said previously, consider this note like your private key: if you share it, people may stole the associated funds. If you lose it, you can't recover your funds.

The note is unique and generated dynamically only to you, nothing is stored anywhere. This is the key to access your deposit in the smart contract, that will use it to compute the answer and deliver your funds during a withdrawal.

So write it down on a piece of paper, and hide it in your place, or somewhere where it will be safe.

4. Wait for some time

After making your deposit, it's highly recommended to wait before withdrawing. This waiting period allows your deposit to blend into a growin

g pool of other deposits, increasing your privacy.

By waiting, you dilute the traceability between your deposit and your future withdrawal. If you withdraw too soon — especially right after depositing, and more especially in the early days of the pool — it becomes easier for observers to correlate the two events and weaken your anonymity.

The longer you wait, the larger the anonymity set becomes.

We recommend waiting at least a few hours, or ideally several days, depending on overall network activity. The more users interact with the mixer during this time, the stronger your privacy protection will be.

5. Withdraw your deposit from another wallet using your note

When you're ready to withdraw, simply connect a new wallet to the dApp—one that holds enough BNB to cover gas fees. Avoid using the same wallet you used to deposit, as this compromises your anonymity and defeats the purpose of the mixer.

Once connected with your preferred wallet, navigate to the Withdraw tab and paste the note you received during your deposit:

At the bottom, you’ll notice a "Beneficiary" field. If you prefer not connecting the destination wallet to the dApp, uncheck the box and manually enter the address where you want the funds sent. You can for example connect a buffer wallet to the dApp (via the Connect wallet button) that holds enough BNB for gas, uncheck the box and put another wallet address inside, that will not be connected to the dApp. This is especially useful if you want to enhance your privacy and security even further.

Once you have entered the note, and ready to withdraw to the selected wallet, you can click on the Withdraw button. 3 steps will follow this action:

A/ 1st step: sign the message

Step 1 - Sign the message
  • MetaMask will show a popup asking the user to "Sign Message".

  • This does not cost any gas. it's just a cryptographic proof that you, owning the note, authorize the withdrawal.

📝 Purpose: This signature proves that the wallet owns the note and authorizes the withdrawal to the specified recipient within the next hour.

B/ 2nd step: Send authorizeWithdrawal transaction

Step 2 - Authorize the withdrawal
  • MetaMask will open a second popup asking the user to confirm a transaction.

  • Now you’ll confirm a transaction to authorize the withdrawal: this registers your signature and withdrawal conditions on-chain.

  • This one is important to prevent any withdrawal front-run in the next transaction: we make sure that there is no man-in-the-middle listening to the mempool, and attempts to steal your funds by replaying your withdrawal with higher gas. The current step prevents that.

  • It does cost several cents of gas, indeed, but we bet that you prefer this instead of facing the risk to see your funds being stolen by a front-runner or a MEV exploiter.

📝 Purpose: This is an on-chain call to record the authorization for this note and recipient. It costs a bit of gas.

C/ 3rd step: Send withdraw transaction

Step 3 - Perform the withdrawal
  • MetaMask shows a third and final popup, the withdrawal itself.

📝 Purpose: This is the actual withdrawal. Funds are sent to the recipient address, and the note is marked as spent. This also costs gas.

6. ✅ Done!

If all three sub-steps succeed in the withdrawal process:

  • The funds are withdrawn anonymously.

  • The note is now spent.

  • The frontend shows: "Withdrawal successful!"

The note is now worthless (cannot be used a second time), and the funds were transferred to the desired wallet. The transaction will appear on your block explorer (Bscscan testnet here).

The overall sequence

Note that the funds withdrawn will be shown in the Internal transactions tab in your explorer:

Funds movements are located in the Internal Transactions tab.

Last updated