Cover Image Source – Modified by the author
Ethereum transactions are public. Vitalik Buterin didn’t give anonymity to Ethereum. But nowadays, the demand for anonymous transactions are very high and it is going to increase only in the near future. Privacy coins like Monero and Zcash are gaining popularity very fast. Even Litecoin is working on MimbleWimble soft fork, which will bring privacy to Litecoin. Privacy matters! Will you like to disclose your bank statement while sending money to someone? Obviously no. The transparent transactions of a blockchain is often problematic. Yes, there are solutions. Custodial coin mixing services are available but these are too centralized and damage the basic cause of privacy often. The surveillance risk is terribly high there. True privacy can be achieved by cryptographic methods only. A coin like Zcash, launched in 2016, uses zero-knowledge proof technique to keep your transactions completely confidential. This technique allows transactions to be verified without revealing any details about the sender, receiver or the amount. There is also selective disclosure feature in Zcash. Is it possible to bring that feature to Ethereum? Ethereum, often called the world computer, is extremely programmable. A project like Tornado Cash is doing that.
How does Tornado Cash achieve privacy?
ZK-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) is a novel form of zero-knowledge proof cryptography. Zcash was the first massive application of ZK-SNARKs. Tornado Cash uses ZK_SNARKS only to remain 100% anonymous in Ethereum blockchain. Tornado Cash uses a smart contract. When a user makes a deposit, a secret occurs and a hash is generated. The hash acts as a commitment and it gets preserved in the list of deposits. When the user attempts to withdraw the fund from the smart contract, he/she needs to provide a proof (a code here) that the smart contract owes some fund to him/her. Many other users are also depositing their fund into the smart contract. All get mixed. The system can’t track which exact deposit is made by which exact user. Only the amount of deposit gets matched with the proof. The smart contract checks the proof and allows withdrawal to the desired address. Externally it is not possible to track from which particular address the deposit comes. Basically it is coin mixing but non-custodial.
Image Source - Growing transactions of Tornado Cash
Doing a private Ethereum transaction step by step
• Go to Tornado Cash website
• It tracks your IP address. Actually all sites track. Your IP address reveals a lot of information about you. If you want to avoid this tracking, you can use a VPN or Tor. I suggest you to use incognito mode browsing also.
• Select the amount of ETH you want to deposit.
• Select your Web 3 compatible wallet. I have selected Metamask here. Some other options are also there.
• Give permission to Tornado cash to connect to your wallet
• Note down the back up secret note. You need it during withdrawal.
• Go to withdrawal and put your secret note. Enter your withdrawal address.
• Bingo! You ETH arrives after some time.
The process is easy. I did not have any need to conduct an anonymous transaction so I didn’t perform the last step. But things are basic here. Tornado Cash requires the users to pay the gas fees during making deposits into the smart contract and withdrawal. Currently, it uses one of four off-chain API endpoints (EthGasStation, Gas Oracle, Ethereum and POA’s GasPrice) to calculate the recommended gas fee. They’ve recently implemented Chainlink gas oracle as the default price when the off-chain APIs can’t respond. Tornado Cash solves the on-chain privacy part to a great extent. Many similar projects are coming up to provide privacy to different blockchain projects. Yes, maximum development is happening within the Ethereum community. Anonymity is here to stay.
Note: The images (if not cited) are taken from the screenshots by the author. Tornado Cash uses new technology. DYOR before depositing fund. You can follow the author on twitter.