Contract 0x6ceB170e3ec0fAfaE3Be5A02FEFb81F524FE85C5

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6ffc8cdda17daa289f8bcd812bf8b9a4a1ec3164a450db2b86535d933d8c0a1b0x6080604027147372021-07-19 18:03:10305 days 11 hrs ago0x027588afac1eedb7d3d329a9b60c530aa3fadbbf IN  Contract Creation0 AVAX0.69403455
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x97df0bcffaec32d12d8bee9e959303ab9ba0cbe35644be5539c2eaac9bd50d7b148618512022-05-18 15:22:532 days 14 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0x97df0bcffaec32d12d8bee9e959303ab9ba0cbe35644be5539c2eaac9bd50d7b148618512022-05-18 15:22:532 days 14 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xe5dd93d46a235c652286c7c9f39ff9254d9316e9494.99999999992125 AVAX
0xdcce9d73157ec03a09df3abd4364768472b8f802b8d039b0e03331155e3c3ce5148618292022-05-18 15:22:102 days 14 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0xdcce9d73157ec03a09df3abd4364768472b8f802b8d039b0e03331155e3c3ce5148618292022-05-18 15:22:102 days 14 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xe5dd93d46a235c652286c7c9f39ff9254d9316e9494.99999999992125 AVAX
0xdf1d6f481e415be839c6f2996bca3af8520de2af91229c1f6fefc9fe2494e56a148617892022-05-18 15:20:552 days 14 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0xcbf7a9c3636061425957fcecd8456d81699463b7bce3c5912ce10db058212c8a148617722022-05-18 15:20:172 days 14 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0xdb787bad7f892b91af7c027f2f243fec00064e1c09a4a4af1640cc4b2625abb9146268952022-05-13 4:32:358 days 1 hr ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0xe146f47aed6b23aa04ad3753bc6bde091a3729725a69031bf0fc8937cdd96c53146266752022-05-13 4:25:048 days 1 hr ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0x6418471f90ce47d0163f0e21558ab59dcfb4a76e8ccf6f48b32311f9912b999f145919742022-05-12 9:14:458 days 20 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0x6418471f90ce47d0163f0e21558ab59dcfb4a76e8ccf6f48b32311f9912b999f145919742022-05-12 9:14:458 days 20 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xe5dd93d46a235c652286c7c9f39ff9254d9316e9494.99999999992125 AVAX
0xf2c8657d0b78034bb709026158f3791b5544aa1e1d4b1a9773f22ac68383ab9b145889332022-05-12 7:39:058 days 22 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0x132b41b8afa3f5271bfb96104b68e5d4eb30c3e30236eda1bd7197f6b47fc656145479292022-05-11 8:54:379 days 21 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0x132b41b8afa3f5271bfb96104b68e5d4eb30c3e30236eda1bd7197f6b47fc656145479292022-05-11 8:54:379 days 21 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xe5dd93d46a235c652286c7c9f39ff9254d9316e9494.99999999992125 AVAX
0x707b463113359e43eb07780fd95c2705cf322ef436bb6505dcd80e48fcc432c1145478672022-05-11 8:52:329 days 21 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0x7f4c52392ac57f60baba3c4c4fccee3ebf37f1247d5572cd9c4a071fedcc74bd144479452022-05-09 0:28:4812 days 5 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x05b5d5d47c1aad697c36c1a5079fc941ac1b7829500 AVAX
0xecc7a95c77c4171e19a49853f8c284cc4e52070e2d3f46761e03415bdb15eed1144479102022-05-09 0:27:3312 days 5 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x05b5d5d47c1aad697c36c1a5079fc941ac1b7829500 AVAX
0xbaaacd1b1d73f48fbf0703751f827c23801395d8df4ae8fa20658d41738ef0be144478312022-05-09 0:24:4912 days 5 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x37b35898017d75607b673e85968a5089377643dc500 AVAX
0xf88870eb165c68be7594426d24a25e6558389f85b6184d3357482a05c071cc03144477772022-05-09 0:23:0012 days 5 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x37b35898017d75607b673e85968a5089377643dc500 AVAX
0xe2d4c8e3b767595b782a447663e77024049cf19ed7d4dea2592247b7ef2145ca144476172022-05-09 0:17:2012 days 5 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xf22a87fdfd4a837eaf7e0bcdf02248166a6fb65a500 AVAX
0xdd8447b4551c06fb8f08ce13aa16a11a716df2b0ebfd6f75a8e32226a6a8bc6d144475662022-05-09 0:15:2712 days 5 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xf22a87fdfd4a837eaf7e0bcdf02248166a6fb65a500 AVAX
0x0a3ce4eab2a3e4dacc16ac6245eb72a5d780ae8636a3c5033c400fcc594b0815144448412022-05-08 22:41:4212 days 7 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0xf78e41415a31f76a8eca96bca3c19700f45692b0ac54d6ad165975c320a3cbde144447522022-05-08 22:38:3712 days 7 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0x48ab45c6abc05d9a9f75cfdceacfc3bf049a909a4de62ea30c99df6b1270041c144446842022-05-08 22:36:0612 days 7 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0x7afb6df7974db983ce5ba98fb7f4e38548e757702e91a73aca228a92e442f42a144445772022-05-08 22:32:2312 days 7 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0x5abfa286fa6a51440c1a87c025d4e5c78d959c960e87d14778d93aac85cd716f144279362022-05-08 12:48:0812 days 17 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
[ Download CSV Export 
Loading
This contract contains unverified libraries: Hasher

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xe1376DeF383D1656f5a40B6ba31F8C035BFc26Aa

Contract Name:
ETHSherpa

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion
File 1 of 4 : ETHSherpa.sol
// https://sherpa.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.17;

import "./Sherpa.sol";

contract ETHSherpa is Sherpa {
  constructor(
    IVerifier _verifier,
    uint256 _denomination,
    uint32 _merkleTreeHeight
  ) Sherpa(_verifier, _denomination, _merkleTreeHeight) public {
  }

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

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

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

File 2 of 4 : Sherpa.sol
// https://sherpa.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.17;

import "./MerkleTreeWithHistory.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";

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

contract Sherpa 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;

  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
  */
  constructor(
    IVerifier _verifier,
    uint256 _denomination,
    uint32 _merkleTreeHeight
  ) MerkleTreeWithHistory(_merkleTreeHeight) public {
    require(_denomination > 0, "denomination should be greater than 0");
    verifier = _verifier;
    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;
      }
    }
  }
}

