I’m sure by now all Tornado Cash users are aware that the US government really doesn’t like privacy.
I’m guessing you’re here because you do.
While there are competing services still running on-chain that have not fallen under any sanctions (yet), risk averse US based companies are even blocking wallets that interact with those, so strong is their fear of Uncle Sam.
If you want your Ethereum wallet to look “clean” while retaining your privacy, the best way to do it is off-chain.
Thankfully this is actually very very easy to do. If you’re doing this for the first time it might be a little annoying, but once it’s all setup it’ll take you five minutes next time.
So first of all, if you use an exchange such as Coinbase or FTX, you need a wallet that supports a popular coin with low fees and fast transaction times (Litecoin is a good choice) and second, the essential component for all of this and something any privacy concerned crypto user should already have installed: the Monero wallet.
An easy solution for Litecoin is simply to use Exodus. It is available on desktop and mobile.
I highly recommend against using Exodus for Monero as it is closed source software. The official Monero wallet isn’t very pretty to look at but if you hit simple mode during setup it’s easy to use and verifiably private due to its open source code straight from the Monero project itself.
You may at this point be asking “why am I using wallets for two different cryptos when this is a tutorial about Ethereum privacy?”
Because the entire goal here is to keep your privacy preservation off the public Ethereum blockchain. So what we’re going to do instead is use the very much private Monero blockchain as a bridge between your KYC coin and your undoxxed ETH wallet.
Why the Litecoin? Because most exchanges don’t like selling Monero due to governments not liking Monero. The one exception I’m aware of is Binance. If you use Binance, you can buy USDT and exchange it for XMR then just transfer it directly to your local Monero wallet. Don’t worry, Binance won’t know anything you do with the XMR after it leaves their exchange. That’s the entire point of Monero.
You’re then simply going to send the full amount of Monero to yourself (“churning”) to increase your anonymity before converting it to ETH using an anonymous crypto-to-crypto exchange that doesn’t require an account.
It should go without saying that doing this with an Ethereum wallet you already sent KYC coin directly to is pointless. If you’ve done that, make a new account in MetaMask or whichever wallet you use. Frame is very good.
Now here’s the really easy bit that doesn’t require more downloads or wallets.
Go to SideShift or Godex or FixedFloat.
If you’re in the USA you may be blocked from using SideShift. A good VPN or Tor are your friends. Or just use one of the others. But SideShift is fast, cheap, and reliable.
If you bought Litecoin from your exchange:
Withdraw your Litecoin from the KYC exchange to a local wallet such as Exodus.
Select LTC in the first box and XMR in the second.
Open up your Monero wallet and copy your receive address.
Paste it into SideShift (or whatever no registration exchange you chose) and hit go.
Copy the LTC address from the exchange, send your LTC to it from the local wallet.
Once the transaction has enough confirmations (the number differs by exchange - for SideShift it’s only one) it’ll send you Monero.
You now have privacy coin.
Open the receive tab in the Monero wallet, create a new address, copy it, go to the send screen, paste it, hit the infinity symbol, optionally change the fee to “fast” (it costs barely anything extra), then send the transaction.
What’s the point of the last step? This is the “churning.” In short, it ensures exchanges cannot use internal logs to de-anonymise the XMR transaction. The full logic behind it is rather technical, so I’ve put it in its own section further down if you’re interested.
Now finally it’s time convert XMR to ETH. Make sure the receive address you paste in is your undoxxed Ethereum wallet, not one that you’ve sent KYC coin to previously. As before, I recommend using a “fast” fee as the extra cost is almost imperceptible.
Once it shows you the transaction ID in the Monero wallet, you can copy/paste it into Explore Monero to keep track of its progress on the blockchain with a slick UX. Notice how it doesn’t show you the actual addresses the transaction is coming from or going to? That’s because it can’t. The the only thing visible on the public ledger is “a transaction happened.” Great, isn’t it?
Within a few minutes (using SideShift, at least) you should have ETH in your undoxxed wallet.
There is absolutely zero link on the Ethereum blockchain between that ETH and your KYC exchange. There is also absolutely nothing on Ethereum’s blockchain to suggest you did anything other than change one crypto for another.
If you bought Monero directly:
I highly recommend following the churning instructions above - create an extra address in the receive tab and use it to send your full balance to yourself.
Then you can choose to convert XMR to ETH. Make sure you paste your undoxxed ETH wallet in as the receiving address. Go. Send your XMR to the address it gives you. Refer to the above for extra tips.
You will shortly have undoxxed ETH in your wallet.
So, urm, what’s this “churning” thing? (Technical - feel free to skip unless curious)
One of the important methods Monero uses to achieve privacy is through obfuscating outputs by creating decoys. So for example if I send you 1 XMR the wallet will create multiple decoy outputs. From the outside, simply observing the blockchain, it is virtually impossible to tell which one is real if that’s the only information you have.
In general use, e.g. sending XMR from my wallet to yours, this an effective anonymity measure.
However if you are an exchange and you just deposited XMR to someone’s local wallet, you will have logged which output was genuine. Therefore, if someone then goes and straight away sends that same XMR back, you can match the real UTXO you just received (after all, the actual recipient must know the true output to receive the coin) with the one you just sent.
Now you as the exchange know for sure both swaps were made by the same person with that one piece of information.
This risk can be mitigated by using two different exchanges, however it is possible exchanges can share data. The best OPSEC practice is not to rely on the good will of exchanges, but rather to ensure that even if the worst case scenario occurs and they cannot be trusted, you are still anonymous.
Hence churning. You can avoid this risk entirely if you simply send your XMR to yourself because it looks as if you sent it to someone else, and the output will be new when you make the next transaction. This means the exchange cannot automatically correlate the deposits because now the output from the second swap is different. As far as the exchange or anyone else knows, it’s coming from a totally different wallet.
Although the technical process behind all this probably sounds quite confusing if you aren’t already familiar with the workings of UTXO blockchains, that’s okay because all you really need to know is how to go to the receive tab in the Monero wallet, make a secondary address, and send all the XMR to it before you convert it to ETH.
This guide is designed to help regular crypto users break the link between your KYC exchange and your ETH wallet in a simple manner just by doing a one or two swaps.
It will succeed in allowing you to use undoxxed ETH without the Ethereum blockchain recording that you went through steps to protect your privacy, because you did that on other blockchains.
If you want to level up your privacy further, I recommend if you are in a situation where your exchange doesn’t sell XMR, use one site to swap LTC to XMR and a different one to swap the XMR to ETH.
Tedious? Yes. Better OPSEC? Also yes. Because now one site doesn’t have logs of you converting the exact amount of XMR to ETH that you just exchanged from LTC a minute ago.
If you’re a bit of a tech nerd and don’t mind a slightly more complex route, check out Bisq. It is a decentralised P2P exchange tunnelled through the Tor network. If you remember the good old days of LocalBitcoin where you didn’t need to send your ID, a selfie, a notarised copy of your birth certificate, and a blood sample to buy crypto with fiat from a P2P seller, you will feel a lovely sense of deja vu.
However it does require running the Java based resource intensive client locally on your machine and depositing some BTC as collateral to help deter scammers. It’s a great system, and you can choose to buy either ETH or XMR (or BTC) from it, but it’s a little daunting for those less technically inclined.
Technically, of course, that ETH is “semi-doxxed” as it’s a fiat on-ramp so you have to do a fiat transfer to the seller. So best practice would be use this to buy XMR and convert to ETH to ensure top anonymity.
A cool new development is the ability to atomically swap BTC for XMR. You can use this instead of the no-registration (but still centralised) exchanges above if you want to use BTC as the “bridge” coin instead of LTC. I didn’t focus on this simply because it’s still in development at this stage. You can use it to exchange real crypto, but it’s beta software on the backend.
Atomic swaps are very exciting as they allow you to trustlessly swap crypto between totally different blockchains without the need for any centralised exchange at all. Again, it’s still young technology, but bridges are being developed between more blockchains - including ETH and XMR (not production ready yet at time of writing) - so soon enough you won’t even need to trust the sites above.
Haveno is like Bisq but focused entirely on Monero. At the time of writing it is still in development, but the testnet is live. It is also decentralised but uses a multisig escrow rather than atomic swaps as it’s primarily designed to be a no-KYC fiat on-ramp.
And, of course, if you want truly private digital cash and don’t mind not having DeFi apps… use Monero and encourage others to follow. With a cashless society imminently closing in, society needs truly anonymous digital money to remain free. After all, would you post all your bank statements online for everyone to see?
We can code faster than you can regulate.