ETH Price: $3,365.29 (-0.09%)

Contract

0x43a3bE4Ae954d9869836702AFd10393D3a7Ea417
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Update Roots125281222021-05-29 8:17:521328 days ago1622276272IN
Tornado.Cash: Old Trees
0 ETH0.0018560820
Update Roots123036072021-04-24 14:54:051363 days ago1619276045IN
Tornado.Cash: Old Trees
0 ETH0.006342151
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0043062851
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063439451
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063431251
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063396551
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063394551
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063433251
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063431251
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063396551
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063425151
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063427151
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063363951
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063390451
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.006341951
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063439451
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063443451
Update Roots123036012021-04-24 14:53:261363 days ago1619276006IN
Tornado.Cash: Old Trees
0 ETH0.0063390451
Update Roots121436512021-03-30 23:31:031388 days ago1617147063IN
Tornado.Cash: Old Trees
0 ETH0.2853499135
Update Roots121436412021-03-30 23:28:251388 days ago1617146905IN
Tornado.Cash: Old Trees
0 ETH0.47927241135
Update Roots121436262021-03-30 23:25:271388 days ago1617146727IN
Tornado.Cash: Old Trees
0 ETH0.63575077135
Update Roots121436142021-03-30 23:22:491388 days ago1617146569IN
Tornado.Cash: Old Trees
0 ETH0.62592885135
Update Withdrawa...121240792021-03-27 23:19:401391 days ago1616887180IN
Tornado.Cash: Old Trees
0 ETH0.0701656686.01
Update Roots119628312021-03-03 3:19:571416 days ago1614741597IN
Tornado.Cash: Old Trees
0 ETH0.4041125471
Update Roots119625952021-03-03 2:23:201416 days ago1614738200IN
Tornado.Cash: Old Trees
0 ETH0.4591109981
View all transactions

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
114747142020-12-18 3:28:321491 days ago1608262112
Tornado.Cash: Old Trees
 Contract Creation0 ETH
114747142020-12-18 3:28:321491 days ago1608262112
Tornado.Cash: Old Trees
 Contract Creation0 ETH
114747142020-12-18 3:28:321491 days ago1608262112  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TornadoTrees

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, MIT license
File 1 of 8 : TornadoTrees.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;

import "./ENS.sol";
import "./OwnableMerkleTree.sol";
import "./ITornadoTrees.sol";
import "./IHasher.sol";

contract TornadoTrees is ITornadoTrees, EnsResolve {
  OwnableMerkleTree public immutable depositTree;
  OwnableMerkleTree public immutable withdrawalTree;
  IHasher public immutable hasher;
  address public immutable tornadoProxy;

  bytes32[] public deposits;
  uint256 public lastProcessedDepositLeaf;

  bytes32[] public withdrawals;
  uint256 public lastProcessedWithdrawalLeaf;

  event DepositData(address instance, bytes32 indexed hash, uint256 block, uint256 index);
  event WithdrawalData(address instance, bytes32 indexed hash, uint256 block, uint256 index);

  struct TreeLeaf {
    address instance;
    bytes32 hash;
    uint256 block;
  }

  modifier onlyTornadoProxy {
    require(msg.sender == tornadoProxy, "Not authorized");
    _;
  }

  constructor(
    bytes32 _tornadoProxy,
    bytes32 _hasher2,
    bytes32 _hasher3,
    uint32 _levels
  ) public {
    tornadoProxy = resolve(_tornadoProxy);
    hasher = IHasher(resolve(_hasher3));
    depositTree = new OwnableMerkleTree(_levels, IHasher(resolve(_hasher2)));
    withdrawalTree = new OwnableMerkleTree(_levels, IHasher(resolve(_hasher2)));
  }

  function registerDeposit(address _instance, bytes32 _commitment) external override onlyTornadoProxy {
    deposits.push(keccak256(abi.encode(_instance, _commitment, blockNumber())));
  }

  function registerWithdrawal(address _instance, bytes32 _nullifier) external override onlyTornadoProxy {
    withdrawals.push(keccak256(abi.encode(_instance, _nullifier, blockNumber())));
  }

  function updateRoots(TreeLeaf[] calldata _deposits, TreeLeaf[] calldata _withdrawals) external {
    if (_deposits.length > 0) updateDepositTree(_deposits);
    if (_withdrawals.length > 0) updateWithdrawalTree(_withdrawals);
  }

  function updateDepositTree(TreeLeaf[] calldata _deposits) public {
    bytes32[] memory leaves = new bytes32[](_deposits.length);
    uint256 offset = lastProcessedDepositLeaf;

    for (uint256 i = 0; i < _deposits.length; i++) {
      TreeLeaf memory deposit = _deposits[i];
      bytes32 leafHash = keccak256(abi.encode(deposit.instance, deposit.hash, deposit.block));
      require(deposits[offset + i] == leafHash, "Incorrect deposit");

      leaves[i] = hasher.poseidon([bytes32(uint256(deposit.instance)), deposit.hash, bytes32(deposit.block)]);
      delete deposits[offset + i];

      emit DepositData(deposit.instance, deposit.hash, deposit.block, offset + i);
    }

    lastProcessedDepositLeaf = offset + _deposits.length;
    depositTree.bulkInsert(leaves);
  }

  function updateWithdrawalTree(TreeLeaf[] calldata _withdrawals) public {
    bytes32[] memory leaves = new bytes32[](_withdrawals.length);
    uint256 offset = lastProcessedWithdrawalLeaf;

    for (uint256 i = 0; i < _withdrawals.length; i++) {
      TreeLeaf memory withdrawal = _withdrawals[i];
      bytes32 leafHash = keccak256(abi.encode(withdrawal.instance, withdrawal.hash, withdrawal.block));
      require(withdrawals[offset + i] == leafHash, "Incorrect withdrawal");

      leaves[i] = hasher.poseidon([bytes32(uint256(withdrawal.instance)), withdrawal.hash, bytes32(withdrawal.block)]);
      delete withdrawals[offset + i];

      emit WithdrawalData(withdrawal.instance, withdrawal.hash, withdrawal.block, offset + i);
    }

    lastProcessedWithdrawalLeaf = offset + _withdrawals.length;
    withdrawalTree.bulkInsert(leaves);
  }

  function validateRoots(bytes32 _depositRoot, bytes32 _withdrawalRoot) public view {
    require(depositTree.isKnownRoot(_depositRoot), "Incorrect deposit tree root");
    require(withdrawalTree.isKnownRoot(_withdrawalRoot), "Incorrect withdrawal tree root");
  }

  function depositRoot() external view returns (bytes32) {
    return depositTree.getLastRoot();
  }

  function withdrawalRoot() external view returns (bytes32) {
    return withdrawalTree.getLastRoot();
  }

  function getRegisteredDeposits() external view returns (bytes32[] memory _deposits) {
    uint256 count = deposits.length - lastProcessedDepositLeaf;
    _deposits = new bytes32[](count);
    for (uint256 i = 0; i < count; i++) {
      _deposits[i] = deposits[lastProcessedDepositLeaf + i];
    }
  }

  function getRegisteredWithdrawals() external view returns (bytes32[] memory _withdrawals) {
    uint256 count = withdrawals.length - lastProcessedWithdrawalLeaf;
    _withdrawals = new bytes32[](count);
    for (uint256 i = 0; i < count; i++) {
      _withdrawals[i] = withdrawals[lastProcessedWithdrawalLeaf + i];
    }
  }

  function blockNumber() public view virtual returns (uint256) {
    return block.number;
  }
}

File 2 of 8 : OwnableMerkleTree.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;
import "./Ownable.sol";
import "./MerkleTreeWithHistory.sol";

