Contract 0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc 5

Tornado.Cash OFAC Sanctions Lists 
 
 
Txn Hash
Method
Block
From
To
Value
0x721bea643214928a96c76c25eb2aeee002d399242c8d1aa91a75fe5867c127e8Deposit160044352022-11-19 13:43:238 days 15 hrs ago0x861ebe85242b027c90b9ba201edb8c1443859629 IN  Tornado.Cash: 0.1 ETH0.1 Ether0.00998210.89520633
0xc563d1eb3d36b7b1bfe186741b3f38e0d1b94d2d5ad7e677a325e145df14fe3aDeposit160044352022-11-19 13:43:238 days 15 hrs ago0x861ebe85242b027c90b9ba201edb8c1443859629 IN  Tornado.Cash: 0.1 ETH0.1 Ether0.0101614111.48251184
0x189a3eb0a5520757516c51c88eca78b3be9b5daaa5d63a69b72d5e26147e674cDeposit160044352022-11-19 13:43:238 days 15 hrs ago0x861ebe85242b027c90b9ba201edb8c1443859629 IN  Tornado.Cash: 0.1 ETH0.1 Ether0.0100196211.25604186
0xd4228239dbb0aa8f94fd6986bd87c6023034806b059340fc388e68dc1e641195Deposit160044352022-11-19 13:43:238 days 15 hrs ago0x861ebe85242b027c90b9ba201edb8c1443859629 IN  Tornado.Cash: 0.1 ETH0.1 Ether0.0111090412.47989745
0xfe8e67b64ba94f8e31cab9d0684775f06e888e56c6e4d0c65c9c810ff62ef69fDeposit160044352022-11-19 13:43:238 days 15 hrs ago0x861ebe85242b027c90b9ba201edb8c1443859629 IN  Tornado.Cash: 0.1 ETH0.1 Ether0.0109406812.21927744
0xaf9c9a0e107881c1b8e4723ce7a466228654bcdc201ac601dcbc2b8772debd0fDeposit160044352022-11-19 13:43:238 days 15 hrs ago0x861ebe85242b027c90b9ba201edb8c1443859629 IN  Tornado.Cash: 0.1 ETH0.1 Ether0.0098863611.10634091
0xab808ad0c124a1c39135cca6f64facba1fb159dac65fd719a6d2b529ec22021fDeposit160044352022-11-19 13:43:238 days 15 hrs ago0x861ebe85242b027c90b9ba201edb8c1443859629 IN  Tornado.Cash: 0.1 ETH0.1 Ether0.0111074512.40553023
0x72cb43a3786c1aeb98558ff16d50c92fee8fe3b67cd97fae51ad4a0aae1680b5Deposit160044352022-11-19 13:43:238 days 15 hrs ago0x861ebe85242b027c90b9ba201edb8c1443859629 IN  Tornado.Cash: 0.1 ETH0.1 Ether0.0103850911.59875336
0xee71da03ee79fcecf804c6273bde7f05114082e14f5a551b55a84787adbf50a3Deposit156971852022-10-07 15:42:5951 days 13 hrs ago0xba47a68ffdf53037038ad45d4cd07d1d9454b584 IN  Tornado.Cash: 0.1 ETH0.1 Ether0.0268717129
0x7ddc985391c620861f8f6294e9d1e23eb568c98f23540b5eeb48602013b35afeDeposit154060222022-08-25 0:26:2995 days 5 hrs ago0x4570d5b4177cf209944e8e3fb1f2a77021ffd5c5 IN  Tornado.Cash: 0.1 ETH0.1 Ether0.00595526 6.5
0x0d67a9668862835fc3b9df65a18e3d4330326aec6847ca5b770ae99401bc54a3Withdraw154011582022-08-24 5:50:0895 days 23 hrs ago0x87bedf6ad81a2907633ab68d02c44f0415bc68c1 IN  Tornado.Cash: 0.1 ETH0 Ether0.00316771 8.9943924
0xba114b2efb5363445da5b84194454201024fa83c06682a39851e26ed95c603dfWithdraw154011062022-08-24 5:35:1896 days 4 mins ago0x87bedf6ad81a2907633ab68d02c44f0415bc68c1 IN  Tornado.Cash: 0.1 ETH0 Ether0.00283629 8.66901341
0xcc23674badf5711740b893ee79fc32c9af280828bdff61f1b64355e291c369efWithdraw154010312022-08-24 5:15:5696 days 24 mins ago0x36dd7b862746fdd3edd3577c8411f1b76fdc2af5 IN  Tornado.Cash: 0.1 ETH0 Ether0.0027414 8.37898881
0xe635b04b5202873e15af5db405a7db72ca39d72ff36e217dab5ce77d4fa58623Withdraw154002312022-08-24 2:18:1996 days 3 hrs ago0x87bedf6ad81a2907633ab68d02c44f0415bc68c1 IN  Tornado.Cash: 0.1 ETH0 Ether0.0033713 10.30389239
0xa1153df284b91fb50d91e627c55ac574a1229060894e12b875d1076adbc4177bWithdraw154002262022-08-24 2:17:1296 days 3 hrs ago0x87bedf6ad81a2907633ab68d02c44f0415bc68c1 IN  Tornado.Cash: 0.1 ETH0 Ether0.00339456 10.37458997
0x3bfc9c4b8af8156b4900e46b1917f90425dc4e9c4334f2ad6209e4e48462409cWithdraw154002192022-08-24 2:16:0896 days 3 hrs ago0x853281b7676dfb66b87e2f26c9cb9d10ce883f37 IN  Tornado.Cash: 0.1 ETH0 Ether0.00407705 12.46133975
0x6ef8ee0232abd397df90fd5940673262ed1e106fd2ac0dcad3908b8d05cd3f3dWithdraw154000672022-08-24 1:41:5196 days 3 hrs ago0x87bedf6ad81a2907633ab68d02c44f0415bc68c1 IN  Tornado.Cash: 0.1 ETH0 Ether0.00043346 11.57135053
0x1ed6ee39b385484bea8108deafa29c756879b8bd4466c90a1eaf6e61caed8f39Withdraw153943942022-08-23 4:06:3097 days 1 hr ago0x853281b7676dfb66b87e2f26c9cb9d10ce883f37 IN  Tornado.Cash: 0.1 ETH0 Ether0.00291487 8.90920569
0x2a944f2fd9ca12089dbcf0649ca103c876796899ca0110e78f60e0445c4b963fWithdraw153903652022-08-22 12:57:4397 days 16 hrs ago0x0000208a6cc0299da631c08fe8c2ede435ea83b8 IN  Tornado.Cash: 0.1 ETH0 Ether0.0042339 12.02213943
0x2749ef037fdbf8d0f2bc05d798d0c187a9b75d520ca3f6414acf01bd5146b793Withdraw153838832022-08-21 12:00:4898 days 17 hrs ago0x87bedf6ad81a2907633ab68d02c44f0415bc68c1 IN  Tornado.Cash: 0.1 ETH0 Ether0.00194048 5.93122911
0xafee46aeef2d87cc96f7ba1be1f64ddb53beeb0a5fb3609ef72807673db5b971Withdraw153194962022-08-11 7:46:21108 days 21 hrs ago0xe0f3772995bbac19975d9fa015e3bd4167bc04e1 IN  Tornado.Cash: 0.1 ETH0 Ether0.00538262 16.32522916
0x4d279aaf625aecc5d99462c550dc48b4a7db9581ea9e43a0ae55e626ac737c57Withdraw152710972022-08-03 18:36:42116 days 11 hrs ago0xe0f3772995bbac19975d9fa015e3bd4167bc04e1 IN  Tornado.Cash: 0.1 ETH0 Ether0.01164205 32.82225484
0x5d3848d5bb97d43fc7a078e23ebbdaf2967cc70ed50925ecea6996f8381736ffWithdraw152623252022-08-02 9:37:44117 days 20 hrs ago0xe0f3772995bbac19975d9fa015e3bd4167bc04e1 IN  Tornado.Cash: 0.1 ETH0 Ether0.00349114 9.84285675
0xd870ad6d410e849342bbcbd27bedf1ca80de6ee375f3e677d4f0490c67fad1f2Withdraw152503532022-07-31 12:56:43119 days 16 hrs ago0xe0f3772995bbac19975d9fa015e3bd4167bc04e1 IN  Tornado.Cash: 0.1 ETH0 Ether0.00276079 7.7837356
0xb0a5831802ed1248baeb81d77ff40be0ba7ff728fead2753b5580291a839d40fWithdraw151367512022-07-13 21:47:00137 days 7 hrs ago0xe0f3772995bbac19975d9fa015e3bd4167bc04e1 IN  Tornado.Cash: 0.1 ETH0 Ether0.02214469 67.1637472
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x45a33f3ffe3a8dd6bd24e665211ea8833120d755b2f6806bf75def0d0f59a689160630192022-11-27 18:09:2311 hrs 30 mins ago Tornado.Cash: Router Tornado.Cash: 0.1 ETH0.1 Ether
0xd1d734b3000defd3fb55856620800999f968c128689fd6875a8307eb11d3de7c160630052022-11-27 18:06:3511 hrs 33 mins ago Tornado.Cash: Router Tornado.Cash: 0.1 ETH0.1 Ether
0xc4a5e398650c337af04eccb9842e57f9e6f0dacf8814c4f1984cd5f8a07abbe3160605182022-11-27 9:46:3519 hrs 53 mins ago Tornado.Cash: 0.1 ETH0x12d92fed171f16b3a05acb1542b40648e7ced3840.00714937 Ether
0xc4a5e398650c337af04eccb9842e57f9e6f0dacf8814c4f1984cd5f8a07abbe3160605182022-11-27 9:46:3519 hrs 53 mins ago Tornado.Cash: 0.1 ETH0x4b3405cedc1411a2c9733a9bd6610a097f8b93690.09285062 Ether
0xe6ab14a6936a00665ab8dac6f64215e7fd8ef1d7d3021bd897b8d8318e637ad3160569642022-11-26 21:52:591 day 7 hrs ago Tornado.Cash: 0.1 ETH0x12d92fed171f16b3a05acb1542b40648e7ced3840.00802443 Ether
0xe6ab14a6936a00665ab8dac6f64215e7fd8ef1d7d3021bd897b8d8318e637ad3160569642022-11-26 21:52:591 day 7 hrs ago Tornado.Cash: 0.1 ETH0x2b33a5643a8c85ad41c58ffc10d4f67573f5d3840.09197556 Ether
0x831d918260cb7ac22e38a64d19a0645026595bbfaa29bcc704966b877bdc306f160568032022-11-26 21:20:351 day 8 hrs ago Tornado.Cash: 0.1 ETHENS Name em3tornado.eth0.00753891 Ether
0x831d918260cb7ac22e38a64d19a0645026595bbfaa29bcc704966b877bdc306f160568032022-11-26 21:20:351 day 8 hrs ago Tornado.Cash: 0.1 ETH0xf541f7e9494380aa28319b8e6d83d2047355e7d20.09246108 Ether
0x9c5de34a6e1e72813f6735225cbc1426c7347e7b2249648272ddb6f4250e742c160553652022-11-26 16:30:591 day 13 hrs ago Tornado.Cash: Router Tornado.Cash: 0.1 ETH0.1 Ether
0x2ae16a881d3b89377efd8ddaad16b04f652fa202c7626020abd9a8edb434c281160547742022-11-26 14:31:231 day 15 hrs ago Tornado.Cash: 0.1 ETH0xaaaad0b504b4cd22348c4db1071736646aa314c60.0177995 Ether
0x2ae16a881d3b89377efd8ddaad16b04f652fa202c7626020abd9a8edb434c281160547742022-11-26 14:31:231 day 15 hrs ago Tornado.Cash: 0.1 ETH0xd79a502d04b4805afe632419bb16eb62d98d13150.0822005 Ether
0xba2afa54adcc7625c23e56462adf171243608a432ea991d6544d4d3a6aad1234160547112022-11-26 14:18:471 day 15 hrs ago Tornado.Cash: Router Tornado.Cash: 0.1 ETH0.1 Ether
0x47e8bd1b9d991f622cf9741ada8a14edd7c8e98e1efbc0311e1a70f780ebe0d1160547052022-11-26 14:17:351 day 15 hrs ago Tornado.Cash: Router Tornado.Cash: 0.1 ETH0.1 Ether
0xb3c49177f2db35487774a4ccf49e345e53df53a652534bf5eb23a9a4affe99a4160547012022-11-26 14:16:471 day 15 hrs ago Tornado.Cash: Router Tornado.Cash: 0.1 ETH0.1 Ether
0xf4721ac80cfd61926b8f434c2e9b13e4908a584497ea232232dacebcd706db5b160537432022-11-26 11:03:591 day 18 hrs ago Tornado.Cash: 0.1 ETHENS Name em3tornado.eth0.00778318 Ether
0xf4721ac80cfd61926b8f434c2e9b13e4908a584497ea232232dacebcd706db5b160537432022-11-26 11:03:591 day 18 hrs ago Tornado.Cash: 0.1 ETH0x2a9158794014f0e7072e1adeb099575560380a780.09221681 Ether
0xf35119111e1576e234c0102044798867ffe52d0b659faa62bbe809873da32f48160529532022-11-26 8:25:351 day 21 hrs ago Tornado.Cash: 0.1 ETH0xa0109274f53609f6be97ec5f3052c659ab80f0120.0066583 Ether
0xf35119111e1576e234c0102044798867ffe52d0b659faa62bbe809873da32f48160529532022-11-26 8:25:351 day 21 hrs ago Tornado.Cash: 0.1 ETH0x9d148f66cc2ab582332142c3dff4b14978a5b05f0.09334169 Ether
0xc3ea18e3c26fb64dee5f7f40e4cbc7a321cc365a5e991c9a9f1b883533d2caed160523362022-11-26 6:21:351 day 23 hrs ago Tornado.Cash: 0.1 ETH0x62e142f218585827436f59997c301f7040396ad40.00681995 Ether
0xc3ea18e3c26fb64dee5f7f40e4cbc7a321cc365a5e991c9a9f1b883533d2caed160523362022-11-26 6:21:351 day 23 hrs ago Tornado.Cash: 0.1 ETH0xefff31a3bf9541d85c4f0e779ac3e840c9a8b71c0.09318004 Ether
0xcb1cab6a67f7deb6b1b314378bdb3596635153273275b09b72cb201e553e7ce7160523112022-11-26 6:16:351 day 23 hrs ago Tornado.Cash: Router Tornado.Cash: 0.1 ETH0.1 Ether
0x6d858de5e6841dc3ee99257765b07182633879d1eb83ad4f6274e04bb3b8c970160503702022-11-25 23:46:352 days 5 hrs ago Tornado.Cash: Router Tornado.Cash: 0.1 ETH0.1 Ether
0x8eab089b65b8bc8da9a21ae5e88cbaf6ea3969a0843655e92bb821a111dca28a160497212022-11-25 21:36:112 days 8 hrs ago Tornado.Cash: Router Tornado.Cash: 0.1 ETH0.1 Ether
0x4848efe0967c5c6a2955af8b9b39859d67b9bf01ddb876ef740c7c52d0e66f67160491502022-11-25 19:41:352 days 9 hrs ago Tornado.Cash: 0.1 ETH0x08657a1f4c1f06d657f31767831421ee7fadf5490.00732054 Ether
0x4848efe0967c5c6a2955af8b9b39859d67b9bf01ddb876ef740c7c52d0e66f67160491502022-11-25 19:41:352 days 9 hrs ago Tornado.Cash: 0.1 ETH0xa18d7610a388931fd740c91f09bc048f3a1fe1190.09267945 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_Eth_01

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/ETHTornado.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 ETHTornado is Tornado {
  constructor(
    IVerifier _verifier,
    uint256 _denomination,
    uint32 _merkleTreeHeight,
    address _operator
  ) Tornado(_verifier, _denomination, _merkleTreeHeight, _operator) public {
  }

  function _processDeposit() internal {
    require(msg.value == denomination, "Please send `mixDenomination` ETH along with transaction");
  }

  function _processWithdraw(address payable _recipient, address payable _relayer, uint256 _fee, uint256 _refund) internal {
    // sanity checks
    require(msg.value == 0, "Message value is supposed to be zero for ETH instance");
    require(_refund == 0, "Refund value is supposed to be zero for ETH instance");

    (bool success, ) = _recipient.call.value(denomination - _fee)("");
    require(success, "payment to _recipient did not go thru");
    if (_fee > 0) {
      (success, ) = _relayer.call.value(_fee)("");
      require(success, "payment to _relayer did not go thru");
    }
  }
}

