Contract 0x6ceB170e3ec0fAfaE3Be5A02FEFb81F524FE85C5

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x6ffc8cdda17daa289f8bcd812bf8b9a4a1ec3164a450db2b86535d933d8c0a1b0x6080604027147372021-07-19 18:03:10191 days 9 hrs ago0x027588afac1eedb7d3d329a9b60c530aa3fadbbf IN  Contract Creation0 AVAX0.69403455
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x44ec33f711dbc00d61e34aa8ba5a819daa29497e1deed3740bfca81849da00da100043602022-01-24 18:41:512 days 9 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0x44ec33f711dbc00d61e34aa8ba5a819daa29497e1deed3740bfca81849da00da100043602022-01-24 18:41:512 days 9 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xe8caa854f4aae901a1051b9553871fc8569aee53494.99999999992125 AVAX
0x3a6c605f3438a1b175ecd2a36af765c5eb7560e588fe7f37da4bab3582be6a4299643242022-01-23 20:46:513 days 6 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0x0fc2c1591b037339c431c1d64ddaaeb63fb160412bf23dd1e919af5e66aaeb2c99639012022-01-23 20:32:313 days 7 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0xa4e784c88a312f79c23160c08264b4ea3b92da1c1bfaca9ae6daacae7f40792a99638752022-01-23 20:31:343 days 7 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0xa4e784c88a312f79c23160c08264b4ea3b92da1c1bfaca9ae6daacae7f40792a99638752022-01-23 20:31:343 days 7 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xe8caa854f4aae901a1051b9553871fc8569aee53494.99999999992125 AVAX
0x7eedb371e50e1e088127f86d851478a784ff88c057fae938c588af05d43ddb8599275942022-01-23 0:21:434 days 3 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0x7eedb371e50e1e088127f86d851478a784ff88c057fae938c588af05d43ddb8599275942022-01-23 0:21:434 days 3 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xe20f1ca5155e9fd1f942a27b6a14bf9668016f69494.99999999992125 AVAX
0xbff92a966ffba4a2aecab28f95a4badfac3bf440fd2fea0368f13ae88960a05f98840722022-01-22 0:29:135 days 3 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0x63c31cccbabfae55499fd57f9ff561af553c1ba8888e6ba987098f37bb7c08b198544142022-01-21 7:58:205 days 19 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0xaba340dbfe60a504154fc751474dd8e770a68fb68379673843c94fd3779e853296922012022-01-17 13:32:319 days 14 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0x66f05dee4548cd78a747fac533a1d3f986ffad56465fac3cd610f6ce2f51f53795042532022-01-13 7:03:2013 days 20 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0x66f05dee4548cd78a747fac533a1d3f986ffad56465fac3cd610f6ce2f51f53795042532022-01-13 7:03:2013 days 20 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xf3533eccc051e59f3989bfa7dd13df8f3dae91e8494.99999999992125 AVAX
0xd1bd22e1bb6a8c5543b8f66c5e334887c789df34a59dcf15c839e72362e732b494989352022-01-13 4:06:1513 days 23 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0xd1bd22e1bb6a8c5543b8f66c5e334887c789df34a59dcf15c839e72362e732b494989352022-01-13 4:06:1513 days 23 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xf3533eccc051e59f3989bfa7dd13df8f3dae91e8494.99999999992125 AVAX
0x88570f80b47520edbceb886ba4e26873df6a96da1b314bd2e784d5b332453a8794988822022-01-13 4:04:3513 days 23 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0xa6b651501f62d237afd2049fa970305a66ae5d80e60769ef361bb2f3c21268ea94988722022-01-13 4:04:1513 days 23 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0x99273dc574051038896d4ea1fd1adab00fcfaeb2766a0f992507e3554cfc344c93923202022-01-10 17:12:3416 days 10 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0x99273dc574051038896d4ea1fd1adab00fcfaeb2766a0f992507e3554cfc344c93923202022-01-10 17:12:3416 days 10 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xc37dc9714a191499ae57c50e84272eda440b4d5a494.99999999992125 AVAX
0x4e0696be8e5a76be1c5fb37d3357760fea06f416f56ab5e43a4b77efda3903f493922822022-01-10 17:11:1316 days 10 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0x2065b60af823c9878f6434235462ebb7b91963a2bcaf40bacc4600d7d176eb3f93922482022-01-10 17:10:0416 days 10 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0x2065b60af823c9878f6434235462ebb7b91963a2bcaf40bacc4600d7d176eb3f93922482022-01-10 17:10:0416 days 10 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50xc37dc9714a191499ae57c50e84272eda440b4d5a494.99999999992125 AVAX
0x5faecdbfad3c7fd19da8e282fec7fe0b0f46cd92172cf54defd13b493dbc04d293922272022-01-10 17:09:2116 days 10 hrs ago 0x171fb28ebffcb2737e530e1fd48cb4ef12e5031e 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c5500 AVAX
0xd8b8ecdcc00ed7d91456cf932929483a103706e0a97b1094335371e4156f839390283402022-01-02 6:41:5124 days 21 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x0403665a5e553743d1a4b0c57be556503a920f1e5.00000000007875 AVAX
0xd8b8ecdcc00ed7d91456cf932929483a103706e0a97b1094335371e4156f839390283402022-01-02 6:41:5124 days 21 hrs ago 0x6ceb170e3ec0fafae3be5a02fefb81f524fe85c50x12ed1ac1775922888cf2f136895355c1b6185de6494.99999999992125 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.