contract OwnableMerkleTree is Ownable, MerkleTreeWithHistory {
  constructor(uint32 _treeLevels, IHasher _hasher) public MerkleTreeWithHistory(_treeLevels, _hasher) {}

  function insert(bytes32 _leaf) external onlyOwner returns (uint32 index) {
    return _insert(_leaf);
  }

  function bulkInsert(bytes32[] calldata _leaves) external onlyOwner {
    _bulkInsert(_leaves);
  }
}

File 3 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import "./Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 4 of 8 : MerkleTreeWithHistory.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;
import "./IHasher.sol";

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

  uint32 public immutable levels;
  IHasher public hasher; // todo immutable

  bytes32[] public filledSubtrees;
  bytes32[] public zeros;
  uint32 public currentRootIndex = 0;
  uint32 public nextIndex = 0;
  uint32 public constant ROOT_HISTORY_SIZE = 10;
  bytes32[ROOT_HISTORY_SIZE] public roots;

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

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

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

    filledSubtrees.push(hashLeftRight(currentZero, currentZero));
    roots[0] = filledSubtrees[_treeLevels];
  }

  /**
    @dev Hash 2 tree leaves, returns poseidon(_left, _right)
  */
  function hashLeftRight(bytes32 _left, bytes32 _right) public view returns (bytes32) {
    return hasher.poseidon([_left, _right]);
  }

  function _insert(bytes32 _leaf) internal returns (uint32 index) {
    uint32 currentIndex = nextIndex;
    require(currentIndex != uint32(2)**levels, "Merkle tree is full. No more leaves can be added");
    nextIndex = currentIndex + 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;
  }

  function _bulkInsert(bytes32[] memory _leaves) internal {
    uint32 insertIndex = nextIndex;
    require(insertIndex + _leaves.length <= uint32(2)**levels, "Merkle doesn't have enough capacity to add specified leaves");

    bytes32[] memory subtrees = new bytes32[](levels);
    bool[] memory modifiedSubtrees = new bool[](levels);
    for (uint32 j = 0; j < _leaves.length - 1; j++) {
      uint256 index = insertIndex + j;
      bytes32 currentLevelHash = _leaves[j];

      for (uint32 i = 0; ; i++) {
        if (index % 2 == 0) {
          modifiedSubtrees[i] = true;
          subtrees[i] = currentLevelHash;
          break;
        }

        if (subtrees[i] == bytes32(0)) {
          subtrees[i] = filledSubtrees[i];
        }
        currentLevelHash = hashLeftRight(subtrees[i], currentLevelHash);
        index /= 2;
      }
    }

    for (uint32 i = 0; i < levels; i++) {
      // using local map to save on gas on writes if elements were not modified
      if (modifiedSubtrees[i]) {
        filledSubtrees[i] = subtrees[i];
      }
    }

    nextIndex = uint32(insertIndex + _leaves.length - 1);
    _insert(_leaves[_leaves.length - 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 5 of 8 : ITornadoTrees.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

interface ITornadoTrees {
  function registerDeposit(address instance, bytes32 commitment) external;

  function registerWithdrawal(address instance, bytes32 nullifier) external;
}

File 6 of 8 : IHasher.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

interface IHasher {
  function poseidon(bytes32[2] calldata inputs) external pure returns (bytes32);

  function poseidon(bytes32[3] calldata inputs) external pure returns (bytes32);
}

File 7 of 8 : ENS.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

interface ENS {
  function resolver(bytes32 node) external view returns (Resolver);
}

interface Resolver {
  function addr(bytes32 node) external view returns (address);
}

contract EnsResolve {
  function resolve(bytes32 node) public view virtual returns (address) {
    ENS Registry = ENS(
      getChainId() == 1 ? 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e : 0x8595bFb0D940DfEDC98943FA8a907091203f25EE
    );
    return Registry.resolver(node).addr(node);
  }

  function bulkResolve(bytes32[] memory domains) public view returns (address[] memory result) {
    result = new address[](domains.length);
    for (uint256 i = 0; i < domains.length; i++) {
      result[i] = resolve(domains[i]);
    }
  }

  function getChainId() internal pure returns (uint256) {
    uint256 chainId;
    assembly {
      chainId := chainid()
    }
    return chainId;
  }
}

File 8 of 8 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"bytes32","name":"_tornadoProxy","type":"bytes32"},{"internalType":"bytes32","name":"_hasher2","type":"bytes32"},{"internalType":"bytes32","name":"_hasher3","type":"bytes32"},{"internalType":"uint32","name":"_levels","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"instance","type":"address"},{"indexed":true,"internalType":"bytes32","name":"hash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"DepositData","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"instance","type":"address"},{"indexed":true,"internalType":"bytes32","name":"hash","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"WithdrawalData","type":"event"},{"inputs":[],"name":"blockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"domains","type":"bytes32[]"}],"name":"bulkResolve","outputs":[{"internalType":"address[]","name":"result","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositTree","outputs":[{"internalType":"contract OwnableMerkleTree","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"deposits","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRegisteredDeposits","outputs":[{"internalType":"bytes32[]","name":"_deposits","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRegisteredWithdrawals","outputs":[{"internalType":"bytes32[]","name":"_withdrawals","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasher","outputs":[{"internalType":"contract IHasher","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedDepositLeaf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedWithdrawalLeaf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_instance","type":"address"},{"internalType":"bytes32","name":"_commitment","type":"bytes32"}],"name":"registerDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_instance","type":"address"},{"internalType":"bytes32","name":"_nullifier","type":"bytes32"}],"name":"registerWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"resolve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tornadoProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"instance","type":"address"},{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint256","name":"block","type":"uint256"}],"internalType":"struct TornadoTrees.TreeLeaf[]","name":"_deposits","type":"tuple[]"}],"name":"updateDepositTree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"instance","type":"address"},{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint256","name":"block","type":"uint256"}],"internalType":"struct TornadoTrees.TreeLeaf[]","name":"_deposits","type":"tuple[]"},{"components":[{"internalType":"address","name":"instance","type":"address"},{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint256","name":"block","type":"uint256"}],"internalType":"struct TornadoTrees.TreeLeaf[]","name":"_withdrawals","type":"tuple[]"}],"name":"updateRoots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"instance","type":"address"},{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"uint256","name":"block","type":"uint256"}],"internalType":"struct TornadoTrees.TreeLeaf[]","name":"_withdrawals","type":"tuple[]"}],"name":"updateWithdrawalTree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_depositRoot","type":"bytes32"},{"internalType":"bytes32","name":"_withdrawalRoot","type":"bytes32"}],"name":"validateRoots","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalTree","outputs":[{"internalType":"contract OwnableMerkleTree","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawals","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]