// File: contracts/MigratableETHTornado.sol

pragma solidity ^0.5.8;


contract TornadoCash_Eth_01 is ETHTornado {
  bool public isMigrated = false;

  constructor(
    IVerifier _verifier,
    uint256 _denomination,
    uint32 _merkleTreeHeight,
    address _operator
  ) ETHTornado(_verifier, _denomination, _merkleTreeHeight, _operator) public {
  }

  /**
    @dev Migrate state from old v1 tornado.cash instance to this contract.
    @dev only applies to eth 0.1 deposits
    @param _commitments deposited commitments from previous contract
    @param _nullifierHashes spent nullifiers from previous contract
  */
  function migrateState(bytes32[] calldata _commitments, bytes32[] calldata _nullifierHashes) external onlyOperator {
    require(!isMigrated, "Migration is disabled");
    for (uint32 i = 0; i < _commitments.length; i++) {
      commitments[_commitments[i]] = true;
      emit Deposit(_commitments[i], nextIndex + i, block.timestamp);
    }

    nextIndex += uint32(_commitments.length);

    for (uint256 i = 0; i < _nullifierHashes.length; i++) {
      nullifierHashes[_nullifierHashes[i]] = true;
      emit Withdrawal(address(0), _nullifierHashes[i], address(0), 0);
    }
  }

  function initializeTreeForMigration(bytes32[] calldata _filledSubtrees, bytes32 _root) external onlyOperator {
    require(!isMigrated, "already migrated");
    filledSubtrees = _filledSubtrees;
    roots[0] = _root;
  }

  function finishMigration() external payable onlyOperator {
    isMigrated = true;
  }
}

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":false,"inputs":[{"internalType":"bytes32[]","name":"_filledSubtrees","type":"bytes32[]"},{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"initializeTreeForMigration","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[],"name":"finishMigration","outputs":[],"payable":true,"stateMutability":"payable","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":"bytes32[]","name":"_commitments","type":"bytes32[]"},{"internalType":"bytes32[]","name":"_nullifierHashes","type":"bytes32[]"}],"name":"migrateState","outputs":[],"payable":false,"stateMutability":"nonpayable","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":true,"inputs":[],"name":"isMigrated","outputs":[{"internalType":"bool","name":"","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":"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"}],"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"}]

