// SPDX-License-Identifier: MIT // https://tornadocash.website /* * d888888P dP a88888b. dP * 88 88 d8' `88 88 * 88 .d8888b. 88d888b. 88d888b. .d8888b. .d888b88 .d8888b. 88 .d8888b. .d8888b. 88d888b. * 88 88' `88 88' `88 88' `88 88' `88 88' `88 88' `88 88 88' `88 Y8ooooo. 88' `88 * 88 88. .88 88 88 88 88. .88 88. .88 88. .88 dP Y8. .88 88. .88 88 88 88 * dP `88888P' dP dP dP `88888P8 `88888P8 `88888P' 88 Y88888P' `88888P8 `88888P' dP dP * ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */ pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; interface ITornadoInstance { function token() external view returns (address); function denomination() external view returns (uint256); function deposit(bytes32 commitment) external payable; function withdraw( bytes calldata proof, bytes32 root, bytes32 nullifierHash, address payable recipient, address payable relayer, uint256 fee, uint256 refund ) external payable; } contract TornadoProxyLight { event EncryptedNote(address indexed sender, bytes encryptedNote); function deposit( ITornadoInstance _tornado, bytes32 _commitment, bytes calldata _encryptedNote ) external payable { _tornado.deposit{ value: msg.value }(_commitment); emit EncryptedNote(msg.sender, _encryptedNote); } function withdraw( ITornadoInstance _tornado, bytes calldata _proof, bytes32 _root, bytes32 _nullifierHash, address payable _recipient, address payable _relayer, uint256 _fee, uint256 _refund ) external payable { _tornado.withdraw{ value: msg.value }(_proof, _root, _nullifierHash, _recipient, _relayer, _fee, _refund); } function backupNotes(bytes[] calldata _encryptedNotes) external { for (uint256 i = 0; i < _encryptedNotes.length; i++) { emit EncryptedNote(msg.sender, _encryptedNotes[i]); } } }