Contract 0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3 2

Tornado.Cash OFAC Sanctions Lists 
 
 
Txn Hash
Method
Block
From
To
Value
0x7ca7c8a6d2a1d20e3e0a8f2cae8da12cf758b6e7594b87fa3b888a832f060c3dWithdraw153893732022-08-22 9:03:4297 days 19 hrs ago0x853281b7676dfb66b87e2f26c9cb9d10ce883f37 IN  Tornado.Cash: 100 DAI0.0020149 Ether0.00689501 19.25174274
0x0f016ad2d4caf150a1db0369aab187a9cf2f52770307604f266bb13709714665Withdraw153718562022-08-19 14:38:55100 days 13 hrs ago0x36dd7b862746fdd3edd3577c8411f1b76fdc2af5 IN  Tornado.Cash: 100 DAI0.00202662 Ether0.00748708 20.48595884
0x980416cbfb4931121e0d4c3fa9b8a3fe502e3766ca48d9374a9ba22035800cebDeposit117372822021-01-27 10:27:38669 days 17 hrs ago0x50265991a1d83b0e065812d6b53e4cb6850ed4be IN  Tornado.Cash: 100 DAI0 Ether0.0777253477
0xf2afcd30e9fe6ed2415057d758b505873e3f75e7c3d75c789debeec167d159ceWithdraw116355472021-01-11 19:32:13685 days 8 hrs ago0x33350f9ffe031ca593442a189b3bc7a1ea05b3c1 IN  Tornado.Cash: 100 DAI0.02 Ether0.05394862146.5
0x41e6a2eac31df00832b0cf6f4e46613d69a62867c01664cf1cc3e6b3b394d25dDeposit116355252021-01-11 19:27:11685 days 8 hrs ago0xaaed87c14490380fdbc17a863a4538297a49590c IN  Tornado.Cash: 100 DAI0 Ether0.0681140368
0x27cec582b659e4d5e2295a94b10f4563455150e0c86c9f7ca5645512ae77f9adDeposit116009572021-01-06 12:17:18690 days 16 hrs agoENS Name cyborg11.eth IN  Tornado.Cash: 100 DAI0 Ether0.13400561133
0xf07a3cc718314180811fcabcd42eceb17a07d00180c5003607e8d4ee9c54d11eWithdraw115836092021-01-03 20:08:09693 days 8 hrs agoENS Name cheap-relayer.eth IN  Tornado.Cash: 100 DAI0.02 Ether0.04846118123.2325
0xe0142dfbb969353056d7ef686041d0f53e9e4662842fa13c720cacf0326934f4Deposit115746362021-01-02 11:11:31694 days 17 hrs ago0xb7ecde18b61392550c5d6aeb455614858110a4a7 IN  Tornado.Cash: 100 DAI0 Ether0.0507154251
0x644671357ec4ef1f44e160fff8d4221b6ef5fae568448483b3b7c84929912086Withdraw115707692021-01-01 21:01:21695 days 7 hrs ago0xbe4d1e137a24af091be80ae58d652279665e3a27 IN  Tornado.Cash: 100 DAI0.02 Ether0.0162024744
0x76b58233bfa20ceeaf604331e7edda9b1de8c8ac0f2c6405f561384236eec0a4Deposit115579192020-12-30 21:40:16697 days 6 hrs ago0x29477a93e19f6c0469cb90bfd96123c6646ab443 IN  Tornado.Cash: 100 DAI0 Ether0.073553773
0xe5d2d6f2b77eed97927cd93ee8f5c24aeb2f8b76a3a6942ef0f21bda1d509e67Withdraw114968352020-12-21 12:46:21706 days 15 hrs ago0xa5cdecc3cc24cf55fbdc6055c345ddd25ef140cc IN  Tornado.Cash: 100 DAI0 Ether0.04320297115
0x17bbf7efca063981ac8a6ece548c5641417afe0a26f02ab9355384628162fed5Deposit114959172020-12-21 9:31:43706 days 18 hrs ago0xc3f020b5eeb42716c878c2c830c93d1e016b9a1c IN  Tornado.Cash: 100 DAI0 Ether0.0774216378
0x16544a00ba02c64ed996d11a7947290339f0ce2c63720bedca47d22d1ec01a39Withdraw114873472020-12-20 1:58:12708 days 2 hrs ago0x68d4ba916e0aa1ea4c5b08e2a7e4980de713eee6 IN  Tornado.Cash: 100 DAI0 Ether0.0126950235.2
0xce3ae54cb21f94bf0370b7e4f97c30b2c11032dea85c6d1e814c009dc05ea2a1Deposit114250742020-12-10 12:01:38717 days 16 hrs agoGitcoin Grants: Govrn IN  Tornado.Cash: 100 DAI0 Ether0.0199698620
0x2f7d86e311b8ea94d1b4589fa204729bbc9626903e86de96afa780c57471d852Withdraw114206602020-12-09 19:50:41718 days 8 hrs ago0x4c3b27b1830363e3c4ed35c6cedf023e8cf583ba IN  Tornado.Cash: 100 DAI0 Ether0.0066393220
0x1eab9d8f4cca94e0105bd3605f044c475f29949eb96d8478c34d75daf4073ec8Deposit114145502020-12-08 21:30:24719 days 6 hrs ago0x4c3b27b1830363e3c4ed35c6cedf023e8cf583ba IN  Tornado.Cash: 100 DAI0 Ether0.0877351389
0x6119c633e8a1939770c428b63098097ec6e40134aa3fc9068313d20f9fba0287Withdraw114070692020-12-07 17:38:38720 days 10 hrs agoENS Name gaasservices.eth IN  Tornado.Cash: 100 DAI0.02 Ether0.0147304840
0xd347dec49b4d513c177b964aeb099f3bf0e72a077c636d78f116e3cf9b6c6547Withdraw113979242020-12-06 7:56:44721 days 20 hrs ago0x2d50dbcc960bec854227f51f8074e1da28bd4a37 IN  Tornado.Cash: 100 DAI0.02 Ether0.0080618720.5
0x56054467b44b201cc7c92ae3b98ffa282b0dfa63a709ebe5c7f541358213ecd5Deposit113945492020-12-05 19:31:06722 days 8 hrs agoDAOSquare: Deployer IN  Tornado.Cash: 100 DAI0 Ether0.0162336216.36955719
0x22b26084578caf6e0d9c2426f31eb0abf075c81481433158a291bde96482987aWithdraw113879182020-12-04 18:58:32723 days 9 hrs ago0x7d3bb46c78b0c4949639ce34896bfd875b97ad08 IN  Tornado.Cash: 100 DAI0.02 Ether0.0102235427.7625
0x9ed55077ecef5379b18984175bd53d119bca6127ffc386ab7ffd59c671be163dWithdraw113782252020-12-03 7:13:06724 days 21 hrs ago0xce2142247159628c02b2e672eb55492173e44a5d IN  Tornado.Cash: 100 DAI0.02 Ether0.0106795929
0x9a84f77593b15a8134cb6454f674f3bd89e573e5c9f1472a96eeb10406b277d7Deposit113761852020-12-02 23:44:57725 days 4 hrs ago0x5a96020892d8b7c5d1e1215344a52d21259acc0c IN  Tornado.Cash: 100 DAI0 Ether0.0307425731
0x1937ce92562fa900c4631475b6a07f34479999d6a7f022340572351f978e17d6Deposit113761812020-12-02 23:43:59725 days 4 hrs ago0x5a96020892d8b7c5d1e1215344a52d21259acc0c IN  Tornado.Cash: 100 DAI0 Ether0.0309257231
0x2808b22ee5fe1eb69e96852062c6f1164709fa664192cb7221de7c7388e55ad1Withdraw113761632020-12-02 23:40:01725 days 4 hrs agoENS Name relaymy.eth IN  Tornado.Cash: 100 DAI0.02 Ether0.0114157531
0x8fdc1ac25260d361ae03d3afecb87c19883dd5bce997f2049af7549acbc36714Deposit113760802020-12-02 23:23:44725 days 4 hrs ago0x5a96020892d8b7c5d1e1215344a52d21259acc0c IN  Tornado.Cash: 100 DAI0 Ether0.0376844438
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x3cc1239b114265f78dd3d6a2ca30bb4d084bd4ee4404480b6e8356af50884517155079532022-09-10 9:03:4078 days 19 hrs ago Tornado.Cash: 100 DAI0xc49eaa7318cb8f6169b011c82659c81694eef0ca0.00096209 Ether
0x3cc1239b114265f78dd3d6a2ca30bb4d084bd4ee4404480b6e8356af50884517155079532022-09-10 9:03:4078 days 19 hrs ago Tornado.Cash: Router Tornado.Cash: 100 DAI0.00096209 Ether
0x2cd0a5fdb7c6e6ecd50b671651fad41a0563f0f22d07392403bd2528427bc050154023772022-08-24 10:23:3395 days 17 hrs ago Tornado.Cash: 100 DAI0x36dd7b862746fdd3edd3577c8411f1b76fdc2af50.00078933 Ether
0x2cd0a5fdb7c6e6ecd50b671651fad41a0563f0f22d07392403bd2528427bc050154023772022-08-24 10:23:3395 days 17 hrs ago 0x00fce327a1c64b24a626c353e68222275d184c40 Tornado.Cash: 100 DAI0.00078933 Ether
0x7ca7c8a6d2a1d20e3e0a8f2cae8da12cf758b6e7594b87fa3b888a832f060c3d153893732022-08-22 9:03:4297 days 19 hrs ago Tornado.Cash: 100 DAI0x853281b7676dfb66b87e2f26c9cb9d10ce883f370.0020149 Ether
0x0f016ad2d4caf150a1db0369aab187a9cf2f52770307604f266bb13709714665153718562022-08-19 14:38:55100 days 13 hrs ago Tornado.Cash: 100 DAI0xcf93fc754f874fafb3fc0992ed92310790b1a4bc0.00202662 Ether
0x63ee83f244145028179f27b8c551bb32cfbcf24141ae190845959f4059e61a78152737742022-08-04 4:37:07115 days 23 hrs ago Tornado.Cash: 100 DAI0xb6c8b926829c05a7245379350c7d5779c2d1072f0.00121151 Ether
0x63ee83f244145028179f27b8c551bb32cfbcf24141ae190845959f4059e61a78152737742022-08-04 4:37:07115 days 23 hrs ago Tornado.Cash: Router Tornado.Cash: 100 DAI0.00121151 Ether
0x6b5465c8dbf3cfef3847ad137c31c6f06417f84edb9e1294b71457ceeb2d8d59152656432022-08-02 21:57:39117 days 6 hrs ago Tornado.Cash: 100 DAI0x9cdd1d521c02ef738877b3dbe8019bd13a60a6e80.00141369 Ether
0x6b5465c8dbf3cfef3847ad137c31c6f06417f84edb9e1294b71457ceeb2d8d59152656432022-08-02 21:57:39117 days 6 hrs ago Tornado.Cash: Router Tornado.Cash: 100 DAI0.00141369 Ether
0x581d0b4e3df7780765915cfcc8eb625d7e8f9d201c6b0cb0d5bb0c4bbeeaf76d152506432022-07-31 13:59:44119 days 14 hrs ago Tornado.Cash: 100 DAI0x382257d747a58c611b0b4c7a011a92f4e1f2018f0.00087939 Ether
0x581d0b4e3df7780765915cfcc8eb625d7e8f9d201c6b0cb0d5bb0c4bbeeaf76d152506432022-07-31 13:59:44119 days 14 hrs ago Tornado.Cash: Router Tornado.Cash: 100 DAI0.00087939 Ether
0x001c87651530a70563ade0a2e962bec6d94e3b34fb85d2e1182625463ab79ba3152207552022-07-26 22:20:50124 days 5 hrs ago Tornado.Cash: 100 DAI0xe7dbf438115232872c58efcbc10fd8f6ba7a27dc0.0021284 Ether
0x001c87651530a70563ade0a2e962bec6d94e3b34fb85d2e1182625463ab79ba3152207552022-07-26 22:20:50124 days 5 hrs ago Tornado.Cash: Router Tornado.Cash: 100 DAI0.0021284 Ether
0x0122eb9dd09fe4be6a207b3260cd51cb7b78c8ee4ec42ef5a6d1241c7f8ac2ba152207492022-07-26 22:18:58124 days 6 hrs ago Tornado.Cash: 100 DAI0xe7dbf438115232872c58efcbc10fd8f6ba7a27dc0.00193127 Ether
0x0122eb9dd09fe4be6a207b3260cd51cb7b78c8ee4ec42ef5a6d1241c7f8ac2ba152207492022-07-26 22:18:58124 days 6 hrs ago Tornado.Cash: Router Tornado.Cash: 100 DAI0.00193127 Ether
0x899ead08fdbef5e55a78b7b96b2afe596955b699c55f81c888da13ea062544d5152202142022-07-26 20:23:31124 days 7 hrs ago Tornado.Cash: 100 DAI0xe8ecedc2b5a76c45a95edde812cba52742af64da0.00138113 Ether
0x899ead08fdbef5e55a78b7b96b2afe596955b699c55f81c888da13ea062544d5152202142022-07-26 20:23:31124 days 7 hrs ago Tornado.Cash: Router Tornado.Cash: 100 DAI0.00138113 Ether
0x53f36a6ec17fe572c4d3f95954a959363a529953ce8a3951be0e8250729f0924151333002022-07-13 8:43:19137 days 19 hrs ago Tornado.Cash: 100 DAI0x0422431c1678408b43aa57072159f98a81e164640.0025249 Ether
0x53f36a6ec17fe572c4d3f95954a959363a529953ce8a3951be0e8250729f0924151333002022-07-13 8:43:19137 days 19 hrs ago Tornado.Cash: Router Tornado.Cash: 100 DAI0.0025249 Ether
0xf6795c28feb3c5a2122bc25f97808c6fdbcfb0dc4ae59453d240610970f49da7151268872022-07-12 8:52:58138 days 19 hrs ago Tornado.Cash: 100 DAI0x058acd977bac27754d3aa1b8721280f5b076c5a40.00193934 Ether
0xf6795c28feb3c5a2122bc25f97808c6fdbcfb0dc4ae59453d240610970f49da7151268872022-07-12 8:52:58138 days 19 hrs ago Tornado.Cash: Router Tornado.Cash: 100 DAI0.00193934 Ether
0x498a03c2defa494fa26402e05873fcbaf6cd532b56b458fbf1ae671e5fb7426f150914742022-07-06 21:42:15144 days 6 hrs ago Tornado.Cash: 100 DAI0x3b2d5a621dc3922caddc749102a324456b6ac1020.0026158 Ether
0x498a03c2defa494fa26402e05873fcbaf6cd532b56b458fbf1ae671e5fb7426f150914742022-07-06 21:42:15144 days 6 hrs ago Tornado.Cash: Router Tornado.Cash: 100 DAI0.0026158 Ether
0x297dc525925a1d3b0e1d670a4b7495cfa9cfafa310fc12313208e325802f66c8150410082022-06-28 18:27:26152 days 9 hrs ago Tornado.Cash: 100 DAI0xb25cab7513495ae6210810057cd2ec5dd339fd1f0.0062403 Ether
[ Download CSV Export 
Loading
This contract contains unverified libraries: Hasher
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
TornadoCash_erc20

Compiler Version
v0.5.11+commit.c082d0b4

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license, Audited
/**
 *Submitted for verification at Etherscan.io on 2019-12-16
*/

// https://tornado.cash
/*
* 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.5.8;

library Hasher {
  function MiMCSponge(uint256 in_xL, uint256 in_xR) public pure returns (uint256 xL, uint256 xR);
}

contract MerkleTreeWithHistory {
  uint256 public constant FIELD_SIZE = 21888242871839275222246405745257275088548364400416034343698204186575808495617;
  uint256 public constant ZERO_VALUE = 21663839004416932945382355908790599225266501822907911457504978515578255421292; // = keccak256("tornado") % FIELD_SIZE

  uint32 public levels;

  // the following variables are made public for easier testing and debugging and
  // are not supposed to be accessed in regular code
  bytes32[] public filledSubtrees;
  bytes32[] public zeros;
  uint32 public currentRootIndex = 0;
  uint32 public nextIndex = 0;
  uint32 public constant ROOT_HISTORY_SIZE = 100;
  bytes32[ROOT_HISTORY_SIZE] public roots;

  constructor(uint32 _treeLevels) public {
    require(_treeLevels > 0, "_treeLevels should be greater than zero");
    require(_treeLevels < 32, "_treeLevels should be less than 32");
    levels = _treeLevels;

    bytes32 currentZero = bytes32(ZERO_VALUE);
    zeros.push(currentZero);
    filledSubtrees.push(currentZero);

    for (uint32 i = 1; i < levels; i++) {
      currentZero = hashLeftRight(currentZero, currentZero);
      zeros.push(currentZero);
      filledSubtrees.push(currentZero);
    }

    roots[0] = hashLeftRight(currentZero, currentZero);
  }

  /**
    @dev Hash 2 tree leaves, returns MiMC(_left, _right)
  */
  function hashLeftRight(bytes32 _left, bytes32 _right) public pure returns (bytes32) {
    require(uint256(_left) < FIELD_SIZE, "_left should be inside the field");
    require(uint256(_right) < FIELD_SIZE, "_right should be inside the field");
    uint256 R = uint256(_left);
    uint256 C = 0;
    (R, C) = Hasher.MiMCSponge(R, C);
    R = addmod(R, uint256(_right), FIELD_SIZE);
    (R, C) = Hasher.MiMCSponge(R, C);
    return bytes32(R);
  }

  function _insert(bytes32 _leaf) internal returns(uint32 index) {
    uint32 currentIndex = nextIndex;
    require(currentIndex != uint32(2)**levels, "Merkle tree is full. No more leafs can be added");
    nextIndex += 1;
    bytes32 currentLevelHash = _leaf;
    bytes32 left;
    bytes32 right;

    for (uint32 i = 0; i < levels; i++) {
      if (currentIndex % 2 == 0) {
        left = currentLevelHash;
        right = zeros[i];

        filledSubtrees[i] = currentLevelHash;
      } else {
        left = filledSubtrees[i];
        right = currentLevelHash;
      }

      currentLevelHash = hashLeftRight(left, right);

      currentIndex /= 2;
    }

    currentRootIndex = (currentRootIndex + 1) % ROOT_HISTORY_SIZE;
    roots[currentRootIndex] = currentLevelHash;
    return nextIndex - 1;
  }

  /**
    @dev Whether the root is present in the root history
  */
  function isKnownRoot(bytes32 _root) public view returns(bool) {
    if (_root == 0) {
      return false;
    }
    uint32 i = currentRootIndex;
    do {
      if (_root == roots[i]) {
        return true;
      }
      if (i == 0) {
        i = ROOT_HISTORY_SIZE;
      }
      i--;
    } while (i != currentRootIndex);
    return false;
  }

  /**
    @dev Returns the last root
  */
  function getLastRoot() public view returns(bytes32) {
    return roots[currentRootIndex];
  }
}

// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol

pragma solidity ^0.5.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 */
contract ReentrancyGuard {
    // counter to allow mutex lock with only one SSTORE operation
    uint256 private _guardCounter;

    constructor () internal {
        // The counter starts at one to prevent changing it from zero to a non-zero
        // value, which is a more expensive operation.
        _guardCounter = 1;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call");
    }
}

// File: contracts/Tornado.sol

// https://tornado.cash
/*
* 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.5.8;



contract IVerifier {
  function verifyProof(bytes memory _proof, uint256[6] memory _input) public returns(bool);
}

contract Tornado is MerkleTreeWithHistory, ReentrancyGuard {
  uint256 public denomination;
  mapping(bytes32 => bool) public nullifierHashes;
  // we store all commitments just to prevent accidental deposits with the same commitment
  mapping(bytes32 => bool) public commitments;
  IVerifier public verifier;

  // operator can update snark verification key
  // after the final trusted setup ceremony operator rights are supposed to be transferred to zero address
  address public operator;
  modifier onlyOperator {
    require(msg.sender == operator, "Only operator can call this function.");
    _;
  }

  event Deposit(bytes32 indexed commitment, uint32 leafIndex, uint256 timestamp);
  event Withdrawal(address to, bytes32 nullifierHash, address indexed relayer, uint256 fee);

  /**
    @dev The constructor
    @param _verifier the address of SNARK verifier for this contract
    @param _denomination transfer amount for each deposit
    @param _merkleTreeHeight the height of deposits' Merkle Tree
    @param _operator operator address (see operator comment above)
  */
  constructor(
    IVerifier _verifier,
    uint256 _denomination,
    uint32 _merkleTreeHeight,
    address _operator
  ) MerkleTreeWithHistory(_merkleTreeHeight) public {
    require(_denomination > 0, "denomination should be greater than 0");
    verifier = _verifier;
    operator = _operator;
    denomination = _denomination;
  }

  /**
    @dev Deposit funds into the contract. The caller must send (for ETH) or approve (for ERC20) value equal to or `denomination` of this instance.
    @param _commitment the note commitment, which is PedersenHash(nullifier + secret)
  */
  function deposit(bytes32 _commitment) external payable nonReentrant {
    require(!commitments[_commitment], "The commitment has been submitted");

    uint32 insertedIndex = _insert(_commitment);
    commitments[_commitment] = true;
    _processDeposit();

    emit Deposit(_commitment, insertedIndex, block.timestamp);
  }

  /** @dev this function is defined in a child contract */
  function _processDeposit() internal;

  /**
    @dev Withdraw a deposit from the contract. `proof` is a zkSNARK proof data, and input is an array of circuit public inputs
    `input` array consists of:
      - merkle root of all deposits in the contract
      - hash of unique deposit nullifier to prevent double spends
      - the recipient of funds
      - optional fee that goes to the transaction sender (usually a relay)
  */
  function withdraw(bytes calldata _proof, bytes32 _root, bytes32 _nullifierHash, address payable _recipient, address payable _relayer, uint256 _fee, uint256 _refund) external payable nonReentrant {
    require(_fee <= denomination, "Fee exceeds transfer value");
    require(!nullifierHashes[_nullifierHash], "The note has been already spent");
    require(isKnownRoot(_root), "Cannot find your merkle root"); // Make sure to use a recent one
    require(verifier.verifyProof(_proof, [uint256(_root), uint256(_nullifierHash), uint256(_recipient), uint256(_relayer), _fee, _refund]), "Invalid withdraw proof");

    nullifierHashes[_nullifierHash] = true;
    _processWithdraw(_recipient, _relayer, _fee, _refund);
    emit Withdrawal(_recipient, _nullifierHash, _relayer, _fee);
  }

  /** @dev this function is defined in a child contract */
  function _processWithdraw(address payable _recipient, address payable _relayer, uint256 _fee, uint256 _refund) internal;

  /** @dev whether a note is already spent */
  function isSpent(bytes32 _nullifierHash) public view returns(bool) {
    return nullifierHashes[_nullifierHash];
  }

  /** @dev whether an array of notes is already spent */
  function isSpentArray(bytes32[] calldata _nullifierHashes) external view returns(bool[] memory spent) {
    spent = new bool[](_nullifierHashes.length);
    for(uint i = 0; i < _nullifierHashes.length; i++) {
      if (isSpent(_nullifierHashes[i])) {
        spent[i] = true;
      }
    }
  }

  /**
    @dev allow operator to update SNARK verification keys. This is needed to update keys after the final trusted setup ceremony is held.
    After that operator rights are supposed to be transferred to zero address
  */
  function updateVerifier(address _newVerifier) external onlyOperator {
    verifier = IVerifier(_newVerifier);
  }

  /** @dev operator can change his address */
  function changeOperator(address _newOperator) external onlyOperator {
    operator = _newOperator;
  }
}