6080604052600380546001600160401b0319169055606d805460ff60a01b191690553480156200002e57600080fd5b5060405162001fe938038062001fe9833981810160405260808110156200005457600080fd5b508051602082015160408301516060909301519192909183838383838383838163ffffffff8116620000d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018062001f606027913960400191505060405180910390fd5b60208163ffffffff161062000133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018062001fa76022913960400191505060405180910390fd5b6000805463ffffffff191663ffffffff83161781556002805460018181019092557f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60008051602062001f1f833981519152909101819055815480830183559282905260008051602062001fc98339815191529092018290555b60005463ffffffff90811690821610156200022157620001d782806001600160e01b03620002d916565b60028054600181810190925560008051602062001f1f8339815191520182905580548082018255600082905260008051602062001fc98339815191520182905590925001620001ad565b506200023781806001600160e01b03620002d916565b600455505060016068558262000299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018062001efa6025913960400191505060405180910390fd5b606c80546001600160a01b039586166001600160a01b031991821617909155606d8054929095169116179092556069555062000513975050505050505050565b600060008051602062001f8783398151915283106200035957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b60008051602062001f878339815191528210620003c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062001f3f6021913960400191505060405180910390fd5b604080517ff47d33b5000000000000000000000000000000000000000000000000000000008152600481018590526000602482018190528251869391927383584f83f26af4edda9cbe8c730bc87c364b28fe9263f47d33b592604480840193829003018186803b1580156200043657600080fd5b505af41580156200044b573d6000803e3d6000fd5b505050506040513d60408110156200046257600080fd5b508051602090910151909250905060008051602062001f8783398151915284830891507383584f83f26af4edda9cbe8c730bc87c364b28fe63f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b158015620004dc57600080fd5b505af4158015620004f1573d6000803e3d6000fd5b505050506040513d60408110156200050857600080fd5b505195945050505050565b6119d780620005236000396000f3fe60806040526004361061019c5760003560e01c806390eeb02b116100ec578063c2b40ae41161008a578063e829558811610064578063e8295588146106f2578063ec7329591461071c578063f178e47c14610731578063fc7e9c6f1461075b5761019c565b8063c2b40ae414610689578063cd87a3b4146106b3578063e5285dcc146106c85761019c565b80639fa12d0b116100c65780639fa12d0b14610577578063b06faf6214610642578063b214faa514610657578063ba70f757146106745761019c565b806390eeb02b14610464578063916710aa1461047957806397fc007c146105445761019c565b80634ecf518b116101595780636d9833e3116101335780636d9833e3146103f3578063839df9451461041d57806388d761f2146104475780638bca6d161461044f5761019c565b80634ecf518b14610335578063570ca735146103635780636ba355aa146103785761019c565b806306394c9b146101a157806317cc915c146101d657806321a0adb6146102145780632b7ac3f3146102ad57806338bf282e146102de578063414a37ba14610320575b600080fd5b3480156101ad57600080fd5b506101d4600480360360208110156101c457600080fd5b50356001600160a01b0316610770565b005b3480156101e257600080fd5b50610200600480360360208110156101f957600080fd5b50356107db565b604080519115158252519081900360200190f35b6101d4600480360360e081101561022a57600080fd5b810190602081018135600160201b81111561024457600080fd5b82018360208201111561025657600080fd5b803590602001918460018302840111600160201b8311171561027757600080fd5b91935091508035906020810135906001600160a01b03604082013581169160608101359091169060808101359060a001356107f0565b3480156102b957600080fd5b506102c2610b31565b604080516001600160a01b039092168252519081900360200190f35b3480156102ea57600080fd5b5061030e6004803603604081101561030157600080fd5b5080359060200135610b40565b60408051918252519081900360200190f35b34801561032c57600080fd5b5061030e610d21565b34801561034157600080fd5b5061034a610d33565b6040805163ffffffff9092168252519081900360200190f35b34801561036f57600080fd5b506102c2610d3f565b34801561038457600080fd5b506101d46004803603604081101561039b57600080fd5b810190602081018135600160201b8111156103b557600080fd5b8201836020820111156103c757600080fd5b803590602001918460208302840111600160201b831117156103e857600080fd5b919350915035610d4e565b3480156103ff57600080fd5b506102006004803603602081101561041657600080fd5b5035610dfd565b34801561042957600080fd5b506102006004803603602081101561044057600080fd5b5035610e70565b6101d4610e85565b34801561045b57600080fd5b5061030e610ee3565b34801561047057600080fd5b5061034a610ee9565b34801561048557600080fd5b506101d46004803603604081101561049c57600080fd5b810190602081018135600160201b8111156104b657600080fd5b8201836020820111156104c857600080fd5b803590602001918460208302840111600160201b831117156104e957600080fd5b919390929091602081019035600160201b81111561050657600080fd5b82018360208201111561051857600080fd5b803590602001918460208302840111600160201b8311171561053957600080fd5b509092509050610ef5565b34801561055057600080fd5b506101d46004803603602081101561056757600080fd5b50356001600160a01b031661114a565b34801561058357600080fd5b506105f26004803603602081101561059a57600080fd5b810190602081018135600160201b8111156105b457600080fd5b8201836020820111156105c657600080fd5b803590602001918460208302840111600160201b831117156105e757600080fd5b5090925090506111b5565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561062e578181015183820152602001610616565b505050509050019250505060405180910390f35b34801561064e57600080fd5b5061020061123d565b6101d46004803603602081101561066d57600080fd5b503561124d565b34801561068057600080fd5b5061030e61136e565b34801561069557600080fd5b5061030e600480360360208110156106ac57600080fd5b503561138f565b3480156106bf57600080fd5b5061034a6113a3565b3480156106d457600080fd5b50610200600480360360208110156106eb57600080fd5b50356113a8565b3480156106fe57600080fd5b5061030e6004803603602081101561071557600080fd5b50356113bd565b34801561072857600080fd5b5061030e6113db565b34801561073d57600080fd5b5061030e6004803603602081101561075457600080fd5b50356113ff565b34801561076757600080fd5b5061034a61140c565b606d546001600160a01b031633146107b95760405162461bcd60e51b81526004018080602001828103825260258152602001806119496025913960400191505060405180910390fd5b606d80546001600160a01b0319166001600160a01b0392909216919091179055565b606a6020526000908152604090205460ff1681565b6068805460010190819055606954831115610852576040805162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c7565000000000000604482015290519081900360640190fd5b6000868152606a602052604090205460ff16156108b6576040805162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e7400604482015290519081900360640190fd5b6108bf87610dfd565b610910576040805162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f7400000000604482015290519081900360640190fd5b606c546040805160c080820183528a8252602082018a90526001600160a01b038981168385015288811660608401526080830188905260a08301879052925163695ef6f960e01b8152929093169263695ef6f9928d928d9290916004810191829160240190849080838360005b8381101561099557818101518382015260200161097d565b505050509050018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050945050505050602060405180830381600087803b1580156109e757600080fd5b505af11580156109fb573d6000803e3d6000fd5b505050506040513d6020811015610a1157600080fd5b5051610a5d576040805162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b604482015290519081900360640190fd5b6000868152606a60205260409020805460ff19166001179055610a828585858561141f565b604080516001600160a01b038781168252602082018990528183018690529151918616917fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319181900360600190a26068548114610b26576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b505050505050505050565b606c546001600160a01b031681565b60006000805160206118c08339815191528310610ba4576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b6000805160206118c08339815191528210610bf05760405162461bcd60e51b815260040180806020018281038252602181526020018061186b6021913960400191505060405180910390fd5b6040805163f47d33b560e01b8152600481018590526000602482018190528251869391927383584f83f26af4edda9cbe8c730bc87c364b28fe9263f47d33b592604480840193829003018186803b158015610c4a57600080fd5b505af4158015610c5e573d6000803e3d6000fd5b505050506040513d6040811015610c7457600080fd5b50805160209091015190925090506000805160206118c083398151915284830891507383584f83f26af4edda9cbe8c730bc87c364b28fe63f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b158015610cec57600080fd5b505af4158015610d00573d6000803e3d6000fd5b505050506040513d6040811015610d1657600080fd5b505195945050505050565b6000805160206118c083398151915281565b60005463ffffffff1681565b606d546001600160a01b031681565b606d546001600160a01b03163314610d975760405162461bcd60e51b81526004018080602001828103825260258152602001806119496025913960400191505060405180910390fd5b606d54600160a01b900460ff1615610de9576040805162461bcd60e51b815260206004820152601060248201526f185b1c9958591e481b5a59dc985d195960821b604482015290519081900360640190fd5b610df56001848461179e565b506004555050565b600081610e0c57506000610e6b565b60035463ffffffff165b60048163ffffffff1660648110610e2957fe5b0154831415610e3c576001915050610e6b565b63ffffffff8116610e4b575060645b6003546000199091019063ffffffff80831691161415610e165760009150505b919050565b606b6020526000908152604090205460ff1681565b606d546001600160a01b03163314610ece5760405162461bcd60e51b81526004018080602001828103825260258152602001806119496025913960400191505060405180910390fd5b606d805460ff60a01b1916600160a01b179055565b60695481565b60035463ffffffff1681565b606d546001600160a01b03163314610f3e5760405162461bcd60e51b81526004018080602001828103825260258152602001806119496025913960400191505060405180910390fd5b606d54600160a01b900460ff1615610f95576040805162461bcd60e51b8152602060048201526015602482015274135a59dc985d1a5bdb881a5cc8191a5cd8589b1959605a1b604482015290519081900360640190fd5b60005b63ffffffff811684111561105e576001606b600087878563ffffffff16818110610fbe57fe5b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555084848263ffffffff16818110610ffc57fe5b60035460408051600160201b90920463ffffffff908116870116825242602080840191909152815193029490940135937fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff1969350908290030190a2600101610f98565b506003805463ffffffff600160201b808304821687019091160267ffffffff000000001990911617905560005b81811015611143576001606a60008585858181106110a557fe5b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555060006001600160a01b03167fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c34931600085858581811061110b57fe5b604080516001600160a01b039095168552602091820293909301359084015250600082820152519081900360600190a260010161108b565b5050505050565b606d546001600160a01b031633146111935760405162461bcd60e51b81526004018080602001828103825260258152602001806119496025913960400191505060405180910390fd5b606c80546001600160a01b0319166001600160a01b0392909216919091179055565b6040805182815260208084028201019091526060908280156111e1578160200160208202803883390190505b50905060005b828110156112365761120a8484838181106111fe57fe5b905060200201356113a8565b1561122e57600182828151811061121d57fe5b911515602092830291909101909101525b6001016111e7565b5092915050565b606d54600160a01b900460ff1681565b60688054600101908190556000828152606b602052604090205460ff16156112a65760405162461bcd60e51b81526004018080602001828103825260218152602001806118e06021913960400191505060405180910390fd5b60006112b1836115c5565b6000848152606b60205260409020805460ff1916600117905590506112d461175c565b6040805163ffffffff83168152426020820152815185927fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196928290030190a250606854811461136a576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5050565b60035460009060049063ffffffff166064811061138757fe5b015490505b90565b6004816064811061139c57fe5b0154905081565b606481565b6000908152606a602052604090205460ff1690565b600281815481106113ca57fe5b600091825260209091200154905081565b7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b600181815481106113ca57fe5b600354600160201b900463ffffffff1681565b341561145c5760405162461bcd60e51b815260040180806020018281038252603581526020018061196e6035913960400191505060405180910390fd5b80156114995760405162461bcd60e51b815260040180806020018281038252603481526020018061188c6034913960400191505060405180910390fd5b6069546040516000916001600160a01b0387169190859003908381818185875af1925050503d80600081146114ea576040519150601f19603f3d011682016040523d82523d6000602084013e6114ef565b606091505b505090508061152f5760405162461bcd60e51b81526004018080602001828103825260258152602001806119016025913960400191505060405180910390fd5b8215611143576040516001600160a01b038516908490600081818185875af1925050503d806000811461157e576040519150601f19603f3d011682016040523d82523d6000602084013e611583565b606091505b505080915050806111435760405162461bcd60e51b81526004018080602001828103825260238152602001806119266023913960400191505060405180910390fd5b60035460008054909163ffffffff600160201b909104811691811660020a168114156116225760405162461bcd60e51b815260040180806020018281038252602f815260200180611804602f913960400191505060405180910390fd5b6003805463ffffffff600160201b80830482166001019091160267ffffffff000000001990911617905582600080805b60005463ffffffff90811690821610156116fa57600185166116b65783925060028163ffffffff168154811061168457fe5b906000526020600020015491508360018263ffffffff16815481106116a557fe5b6000918252602090912001556116da565b60018163ffffffff16815481106116c957fe5b906000526020600020015492508391505b6116e48383610b40565b9350600263ffffffff8616049450600101611652565b5060035460649063ffffffff908116600101166003805463ffffffff19169290910663ffffffff90811692909217908190558491600491166064811061173c57fe5b01555050600354600160201b900463ffffffff1660001901949350505050565b606954341461179c5760405162461bcd60e51b81526004018080602001828103825260388152602001806118336038913960400191505060405180910390fd5b565b8280548282559060005260206000209081019282156117d9579160200282015b828111156117d95782358255916020019190600101906117be565b506117e59291506117e9565b5090565b61138c91905b808211156117e557600081556001016117ef56fe4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656166732063616e206265206164646564506c656173652073656e6420606d697844656e6f6d696e6174696f6e602045544820616c6f6e672077697468207472616e73616374696f6e5f72696768742073686f756c6420626520696e7369646520746865206669656c64526566756e642076616c756520697320737570706f73656420746f206265207a65726f20666f722045544820696e7374616e636530644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000154686520636f6d6d69746d656e7420686173206265656e207375626d69747465647061796d656e7420746f205f726563697069656e7420646964206e6f7420676f20746872757061796d656e7420746f205f72656c6179657220646964206e6f7420676f20746872754f6e6c79206f70657261746f722063616e2063616c6c20746869732066756e6374696f6e2e4d6573736167652076616c756520697320737570706f73656420746f206265207a65726f20666f722045544820696e7374616e6365a265627a7a72315820c9f7630da160f4b4d3cccffa6ea57694d26cf7a1d5dad9b0d2f66d3318c4467564736f6c634300050b003264656e6f6d696e6174696f6e2073686f756c642062652067726561746572207468616e2030405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f72696768742073686f756c6420626520696e7369646520746865206669656c645f747265654c6576656c732073686f756c642062652067726561746572207468616e207a65726f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f747265654c6576656c732073686f756c64206265206c657373207468616e203332b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60000000000000000000000000db297c70758f31a63235edfded040a04ad3fd6c000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000008589427373d6d84e98730d7795d8f6f8731fda16

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

