ETH Price: $1,889.74 (-1.21%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw165154192023-01-29 22:19:59778 days ago1675030799IN
Tornado.Cash: 100 USDT
0.015 ETH0.0095526922.74321237
Withdraw150428012022-06-29 2:29:29993 days ago1656469769IN
Tornado.Cash: 100 USDT
0 ETH0.0119849131.08992927
Withdraw126093632021-06-10 22:00:481376 days ago1623362448IN
Tornado.Cash: 100 USDT
0 ETH0.003293028
Deposit121272442021-03-28 11:05:511450 days ago1616929551IN
Tornado.Cash: 100 USDT
0 ETH0.0906532290
Deposit120646332021-03-18 19:41:501460 days ago1616096510IN
Tornado.Cash: 100 USDT
0 ETH0.19535386197
Deposit120420342021-03-15 8:20:301464 days ago1615796430IN
Tornado.Cash: 100 USDT
0 ETH0.1893645188
Deposit119588602021-03-02 12:40:451476 days ago1614688845IN
Tornado.Cash: 100 USDT
0 ETH0.01610946179
Withdraw119497532021-03-01 2:52:291478 days ago1614567149IN
Tornado.Cash: 100 USDT
0.02 ETH0.0337232181
Deposit119497202021-03-01 2:42:421478 days ago1614566562IN
Tornado.Cash: 100 USDT
0 ETH0.0856169385
Deposit119066752021-02-22 11:58:161484 days ago1613995096IN
Tornado.Cash: 100 USDT
0 ETH0.18034141178
Deposit119066562021-02-22 11:54:321484 days ago1613994872IN
Tornado.Cash: 100 USDT
0 ETH0.1662241166
Withdraw119046042021-02-22 4:10:291485 days ago1613967029IN
Tornado.Cash: 100 USDT
0 ETH0.03545615101
Deposit117734232021-02-01 23:59:001505 days ago1612223940IN
Tornado.Cash: 100 USDT
0 ETH0.17425563173
Deposit117362282021-01-27 6:35:001511 days ago1611729300IN
Tornado.Cash: 100 USDT
0 ETH0.0453266145
Deposit117153332021-01-24 1:16:561514 days ago1611451016IN
Tornado.Cash: 100 USDT
0 ETH0.0405268641
Deposit116969162021-01-21 5:27:441517 days ago1611206864IN
Tornado.Cash: 100 USDT
0 ETH0.0548653655
Deposit116849512021-01-19 9:34:181519 days ago1611048858IN
Tornado.Cash: 100 USDT
0 ETH0.0932112792
Withdraw116558672021-01-14 22:23:461523 days ago1610663026IN
Tornado.Cash: 100 USDT
0.02 ETH0.0274597176
Withdraw116556142021-01-14 21:26:061523 days ago1610659566IN
Tornado.Cash: 100 USDT
0.02 ETH0.0202522156.05
Deposit116487292021-01-13 20:02:121524 days ago1610568132IN
Tornado.Cash: 100 USDT
0 ETH0.0557241355
Deposit116487282021-01-13 20:02:011524 days ago1610568121IN
Tornado.Cash: 100 USDT
0 ETH0.0540102853
Deposit116277522021-01-10 14:46:181527 days ago1610289978IN
Tornado.Cash: 100 USDT
0 ETH0.0111908756
Deposit116277442021-01-10 14:44:001527 days ago1610289840IN
Tornado.Cash: 100 USDT
0 ETH0.0080937954
Withdraw115996642021-01-06 7:28:481532 days ago1609918128IN
Tornado.Cash: 100 USDT
0.02 ETH0.04246627102
Deposit115996352021-01-06 7:24:081532 days ago1609917848IN
Tornado.Cash: 100 USDT
0 ETH0.10645948108
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer180691512023-09-05 8:41:35560 days ago1693903295
Tornado.Cash: 100 USDT
0.00291279 ETH
Withdraw180691512023-09-05 8:41:35560 days ago1693903295
Tornado.Cash: 100 USDT
0.00291279 ETH
Transfer180116642023-08-28 7:30:35568 days ago1693207835
Tornado.Cash: 100 USDT
0.00328034 ETH
Withdraw180116642023-08-28 7:30:35568 days ago1693207835
Tornado.Cash: 100 USDT
0.00328034 ETH
Transfer178196872023-08-01 10:55:11594 days ago1690887311
Tornado.Cash: 100 USDT
0.00578431 ETH
Withdraw178196872023-08-01 10:55:11594 days ago1690887311
Tornado.Cash: 100 USDT
0.00578431 ETH
Transfer178001332023-07-29 17:17:47597 days ago1690651067
Tornado.Cash: 100 USDT
0.00567066 ETH
Withdraw178001332023-07-29 17:17:47597 days ago1690651067
Tornado.Cash: 100 USDT
0.00567066 ETH
Transfer176282432023-07-05 14:21:59621 days ago1688566919
Tornado.Cash: 100 USDT
0.01197201 ETH
Withdraw176282432023-07-05 14:21:59621 days ago1688566919
Tornado.Cash: 100 USDT
0.01197201 ETH
Transfer176074902023-07-02 16:24:35624 days ago1688315075
Tornado.Cash: 100 USDT
0.00417862 ETH
Withdraw176074902023-07-02 16:24:35624 days ago1688315075
Tornado.Cash: 100 USDT
0.00417862 ETH
Transfer175759472023-06-28 6:10:35629 days ago1687932635
Tornado.Cash: 100 USDT
0.00320552 ETH
Withdraw175759472023-06-28 6:10:35629 days ago1687932635
Tornado.Cash: 100 USDT
0.00320552 ETH
Transfer175722022023-06-27 17:34:47629 days ago1687887287
Tornado.Cash: 100 USDT
0.00387001 ETH
Withdraw175722022023-06-27 17:34:47629 days ago1687887287
Tornado.Cash: 100 USDT
0.00387001 ETH
Transfer174295672023-06-07 16:05:47649 days ago1686153947
Tornado.Cash: 100 USDT
0.00917768 ETH
Withdraw174295672023-06-07 16:05:47649 days ago1686153947
Tornado.Cash: 100 USDT
0.00917768 ETH
Transfer174062052023-06-04 8:56:59653 days ago1685869019
Tornado.Cash: 100 USDT
0.00559512 ETH
Withdraw174062052023-06-04 8:56:59653 days ago1685869019
Tornado.Cash: 100 USDT
0.00559512 ETH
Transfer172759712023-05-17 1:00:47671 days ago1684285247
Tornado.Cash: 100 USDT
0.00843156 ETH
Withdraw172759712023-05-17 1:00:47671 days ago1684285247
Tornado.Cash: 100 USDT
0.00843156 ETH
Transfer170092722023-04-09 7:27:11709 days ago1681025231
Tornado.Cash: 100 USDT
0.004964 ETH
Withdraw170092722023-04-09 7:27:11709 days ago1681025231
Tornado.Cash: 100 USDT
0.004964 ETH
Transfer169880382023-04-06 7:06:59712 days ago1680764819
Tornado.Cash: 100 USDT
0.00605844 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xD4B88Df4...b20C8Cfa3
The constructor portion of the code might be different and could alter the actual behaviour of the contract

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

API
[{"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"}]

Deployed Bytecode

0x60806040526004361061014b5760003560e01c806397fc007c116100b6578063e5285dcc1161006f578063e5285dcc14610514578063e82955881461053e578063ec73295914610568578063f178e47c1461057d578063fc0c546a146105a7578063fc7e9c6f146105bc5761014b565b806397fc007c146103a55780639fa12d0b146103d8578063b214faa5146104a3578063ba70f757146104c0578063c2b40ae4146104d5578063cd87a3b4146104ff5761014b565b80634ecf518b116101085780634ecf518b146102e4578063570ca735146103125780636d9833e314610327578063839df945146103515780638bca6d161461037b57806390eeb02b146103905761014b565b806306394c9b1461015057806317cc915c1461018557806321a0adb6146101c35780632b7ac3f31461025c57806338bf282e1461028d578063414a37ba146102cf575b600080fd5b34801561015c57600080fd5b506101836004803603602081101561017357600080fd5b50356001600160a01b03166105d1565b005b34801561019157600080fd5b506101af600480360360208110156101a857600080fd5b503561063c565b604080519115158252519081900360200190f35b610183600480360360e08110156101d957600080fd5b810190602081018135600160201b8111156101f357600080fd5b82018360208201111561020557600080fd5b803590602001918460018302840111600160201b8311171561022657600080fd5b91935091508035906020810135906001600160a01b03604082013581169160608101359091169060808101359060a00135610651565b34801561026857600080fd5b50610271610992565b604080516001600160a01b039092168252519081900360200190f35b34801561029957600080fd5b506102bd600480360360408110156102b057600080fd5b50803590602001356109a1565b60408051918252519081900360200190f35b3480156102db57600080fd5b506102bd610b82565b3480156102f057600080fd5b506102f9610b94565b6040805163ffffffff9092168252519081900360200190f35b34801561031e57600080fd5b50610271610ba0565b34801561033357600080fd5b506101af6004803603602081101561034a57600080fd5b5035610baf565b34801561035d57600080fd5b506101af6004803603602081101561037457600080fd5b5035610c22565b34801561038757600080fd5b506102bd610c37565b34801561039c57600080fd5b506102f9610c3d565b3480156103b157600080fd5b50610183600480360360208110156103c857600080fd5b50356001600160a01b0316610c49565b3480156103e457600080fd5b50610453600480360360208110156103fb57600080fd5b810190602081018135600160201b81111561041557600080fd5b82018360208201111561042757600080fd5b803590602001918460208302840111600160201b8311171561044857600080fd5b509092509050610cb4565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561048f578181015183820152602001610477565b505050509050019250505060405180910390f35b610183600480360360208110156104b957600080fd5b5035610d3c565b3480156104cc57600080fd5b506102bd610e5d565b3480156104e157600080fd5b506102bd600480360360208110156104f857600080fd5b5035610e7d565b34801561050b57600080fd5b506102f9610e91565b34801561052057600080fd5b506101af6004803603602081101561053757600080fd5b5035610e96565b34801561054a57600080fd5b506102bd6004803603602081101561056157600080fd5b5035610eab565b34801561057457600080fd5b506102bd610ec9565b34801561058957600080fd5b506102bd600480360360208110156105a057600080fd5b5035610eed565b3480156105b357600080fd5b50610271610efa565b3480156105c857600080fd5b506102f9610f09565b606d546001600160a01b0316331461061a5760405162461bcd60e51b81526004018080602001828103825260258152602001806117166025913960400191505060405180910390fd5b606d80546001600160a01b0319166001600160a01b0392909216919091179055565b606a6020526000908152604090205460ff1681565b60688054600101908190556069548311156106b3576040805162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c7565000000000000604482015290519081900360640190fd5b6000868152606a602052604090205460ff1615610717576040805162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e7400604482015290519081900360640190fd5b61072087610baf565b610771576040805162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f7400000000604482015290519081900360640190fd5b606c546040805160c080820183528a8252602082018a90526001600160a01b038981168385015288811660608401526080830188905260a08301879052925163695ef6f960e01b8152929093169263695ef6f9928d928d9290916004810191829160240190849080838360005b838110156107f65781810151838201526020016107de565b505050509050018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050945050505050602060405180830381600087803b15801561084857600080fd5b505af115801561085c573d6000803e3d6000fd5b505050506040513d602081101561087257600080fd5b50516108be576040805162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b604482015290519081900360640190fd5b6000868152606a60205260409020805460ff191660011790556108e385858585610f1c565b604080516001600160a01b038781168252602082018990528183018690529151918616917fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319181900360600190a26068548114610987576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b505050505050505050565b606c546001600160a01b031681565b60006000805160206116a58339815191528310610a05576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b6000805160206116a58339815191528210610a515760405162461bcd60e51b81526004018080602001828103825260218152602001806116556021913960400191505060405180910390fd5b6040805163f47d33b560e01b8152600481018590526000602482018190528251869391927383584f83f26af4edda9cbe8c730bc87c364b28fe9263f47d33b592604480840193829003018186803b158015610aab57600080fd5b505af4158015610abf573d6000803e3d6000fd5b505050506040513d6040811015610ad557600080fd5b50805160209091015190925090506000805160206116a583398151915284830891507383584f83f26af4edda9cbe8c730bc87c364b28fe63f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b158015610b4d57600080fd5b505af4158015610b61573d6000803e3d6000fd5b505050506040513d6040811015610b7757600080fd5b505195945050505050565b6000805160206116a583398151915281565b60005463ffffffff1681565b606d546001600160a01b031681565b600081610bbe57506000610c1d565b60035463ffffffff165b60048163ffffffff1660648110610bdb57fe5b0154831415610bee576001915050610c1d565b63ffffffff8116610bfd575060645b6003546000199091019063ffffffff80831691161415610bc85760009150505b919050565b606b6020526000908152604090205460ff1681565b60695481565b60035463ffffffff1681565b606d546001600160a01b03163314610c925760405162461bcd60e51b81526004018080602001828103825260258152602001806117166025913960400191505060405180910390fd5b606c80546001600160a01b0319166001600160a01b0392909216919091179055565b604080518281526020808402820101909152606090828015610ce0578160200160208202803883390190505b50905060005b82811015610d3557610d09848483818110610cfd57fe5b90506020020135610e96565b15610d2d576001828281518110610d1c57fe5b911515602092830291909101909101525b600101610ce6565b5092915050565b60688054600101908190556000828152606b602052604090205460ff1615610d955760405162461bcd60e51b81526004018080602001828103825260218152602001806116c56021913960400191505060405180910390fd5b6000610da083611017565b6000848152606b60205260409020805460ff191660011790559050610dc36111ae565b6040805163ffffffff83168152426020820152815185927fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196928290030190a2506068548114610e59576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5050565b60035460009060049063ffffffff1660648110610e7657fe5b0154905090565b60048160648110610e8a57fe5b0154905081565b606481565b6000908152606a602052604090205460ff1690565b60028181548110610eb857fe5b600091825260209091200154905081565b7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b60018181548110610eb857fe5b606e546001600160a01b031681565b600354600160201b900463ffffffff1681565b803414610f5a5760405162461bcd60e51b81526004018080602001828103825260308152602001806115fe6030913960400191505060405180910390fd5b610f688483606954036111fa565b8115610f7857610f7883836111fa565b8015611011576040516000906001600160a01b0386169083908381818185875af1925050503d8060008114610fc9576040519150601f19603f3d011682016040523d82523d6000602084013e610fce565b606091505b505090508061100f576040516001600160a01b0385169083156108fc029084906000818181858888f1935050505015801561100d573d6000803e3d6000fd5b505b505b50505050565b60035460008054909163ffffffff600160201b909104811691811660020a168114156110745760405162461bcd60e51b815260040180806020018281038252602f8152602001806115a5602f913960400191505060405180910390fd5b6003805463ffffffff600160201b80830482166001019091160267ffffffff000000001990911617905582600080805b60005463ffffffff908116908216101561114c57600185166111085783925060028163ffffffff16815481106110d657fe5b906000526020600020015491508360018263ffffffff16815481106110f757fe5b60009182526020909120015561112c565b60018163ffffffff168154811061111b57fe5b906000526020600020015492508391505b61113683836109a1565b9350600263ffffffff86160494506001016110a4565b5060035460649063ffffffff908116600101166003805463ffffffff19169290910663ffffffff90811692909217908190558491600491166064811061118e57fe5b01555050600354600160201b900463ffffffff1660001901949350505050565b34156111eb5760405162461bcd60e51b81526004018080602001828103825260308152602001806116e66030913960400191505060405180910390fd5b6111f833306069546113c5565b565b606e54604080516001600160a01b038581166024830152604480830186905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000956060959316939282918083835b602083106112775780518252601f199092019160209182019101611258565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146112d9576040519150601f19603f3d011682016040523d82523d6000602084013e6112de565b606091505b509150915081611329576040805162461bcd60e51b81526020600482015260116024820152706e6f7420656e6f75676820746f6b656e7360781b604482015290519081900360640190fd5b8051156110115780516020146113705760405162461bcd60e51b815260040180806020018281038252602a8152602001806115d4602a913960400191505060405180910390fd5b80806020019051602081101561138557600080fd5b50519150816110115760405162461bcd60e51b815260040180806020018281038252602781526020018061162e6027913960400191505060405180910390fd5b606e54604080516001600160a01b0386811660248301528581166044830152606480830186905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000956060959316939282918083835b6020831061144a5780518252601f19909201916020918201910161142b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146114ac576040519150601f19603f3d011682016040523d82523d6000602084013e6114b1565b606091505b509150915081611508576040805162461bcd60e51b815260206004820152601960248201527f6e6f7420656e6f75676820616c6c6f77656420746f6b656e7300000000000000604482015290519081900360640190fd5b80511561100f57805160201461154f5760405162461bcd60e51b815260040180806020018281038252602a8152602001806115d4602a913960400191505060405180910390fd5b80806020019051602081101561156457600080fd5b505191508161100f5760405162461bcd60e51b815260040180806020018281038252602f815260200180611676602f913960400191505060405180910390fdfe4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656166732063616e20626520616464656464617461206c656e6774682073686f756c64206265206569746865722030206f72203332206279746573496e636f727265637420726566756e6420616d6f756e742072656365697665642062792074686520636f6e74726163746e6f7420656e6f75676820746f6b656e732e20546f6b656e2072657475726e732066616c73652e5f72696768742073686f756c6420626520696e7369646520746865206669656c646e6f7420656e6f75676820616c6c6f77656420746f6b656e732e20546f6b656e2072657475726e732066616c73652e30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000154686520636f6d6d69746d656e7420686173206265656e207375626d69747465644554482076616c756520697320737570706f73656420746f206265203020666f7220455243323020696e7374616e63654f6e6c79206f70657261746f722063616e2063616c6c20746869732066756e6374696f6e2ea265627a7a72315820eedd377dd479e33096b8ae40ac1f5cf72ccf7e7f36628dcbb747b78530751d0c64736f6c634300050b0032

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
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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.