// File: contracts/ERC20Tornado.sol

// https://tornado.cash
/*
* 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.5.8;


contract TornadoCash_erc20 is Tornado {
  address public token;

  constructor(
    IVerifier _verifier,
    uint256 _denomination,
    uint32 _merkleTreeHeight,
    address _operator,
    address _token
  ) Tornado(_verifier, _denomination, _merkleTreeHeight, _operator) public {
    token = _token;
  }

  function _processDeposit() internal {
    require(msg.value == 0, "ETH value is supposed to be 0 for ERC20 instance");
    _safeErc20TransferFrom(msg.sender, address(this), denomination);
  }

  function _processWithdraw(address payable _recipient, address payable _relayer, uint256 _fee, uint256 _refund) internal {
    require(msg.value == _refund, "Incorrect refund amount received by the contract");

    _safeErc20Transfer(_recipient, denomination - _fee);
    if (_fee > 0) {
      _safeErc20Transfer(_relayer, _fee);
    }

    if (_refund > 0) {
      (bool success, ) = _recipient.call.value(_refund)("");
      if (!success) {
        // let's return _refund back to the relayer
        _relayer.transfer(_refund);
      }
    }
  }

  function _safeErc20TransferFrom(address _from, address _to, uint256 _amount) internal {
    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd /* transferFrom */, _from, _to, _amount));
    require(success, "not enough allowed tokens");

    // if contract returns some data lets make sure that is `true` according to standard
    if (data.length > 0) {
      require(data.length == 32, "data length should be either 0 or 32 bytes");
      success = abi.decode(data, (bool));
      require(success, "not enough allowed tokens. Token returns false.");
    }
  }

  function _safeErc20Transfer(address _to, uint256 _amount) internal {
    (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb /* transfer */, _to, _amount));
    require(success, "not enough tokens");

    // if contract returns some data lets make sure that is `true` according to standard
    if (data.length > 0) {
      require(data.length == 32, "data length should be either 0 or 32 bytes");
      success = abi.decode(data, (bool));
      require(success, "not enough tokens. Token returns false.");
    }
  }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"changeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"nullifierHashes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes","name":"_proof","type":"bytes"},{"internalType":"bytes32","name":"_root","type":"bytes32"},{"internalType":"bytes32","name":"_nullifierHash","type":"bytes32"},{"internalType":"address payable","name":"_recipient","type":"address"},{"internalType":"address payable","name":"_relayer","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_refund","type":"uint256"}],"name":"withdraw","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"verifier","outputs":[{"internalType":"contract IVerifier","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_left","type":"bytes32"},{"internalType":"bytes32","name":"_right","type":"bytes32"}],"name":"hashLeftRight","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"FIELD_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"levels","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"isKnownRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"commitments","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"denomination","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentRootIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newVerifier","type":"address"}],"name":"updateVerifier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32[]","name":"_nullifierHashes","type":"bytes32[]"}],"name":"isSpentArray","outputs":[{"internalType":"bool[]","name":"spent","type":"bool[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_commitment","type":"bytes32"}],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getLastRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"roots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROOT_HISTORY_SIZE","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_nullifierHash","type":"bytes32"}],"name":"isSpent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"zeros","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ZERO_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"filledSubtrees","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nextIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IVerifier","name":"_verifier","type":"address"},{"internalType":"uint256","name":"_denomination","type":"uint256"},{"internalType":"uint32","name":"_merkleTreeHeight","type":"uint32"},{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"commitment","type":"bytes32"},{"indexed":false,"internalType":"uint32","name":"leafIndex","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bytes32","name":"nullifierHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"relayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"Withdrawal","type":"event"}]

6080604052600380546001600160401b03191690553480156200002157600080fd5b5060405162001d8a38038062001d8a833981810160405260a08110156200004757600080fd5b50805160208201516040830151606084015160809094015192939192909190848484848163ffffffff8116620000c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018062001d016027913960400191505060405180910390fd5b60208163ffffffff16106200012a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018062001d486022913960400191505060405180910390fd5b6000805463ffffffff191663ffffffff83161781556002805460018181019092557f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60008051602062001cc0833981519152909101819055815480830183559282905260008051602062001d6a8339815191529092018290555b60005463ffffffff90811690821610156200021857620001ce82806001600160e01b03620002e216565b60028054600181810190925560008051602062001cc08339815191520182905580548082018255600082905260008051602062001d6a8339815191520182905590925001620001a4565b506200022e81806001600160e01b03620002e216565b600455505060016068558262000290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018062001c9b6025913960400191505060405180910390fd5b606c80546001600160a01b039586166001600160a01b031991821617909155606d80549286169282169290921790915560699290925550606e8054939092169216919091179055506200051c92505050565b600060008051602062001d2883398151915283106200036257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b60008051602062001d288339815191528210620003cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062001ce06021913960400191505060405180910390fd5b604080517ff47d33b5000000000000000000000000000000000000000000000000000000008152600481018590526000602482018190528251869391927383584f83f26af4edda9cbe8c730bc87c364b28fe9263f47d33b592604480840193829003018186803b1580156200043f57600080fd5b505af415801562000454573d6000803e3d6000fd5b505050506040513d60408110156200046b57600080fd5b508051602090910151909250905060008051602062001d2883398151915284830891507383584f83f26af4edda9cbe8c730bc87c364b28fe63f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b158015620004e557600080fd5b505af4158015620004fa573d6000803e3d6000fd5b505050506040513d60408110156200051157600080fd5b505195945050505050565b61176f806200052c6000396000f3fe60806040526004361061014b5760003560e01c806397fc007c116100b6578063e5285dcc1161006f578063e5285dcc14610514578063e82955881461053e578063ec73295914610568578063f178e47c1461057d578063fc0c546a146105a7578063fc7e9c6f146105bc5761014b565b806397fc007c146103a55780639fa12d0b146103d8578063b214faa5146104a3578063ba70f757146104c0578063c2b40ae4146104d5578063cd87a3b4146104ff5761014b565b80634ecf518b116101085780634ecf518b146102e4578063570ca735146103125780636d9833e314610327578063839df945146103515780638bca6d161461037b57806390eeb02b146103905761014b565b806306394c9b1461015057806317cc915c1461018557806321a0adb6146101c35780632b7ac3f31461025c57806338bf282e1461028d578063414a37ba146102cf575b600080fd5b34801561015c57600080fd5b506101836004803603602081101561017357600080fd5b50356001600160a01b03166105d1565b005b34801561019157600080fd5b506101af600480360360208110156101a857600080fd5b503561063c565b604080519115158252519081900360200190f35b610183600480360360e08110156101d957600080fd5b810190602081018135600160201b8111156101f357600080fd5b82018360208201111561020557600080fd5b803590602001918460018302840111600160201b8311171561022657600080fd5b91935091508035906020810135906001600160a01b03604082013581169160608101359091169060808101359060a00135610651565b34801561026857600080fd5b50610271610992565b604080516001600160a01b039092168252519081900360200190f35b34801561029957600080fd5b506102bd600480360360408110156102b057600080fd5b50803590602001356109a1565b60408051918252519081900360200190f35b3480156102db57600080fd5b506102bd610b82565b3480156102f057600080fd5b506102f9610b94565b6040805163ffffffff9092168252519081900360200190f35b34801561031e57600080fd5b50610271610ba0565b34801561033357600080fd5b506101af6004803603602081101561034a57600080fd5b5035610baf565b34801561035d57600080fd5b506101af6004803603602081101561037457600080fd5b5035610c22565b34801561038757600080fd5b506102bd610c37565b34801561039c57600080fd5b506102f9610c3d565b3480156103b157600080fd5b50610183600480360360208110156103c857600080fd5b50356001600160a01b0316610c49565b3480156103e457600080fd5b50610453600480360360208110156103fb57600080fd5b810190602081018135600160201b81111561041557600080fd5b82018360208201111561042757600080fd5b803590602001918460208302840111600160201b8311171561044857600080fd5b509092509050610cb4565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048f578181015183820152602001610477565b505050509050019250505060405180910390f35b610183600480360360208110156104b957600080fd5b5035610d3c565b3480156104cc57600080fd5b506102bd610e5d565b3480156104e157600080fd5b506102bd600480360360208110156104f857600080fd5b5035610e7d565b34801561050b57600080fd5b506102f9610e91565b34801561052057600080fd5b506101af6004803603602081101561053757600080fd5b5035610e96565b34801561054a57600080fd5b506102bd6004803603602081101561056157600080fd5b5035610eab565b34801561057457600080fd5b506102bd610ec9565b34801561058957600080fd5b506102bd600480360360208110156105a057600080fd5b5035610eed565b3480156105b357600080fd5b50610271610efa565b3480156105c857600080fd5b506102f9610f09565b606d546001600160a01b0316331461061a5760405162461bcd60e51b81526004018080602001828103825260258152602001806117166025913960400191505060405180910390fd5b606d80546001600160a01b0319166001600160a01b0392909216919091179055565b606a6020526000908152604090205460ff1681565b60688054600101908190556069548311156106b3576040805162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c7565000000000000604482015290519081900360640190fd5b6000868152606a602052604090205460ff1615610717576040805162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e7400604482015290519081900360640190fd5b61072087610baf565b610771576040805162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f7400000000604482015290519081900360640190fd5b606c546040805160c080820183528a8252602082018a90526001600160a01b038981168385015288811660608401526080830188905260a08301879052925163695ef6f960e01b8152929093169263695ef6f9928d928d9290916004810191829160240190849080838360005b838110156107f65781810151838201526020016107de565b505050509050018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050945050505050602060405180830381600087803b15801561084857600080fd5b505af115801561085c573d6000803e3d6000fd5b505050506040513d602081101561087257600080fd5b50516108be576040805162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b604482015290519081900360640190fd5b6000868152606a60205260409020805460ff191660011790556108e385858585610f1c565b604080516001600160a01b038781168252602082018990528183018690529151918616917fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319181900360600190a26068548114610987576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b505050505050505050565b606c546001600160a01b031681565b60006000805160206116a58339815191528310610a05576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b6000805160206116a58339815191528210610a515760405162461bcd60e51b81526004018080602001828103825260218152602001806116556021913960400191505060405180910390fd5b6040805163f47d33b560e01b8152600481018590526000602482018190528251869391927383584f83f26af4edda9cbe8c730bc87c364b28fe9263f47d33b592604480840193829003018186803b158015610aab57600080fd5b505af4158015610abf573d6000803e3d6000fd5b505050506040513d6040811015610ad557600080fd5b50805160209091015190925090506000805160206116a583398151915284830891507383584f83f26af4edda9cbe8c730bc87c364b28fe63f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b158015610b4d57600080fd5b505af4158015610b61573d6000803e3d6000fd5b505050506040513d6040811015610b7757600080fd5b505195945050505050565b6000805160206116a583398151915281565b60005463ffffffff1681565b606d546001600160a01b031681565b600081610bbe57506000610c1d565b60035463ffffffff165b60048163ffffffff1660648110610bdb57fe5b0154831415610bee576001915050610c1d565b63ffffffff8116610bfd575060645b6003546000199091019063ffffffff80831691161415610bc85760009150505b919050565b606b6020526000908152604090205460ff1681565b60695481565b60035463ffffffff1681565b606d546001600160a01b03163314610c925760405162461bcd60e51b81526004018080602001828103825260258152602001806117166025913960400191505060405180910390fd5b606c80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518281526020808402820101909152606090828015610ce0578160200160208202803883390190505b50905060005b82811015610d3557610d09848483818110610cfd57fe5b90506020020135610e96565b15610d2d576001828281518110610d1c57fe5b911515602092830291909101909101525b600101610ce6565b5092915050565b60688054600101908190556000828152606b602052604090205460ff1615610d955760405162461bcd60e51b81526004018080602001828103825260218152602001806116c56021913960400191505060405180910390fd5b6000610da083611017565b6000848152606b60205260409020805460ff191660011790559050610dc36111ae565b6040805163ffffffff83168152426020820152815185927fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196928290030190a2506068548114610e59576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5050565b60035460009060049063ffffffff1660648110610e7657fe5b0154905090565b60048160648110610e8a57fe5b0154905081565b606481565b6000908152606a602052604090205460ff1690565b60028181548110610eb857fe5b600091825260209091200154905081565b7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b60018181548110610eb857fe5b606e546001600160a01b031681565b600354600160201b900463ffffffff1681565b803414610f5a5760405162461bcd60e51b81526004018080602001828103825260308152602001806115fe6030913960400191505060405180910390fd5b610f688483606954036111fa565b8115610f7857610f7883836111fa565b8015611011576040516000906001600160a01b0386169083908381818185875af1925050503d8060008114610fc9576040519150601f19603f3d011682016040523d82523d6000602084013e610fce565b606091505b505090508061100f576040516001600160a01b0385169083156108fc029084906000818181858888f1935050505015801561100d573d6000803e3d6000fd5b505b505b50505050565b60035460008054909163ffffffff600160201b909104811691811660020a168114156110745760405162461bcd60e51b815260040180806020018281038252602f8152602001806115a5602f913960400191505060405180910390fd5b6003805463ffffffff600160201b80830482166001019091160267ffffffff000000001990911617905582600080805b60005463ffffffff908116908216101561114c57600185166111085783925060028163ffffffff16815481106110d657fe5b906000526020600020015491508360018263ffffffff16815481106110f757fe5b60009182526020909120015561112c565b60018163ffffffff168154811061111b57fe5b906000526020600020015492508391505b61113683836109a1565b9350600263ffffffff86160494506001016110a4565b5060035460649063ffffffff908116600101166003805463ffffffff19169290910663ffffffff90811692909217908190558491600491166064811061118e57fe5b01555050600354600160201b900463ffffffff1660001901949350505050565b34156111eb5760405162461bcd60e51b81526004018080602001828103825260308152602001806116e66030913960400191505060405180910390fd5b6111f833306069546113c5565b565b606e54604080516001600160a01b038581166024830152604480830186905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000956060959316939282918083835b602083106112775780518252601f199092019160209182019101611258565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146112d9576040519150601f19603f3d011682016040523d82523d6000602084013e6112de565b606091505b509150915081611329576040805162461bcd60e51b81526020600482015260116024820152706e6f7420656e6f75676820746f6b656e7360781b604482015290519081900360640190fd5b8051156110115780516020146113705760405162461bcd60e51b815260040180806020018281038252602a8152602001806115d4602a913960400191505060405180910390fd5b80806020019051602081101561138557600080fd5b50519150816110115760405162461bcd60e51b815260040180806020018281038252602781526020018061162e6027913960400191505060405180910390fd5b606e54604080516001600160a01b0386811660248301528581166044830152606480830186905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000956060959316939282918083835b6020831061144a5780518252601f19909201916020918201910161142b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146114ac576040519150601f19603f3d011682016040523d82523d6000602084013e6114b1565b606091505b509150915081611508576040805162461bcd60e51b815260206004820152601960248201527f6e6f7420656e6f75676820616c6c6f77656420746f6b656e7300000000000000604482015290519081900360640190fd5b80511561100f57805160201461154f5760405162461bcd60e51b815260040180806020018281038252602a8152602001806115d4602a913960400191505060405180910390fd5b80806020019051602081101561156457600080fd5b505191508161100f5760405162461bcd60e51b815260040180806020018281038252602f815260200180611676602f913960400191505060405180910390fdfe4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656166732063616e20626520616464656464617461206c656e6774682073686f756c64206265206569746865722030206f72203332206279746573496e636f727265637420726566756e6420616d6f756e742072656365697665642062792074686520636f6e74726163746e6f7420656e6f75676820746f6b656e732e20546f6b656e2072657475726e732066616c73652e5f72696768742073686f756c6420626520696e7369646520746865206669656c646e6f7420656e6f75676820616c6c6f77656420746f6b656e732e20546f6b656e2072657475726e732066616c73652e30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000154686520636f6d6d69746d656e7420686173206265656e207375626d69747465644554482076616c756520697320737570706f73656420746f206265203020666f7220455243323020696e7374616e63654f6e6c79206f70657261746f722063616e2063616c6c20746869732066756e6374696f6e2ea265627a7a72315820eedd377dd479e33096b8ae40ac1f5cf72ccf7e7f36628dcbb747b78530751d0c64736f6c634300050b003264656e6f6d696e6174696f6e2073686f756c642062652067726561746572207468616e2030405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f72696768742073686f756c6420626520696e7369646520746865206669656c645f747265654c6576656c732073686f756c642062652067726561746572207468616e207a65726f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f747265654c6576656c732073686f756c64206265206c657373207468616e203332b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60000000000000000000000000db297c70758f31a63235edfded040a04ad3fd6c0000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000008589427373d6d84e98730d7795d8f6f8731fda160000000000000000000000006b175474e89094c44da98b954eedeac495271d0f

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000db297c70758f31a63235edfded040a04ad3fd6c0000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000008589427373d6d84e98730d7795d8f6f8731fda160000000000000000000000006b175474e89094c44da98b954eedeac495271d0f

-----Decoded View---------------
Arg [0] : _verifier (address): 0x0db297c70758f31A63235edfdEd040A04aD3fD6C
Arg [1] : _denomination (uint256): 100000000000000000000
Arg [2] : _merkleTreeHeight (uint32): 20
Arg [3] : _operator (address): 0x8589427373D6D84E98730D7795D8f6f8731FDA16
Arg [4] : _token (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000db297c70758f31a63235edfded040a04ad3fd6c
Arg [1] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 0000000000000000000000008589427373d6d84e98730d7795d8f6f8731fda16
Arg [4] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f


Libraries Used


Deployed ByteCode Sourcemap

12081:2252:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11136:104;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11136:104:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11136:104:0;-1:-1:-1;;;;;11136:104:0;;:::i;:::-;;6772:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6772:47:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6772:47:0;;:::i;:::-;;;;;;;;;;;;;;;;;;9221:790;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9221:790:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;9221:790:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9221:790:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;9221:790:0;;-1:-1:-1;9221:790:0;-1:-1:-1;9221:790:0;;;;;;;;-1:-1:-1;;;;;9221:790:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;6964:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6964:25:0;;;:::i;:::-;;;;-1:-1:-1;;;;;6964:25:0;;;;;;;;;;;;;;2283:454;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2283:454:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2283:454:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;951:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;951:114:0;;;:::i;1230:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1230:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7153:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7153:23:0;;;:::i;3649:357::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3649:357:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3649:357:0;;:::i;6916:43::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6916:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6916:43:0;;:::i;6740:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6740:27:0;;;:::i;1457:34::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1457:34:0;;;:::i;10968:115::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10968:115:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10968:115:0;-1:-1:-1;;;;;10968:115:0;;:::i;10432:300::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10432:300:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10432:300:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;10432:300:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10432:300:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;10432:300:0;;-1:-1:-1;10432:300:0;-1:-1:-1;10432:300:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10432:300:0;;;;;;;;;;;;;;;;;8380:332;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8380:332:0;;:::i;4057:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4057:95:0;;;:::i;1579:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1579:39:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1579:39:0;;:::i;1528:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1528:46:0;;;:::i;10250:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10250:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10250:118:0;;:::i;1430:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1430:22:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1430:22:0;;:::i;1070:114::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1070:114:0;;;:::i;1394:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1394:31:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1394:31:0;;:::i;12124:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12124:20:0;;;:::i;1496:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1496:27:0;;;:::i;11136:104::-;7232:8;;-1:-1:-1;;;;;7232:8:0;7218:10;:22;7210:72;;;;-1:-1:-1;;;7210:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11211:8;:23;;-1:-1:-1;;;;;;11211:23:0;-1:-1:-1;;;;;11211:23:0;;;;;;;;;;11136:104::o;6772:47::-;;;;;;;;;;;;;;;:::o;9221:790::-;5549:13;:18;;5566:1;5549:18;;;;;9439:12;;9431:20;;;9423:59;;;;;-1:-1:-1;;;9423:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9498:31;;;;:15;:31;;;;;;;;9497:32;9489:76;;;;;-1:-1:-1;;;9489:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9580:18;9592:5;9580:11;:18::i;:::-;9572:59;;;;;-1:-1:-1;;;9572:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9679:8;;:126;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9750:19:0;;;9679:126;;;;9771:17;;;9679:126;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9679:126:0;;:8;;;;;:20;;9700:6;;;;9679:126;;;;;;;;;;;;;;;;:8;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;9679:126:0;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;9679:126:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9679:126:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9679:126:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9679:126:0;9671:161;;;;;-1:-1:-1;;;9671:161:0;;;;;;;;;;;;-1:-1:-1;;;9671:161:0;;;;;;;;;;;;;;;9841:31;;;;:15;:31;;;;;:38;;-1:-1:-1;;9841:38:0;9875:4;9841:38;;;9886:53;9903:10;9915:8;9925:4;9931:7;9886:16;:53::i;:::-;9951:54;;;-1:-1:-1;;;;;9951:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5661:13;;5645:12;:29;5637:73;;;;;-1:-1:-1;;;5637:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9221:790;;;;;;;;;:::o;6964:25::-;;;-1:-1:-1;;;;;6964:25:0;;:::o;2283:454::-;2358:7;-1:-1:-1;;;;;;;;;;;2382:27:0;;2374:72;;;;;-1:-1:-1;;;2374:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2461:28:0;;2453:74;;;;-1:-1:-1;;;2453:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2596:23;;;-1:-1:-1;;;2596:23:0;;;;;;;;2534:9;2596:23;;;;;;;;2554:5;;2534:9;;2596:6;;:17;;:23;;;;;;;;;;:6;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;2596:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2596:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2596:23:0;;;;;;;;;-1:-1:-1;2596:23:0;-1:-1:-1;;;;;;;;;;;;2648:6:0;2637:1;2630:38;2626:42;;2684:6;:17;2702:1;2705;2684:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2684:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2684:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2684:23:0;;2283:454;-1:-1:-1;;;;;2283:454:0:o;951:114::-;-1:-1:-1;;;;;;;;;;;951:114:0;:::o;1230:20::-;;;;;;:::o;7153:23::-;;;-1:-1:-1;;;;;7153:23:0;;:::o;3649:357::-;3705:4;3722:10;3718:45;;-1:-1:-1;3750:5:0;3743:12;;3718:45;3780:16;;;;3803:179;3828:5;3834:1;3828:8;;;;;;;;;;;3819:5;:17;3815:55;;;3856:4;3849:11;;;;;3815:55;3882:6;;;3878:54;;-1:-1:-1;1571:3:0;3878:54;3964:16;;-1:-1:-1;;3940:3:0;;;;3964:16;3959:21;;;3964:16;;3959:21;;3803:179;;3995:5;3988:12;;;3649:357;;;;:::o;6916:43::-;;;;;;;;;;;;;;;:::o;6740:27::-;;;;:::o;1457:34::-;;;;;;:::o;10968:115::-;7232:8;;-1:-1:-1;;;;;7232:8:0;7218:10;:22;7210:72;;;;-1:-1:-1;;;7210:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11043:8;:34;;-1:-1:-1;;;;;;11043:34:0;-1:-1:-1;;;;;11043:34:0;;;;;;;;;;10968:115::o;10432:300::-;10549:35;;;;;;;;;;;;;;;;10513:19;;10560:16;10549:35;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10549:35:0;-1:-1:-1;10541:43:0;-1:-1:-1;10595:6:0;10591:136;10607:27;;;10591:136;;;10654:28;10662:16;;10679:1;10662:19;;;;;;;;;;;;;10654:7;:28::i;:::-;10650:70;;;10706:4;10695:5;10701:1;10695:8;;;;;;;;:15;;;:8;;;;;;;;;;;:15;10650:70;10636:3;;10591:136;;;;10432:300;;;;:::o;8380:332::-;5549:13;:18;;5566:1;5549:18;;;;;:13;8464:24;;;:11;:24;;;;;;;;8463:25;8455:71;;;;-1:-1:-1;;;8455:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8535:20;8558;8566:11;8558:7;:20::i;:::-;8585:24;;;;:11;:24;;;;;:31;;-1:-1:-1;;8585:31:0;8612:4;8585:31;;;8535:43;-1:-1:-1;8623:17:0;:15;:17::i;:::-;8654:52;;;;;;;;8690:15;8654:52;;;;;;8662:11;;8654:52;;;;;;;;5625:1;5661:13;;5645:12;:29;5637:73;;;;;-1:-1:-1;;;5637:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8380:332;;:::o;4057:95::-;4129:16;;4100:7;;4123:5;;4129:16;;4123:23;;;;;;;;;4116:30;;4057:95;:::o;1579:39::-;;;;;;;;;;;;;-1:-1:-1;1579:39:0;:::o;1528:46::-;1571:3;1528:46;:::o;10250:118::-;10311:4;10331:31;;;:15;:31;;;;;;;;;10250:118::o;1430:22::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1430:22:0;:::o;1070:114::-;1107:77;1070:114;:::o;1394:31::-;;;;;;;;;;12124:20;;;-1:-1:-1;;;;;12124:20:0;;:::o;1496:27::-;;;-1:-1:-1;;;1496:27:0;;;;;:::o;12602:562::-;12750:7;12737:9;:20;12729:81;;;;-1:-1:-1;;;12729:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12819:51;12838:10;12865:4;12850:12;;:19;12819:18;:51::i;:::-;12881:8;;12877:65;;12900:34;12919:8;12929:4;12900:18;:34::i;:::-;12954:11;;12950:209;;12995:34;;12977:12;;-1:-1:-1;;;;;12995:15:0;;;13017:7;;12977:12;12995:34;12977:12;12995:34;13017:7;12995:15;:34;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;12976:53:0;;;13043:7;13038:114;;13116:26;;-1:-1:-1;;;;;13116:17:0;;;:26;;;;;13134:7;;13116:26;;;;13134:7;13116:17;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13116:26:0;13038:114;12950:209;;12602:562;;;;:::o;2743:829::-;2835:9;;2792:12;2886:6;;2792:12;;2835:9;-1:-1:-1;;;2835:9:0;;;;;;2886:6;;2882:1;2875:17;2859:33;;;;2851:93;;;;-1:-1:-1;;;2851:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2951:9;:14;;;-1:-1:-1;;;2951:14:0;;;;;2964:1;2951:14;;;;;-1:-1:-1;;2951:14:0;;;;;;2999:5;-1:-1:-1;;;3052:369:0;3075:6;;;;;;3071:10;;;;3052:369;;;3101:16;;;3097:233;;3142:16;3135:23;;3177:5;3183:1;3177:8;;;;;;;;;;;;;;;;;;3169:16;;3218;3198:14;3213:1;3198:17;;;;;;;;;;;;;;;;;;;:36;3097:233;;;3268:14;3283:1;3268:17;;;;;;;;;;;;;;;;;;3261:24;;3304:16;3296:24;;3097:233;3359:26;3373:4;3379:5;3359:13;:26::i;:::-;3340:45;-1:-1:-1;3412:1:0;3396:17;;;;;-1:-1:-1;3083:3:0;;3052:369;;;-1:-1:-1;3449:16:0;;1571:3;;3448:42;3449:16;;;;:20;3448:42;3429:16;:61;;-1:-1:-1;;3429:61:0;3448:42;;;;3429:61;;;;;;;;;;;;3523:16;;3497:5;;3503:16;3497:23;;;;;;;;:42;-1:-1:-1;;3553:9:0;;-1:-1:-1;;;3553:9:0;;;;-1:-1:-1;;3553:13:0;;2743:829;-1:-1:-1;;;;2743:829:0:o;12402:194::-;12453:9;:14;12445:75;;;;-1:-1:-1;;;12445:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12527:63;12550:10;12570:4;12577:12;;12527:22;:63::i;:::-;12402:194::o;13776:554::-;13886:5;;13897:63;;;-1:-1:-1;;;;;13897:63:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13897:63:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;13886:75:0;;;;13851:12;;13865:17;;13886:5;;;13897:63;13886:75;;;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13886:75:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;13850:111:0;;;;13976:7;13968:37;;;;;-1:-1:-1;;;13968:37:0;;;;;;;;;;;;-1:-1:-1;;;13968:37:0;;;;;;;;;;;;;;;14108:11;;:15;14104:221;;14142:4;:11;14157:2;14142:17;14134:72;;;;-1:-1:-1;;;14134:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14236:4;14225:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14225:24:0;;-1:-1:-1;14225:24:0;14258:59;;;;-1:-1:-1;;;14258:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13170:600;13299:5;;13310:74;;;-1:-1:-1;;;;;13310:74:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13310:74:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;13299:86:0;;;;13264:12;;13278:17;;13299:5;;;13310:74;13299:86;;;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13299:86:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;13263:122:0;;;;13400:7;13392:45;;;;;-1:-1:-1;;;13392:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13540:11;;:15;13536:229;;13574:4;:11;13589:2;13574:17;13566:72;;;;-1:-1:-1;;;13566:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13668:4;13657:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13657:24:0;;-1:-1:-1;13657:24:0;13690:67;;;;-1:-1:-1;;;13690:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://eedd377dd479e33096b8ae40ac1f5cf72ccf7e7f36628dcbb747b78530751d0c
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.