0000000000000000000000000db297c70758f31a63235edfded040a04ad3fd6c000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000008589427373d6d84e98730d7795d8f6f8731fda16

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

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000db297c70758f31a63235edfded040a04ad3fd6c
Arg [1] : 000000000000000000000000000000000000000000000000016345785d8a0000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 0000000000000000000000008589427373d6d84e98730d7795d8f6f8731fda16


Libraries Used


Deployed ByteCode Sourcemap

13157:1485: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;14322:224::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14322:224:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14322:224:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;14322:224:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14322:224: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;14322:224:0;;-1:-1:-1;14322:224:0;-1:-1:-1;14322:224: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;14552:87::-;;;:::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;13724:592::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13724:592:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13724:592:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;13724:592:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13724:592: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;13724:592:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;13724:592:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13724:592: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;13724:592:0;;-1:-1:-1;13724:592:0;-1:-1:-1;13724:592: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;;;;;;;;;;;;;;;;;13204:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13204:30:0;;;:::i;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;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;14322:224::-;7232:8;;-1:-1:-1;;;;;7232:8:0;7218:10;:22;7210:72;;;;-1:-1:-1;;;7210:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14447:10;;-1:-1:-1;;;14447:10:0;;;;14446:11;14438:40;;;;;-1:-1:-1;;;14438:40:0;;;;;;;;;;;;-1:-1:-1;;;14438:40:0;;;;;;;;;;;;;;;14485:32;:14;14502:15;;14485:32;:::i;:::-;-1:-1:-1;14524:5:0;:16;-1:-1:-1;;14322:224: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;14552:87::-;7232:8;;-1:-1:-1;;;;;7232:8:0;7218:10;:22;7210:72;;;;-1:-1:-1;;;7210:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14616:10;:17;;-1:-1:-1;;;;14616:17:0;-1:-1:-1;;;14616:17:0;;;14552:87::o;6740:27::-;;;;:::o;1457:34::-;;;;;;:::o;13724:592::-;7232:8;;-1:-1:-1;;;;;7232:8:0;7218:10;:22;7210:72;;;;-1:-1:-1;;;7210:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13854:10;;-1:-1:-1;;;13854:10:0;;;;13853:11;13845:45;;;;;-1:-1:-1;;;13845:45:0;;;;;;;;;;;;-1:-1:-1;;;13845:45:0;;;;;;;;;;;;;;;13902:8;13897:171;13916:23;;;;-1:-1:-1;13897:171:0;;;13986:4;13955:11;:28;13967:12;;13980:1;13967:15;;;;;;;;;;;;;;;13955:28;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;14012:12;;14025:1;14012:15;;;;;;;;;14029:9;;14004:56;;;-1:-1:-1;;;14029:9:0;;;;;;;:13;;14004:56;;;14044:15;14012;14004:56;;;;;;;;;14012:15;;;;;;;;14004:56;;-1:-1:-1;14004:56:0;;;;;;;13941:3;;13897:171;;;-1:-1:-1;14076:9:0;:40;;;-1:-1:-1;;;14076:40:0;;;;;;;;;;;-1:-1:-1;;14076:40:0;;;;;;-1:-1:-1;14125:186:0;14145:27;;;14125:186;;;14227:4;14188:15;:36;14204:16;;14221:1;14204:19;;;;;;;;;;;;;14188:36;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;14297:1;-1:-1:-1;;;;;14245:58:0;;14264:1;14268:16;;14285:1;14268:19;;;;;;;14245:58;;;-1:-1:-1;;;;;14245:58:0;;;;;14268:19;;;;;;;;;14245:58;;;;-1:-1:-1;14301:1:0;14245:58;;;;;;;;;;;;;14174:3;;14125:186;;;;13724:592;;;;:::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;13204:30::-;;;-1:-1:-1;;;13204:30:0;;;;;:::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::-;;;;;;;;;;1496:27;;;-1:-1:-1;;;1496:27:0;;;;;:::o;12473:601::-;12630:9;:14;12622:80;;;;-1:-1:-1;;;12622:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12717:12;;12709:77;;;;-1:-1:-1;;;12709:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12836:12;;12814:46;;12796:12;;-1:-1:-1;;;;;12814:15:0;;;12836:19;;;;;12796:12;12814:46;12796:12;12814:46;12836:19;12814:15;:46;;;;;;;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;;12795:65:0;;;12875:7;12867:57;;;;-1:-1:-1;;;12867:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12935:8;;12931:138;;12968:29;;-1:-1:-1;;;;;12968:13:0;;;12988:4;;12968:29;;;;12988:4;12968:13;:29;;;;;;;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;;12954:43:0;;;;;13014:7;13006:55;;;;-1:-1:-1;;;13006:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;12324:143::-;12388:12;;12375:9;:25;12367:94;;;;-1:-1:-1;;;12367:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12324:143::o;13157:1485::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13157:1485:0;;;-1:-1:-1;13157:1485:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://c9f7630da160f4b4d3cccffa6ea57694d26cf7a1d5dad9b0d2f66d3318c44675
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.