File 3 of 4 : MerkleTreeWithHistory.sol
// https://sherpa.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.17;

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 4 of 4 : 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.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 *
 * _Since v2.5.0:_ this module is now much more gas efficient, given net gas
 * metering changes introduced in the Istanbul hardfork.
 */
contract ReentrancyGuard {
    bool private _notEntered;

    constructor () internal {
        // Storing an initial non-zero value makes deployment a bit more
        // expensive, but in exchange the refund on every call to nonReentrant
        // will be lower in amount. Since refunds are capped to a percetange of
        // the total transaction's gas, it is best to keep them low in cases
        // like this one, to increase the likelihood of the full refund coming
        // into effect.
        _notEntered = true;
    }

    /**
     * @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() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_notEntered, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _notEntered = false;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _notEntered = true;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 99999
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {
    "contracts/MerkleTreeWithHistory.sol": {
      "Hasher": "0x11735d37f9f4833d6fc6c81634e24d5ce25afe1d"
    }
  }
}

Contract ABI

[{"inputs":[{"internalType":"contract IVerifier","name":"_verifier","type":"address"},{"internalType":"uint256","name":"_denomination","type":"uint256"},{"internalType":"uint32","name":"_merkleTreeHeight","type":"uint32"}],"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"},{"constant":true,"inputs":[],"name":"FIELD_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"ZERO_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"currentRootIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"denomination","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"filledSubtrees","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLastRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":[{"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":"_nullifierHash","type":"bytes32"}],"name":"isSpent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32[]","name":"_nullifierHashes","type":"bytes32[]"}],"name":"isSpentArray","outputs":[{"internalType":"bool[]","name":"spent","type":"bool[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"levels","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nextIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","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":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":"verifier","outputs":[{"internalType":"contract IVerifier","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"zeros","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"}]

6080604052600380546001600160401b03191690553480156200002157600080fd5b5060405162001bbe38038062001bbe833981810160405260608110156200004757600080fd5b50805160208201516040909201519091908282828063ffffffff8116620000a05760405162461bcd60e51b815260040180806020018281038252602781526020018062001b356027913960400191505060405180910390fd5b60208163ffffffff1610620000e75760405162461bcd60e51b815260040180806020018281038252602281526020018062001b7c6022913960400191505060405180910390fd5b6000805463ffffffff191663ffffffff83161781556002805460018181019092557f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60008051602062001af4833981519152909101819055815480830183559282905260008051602062001b9e8339815191529092018290555b60005463ffffffff9081169082161015620001d5576200018b82806001600160e01b036200026d16565b60028054600181810190925560008051602062001af48339815191520182905580548082018255600082905260008051602062001b9e833981519152018290559092500162000161565b50620001eb81806001600160e01b036200026d16565b60046000015550506068805460ff19166001179055816200023e5760405162461bcd60e51b815260040180806020018281038252602581526020018062001acf6025913960400191505060405180910390fd5b50606c80546001600160a01b0319166001600160a01b039390931692909217909155606955506200045a915050565b600060008051602062001b5c8339815191528310620002d3576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b60008051602062001b5c8339815191528210620003225760405162461bcd60e51b815260040180806020018281038252602181526020018062001b146021913960400191505060405180910390fd5b6040805163f47d33b560e01b8152600481018590526000602482018190528251869391927311735d37f9f4833d6fc6c81634e24d5ce25afe1d9263f47d33b592604480840193829003018186803b1580156200037d57600080fd5b505af415801562000392573d6000803e3d6000fd5b505050506040513d6040811015620003a957600080fd5b508051602090910151909250905060008051602062001b5c83398151915284830891507311735d37f9f4833d6fc6c81634e24d5ce25afe1d63f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b1580156200042357600080fd5b505af415801562000438573d6000803e3d6000fd5b505050506040513d60408110156200044f57600080fd5b505195945050505050565b611665806200046a6000396000f3fe60806040526004361061015f5760003560e01c80639fa12d0b116100c0578063e5285dcc11610074578063ec73295911610059578063ec7329591461051f578063f178e47c14610534578063fc7e9c6f1461055e5761015f565b8063e5285dcc146104cb578063e8295588146104f55761015f565b8063ba70f757116100a5578063ba70f75714610477578063c2b40ae41461048c578063cd87a3b4146104b65761015f565b80639fa12d0b1461038d578063b214faa51461045a5761015f565b80634ecf518b11610117578063839df945116100fc578063839df945146103395780638bca6d161461036357806390eeb02b146103785761015f565b80634ecf518b146102e15780636d9833e31461030f5761015f565b80632b7ac3f3116101485780632b7ac3f31461024c57806338bf282e1461028a578063414a37ba146102cc5761015f565b806317cc915c1461016457806321a0adb6146101a2575b600080fd5b34801561017057600080fd5b5061018e6004803603602081101561018757600080fd5b5035610573565b604080519115158252519081900360200190f35b61024a600480360360e08110156101b857600080fd5b8101906020810181356401000000008111156101d357600080fd5b8201836020820111156101e557600080fd5b8035906020019184600183028401116401000000008311171561020757600080fd5b919350915080359060208101359073ffffffffffffffffffffffffffffffffffffffff604082013581169160608101359091169060808101359060a00135610588565b005b34801561025857600080fd5b506102616109eb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561029657600080fd5b506102ba600480360360408110156102ad57600080fd5b5080359060200135610a07565b60408051918252519081900360200190f35b3480156102d857600080fd5b506102ba610c6b565b3480156102ed57600080fd5b506102f6610c8f565b6040805163ffffffff9092168252519081900360200190f35b34801561031b57600080fd5b5061018e6004803603602081101561033257600080fd5b5035610c9b565b34801561034557600080fd5b5061018e6004803603602081101561035c57600080fd5b5035610d2c565b34801561036f57600080fd5b506102ba610d41565b34801561038457600080fd5b506102f6610d47565b34801561039957600080fd5b5061040a600480360360208110156103b057600080fd5b8101906020810181356401000000008111156103cb57600080fd5b8201836020820111156103dd57600080fd5b803590602001918460208302840111640100000000831117156103ff57600080fd5b509092509050610d53565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561044657818101518382015260200161042e565b505050509050019250505060405180910390f35b61024a6004803603602081101561047057600080fd5b5035610ddb565b34801561048357600080fd5b506102ba610f96565b34801561049857600080fd5b506102ba600480360360208110156104af57600080fd5b5035610fb6565b3480156104c257600080fd5b506102f6610fca565b3480156104d757600080fd5b5061018e600480360360208110156104ee57600080fd5b5035610fcf565b34801561050157600080fd5b506102ba6004803603602081101561051857600080fd5b5035610fe4565b34801561052b57600080fd5b506102ba611002565b34801561054057600080fd5b506102ba6004803603602081101561055757600080fd5b5035611026565b34801561056a57600080fd5b506102f6611033565b606a6020526000908152604090205460ff1681565b60685460ff166105f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560695482111561069257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c7565000000000000604482015290519081900360640190fd5b6000858152606a602052604090205460ff161561071057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e7400604482015290519081900360640190fd5b61071986610c9b565b61078457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f7400000000604482015290519081900360640190fd5b606c546040805160c080820183528982526020820189905273ffffffffffffffffffffffffffffffffffffffff8881168385015287811660608401526080830187905260a0830186905292517f695ef6f9000000000000000000000000000000000000000000000000000000008152929093169263695ef6f9928c928c9290916004810191829160240190849080838360005b8381101561082f578181015183820152602001610817565b505050509050018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050945050505050602060405180830381600087803b15801561088157600080fd5b505af1158015610895573d6000803e3d6000fd5b505050506040513d60208110156108ab57600080fd5b505161091857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c69642077697468647261772070726f6f6600000000000000000000604482015290519081900360640190fd5b6000858152606a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561095b84848484611047565b6040805173ffffffffffffffffffffffffffffffffffffffff8681168252602082018890528183018590529151918516917fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319181900360600190a25050606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050505050565b606c5473ffffffffffffffffffffffffffffffffffffffff1681565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018310610a9757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018210610b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061153e6021913960400191505060405180910390fd5b604080517ff47d33b5000000000000000000000000000000000000000000000000000000008152600481018590526000602482018190528251869391927311735d37f9f4833d6fc6c81634e24d5ce25afe1d9263f47d33b592604480840193829003018186803b158015610b8257600080fd5b505af4158015610b96573d6000803e3d6000fd5b505050506040513d6040811015610bac57600080fd5b50805160209091015190925090507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000184830891507311735d37f9f4833d6fc6c81634e24d5ce25afe1d63f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b158015610c3657600080fd5b505af4158015610c4a573d6000803e3d6000fd5b505050506040513d6040811015610c6057600080fd5b505195945050505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b60005463ffffffff1681565b600081610caa57506000610d27565b60035463ffffffff165b60048163ffffffff1660648110610cc757fe5b0154831415610cda576001915050610d27565b63ffffffff8116610ce9575060645b6003547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091019063ffffffff80831691161415610cb45760009150505b919050565b606b6020526000908152604090205460ff1681565b60695481565b60035463ffffffff1681565b604080518281526020808402820101909152606090828015610d7f578160200160208202803883390190505b50905060005b82811015610dd457610da8848483818110610d9c57fe5b90506020020135610fcf565b15610dcc576001828281518110610dbb57fe5b911515602092830291909101909101525b600101610d85565b5092915050565b60685460ff16610e4c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556000818152606b602052604090205460ff1615610edc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806115936021913960400191505060405180910390fd5b6000610ee782611276565b6000838152606b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559050610f2861147a565b6040805163ffffffff83168152426020820152815184927fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196928290030190a25050606880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60035460009060049063ffffffff1660648110610faf57fe5b0154905090565b60048160648110610fc357fe5b0154905081565b606481565b6000908152606a602052604090205460ff1690565b60028181548110610ff157fe5b600091825260209091200154905081565b7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b60018181548110610ff157fe5b600354640100000000900463ffffffff1681565b341561109e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806115fc6035913960400191505060405180910390fd5b80156110f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061155f6034913960400191505060405180910390fd5b60695460405160009173ffffffffffffffffffffffffffffffffffffffff87169190859003908381818185875af1925050503d8060008114611153576040519150601f19603f3d011682016040523d82523d6000602084013e611158565b606091505b50509050806111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806115b46025913960400191505060405180910390fd5b821561126f5760405173ffffffffffffffffffffffffffffffffffffffff8516908490600081818185875af1925050503d806000811461120e576040519150601f19603f3d011682016040523d82523d6000602084013e611213565b606091505b5050809150508061126f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806115d96023913960400191505060405180910390fd5b5050505050565b60035460008054909163ffffffff640100000000909104811691811660020a168114156112ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806114d7602f913960400191505060405180910390fd5b6003805463ffffffff6401000000008083048216600101909116027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff90911617905582600080805b60005463ffffffff90811690821610156113de576001851661139a5783925060028163ffffffff168154811061136857fe5b906000526020600020015491508360018263ffffffff168154811061138957fe5b6000918252602090912001556113be565b60018163ffffffff16815481106113ad57fe5b906000526020600020015492508391505b6113c88383610a07565b9350600263ffffffff8616049450600101611336565b5060035460649063ffffffff90811660010116600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000169290910663ffffffff90811692909217908190558491600491166064811061143b57fe5b01555050600354640100000000900463ffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01949350505050565b60695434146114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806115066038913960400191505060405180910390fd5b56fe4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656166732063616e206265206164646564506c656173652073656e6420606d697844656e6f6d696e6174696f6e602045544820616c6f6e672077697468207472616e73616374696f6e5f72696768742073686f756c6420626520696e7369646520746865206669656c64526566756e642076616c756520697320737570706f73656420746f206265207a65726f20666f722045544820696e7374616e636554686520636f6d6d69746d656e7420686173206265656e207375626d69747465647061796d656e7420746f205f726563697069656e7420646964206e6f7420676f20746872757061796d656e7420746f205f72656c6179657220646964206e6f7420676f20746872754d6573736167652076616c756520697320737570706f73656420746f206265207a65726f20666f722045544820696e7374616e6365a265627a7a72315820ca2616b9498dffd41c69894465f848b2af3723dc7fdb9b530c2cd783b51e555864736f6c6343000511003264656e6f6d696e6174696f6e2073686f756c642062652067726561746572207468616e2030405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f72696768742073686f756c6420626520696e7369646520746865206669656c645f747265654c6576656c732073686f756c642062652067726561746572207468616e207a65726f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f747265654c6576656c732073686f756c64206265206c657373207468616e203332b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6000000000000000000000000fc0829e792b0d10df95b895d56fad4712da30b250000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000000000000000000014

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.