6101006040523480156200001257600080fd5b5060405162002a0a38038062002a0a83398101604081905262000035916200029f565b620000408462000120565b60601b6001600160601b03191660e0526200005b8262000120565b60601b6001600160601b03191660c05280620000778462000120565b604051620000859062000272565b62000092929190620002f2565b604051809103906000f080158015620000af573d6000803e3d6000fd5b5060601b6001600160601b03191660805280620000cc8462000120565b604051620000da9062000272565b620000e7929190620002f2565b604051809103906000f08015801562000104573d6000803e3d6000fd5b5060601b6001600160601b03191660a052506200032a92505050565b6000806200012d6200026e565b6001146200015057738595bfb0d940dfedc98943fa8a907091203f25ee62000161565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b604051630178b8bf60e01b81529091506001600160a01b03821690630178b8bf9062000192908690600401620002e9565b60206040518083038186803b158015620001ab57600080fd5b505afa158015620001c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e6919062000280565b6001600160a01b0316633b3b57de846040518263ffffffff1660e01b8152600401620002139190620002e9565b60206040518083038186803b1580156200022c57600080fd5b505afa15801562000241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000267919062000280565b9392505050565b4690565b61121680620017f483390190565b60006020828403121562000292578081fd5b8151620002678162000311565b60008060008060808587031215620002b5578283fd5b845193506020850151925060408501519150606085015163ffffffff81168114620002de578182fd5b939692955090935050565b90815260200190565b63ffffffff9290921682526001600160a01b0316602082015260400190565b6001600160a01b03811681146200032757600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c6114566200039e6000398061029c52806103555280610e2752508061053a52806108005280610e7252508061092c5280610ae55280610d1c5280610dc552508061033152806106665280610b0b5280610c6452506114566000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063721f4b3b116100b8578063b4a6359e1161007c578063b4a6359e14610233578063c11b96811461023b578063c34c78821461024e578063c6758d6b14610256578063ed33639f14610269578063f9e542341461027157610137565b8063721f4b3b146102005780638955fe8a14610208578063a2b28fe614610210578063a3347cda14610218578063b02c43d01461022057610137565b806357e871e7116100ff57806357e871e71461019f57806359c4604f146101b45780635c23bdf5146101c75780635cc07076146101da5780636360b82b146101ed57610137565b806301ae19201461013c57806314693646146101515780631c100fa61461016f578063350ed50a14610177578063489686341461018c575b600080fd5b61014f61014a366004610fbf565b610291565b005b61015961032f565b60405161016691906111de565b60405180910390f35b610159610353565b61017f610377565b6040516101669190611291565b61014f61019a36600461107f565b610411565b6101a76106d3565b60405161016691906112c9565b61014f6101c236600461107f565b6106d7565b6101596101d5366004611148565b610961565b6101a76101e8366004611148565b610a9f565b61014f6101fb3660046110bf565b610abd565b610159610ae3565b6101a7610b07565b6101a7610b9f565b61017f610ba5565b6101a761022e366004611148565b610c3a565b6101a7610c47565b61014f610249366004611178565b610c4d565b6101a7610dc1565b61014f610264366004610fbf565b610e1c565b610159610e70565b61028461027f366004610fea565b610e94565b6040516101669190611213565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102e25760405162461bcd60e51b81526004016102d990611399565b60405180910390fd5b600282826102ee6106d3565b604051602001610300939291906111f2565b60408051601f198184030181529190528051602091820120825460018101845560009384529190922001555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60035460025460609190038067ffffffffffffffff8111801561039957600080fd5b506040519080825280602002602001820160405280156103c3578160200160208202803683370190505b50915060005b8181101561040c5760028160035401815481106103e257fe5b90600052602060002001548382815181106103f957fe5b60209081029190910101526001016103c9565b505090565b60608167ffffffffffffffff8111801561042a57600080fd5b50604051908082528060200260200182016040528015610454578160200160208202803683370190505b5060015490915060005b838110156106485761046e610f39565b85858381811061047a57fe5b9050606002018036038101906104909190611199565b805160208083015160408085015190519495506000946104b19493016111f2565b604051602081830303815290604052805190602001209050806000848601815481106104d957fe5b9060005260206000200154146105015760405162461bcd60e51b81526004016102d9906112d2565b6040805160608101825283516001600160a01b0390811682526020808601519083015284830151828401529151635a53025d60e01b81527f000000000000000000000000000000000000000000000000000000000000000090921691635a53025d9161056f91600401611260565b60206040518083038186803b15801561058757600080fd5b505afa15801561059b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bf9190611160565b8584815181106105cb57fe5b6020026020010181815250506000838501815481106105e657fe5b906000526020600020016000905581602001517fc711bd1d2cdd9c8978324cc83ce34c17f6ada898f8273efeb9585c1312d4ef6783600001518460400151868801604051610636939291906111f2565b60405180910390a2505060010161045e565b508083016001556040516332e9e9eb60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cba7a7ac9061069b908590600401611291565b600060405180830381600087803b1580156106b557600080fd5b505af11580156106c9573d6000803e3d6000fd5b5050505050505050565b4390565b60608167ffffffffffffffff811180156106f057600080fd5b5060405190808252806020026020018201604052801561071a578160200160208202803683370190505b5060035490915060005b8381101561090e57610734610f39565b85858381811061074057fe5b9050606002018036038101906107569190611199565b805160208083015160408085015190519495506000946107779493016111f2565b6040516020818303038152906040528051906020012090508060028486018154811061079f57fe5b9060005260206000200154146107c75760405162461bcd60e51b81526004016102d99061136b565b6040805160608101825283516001600160a01b0390811682526020808601519083015284830151828401529151635a53025d60e01b81527f000000000000000000000000000000000000000000000000000000000000000090921691635a53025d9161083591600401611260565b60206040518083038186803b15801561084d57600080fd5b505afa158015610861573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108859190611160565b85848151811061089157fe5b6020026020010181815250506002838501815481106108ac57fe5b906000526020600020016000905581602001517f5d3e96213d4520bdc95a25d628a39768f1a90a2b939894355479596910d179df836000015184604001518688016040516108fc939291906111f2565b60405180910390a25050600101610724565b508083016003556040516332e9e9eb60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cba7a7ac9061069b908590600401611291565b60008061096c610f35565b60011461098d57738595bfb0d940dfedc98943fa8a907091203f25ee61099e565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b604051630178b8bf60e01b81529091506001600160a01b03821690630178b8bf906109cd9086906004016112c9565b60206040518083038186803b1580156109e557600080fd5b505afa1580156109f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1d9190610fa3565b6001600160a01b0316633b3b57de846040518263ffffffff1660e01b8152600401610a4891906112c9565b60206040518083038186803b158015610a6057600080fd5b505afa158015610a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a989190610fa3565b9392505050565b60028181548110610aac57fe5b600091825260209091200154905081565b8215610acd57610acd8484610411565b8015610add57610add82826106d7565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ba70f7576040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6257600080fd5b505afa158015610b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9a9190611160565b905090565b60035481565b60015460005460609190038067ffffffffffffffff81118015610bc757600080fd5b50604051908082528060200260200182016040528015610bf1578160200160208202803683370190505b50915060005b8181101561040c576000816001540181548110610c1057fe5b9060005260206000200154838281518110610c2757fe5b6020908102919091010152600101610bf7565b60008181548110610aac57fe5b60015481565b604051636d9833e360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636d9833e390610c999085906004016112c9565b60206040518083038186803b158015610cb157600080fd5b505afa158015610cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce99190611128565b610d055760405162461bcd60e51b81526004016102d990611334565b604051636d9833e360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636d9833e390610d519084906004016112c9565b60206040518083038186803b158015610d6957600080fd5b505afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190611128565b610dbd5760405162461bcd60e51b81526004016102d9906112fd565b5050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ba70f7576040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6257600080fd5b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e645760405162461bcd60e51b81526004016102d990611399565b600082826102ee6106d3565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060815167ffffffffffffffff81118015610eae57600080fd5b50604051908082528060200260200182016040528015610ed8578160200160208202803683370190505b50905060005b8251811015610f2f57610f03838281518110610ef657fe5b6020026020010151610961565b828281518110610f0f57fe5b6001600160a01b0390921660209283029190910190910152600101610ede565b50919050565b4690565b604080516060810182526000808252602082018190529181019190915290565b60008083601f840112610f6a578081fd5b50813567ffffffffffffffff811115610f81578182fd5b602083019150836020606083028501011115610f9c57600080fd5b9250929050565b600060208284031215610fb4578081fd5b8151610a9881611408565b60008060408385031215610fd1578081fd5b8235610fdc81611408565b946020939093013593505050565b60006020808385031215610ffc578182fd5b823567ffffffffffffffff811115611012578283fd5b8301601f81018513611022578283fd5b8035611035611030826113e8565b6113c1565b8181528381019083850185840285018601891015611051578687fd5b8694505b83851015611073578035835260019490940193918501918501611055565b50979650505050505050565b60008060208385031215611091578182fd5b823567ffffffffffffffff8111156110a7578283fd5b6110b385828601610f59565b90969095509350505050565b600080600080604085870312156110d4578182fd5b843567ffffffffffffffff808211156110eb578384fd5b6110f788838901610f59565b9096509450602087013591508082111561110f578384fd5b5061111c87828801610f59565b95989497509550505050565b600060208284031215611139578081fd5b81518015158114610a98578182fd5b600060208284031215611159578081fd5b5035919050565b600060208284031215611171578081fd5b5051919050565b6000806040838503121561118a578182fd5b50508035926020909101359150565b6000606082840312156111aa578081fd5b6111b460606113c1565b82356111bf81611408565b8152602083810135908201526040928301359281019290925250919050565b6001600160a01b0391909116815260200190565b6001600160a01b039390931683526020830191909152604082015260600190565b6020808252825182820181905260009190848201906040850190845b818110156112545783516001600160a01b03168352928401929184019160010161122f565b50909695505050505050565b60608101818360005b6003811015611288578151835260209283019290910190600101611269565b50505092915050565b6020808252825182820181905260009190848201906040850190845b81811015611254578351835292840192918401916001016112ad565b90815260200190565b602080825260119082015270125b98dbdc9c9958dd0819195c1bdcda5d607a1b604082015260600190565b6020808252601e908201527f496e636f7272656374207769746864726177616c207472656520726f6f740000604082015260600190565b6020808252601b908201527f496e636f7272656374206465706f736974207472656520726f6f740000000000604082015260600190565b602080825260149082015273125b98dbdc9c9958dd081dda5d1a191c985dd85b60621b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b60405181810167ffffffffffffffff811182821017156113e057600080fd5b604052919050565b600067ffffffffffffffff8211156113fe578081fd5b5060209081020190565b6001600160a01b038116811461141d57600080fd5b5056fea2646970667358221220125c33995cdb4df3582330e8208b4d3ef79a595802badc8439ba169de11b60e964736f6c634300060c003360a0604052600480546001600160401b03191690553480156200002157600080fd5b506040516200121638038062001216833981810160405260408110156200004757600080fd5b508051602090910151818160006200005e620002ae565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008263ffffffff1611620000ef5760405162461bcd60e51b8152600401808060200182810382526027815260200180620011cd6027913960400191505060405180910390fd5b60208263ffffffff1610620001365760405162461bcd60e51b8152600401808060200182810382526022815260200180620011f46022913960400191505060405180910390fd5b60e082901b6001600160e01b031916608052600180546001600160a01b0319166001600160a01b038316178155600380548083019091557f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c7fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b909101819055600280548084018255600091909152600080516020620011ad83398151915201819055905b8363ffffffff168163ffffffff1610156200025957620001fb8280620002b2565b6003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01829055600280548083018255600091909152600080516020620011ad8339815191520182905590925001620001da565b506002620002688280620002b2565b815460018101835560009283526020909220909101556002805463ffffffff85169081106200029357fe5b60009182526020909120015460055550620003679350505050565b3390565b60015460408051808201825284815260208101849052815163014cf2b360e51b81526000936001600160a01b03169263299e5660929160040190819083908083838a5b838110156200030f578181015183820152602001620002f5565b5050505090500191505060206040518083038186803b1580156200033257600080fd5b505afa15801562000347573d6000803e3d6000fd5b505050506040513d60208110156200035e57600080fd5b50519392505050565b60805160e01c610e0a620003a36000398061045152806107f7528061088452806109c35280610a2c5280610a985280610c3a5250610e0a6000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063c2b40ae4116100a2578063ec73295911610071578063ec732959146102b5578063ed33639f146102bd578063f178e47c146102c5578063f2fde38b146102e2578063fc7e9c6f1461030857610116565b8063c2b40ae414610205578063cba7a7ac14610222578063cd87a3b414610290578063e82955881461029857610116565b80636d9833e3116100e95780636d9833e314610196578063715018a6146101c75780638da5cb5b146101d157806390eeb02b146101f5578063ba70f757146101fd57610116565b80632d287e431461011b57806338bf282e14610151578063414a37ba146101865780634ecf518b1461018e575b600080fd5b6101386004803603602081101561013157600080fd5b5035610310565b6040805163ffffffff9092168252519081900360200190f35b6101746004803603604081101561016757600080fd5b508035906020013561037b565b60408051918252519081900360200190f35b61017461042b565b61013861044f565b6101b3600480360360208110156101ac57600080fd5b5035610473565b604080519115158252519081900360200190f35b6101cf6104e4565b005b6101d9610586565b604080516001600160a01b039092168252519081900360200190f35b610138610595565b6101746105a1565b6101746004803603602081101561021b57600080fd5b50356105c1565b6101cf6004803603602081101561023857600080fd5b810190602081018135600160201b81111561025257600080fd5b82018360208201111561026457600080fd5b803590602001918460208302840111600160201b8311171561028557600080fd5b5090925090506105d5565b61013861066d565b610174600480360360208110156102ae57600080fd5b5035610672565b610174610690565b6101d96106b4565b610174600480360360208110156102db57600080fd5b50356106c3565b6101cf600480360360208110156102f857600080fd5b50356001600160a01b03166106d0565b6101386107c8565b600061031a6107db565b6000546001600160a01b0390811691161461036a576040805162461bcd60e51b81526020600482018190526024820152600080516020610d85833981519152604482015290519081900360640190fd5b610373826107df565b90505b919050565b60015460408051808201825284815260208101849052815163014cf2b360e51b81526000936001600160a01b03169263299e5660929160040190819083908083838a5b838110156103d65781810151838201526020016103be565b5050505090500191505060206040518083038186803b1580156103f857600080fd5b505afa15801561040c573d6000803e3d6000fd5b505050506040513d602081101561042257600080fd5b50519392505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008161048257506000610376565b60045463ffffffff165b60058163ffffffff16600a811061049f57fe5b01548314156104b2576001915050610376565b63ffffffff81166104c15750600a5b6004546000199091019063ffffffff8083169116141561048c5750600092915050565b6104ec6107db565b6000546001600160a01b0390811691161461053c576040805162461bcd60e51b81526020600482018190526024820152600080516020610d85833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b60045463ffffffff1681565b60045460009060059063ffffffff16600a81106105ba57fe5b0154905090565b600581600a81106105ce57fe5b0154905081565b6105dd6107db565b6000546001600160a01b0390811691161461062d576040805162461bcd60e51b81526020600482018190526024820152600080516020610d85833981519152604482015290519081900360640190fd5b6106698282808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506109ac92505050565b5050565b600a81565b6003818154811061067f57fe5b600091825260209091200154905081565b7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b6001546001600160a01b031681565b6002818154811061067f57fe5b6106d86107db565b6000546001600160a01b03908116911614610728576040805162461bcd60e51b81526020600482018190526024820152600080516020610d85833981519152604482015290519081900360640190fd5b6001600160a01b03811661076d5760405162461bcd60e51b8152600401808060200182810382526026815260200180610d246026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600454600160201b900463ffffffff1681565b3390565b60045460009063ffffffff600160201b9091048116907f0000000000000000000000000000000000000000000000000000000000000000811660020a1681141561085a5760405162461bcd60e51b8152600401808060200182810382526030815260200180610da56030913960400191505060405180910390fd5b6004805467ffffffff000000001916600160201b6001840163ffffffff160217905582600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff16101561094a57600185166109065783925060038163ffffffff16815481106108d457fe5b906000526020600020015491508360028263ffffffff16815481106108f557fe5b60009182526020909120015561092a565b60028163ffffffff168154811061091957fe5b906000526020600020015492508391505b610934838361037b565b9350600263ffffffff8616049450600101610882565b50600454600a9063ffffffff908116600101166004805463ffffffff19169290910663ffffffff9081169290921790819055849160059116600a811061098c57fe5b01555050600454600160201b900463ffffffff1660001901949350505050565b600454815163ffffffff600160201b9092048216917f0000000000000000000000000000000000000000000000000000000000000000811660020a169082011115610a285760405162461bcd60e51b815260040180806020018281038252603b815260200180610d4a603b913960400191505060405180910390fd5b60607f000000000000000000000000000000000000000000000000000000000000000063ffffffff1667ffffffffffffffff81118015610a6757600080fd5b50604051908082528060200260200182016040528015610a91578160200160208202803683370190505b50905060607f000000000000000000000000000000000000000000000000000000000000000063ffffffff1667ffffffffffffffff81118015610ad357600080fd5b50604051908082528060200260200182016040528015610afd578160200160208202803683370190505b50905060005b60018551038163ffffffff161015610c3457600081850163ffffffff1690506000868363ffffffff1681518110610b3657fe5b6020026020010151905060005b60028306610b95576001858263ffffffff1681518110610b5f57fe5b60200260200101901515908115158152505081868263ffffffff1681518110610b8457fe5b602002602001018181525050610c29565b6000801b868263ffffffff1681518110610bab57fe5b60200260200101511415610bf65760028163ffffffff1681548110610bcc57fe5b9060005260206000200154868263ffffffff1681518110610be957fe5b6020026020010181815250505b610c19868263ffffffff1681518110610c0b57fe5b60200260200101518361037b565b9150600283049250600101610b43565b505050600101610b03565b5060005b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff161015610ccd57818163ffffffff1681518110610c7e57fe5b602002602001015115610cc557828163ffffffff1681518110610c9d57fe5b602002602001015160028263ffffffff1681548110610cb857fe5b6000918252602090912001555b600101610c38565b5083516004805460001963ffffffff8088168501820116600160201b0267ffffffff000000001990921691909117909155610d1c9186918101908110610d0f57fe5b60200260200101516107df565b505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d65726b6c6520646f65736e2774206861766520656e6f75676820636170616369747920746f2061646420737065636966696564206c65617665734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c65617665732063616e206265206164646564a2646970667358221220d9b9dec9144ac2d263d83b6a7ab0164b3923ff87ea652a2cd0874b062feb0ace64736f6c634300060c0033405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f747265654c6576656c732073686f756c642062652067726561746572207468616e207a65726f5f747265654c6576656c732073686f756c64206265206c657373207468616e203332c5218f28a24f5edf943eee83f1caf29303762bfa2807c222d35975b522e66e7a71cadf5505c665c54e3ccdd64387c0efedfca0667038b4ee45ae7bf86bf70c08be56438c8b3dc62ba90ba8498d77bebe835d8ab1db9a55378e5224783d5748650000000000000000000000000000000000000000000000000000000000000014

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063721f4b3b116100b8578063b4a6359e1161007c578063b4a6359e14610233578063c11b96811461023b578063c34c78821461024e578063c6758d6b14610256578063ed33639f14610269578063f9e542341461027157610137565b8063721f4b3b146102005780638955fe8a14610208578063a2b28fe614610210578063a3347cda14610218578063b02c43d01461022057610137565b806357e871e7116100ff57806357e871e71461019f57806359c4604f146101b45780635c23bdf5146101c75780635cc07076146101da5780636360b82b146101ed57610137565b806301ae19201461013c57806314693646146101515780631c100fa61461016f578063350ed50a14610177578063489686341461018c575b600080fd5b61014f61014a366004610fbf565b610291565b005b61015961032f565b60405161016691906111de565b60405180910390f35b610159610353565b61017f610377565b6040516101669190611291565b61014f61019a36600461107f565b610411565b6101a76106d3565b60405161016691906112c9565b61014f6101c236600461107f565b6106d7565b6101596101d5366004611148565b610961565b6101a76101e8366004611148565b610a9f565b61014f6101fb3660046110bf565b610abd565b610159610ae3565b6101a7610b07565b6101a7610b9f565b61017f610ba5565b6101a761022e366004611148565b610c3a565b6101a7610c47565b61014f610249366004611178565b610c4d565b6101a7610dc1565b61014f610264366004610fbf565b610e1c565b610159610e70565b61028461027f366004610fea565b610e94565b6040516101669190611213565b336001600160a01b037f000000000000000000000000905b63fff465b9ffbf41dea908ceb12478ec760116146102e25760405162461bcd60e51b81526004016102d990611399565b60405180910390fd5b600282826102ee6106d3565b604051602001610300939291906111f2565b60408051601f198184030181529190528051602091820120825460018101845560009384529190922001555050565b7f0000000000000000000000006234c4c2734d2b246ae074492f402d8f58ff322681565b7f000000000000000000000000905b63fff465b9ffbf41dea908ceb12478ec760181565b60035460025460609190038067ffffffffffffffff8111801561039957600080fd5b506040519080825280602002602001820160405280156103c3578160200160208202803683370190505b50915060005b8181101561040c5760028160035401815481106103e257fe5b90600052602060002001548382815181106103f957fe5b60209081029190910101526001016103c9565b505090565b60608167ffffffffffffffff8111801561042a57600080fd5b50604051908082528060200260200182016040528015610454578160200160208202803683370190505b5060015490915060005b838110156106485761046e610f39565b85858381811061047a57fe5b9050606002018036038101906104909190611199565b805160208083015160408085015190519495506000946104b19493016111f2565b604051602081830303815290604052805190602001209050806000848601815481106104d957fe5b9060005260206000200154146105015760405162461bcd60e51b81526004016102d9906112d2565b6040805160608101825283516001600160a01b0390811682526020808601519083015284830151828401529151635a53025d60e01b81527f000000000000000000000000d82ed8786d7c69dc7e052f7a542ab047971e73d290921691635a53025d9161056f91600401611260565b60206040518083038186803b15801561058757600080fd5b505afa15801561059b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105bf9190611160565b8584815181106105cb57fe5b6020026020010181815250506000838501815481106105e657fe5b906000526020600020016000905581602001517fc711bd1d2cdd9c8978324cc83ce34c17f6ada898f8273efeb9585c1312d4ef6783600001518460400151868801604051610636939291906111f2565b60405180910390a2505060010161045e565b508083016001556040516332e9e9eb60e21b81526001600160a01b037f0000000000000000000000006234c4c2734d2b246ae074492f402d8f58ff3226169063cba7a7ac9061069b908590600401611291565b600060405180830381600087803b1580156106b557600080fd5b505af11580156106c9573d6000803e3d6000fd5b5050505050505050565b4390565b60608167ffffffffffffffff811180156106f057600080fd5b5060405190808252806020026020018201604052801561071a578160200160208202803683370190505b5060035490915060005b8381101561090e57610734610f39565b85858381811061074057fe5b9050606002018036038101906107569190611199565b805160208083015160408085015190519495506000946107779493016111f2565b6040516020818303038152906040528051906020012090508060028486018154811061079f57fe5b9060005260206000200154146107c75760405162461bcd60e51b81526004016102d99061136b565b6040805160608101825283516001600160a01b0390811682526020808601519083015284830151828401529151635a53025d60e01b81527f000000000000000000000000d82ed8786d7c69dc7e052f7a542ab047971e73d290921691635a53025d9161083591600401611260565b60206040518083038186803b15801561084d57600080fd5b505afa158015610861573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108859190611160565b85848151811061089157fe5b6020026020010181815250506002838501815481106108ac57fe5b906000526020600020016000905581602001517f5d3e96213d4520bdc95a25d628a39768f1a90a2b939894355479596910d179df836000015184604001518688016040516108fc939291906111f2565b60405180910390a25050600101610724565b508083016003556040516332e9e9eb60e21b81526001600160a01b037f000000000000000000000000bfa347d89ac54f7c2de2433458cb98a85fc03ced169063cba7a7ac9061069b908590600401611291565b60008061096c610f35565b60011461098d57738595bfb0d940dfedc98943fa8a907091203f25ee61099e565b6e0c2e074ec69a0dfb2997ba6c7d2e1e5b604051630178b8bf60e01b81529091506001600160a01b03821690630178b8bf906109cd9086906004016112c9565b60206040518083038186803b1580156109e557600080fd5b505afa1580156109f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1d9190610fa3565b6001600160a01b0316633b3b57de846040518263ffffffff1660e01b8152600401610a4891906112c9565b60206040518083038186803b158015610a6057600080fd5b505afa158015610a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a989190610fa3565b9392505050565b60028181548110610aac57fe5b600091825260209091200154905081565b8215610acd57610acd8484610411565b8015610add57610add82826106d7565b50505050565b7f000000000000000000000000bfa347d89ac54f7c2de2433458cb98a85fc03ced81565b60007f0000000000000000000000006234c4c2734d2b246ae074492f402d8f58ff32266001600160a01b031663ba70f7576040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6257600080fd5b505afa158015610b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9a9190611160565b905090565b60035481565b60015460005460609190038067ffffffffffffffff81118015610bc757600080fd5b50604051908082528060200260200182016040528015610bf1578160200160208202803683370190505b50915060005b8181101561040c576000816001540181548110610c1057fe5b9060005260206000200154838281518110610c2757fe5b6020908102919091010152600101610bf7565b60008181548110610aac57fe5b60015481565b604051636d9833e360e01b81526001600160a01b037f0000000000000000000000006234c4c2734d2b246ae074492f402d8f58ff32261690636d9833e390610c999085906004016112c9565b60206040518083038186803b158015610cb157600080fd5b505afa158015610cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce99190611128565b610d055760405162461bcd60e51b81526004016102d990611334565b604051636d9833e360e01b81526001600160a01b037f000000000000000000000000bfa347d89ac54f7c2de2433458cb98a85fc03ced1690636d9833e390610d519084906004016112c9565b60206040518083038186803b158015610d6957600080fd5b505afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da19190611128565b610dbd5760405162461bcd60e51b81526004016102d9906112fd565b5050565b60007f000000000000000000000000bfa347d89ac54f7c2de2433458cb98a85fc03ced6001600160a01b031663ba70f7576040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6257600080fd5b336001600160a01b037f000000000000000000000000905b63fff465b9ffbf41dea908ceb12478ec76011614610e645760405162461bcd60e51b81526004016102d990611399565b600082826102ee6106d3565b7f000000000000000000000000d82ed8786d7c69dc7e052f7a542ab047971e73d281565b6060815167ffffffffffffffff81118015610eae57600080fd5b50604051908082528060200260200182016040528015610ed8578160200160208202803683370190505b50905060005b8251811015610f2f57610f03838281518110610ef657fe5b6020026020010151610961565b828281518110610f0f57fe5b6001600160a01b0390921660209283029190910190910152600101610ede565b50919050565b4690565b604080516060810182526000808252602082018190529181019190915290565b60008083601f840112610f6a578081fd5b50813567ffffffffffffffff811115610f81578182fd5b602083019150836020606083028501011115610f9c57600080fd5b9250929050565b600060208284031215610fb4578081fd5b8151610a9881611408565b60008060408385031215610fd1578081fd5b8235610fdc81611408565b946020939093013593505050565b60006020808385031215610ffc578182fd5b823567ffffffffffffffff811115611012578283fd5b8301601f81018513611022578283fd5b8035611035611030826113e8565b6113c1565b8181528381019083850185840285018601891015611051578687fd5b8694505b83851015611073578035835260019490940193918501918501611055565b50979650505050505050565b60008060208385031215611091578182fd5b823567ffffffffffffffff8111156110a7578283fd5b6110b385828601610f59565b90969095509350505050565b600080600080604085870312156110d4578182fd5b843567ffffffffffffffff808211156110eb578384fd5b6110f788838901610f59565b9096509450602087013591508082111561110f578384fd5b5061111c87828801610f59565b95989497509550505050565b600060208284031215611139578081fd5b81518015158114610a98578182fd5b600060208284031215611159578081fd5b5035919050565b600060208284031215611171578081fd5b5051919050565b6000806040838503121561118a578182fd5b50508035926020909101359150565b6000606082840312156111aa578081fd5b6111b460606113c1565b82356111bf81611408565b8152602083810135908201526040928301359281019290925250919050565b6001600160a01b0391909116815260200190565b6001600160a01b039390931683526020830191909152604082015260600190565b6020808252825182820181905260009190848201906040850190845b818110156112545783516001600160a01b03168352928401929184019160010161122f565b50909695505050505050565b60608101818360005b6003811015611288578151835260209283019290910190600101611269565b50505092915050565b6020808252825182820181905260009190848201906040850190845b81811015611254578351835292840192918401916001016112ad565b90815260200190565b602080825260119082015270125b98dbdc9c9958dd0819195c1bdcda5d607a1b604082015260600190565b6020808252601e908201527f496e636f7272656374207769746864726177616c207472656520726f6f740000604082015260600190565b6020808252601b908201527f496e636f7272656374206465706f736974207472656520726f6f740000000000604082015260600190565b602080825260149082015273125b98dbdc9c9958dd081dda5d1a191c985dd85b60621b604082015260600190565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b60405181810167ffffffffffffffff811182821017156113e057600080fd5b604052919050565b600067ffffffffffffffff8211156113fe578081fd5b5060209081020190565b6001600160a01b038116811461141d57600080fd5b5056fea2646970667358221220125c33995cdb4df3582330e8208b4d3ef79a595802badc8439ba169de11b60e964736f6c634300060c0033

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

