πŸ”„Features

Our service relies on Tornado Cash, which is a decentralized privacy protocol designed to enhance the anonymity of Ethereum transactions. It works by breaking the linkage between the sender and recipient of ETH, making it extremely challenging for onlookers to trace or identify the parties involved in a transaction.

Smart Contracts

Tornado Cash relies on Ethereum smart contracts to manage deposits, withdrawals, and the mixing process. Here's a simplified example of depositing funds into a Tornado Cash pool.

function deposit(
    ITornadoInstance _tornado,
    bytes32 _commitment,
    bytes calldata _encryptedNote
) public payable virtual {
    (bool isERC20, IERC20 token, InstanceRegistry.InstanceState state, , ) = instanceRegistry.instances(_tornado);
    require(state != InstanceRegistry.InstanceState.DISABLED, "The instance is not supported");

    if (isERC20) {
      token.safeTransferFrom(msg.sender, address(this), _tornado.denomination());
    }
    _tornado.deposit{ value: msg.value }(_commitment);
    emit EncryptedNote(msg.sender, _encryptedNote);
}

Zero-Knowledge Proofs

Tornado Cash employs zk-SNARKs to generate withdrawal proofs, enabling users to demonstrate ownership of deposited funds without exposing sensitive details.

function verifyProof(
    bytes memory _proof,
    uint256 _denomination,
    bytes32 _commitment
) public view returns (bool) {
    require(commitments[_commitment], "Invalid commitment");
    bool verified = snarkVerifier.verifyProof(_proof);
    return verified;
}

Obfuscation and RE-Mixing

During withdrawals, Tornado Cash mixes the withdrawn ETH with other deposits in the pool, enhancing privacy by breaking the link between the source and destination of funds.

Gas Costs

Using Tornado Cash incurs additional gas costs due to the computational complexity of cryptographic operations and smart contract execution. Users should be prepared for these costs when using the service.

Open-Source

Tornado Cash's open-source code ensures transparency, allowing users to verify the functionality and security of the protocol.

Last updated