c5218f28a24f5edf943eee83f1caf29303762bfa2807c222d35975b522e66e7a71cadf5505c665c54e3ccdd64387c0efedfca0667038b4ee45ae7bf86bf70c08be56438c8b3dc62ba90ba8498d77bebe835d8ab1db9a55378e5224783d5748650000000000000000000000000000000000000000000000000000000000000014

-----Decoded View---------------
Arg [0] : _tornadoProxy (bytes32): 0xc5218f28a24f5edf943eee83f1caf29303762bfa2807c222d35975b522e66e7a
Arg [1] : _hasher2 (bytes32): 0x71cadf5505c665c54e3ccdd64387c0efedfca0667038b4ee45ae7bf86bf70c08
Arg [2] : _hasher3 (bytes32): 0xbe56438c8b3dc62ba90ba8498d77bebe835d8ab1db9a55378e5224783d574865
Arg [3] : _levels (uint32): 20

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : c5218f28a24f5edf943eee83f1caf29303762bfa2807c222d35975b522e66e7a
Arg [1] : 71cadf5505c665c54e3ccdd64387c0efedfca0667038b4ee45ae7bf86bf70c08
Arg [2] : be56438c8b3dc62ba90ba8498d77bebe835d8ab1db9a55378e5224783d574865
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014


Deployed Bytecode Sourcemap

211:4694:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1567:192;;;;;;:::i;:::-;;:::i;:::-;;267:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;408:37;;;:::i;4473:330::-;;;:::i;:::-;;;;;;;:::i;2003:794::-;;;;;;:::i;:::-;;:::i;4809:93::-;;;:::i;:::-;;;;;;;:::i;2803:863::-;;;;;;:::i;:::-;;:::i;269:271:1:-;;;;;;:::i;:::-;;:::i;528:28:7:-;;;;;;:::i;:::-;;:::i;1765:232::-;;;;;;:::i;:::-;;:::i;318:49::-;;;:::i;3943:100::-;;;:::i;561:42::-;;;:::i;4161:306::-;;;:::i;452:25::-;;;;;;:::i;:::-;;:::i;482:39::-;;;:::i;3672:265::-;;;;;;:::i;:::-;;:::i;4049:106::-;;;:::i;1373:188::-;;;;;;:::i;:::-;;:::i;372:31::-;;;:::i;546:243:1:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1567:192:7:-;930:10;-1:-1:-1;;;;;944:12:7;930:26;;922:53;;;;-1:-1:-1;;;922:53:7;;;;;;;:::i;:::-;;;;;;;;;1676:11:::1;1714:9;1725:10;1737:13;:11;:13::i;:::-;1703:48;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;1703:48:7;;::::1;::::0;;;;;;1693:59;;1703:48:::1;1693:59:::0;;::::1;::::0;1676:77;;::::1;::::0;::::1;::::0;;-1:-1:-1;1676:77:7;;;;;;;::::1;::::0;-1:-1:-1;;1567:192:7:o;267:46::-;;;:::o;408:37::-;;;:::o;4473:330::-;4607:27;;4586:11;:18;4532:29;;4586:48;;;4656:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4656:20:7;;4641:35;;4688:9;4683:115;4707:5;4703:1;:9;4683:115;;;4746:11;4788:1;4758:27;;:31;4746:44;;;;;;;;;;;;;;;;4728:12;4741:1;4728:15;;;;;;;;;;;;;;;;;:62;4714:3;;4683:115;;;;4473:330;;:::o;2003:794::-;2075:23;2115:9;2101:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2101:31:7;-1:-1:-1;2156:24:7;;2075:57;;-1:-1:-1;2139:14:7;2189:505;2209:20;;;2189:505;;;2245:23;;:::i;:::-;2271:9;;2281:1;2271:12;;;;;;;;;;;;2245:38;;;;;;;;;;:::i;:::-;2332:16;;2350:12;;;;;2364:13;;;;;2321:57;;2245:38;;-1:-1:-1;2292:16:7;;2321:57;;2332:16;2321:57;;:::i;:::-;;;;;;;;;;;;;2311:68;;;;;;2292:87;;2420:8;2396;2414:1;2405:6;:10;2396:20;;;;;;;;;;;;;;;;:32;2388:62;;;;-1:-1:-1;;;2388:62:7;;;;;;;:::i;:::-;2473:91;;;;;;;;2506:16;;-1:-1:-1;;;;;2498:25:7;;;2473:91;;;2526:12;;;;2473:91;;;;2548:13;;;;2473:91;;;;;;-1:-1:-1;;;2473:91:7;;:6;:15;;;;;;:91;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2461:6;2468:1;2461:9;;;;;;;;;;;;;:103;;;;;2580:8;2598:1;2589:6;:10;2580:20;;;;;;;;;;;;;;;2573:27;;;2646:7;:12;;;2616:70;2628:7;:16;;;2660:7;:13;;;2684:1;2675:6;:10;2616:70;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;2231:3:7;;2189:505;;;-1:-1:-1;2729:25:7;;;2702:24;:52;2761:30;;-1:-1:-1;;;2761:30:7;;-1:-1:-1;;;;;2761:11:7;:22;;;;:30;;2784:6;;2761:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2003:794;;;;:::o;4809:93::-;4884:12;4809:93;:::o;2803:863::-;2881:23;2921:12;2907:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2907:34:7;-1:-1:-1;2965:27:7;;2881:60;;-1:-1:-1;2948:14:7;3001:553;3021:23;;;3001:553;;;3060:26;;:::i;:::-;3089:12;;3102:1;3089:15;;;;;;;;;;;;3060:44;;;;;;;;;;:::i;:::-;3153:19;;3174:15;;;;;3191:16;;;;;3142:66;;3060:44;;-1:-1:-1;3113:16:7;;3142:66;;3153:19;3142:66;;:::i;:::-;;;;;;;;;;;;;3132:77;;;;;;3113:96;;3253:8;3226:11;3247:1;3238:6;:10;3226:23;;;;;;;;;;;;;;;;:35;3218:68;;;;-1:-1:-1;;;3218:68:7;;;;;;;:::i;:::-;3309:100;;;;;;;;3342:19;;-1:-1:-1;;;;;3334:28:7;;;3309:100;;;3365:15;;;;3309:100;;;;3390:16;;;;3309:100;;;;;;-1:-1:-1;;;3309:100:7;;:6;:15;;;;;;:100;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3297:6;3304:1;3297:9;;;;;;;;;;;;;:112;;;;;3425:11;3446:1;3437:6;:10;3425:23;;;;;;;;;;;;;;;3418:30;;;3500:10;:15;;;3464:82;3479:10;:19;;;3517:10;:16;;;3544:1;3535:6;:10;3464:82;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;3046:3:7;;3001:553;;;-1:-1:-1;3592:28:7;;;3562:27;:58;3627:33;;-1:-1:-1;;;3627:33:7;;-1:-1:-1;;;;;3627:14:7;:25;;;;:33;;3653:6;;3627:33;;;:::i;269:271:1:-;329:7;345:12;372;:10;:12::i;:::-;388:1;372:17;:107;;437:42;372:107;;;392:42;372:107;500:23;;-1:-1:-1;;;500:23:1;;345:141;;-1:-1:-1;;;;;;500:17:1;;;;;:23;;518:4;;500:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;500:28:1;;529:4;500:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;493:41;269:271;-1:-1:-1;;;269:271:1:o;528:28:7:-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;528:28:7;:::o;1765:232::-;1871:20;;1867:54;;1893:28;1911:9;;1893:17;:28::i;:::-;1932:23;;1928:63;;1957:34;1978:12;;1957:20;:34::i;:::-;1765:232;;;;:::o;318:49::-;;;:::o;3943:100::-;3989:7;4012:11;-1:-1:-1;;;;;4012:23:7;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4005:32;;3943:100;:::o;561:42::-;;;;:::o;4161:306::-;4286:24;;4252:13;4268:15;4217:26;;4268:42;;;4329:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4329:20:7;;4317:32;;4361:9;4356:106;4380:5;4376:1;:9;4356:106;;;4416:8;4452:1;4425:24;;:28;4416:38;;;;;;;;;;;;;;;;4401:9;4411:1;4401:12;;;;;;;;;;;;;;;;;:53;4387:3;;4356:106;;452:25;;;;;;;;;;482:39;;;;:::o;3672:265::-;3769:37;;-1:-1:-1;;;3769:37:7;;-1:-1:-1;;;;;3769:11:7;:23;;;;:37;;3793:12;;3769:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3761:77;;;;-1:-1:-1;;;3761:77:7;;;;;;;:::i;:::-;3853:43;;-1:-1:-1;;;3853:43:7;;-1:-1:-1;;;;;3853:14:7;:26;;;;:43;;3880:15;;3853:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3845:86;;;;-1:-1:-1;;;3845:86:7;;;;;;;:::i;:::-;3672:265;;:::o;4049:106::-;4098:7;4121:14;-1:-1:-1;;;;;4121:26:7;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1373:188;930:10;-1:-1:-1;;;;;944:12:7;930:26;;922:53;;;;-1:-1:-1;;;922:53:7;;;;;;;:::i;:::-;1480:8:::1;1515:9;1526:11;1539:13;:11;:13::i;372:31::-:0;;;:::o;546:243:1:-;614:23;669:7;:14;655:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;655:29:1;;646:38;;696:9;691:93;715:7;:14;711:1;:18;691:93;;;757:19;765:7;773:1;765:10;;;;;;;;;;;;;;757:7;:19::i;:::-;745:6;752:1;745:9;;;;;;;;-1:-1:-1;;;;;745:31:1;;;:9;;;;;;;;;;;:31;731:3;;691:93;;;;546:243;;;:::o;795:154::-;907:9;795:154;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1055:379::-;;;1212:3;1205:4;1197:6;1193:17;1189:27;1179:2;;-1:-1;;1220:12;1179:2;-1:-1;1250:20;;1290:18;1279:30;;1276:2;;;-1:-1;;1312:12;1276:2;1356:4;1348:6;1344:17;1332:29;;1407:3;1356:4;1399;1391:6;1387:17;1348:6;1373:32;;1370:41;1367:2;;;1424:1;;1414:12;1367:2;1172:262;;;;;:::o;2821:263::-;;2936:2;2924:9;2915:7;2911:23;2907:32;2904:2;;;-1:-1;;2942:12;2904:2;226:6;220:13;238:33;265:5;238:33;:::i;3091:366::-;;;3212:2;3200:9;3191:7;3187:23;3183:32;3180:2;;;-1:-1;;3218:12;3180:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3270:63;3370:2;3409:22;;;;1644:20;;-1:-1;;;3174:283::o;3464:377::-;;3593:2;;3581:9;3572:7;3568:23;3564:32;3561:2;;;-1:-1;;3599:12;3561:2;3657:17;3644:31;3695:18;3687:6;3684:30;3681:2;;;-1:-1;;3717:12;3681:2;3793:22;;411:4;399:17;;395:27;-1:-1;385:2;;-1:-1;;426:12;385:2;473:6;460:20;495:80;510:64;567:6;510:64;:::i;:::-;495:80;:::i;:::-;603:21;;;660:14;;;;635:17;;;749;;;740:27;;;;737:36;-1:-1;734:2;;;-1:-1;;776:12;734:2;-1:-1;802:10;;796:206;821:6;818:1;815:13;796:206;;;1644:20;;889:50;;843:1;836:9;;;;;953:14;;;;981;;796:206;;;-1:-1;3737:88;3555:286;-1:-1;;;;;;;3555:286::o;3848:451::-;;;4014:2;4002:9;3993:7;3989:23;3985:32;3982:2;;;-1:-1;;4020:12;3982:2;4078:17;4065:31;4116:18;4108:6;4105:30;4102:2;;;-1:-1;;4138:12;4102:2;4176:107;4275:7;4266:6;4255:9;4251:22;4176:107;:::i;:::-;4158:125;;;;-1:-1;3976:323;-1:-1;;;;3976:323::o;4306:786::-;;;;;4551:2;4539:9;4530:7;4526:23;4522:32;4519:2;;;-1:-1;;4557:12;4519:2;4615:17;4602:31;4653:18;;4645:6;4642:30;4639:2;;;-1:-1;;4675:12;4639:2;4713:107;4812:7;4803:6;4792:9;4788:22;4713:107;:::i;:::-;4695:125;;-1:-1;4695:125;-1:-1;4885:2;4870:18;;4857:32;;-1:-1;4898:30;;;4895:2;;;-1:-1;;4931:12;4895:2;;4969:107;5068:7;5059:6;5048:9;5044:22;4969:107;:::i;:::-;4513:579;;;;-1:-1;4951:125;-1:-1;;;;4513:579::o;5099:257::-;;5211:2;5199:9;5190:7;5186:23;5182:32;5179:2;;;-1:-1;;5217:12;5179:2;1523:6;1517:13;21354:5;20118:13;20111:21;21332:5;21329:32;21319:2;;-1:-1;;21365:12;5363:241;;5467:2;5455:9;5446:7;5442:23;5438:32;5435:2;;;-1:-1;;5473:12;5435:2;-1:-1;1644:20;;5429:175;-1:-1;5429:175::o;5611:263::-;;5726:2;5714:9;5705:7;5701:23;5697:32;5694:2;;;-1:-1;;5732:12;5694:2;-1:-1;1792:13;;5688:186;-1:-1;5688:186::o;5881:366::-;;;6002:2;5990:9;5981:7;5977:23;5973:32;5970:2;;;-1:-1;;6008:12;5970:2;-1:-1;;1644:20;;;6160:2;6199:22;;;1644:20;;-1:-1;5964:283::o;6554:291::-;;6683:2;6671:9;6662:7;6658:23;6654:32;6651:2;;;-1:-1;;6689:12;6651:2;2211:20;6683:2;2211:20;:::i;:::-;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2292:75;;2428:2;2482:22;;;1644:20;2443:16;;;2436:75;2573:2;2627:22;;;2751:20;2588:16;;;2581:75;;;;-1:-1;2299:16;6645:200;-1:-1;6645:200::o;12202:222::-;-1:-1;;;;;20398:54;;;;7525:37;;12329:2;12314:18;;12300:124::o;12431:444::-;-1:-1;;;;;20398:54;;;;7525:37;;12778:2;12763:18;;9914:37;;;;12861:2;12846:18;;9914:37;12614:2;12599:18;;12585:290::o;13333:370::-;13510:2;13524:47;;;18616:12;;13495:18;;;19378:19;;;13333:370;;13510:2;18208:14;;;;19418;;;;13333:370;8133:260;8158:6;8155:1;8152:13;8133:260;;;8219:13;;-1:-1;;;;;20398:54;7525:37;;19005:14;;;;7254;;;;1290:18;8173:9;8133:260;;;-1:-1;13577:116;;13481:222;-1:-1;;;;;;13481:222::o;13710:314::-;13883:2;13868:18;;13872:9;8819:21;13710:314;8846:258;18751:4;8868:1;8865:13;8846:258;;;8932:13;;9914:37;;7445:4;7436:14;;;;19005;;;;8893:1;8886:9;8846:258;;;8850:14;;;13854:170;;;;:::o;14031:370::-;14208:2;14222:47;;;18616:12;;14193:18;;;19378:19;;;14031:370;;14208:2;18208:14;;;;19418;;;;14031:370;9563:260;9588:6;9585:1;9582:13;9563:260;;;9649:13;;9914:37;;19005:14;;;;7436;;;;9610:1;9603:9;9563:260;;14408:222;9914:37;;;14535:2;14520:18;;14506:124::o;15175:416::-;15375:2;15389:47;;;10654:2;15360:18;;;19378:19;-1:-1;;;19418:14;;;10670:40;10729:12;;;15346:245::o;15598:416::-;15798:2;15812:47;;;10980:2;15783:18;;;19378:19;11016:32;19418:14;;;10996:53;11068:12;;;15769:245::o;16021:416::-;16221:2;16235:47;;;11319:2;16206:18;;;19378:19;11355:29;19418:14;;;11335:50;11404:12;;;16192:245::o;16444:416::-;16644:2;16658:47;;;11655:2;16629:18;;;19378:19;-1:-1;;;19418:14;;;11671:43;11733:12;;;16615:245::o;16867:416::-;17067:2;17081:47;;;11984:2;17052:18;;;19378:19;-1:-1;;;19418:14;;;12000:37;12056:12;;;17038:245::o;17519:256::-;17581:2;17575:9;17607:17;;;17682:18;17667:34;;17703:22;;;17664:62;17661:2;;;17739:1;;17729:12;17661:2;17581;17748:22;17559:216;;-1:-1;17559:216::o;17782:304::-;;17941:18;17933:6;17930:30;17927:2;;;-1:-1;;17963:12;17927:2;-1:-1;18008:4;17996:17;;;18061:15;;17864:222::o;21149:117::-;-1:-1;;;;;20398:54;;21208:35;;21198:2;;21257:1;;21247:12;21198:2;21192:74;:::o

Swarm Source

ipfs://d9b9dec9144ac2d263d83b6a7ab0164b3923ff87ea652a2cd0874b062feb0ace

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.