Contract
0xc37cF36806dB37822F3Dba635A2446D96e2DCd69
1
Contract Overview
Balance:
6 AVAX
AVAX Value:
$172.50 (@ $28.75/AVAX)
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x520e4af2fc2fdc4e2f5aff497ed3353d44f3a763eaa3eac5b081d4fde5e6aef9 | 0x61010060 | 12740687 | 52 days 6 hrs ago | 0x209484169c126f69db7c83df8d7cd0cb3db22519 | IN | Create: AvacashFinance_AVAX | 0 AVAX | 0.7754094 |
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
AvacashFinance_AVAX
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2022-04-13 */ // AvacashFinance_AVAX.sol Flattened // SPDX-License-Identifier: MIT /* Avacash.Finance: Privacy-focused Investments in Avalanche Visit https://avacash.finance Check Audits in https://docs.avacash.finance/ V.1.1 █████╗ ██╗ ██╗ █████╗ ██████╗ █████╗ ███████╗██╗ ██╗ ██╔══██╗██║ ██║██╔══██╗██╔════╝██╔══██╗██╔════╝██║ ██║ ███████║██║ ██║███████║██║ ███████║███████╗███████║ ██╔══██║╚██╗ ██╔╝██╔══██║██║ ██╔══██║╚════██║██╔══██║ ██║ ██║ ╚████╔╝ ██║ ██║╚██████╗██║ ██║███████║██║ ██║ ╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ███████╗██╗███╗ ██╗ █████╗ ███╗ ██╗ ██████╗███████╗ ██╔════╝██║████╗ ██║██╔══██╗████╗ ██║██╔════╝██╔════╝ █████╗ ██║██╔██╗ ██║███████║██╔██╗ ██║██║ █████╗ ██╔══╝ ██║██║╚██╗██║██╔══██║██║╚██╗██║██║ ██╔══╝ ██║ ██║██║ ╚████║██║ ██║██║ ╚████║╚██████╗███████╗ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝╚══════╝ */ // File: contracts/MerkleTreeWithHistory.sol // https://tornado.cash /* * d888888P dP a88888b. dP * 88 88 d8' `88 88 * 88 .d8888b. 88d888b. 88d888b. .d8888b. .d888b88 .d8888b. 88 .d8888b. .d8888b. 88d888b. * 88 88' `88 88' `88 88' `88 88' `88 88' `88 88' `88 88 88' `88 Y8ooooo. 88' `88 * 88 88. .88 88 88 88 88. .88 88. .88 88. .88 dP Y8. .88 88. .88 88 88 88 * dP `88888P' dP dP dP `88888P8 `88888P8 `88888P' 88 Y88888P' `88888P8 `88888P' dP dP * ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */ pragma solidity ^0.7.0; interface IHasher { function MiMCSponge(uint256 in_xL, uint256 in_xR) external pure returns (uint256 xL, uint256 xR); } contract MerkleTreeWithHistory { uint256 public constant FIELD_SIZE = 21888242871839275222246405745257275088548364400416034343698204186575808495617; uint256 public constant ZERO_VALUE = 21663839004416932945382355908790599225266501822907911457504978515578255421292; // = keccak256("tornado") % FIELD_SIZE IHasher public immutable hasher; uint32 public immutable levels; // the following variables are made public for easier testing and debugging and // are not supposed to be accessed in regular code // filledSubtrees, zeros, and roots could be bytes32[size], but using mappings makes it cheaper because // it removes index range check on every interaction mapping(uint256 => bytes32) public filledSubtrees; mapping(uint256 => bytes32) public zeros; mapping(uint256 => bytes32) public roots; uint32 public constant ROOT_HISTORY_SIZE = 30; uint32 public currentRootIndex = 0; uint32 public nextIndex = 0; constructor(uint32 _levels, IHasher _hasher) { require(_levels > 0, "_levels should be greater than zero"); require(_levels < 32, "_levels should be less than 32"); levels = _levels; hasher = _hasher; bytes32 currentZero = bytes32(ZERO_VALUE); for (uint32 i = 0; i < _levels; i++) { zeros[i] = currentZero; filledSubtrees[i] = currentZero; currentZero = hashLeftRight(_hasher, currentZero, currentZero); } roots[0] = currentZero; } /** @dev Hash 2 tree leaves, returns MiMC(_left, _right) */ function hashLeftRight( IHasher _hasher, 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 _nextIndex = nextIndex; require(_nextIndex != uint32(2)**levels, "Merkle tree is full. No more leaves can be added"); uint32 currentIndex = _nextIndex; 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(hasher, left, right); currentIndex /= 2; } uint32 newRootIndex = (currentRootIndex + 1) % ROOT_HISTORY_SIZE; currentRootIndex = newRootIndex; roots[newRootIndex] = currentLevelHash; nextIndex = _nextIndex + 1; return _nextIndex; } /** @dev Whether the root is present in the root history */ function isKnownRoot(bytes32 _root) public view returns (bool) { if (_root == 0) { return false; } uint32 _currentRootIndex = currentRootIndex; uint32 i = _currentRootIndex; do { if (_root == roots[i]) { return true; } if (i == 0) { i = ROOT_HISTORY_SIZE; } i--; } while (i != _currentRootIndex); return false; } /** @dev Returns the last root */ function getLastRoot() public view returns (bytes32) { return roots[currentRootIndex]; } } // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol pragma solidity >=0.6.0 <0.8.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]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being 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 percentage 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. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @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(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: contracts/Tornado.sol // https://tornado.cash /* * d888888P dP a88888b. dP * 88 88 d8' `88 88 * 88 .d8888b. 88d888b. 88d888b. .d8888b. .d888b88 .d8888b. 88 .d8888b. .d8888b. 88d888b. * 88 88' `88 88' `88 88' `88 88' `88 88' `88 88' `88 88 88' `88 Y8ooooo. 88' `88 * 88 88. .88 88 88 88 88. .88 88. .88 88. .88 dP Y8. .88 88. .88 88 88 88 * dP `88888P' dP dP dP `88888P8 `88888P8 `88888P' 88 Y88888P' `88888P8 `88888P' dP dP * ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo */ pragma solidity ^0.7.0; interface IVerifier { function verifyProof(bytes memory _proof, uint256[6] memory _input) external returns (bool); } abstract contract Tornado is MerkleTreeWithHistory, ReentrancyGuard { IVerifier public immutable verifier; uint256 public immutable denomination; mapping(bytes32 => bool) public nullifierHashes; // we store all commitments just to prevent accidental deposits with the same commitment mapping(bytes32 => bool) public commitments; 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 _hasher the address of MiMC hash contract @param _denomination transfer amount for each deposit @param _merkleTreeHeight the height of deposits' Merkle Tree */ constructor( IVerifier _verifier, IHasher _hasher, uint256 _denomination, uint32 _merkleTreeHeight ) MerkleTreeWithHistory(_merkleTreeHeight, _hasher) { 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 virtual; /** @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 virtual; /** @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 (uint256 i = 0; i < _nullifierHashes.length; i++) { if (isSpent(_nullifierHashes[i])) { spent[i] = true; } } } } // File: contracts/libraries/SafeMathUni.sol // Extracted from https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/libraries/SafeMath.sol //https://ethereumdev.io/using-safe-math-library-to-prevent-from-overflows/ // Using GPL-3.0 License pragma solidity ^0.7.0; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMathUni { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } } // File: contracts/AvacashFlashLoanProvider.sol // https://avacash.finance /* █████╗ ██╗ ██╗ █████╗ ██████╗ █████╗ ███████╗██╗ ██╗ ██╔══██╗██║ ██║██╔══██╗██╔════╝██╔══██╗██╔════╝██║ ██║ ███████║██║ ██║███████║██║ ███████║███████╗███████║ ██╔══██║╚██╗ ██╔╝██╔══██║██║ ██╔══██║╚════██║██╔══██║ ██║ ██║ ╚████╔╝ ██║ ██║╚██████╗██║ ██║███████║██║ ██║ ╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ███████╗██╗███╗ ██╗ █████╗ ███╗ ██╗ ██████╗███████╗ ██╔════╝██║████╗ ██║██╔══██╗████╗ ██║██╔════╝██╔════╝ █████╗ ██║██╔██╗ ██║███████║██╔██╗ ██║██║ █████╗ ██╔══╝ ██║██║╚██╗██║██╔══██║██║╚██╗██║██║ ██╔══╝ ██║ ██║██║ ╚████║██║ ██║██║ ╚████║╚██████╗███████╗ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝╚══════╝ */ pragma solidity ^0.7.0; interface FlashLoanBorrower { function avacashFlashLoanCall(bytes calldata _data) external payable returns (bool); } /** @title A contact that holds AVAX and provides flash loans in a safe way @author avacash.finance */ contract AvacashFlashLoanProvider is ReentrancyGuard { using SafeMathUni for uint; address public flashLoanFeeReceiver; uint public flashLoanFee = 3; event FlashLoan(address _recipient, uint256 _amount, bytes _data); event FlashLoanFeeChanged(uint _newFlashLoanFee); event FlashLoanFeeReceiverChanged(address _newFlashLoanFeeReceiver); /** @dev The constructor @param _flashLoanFeeReceiver the initial address that will receive the fees for the usage of flash loans */ constructor(address _flashLoanFeeReceiver) public { require(_flashLoanFeeReceiver!=address(0), "feeReceiver should not be the Zero Address"); flashLoanFeeReceiver = _flashLoanFeeReceiver; } /** @dev Function that changes the flashLoanFeeReceiver @notice Can only be called by the current flashLoanFeeReceiver @param _newFeeReceiver the new address that will receive the fees for the usage of flash loans */ function changeFeeReceiver(address _newFeeReceiver) external nonReentrant returns (bool){ require(msg.sender == flashLoanFeeReceiver, "Only current flashLoanFeeReceiver can change this value."); require(_newFeeReceiver!= address(0), "New fee receiver should not be address 0"); flashLoanFeeReceiver = _newFeeReceiver; emit FlashLoanFeeReceiverChanged(flashLoanFeeReceiver); return true; } /** @dev Function that changes the flashLoanFeeReceiver @notice Can only be called by the current flashLoanFeeReceiver @param _newFlashLoanFee the new address that will receive the fees for the usage of flash loans */ function changeFlashLoanFee(uint _newFlashLoanFee) external nonReentrant returns (bool){ require(msg.sender == flashLoanFeeReceiver, "Only current flashLoanFeeReceiver can change this value."); flashLoanFee = _newFlashLoanFee; emit FlashLoanFeeChanged(flashLoanFee); return true; } /** @dev Function that verifies if the functions was called by a contract @param _addr address that needs to be verified @return bool : true if _addr is a contract, false if not */ function isContract(address _addr) private view returns (bool){ uint32 size; assembly { size := extcodesize(_addr) } return (size > 0); } /** @dev Function to ask AVAX as a flashloan @param _recipient address of the flashloan recipient, that needs to implement FlashLoanBorrower interface @param _amount in AVAX of the flashloan @param _data any data that needs to be sent to the FlashLoanBorrower @return bool: true if successfull */ function flashLoan( address _recipient, uint256 _amount, bytes calldata _data) external nonReentrant returns (bool){ // 0. Check correct call. require(_amount > 0, "flashLoan(): Please select an positive flashloan _amount."); require(isContract(_recipient), "flashLoan(): _recipient should be a contract."); // 1. Check this contact's balance uint256 _initialBalance = address(this).balance; require(_initialBalance >= _amount, "flashLoan(): Not enough funds for the flashloan."); FlashLoanBorrower _borrower = FlashLoanBorrower(_recipient); // 2. Lend the money: (bool success1 ) = _borrower.avacashFlashLoanCall{value: _amount}(_data); require(success1, "flashLoan(): flashloan to _recipient did not go through."); // 3. Calculate _feeAdjusted // fees are in deci-bps, i.e. 1/10th bps https://www.investopedia.com/terms/b/basispoint.asp // if flashLoanFee = 3, means 0.003% uint256 _feeAdjusted = _amount.mul(flashLoanFee); require(address(this).balance.mul(100000) >= _initialBalance.mul(100000).add(_feeAdjusted) , "flashLoan(): Not enough fee paid"); // 4. Send fee to feeReceiver. if (_feeAdjusted > 0 ) { (bool success2, ) = flashLoanFeeReceiver.call{value: address(this).balance.sub(_initialBalance)}(""); require(success2, "flashLoan(): payment to feeReceiver did not go through"); } // 5. Check the final balance. require(address(this).balance == _initialBalance, "flashLoan(): Final balance should be equal to the initial balance."); emit FlashLoan(_recipient, _amount,_data); return true; } /** @dev Payable function to receive back the flashloan @notice Function that needs to be called by the FlashLoanBorrower in order to give back the flashloan + fees @return bool: true if successfull */ function payBack() external payable returns (bool){ return true; } } // File: contracts/AvacashFinance_AVAX.sol // https://avacash.finance /* █████╗ ██╗ ██╗ █████╗ ██████╗ █████╗ ███████╗██╗ ██╗ ██╔══██╗██║ ██║██╔══██╗██╔════╝██╔══██╗██╔════╝██║ ██║ ███████║██║ ██║███████║██║ ███████║███████╗███████║ ██╔══██║╚██╗ ██╔╝██╔══██║██║ ██╔══██║╚════██║██╔══██║ ██║ ██║ ╚████╔╝ ██║ ██║╚██████╗██║ ██║███████║██║ ██║ ╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ███████╗██╗███╗ ██╗ █████╗ ███╗ ██╗ ██████╗███████╗ ██╔════╝██║████╗ ██║██╔══██╗████╗ ██║██╔════╝██╔════╝ █████╗ ██║██╔██╗ ██║███████║██╔██╗ ██║██║ █████╗ ██╔══╝ ██║██║╚██╗██║██╔══██║██║╚██╗██║██║ ██╔══╝ ██║ ██║██║ ╚████║██║ ██║██║ ╚████║╚██████╗███████╗ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝╚══════╝ */ pragma solidity ^0.7.0; contract AvacashFinance_AVAX is Tornado, AvacashFlashLoanProvider { constructor( IVerifier _verifier, IHasher _hasher, uint256 _denomination, uint32 _merkleTreeHeight, address _flashLoanFeeReceiver ) Tornado(_verifier, _hasher, _denomination, _merkleTreeHeight) AvacashFlashLoanProvider(_flashLoanFeeReceiver) public {} function _processDeposit() internal override { require(msg.value == denomination, "Please send `mixDenomination` ETH along with transaction"); } function _processWithdraw( address payable _recipient, address payable _relayer, uint256 _fee, uint256 _refund ) internal override { // 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"); } } }
[{"inputs":[{"internalType":"contract IVerifier","name":"_verifier","type":"address"},{"internalType":"contract IHasher","name":"_hasher","type":"address"},{"internalType":"uint256","name":"_denomination","type":"uint256"},{"internalType":"uint32","name":"_merkleTreeHeight","type":"uint32"},{"internalType":"address","name":"_flashLoanFeeReceiver","type":"address"}],"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":"_recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"}],"name":"FlashLoan","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_newFlashLoanFee","type":"uint256"}],"name":"FlashLoanFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newFlashLoanFeeReceiver","type":"address"}],"name":"FlashLoanFeeReceiverChanged","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"},{"inputs":[],"name":"FIELD_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROOT_HISTORY_SIZE","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newFeeReceiver","type":"address"}],"name":"changeFeeReceiver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFlashLoanFee","type":"uint256"}],"name":"changeFlashLoanFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"commitments","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentRootIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"denomination","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_commitment","type":"bytes32"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"filledSubtrees","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"flashLoan","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flashLoanFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flashLoanFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IHasher","name":"_hasher","type":"address"},{"internalType":"bytes32","name":"_left","type":"bytes32"},{"internalType":"bytes32","name":"_right","type":"bytes32"}],"name":"hashLeftRight","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"hasher","outputs":[{"internalType":"contract IHasher","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"isKnownRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_nullifierHash","type":"bytes32"}],"name":"isSpent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_nullifierHashes","type":"bytes32[]"}],"name":"isSpentArray","outputs":[{"internalType":"bool[]","name":"spent","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"levels","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"nullifierHashes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payBack","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"roots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"verifier","outputs":[{"internalType":"contract IVerifier","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"zeros","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
610100604052600380546001600160401b03191681556008553480156200002557600080fd5b50604051620023cb380380620023cb833981810160405260a08110156200004b57600080fd5b508051602082015160408301516060840151608090940151929391929091908085858585808363ffffffff8216620000b55760405162461bcd60e51b8152600401808060200182810382526023815260200180620023a86023913960400191505060405180910390fd5b60208263ffffffff161062000111576040805162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e2033320000604482015290519081900360640190fd5b6001600160e01b031960e083901b1660a0526001600160601b0319606082901b166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff161015620001aa5763ffffffff811660009081526001602090815260408083208590559082905290208290556200019f838380620002a6565b915060010162000159565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5550506001600455816200021b5760405162461bcd60e51b8152600401808060200182810382526025815260200180620023186025913960400191505060405180910390fd5b5060609290921b6001600160601b03191660c0525060e0526001600160a01b0381166200027a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806200233d602a913960400191505060405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055506200047e9350505050565b60006000805160206200238883398151915283106200030c576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b6000805160206200238883398151915282106200035b5760405162461bcd60e51b8152600401808060200182810382526021815260200180620023676021913960400191505060405180910390fd5b6040805163f47d33b560e01b8152600481018590526000602482018190528251869391926001600160a01b0389169263f47d33b592604480840193829003018186803b158015620003ab57600080fd5b505afa158015620003c0573d6000803e3d6000fd5b505050506040513d6040811015620003d757600080fd5b5080516020909101519092509050600080516020620023888339815191528483089150856001600160a01b031663f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b1580156200044657600080fd5b505afa1580156200045b573d6000803e3d6000fd5b505050506040513d60408110156200047257600080fd5b50519695505050505050565b60805160601c60a05160e01c60c05160601c60e051611e38620004e06000398061073c5280610d695280611661528061194e52508061086f5280610a6a525080610b8052806117b6528061182252508061158d52806118aa5250611e386000f3fe60806040526004361061019c5760003560e01c806390eeb02b116100ec578063e0232b421161008a578063ec73295911610064578063ec7329591461066c578063ed33639f14610681578063f178e47c14610696578063fc7e9c6f146106c05761019c565b8063e0232b4214610588578063e5285dcc14610618578063e8295588146106425761019c565b8063b214faa5116100c6578063b214faa514610517578063ba70f75714610534578063c2b40ae414610549578063cd87a3b4146105735761019c565b806390eeb02b1461042257806394829c98146104375780639fa12d0b1461044c5761019c565b80634e22e074116101595780637c08b964116101335780637c08b96414610371578063839df945146103a45780638bca6d16146103ce5780638ea3099e146103e35761019c565b80634e22e074146102ef5780634ecf518b146103195780636d9833e3146103475761019c565b8063019f64cc146101a157806317cc915c146101bd57806321a0adb6146101e75780632b7ac3f314610282578063414a37ba146102b35780634847cdc8146102da575b600080fd5b6101a96106d5565b604080519115158252519081900360200190f35b3480156101c957600080fd5b506101a9600480360360208110156101e057600080fd5b50356106da565b610280600480360360e08110156101fd57600080fd5b810190602081018135600160201b81111561021757600080fd5b82018360208201111561022957600080fd5b803590602001918460018302840111600160201b8311171561024a57600080fd5b91935091508035906020810135906001600160a01b03604082013581169160608101359091169060808101359060a001356106ef565b005b34801561028e57600080fd5b50610297610a68565b604080516001600160a01b039092168252519081900360200190f35b3480156102bf57600080fd5b506102c8610a8c565b60408051918252519081900360200190f35b3480156102e657600080fd5b506102c8610a9e565b3480156102fb57600080fd5b506101a96004803603602081101561031257600080fd5b5035610aa4565b34801561032557600080fd5b5061032e610b7e565b6040805163ffffffff9092168252519081900360200190f35b34801561035357600080fd5b506101a96004803603602081101561036a57600080fd5b5035610ba2565b34801561037d57600080fd5b506101a96004803603602081101561039457600080fd5b50356001600160a01b0316610c14565b3480156103b057600080fd5b506101a9600480360360208110156103c757600080fd5b5035610d52565b3480156103da57600080fd5b506102c8610d67565b3480156103ef57600080fd5b506102c86004803603606081101561040657600080fd5b506001600160a01b038135169060208101359060400135610d8b565b34801561042e57600080fd5b5061032e610f57565b34801561044357600080fd5b50610297610f63565b34801561045857600080fd5b506104c76004803603602081101561046f57600080fd5b810190602081018135600160201b81111561048957600080fd5b82018360208201111561049b57600080fd5b803590602001918460208302840111600160201b831117156104bc57600080fd5b509092509050610f72565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105035781810151838201526020016104eb565b505050509050019250505060405180910390f35b6102806004803603602081101561052d57600080fd5b5035611011565b34801561054057600080fd5b506102c8611120565b34801561055557600080fd5b506102c86004803603602081101561056c57600080fd5b503561113b565b34801561057f57600080fd5b5061032e61114d565b34801561059457600080fd5b506101a9600480360360608110156105ab57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156105da57600080fd5b8201836020820111156105ec57600080fd5b803590602001918460018302840111600160201b8311171561060d57600080fd5b509092509050611152565b34801561062457600080fd5b506101a96004803603602081101561063b57600080fd5b5035611540565b34801561064e57600080fd5b506102c86004803603602081101561066557600080fd5b5035611555565b34801561067857600080fd5b506102c8611567565b34801561068d57600080fd5b5061029761158b565b3480156106a257600080fd5b506102c8600480360360208110156106b957600080fd5b50356115af565b3480156106cc57600080fd5b5061032e6115c1565b600190565b60056020526000908152604090205460ff1681565b60026004541415610735576040805162461bcd60e51b815260206004820152601f6024820152600080516020611ac1833981519152604482015290519081900360640190fd5b60026004557f00000000000000000000000000000000000000000000000000000000000000008211156107af576040805162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c7565000000000000604482015290519081900360640190fd5b60008581526005602052604090205460ff1615610813576040805162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e7400604482015290519081900360640190fd5b61081c86610ba2565b61086d576040805162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f7400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663695ef6f989896040518060c001604052808b60001c81526020018a60001c8152602001896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152506040518463ffffffff1660e01b8152600401808060200183600660200280838360005b8381101561091e578181015183820152602001610906565b505050509050018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050945050505050602060405180830381600087803b15801561097057600080fd5b505af1158015610984573d6000803e3d6000fd5b505050506040513d602081101561099a57600080fd5b50516109e6576040805162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b604482015290519081900360640190fd5b6000858152600560205260409020805460ff19166001179055610a0b848484846115d4565b604080516001600160a01b038681168252602082018890528183018590529151918516917fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319181900360600190a250506001600455505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080516020611c2b83398151915281565b60085481565b600060026004541415610aec576040805162461bcd60e51b815260206004820152601f6024820152600080516020611ac1833981519152604482015290519081900360640190fd5b60026004556007546001600160a01b03163314610b3a5760405162461bcd60e51b8152600401808060200182810382526038815260200180611c4b6038913960400191505060405180910390fd5b60088290556040805183815290517f615aafc8dd47d9882eabcfd0e1a08060b087e4402d36ccbe79fd149b7bc099689181900360200190a150600180600455919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081610bb157506000610c0f565b60035463ffffffff16805b63ffffffff8116600090815260026020526040902054841415610be457600192505050610c0f565b63ffffffff8116610bf35750601e5b6000190163ffffffff8082169083161415610bbc576000925050505b919050565b600060026004541415610c5c576040805162461bcd60e51b815260206004820152601f6024820152600080516020611ac1833981519152604482015290519081900360640190fd5b60026004556007546001600160a01b03163314610caa5760405162461bcd60e51b8152600401808060200182810382526038815260200180611c4b6038913960400191505060405180910390fd5b6001600160a01b038216610cef5760405162461bcd60e51b8152600401808060200182810382526028815260200180611ae16028913960400191505060405180910390fd5b600780546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517f52137cae927b3fe3b3b69be747601190f8c6d08cee6956739e35c4a1bed38413916020908290030190a150600180600455919050565b60066020526000908152604090205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600080516020611c2b8339815191528310610def576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b600080516020611c2b8339815191528210610e3b5760405162461bcd60e51b8152600401808060200182810382526021815260200180611ba66021913960400191505060405180910390fd5b6040805163f47d33b560e01b8152600481018590526000602482018190528251869391926001600160a01b0389169263f47d33b592604480840193829003018186803b158015610e8a57600080fd5b505afa158015610e9e573d6000803e3d6000fd5b505050506040513d6040811015610eb457600080fd5b5080516020909101519092509050600080516020611c2b8339815191528483089150856001600160a01b031663f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b158015610f2157600080fd5b505afa158015610f35573d6000803e3d6000fd5b505050506040513d6040811015610f4b57600080fd5b50519695505050505050565b60035463ffffffff1681565b6007546001600160a01b031681565b60608167ffffffffffffffff81118015610f8b57600080fd5b50604051908082528060200260200182016040528015610fb5578160200160208202803683370190505b50905060005b8281101561100a57610fde848483818110610fd257fe5b90506020020135611540565b15611002576001828281518110610ff157fe5b911515602092830291909101909101525b600101610fbb565b5092915050565b60026004541415611057576040805162461bcd60e51b815260206004820152601f6024820152600080516020611ac1833981519152604482015290519081900360640190fd5b600260045560008181526006602052604090205460ff16156110aa5760405162461bcd60e51b8152600401808060200182810382526021815260200180611cf36021913960400191505060405180910390fd5b60006110b58261179e565b6000838152600660205260409020805460ff1916600117905590506110d861194c565b6040805163ffffffff83168152426020820152815184927fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196928290030190a250506001600455565b60035463ffffffff1660009081526002602052604090205490565b60026020526000908152604090205481565b601e81565b60006002600454141561119a576040805162461bcd60e51b815260206004820152601f6024820152600080516020611ac1833981519152604482015290519081900360640190fd5b6002600455836111db5760405162461bcd60e51b8152600401808060200182810382526039815260200180611c836039913960400191505060405180910390fd5b6111e4856119ac565b61121f5760405162461bcd60e51b815260040180806020018281038252602d815260200180611b41602d913960400191505060405180910390fd5b478481101561125f5760405162461bcd60e51b8152600401808060200182810382526030815260200180611bc76030913960400191505060405180910390fd5b6040516332e4be4f60e21b81526020600482019081526024820185905287916000916001600160a01b0384169163cb92f93c918a918a918a918190604401848480828437600083820152604051601f909101601f19169092019550602094509092505050808303818588803b1580156112d757600080fd5b505af11580156112eb573d6000803e3d6000fd5b50505050506040513d602081101561130257600080fd5b50519050806113425760405162461bcd60e51b8152600401808060200182810382526038815260200180611b096038913960400191505060405180910390fd5b6000611359600854896119b890919063ffffffff16565b90506113728161136c86620186a06119b8565b90611a21565b61137f47620186a06119b8565b10156113d2576040805162461bcd60e51b815260206004820181905260248201527f666c6173684c6f616e28293a204e6f7420656e6f756768206665652070616964604482015290519081900360640190fd5b8015611474576007546000906001600160a01b03166113f14787611a70565b604051600081818185875af1925050503d806000811461142d576040519150601f19603f3d011682016040523d82523d6000602084013e611432565b606091505b50509050806114725760405162461bcd60e51b8152600401808060200182810382526037815260200180611cbc6037913960400191505060405180910390fd5b505b8347146114b25760405162461bcd60e51b8152600401808060200182810382526042815260200180611d5c6042913960600191505060405180910390fd5b7f5d96b1c1e2770f4b3966db06a5d8a9252c85a74d9bd6e1c01abc12db8af0f60f8989898960405180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a160019450505050506001600455949350505050565b60009081526005602052604090205460ff1690565b60016020526000908152604090205481565b7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006020819052908152604090205481565b600354600160201b900463ffffffff1681565b34156116115760405162461bcd60e51b8152600401808060200182810382526035815260200180611dce6035913960400191505060405180910390fd5b801561164e5760405162461bcd60e51b8152600401808060200182810382526034815260200180611bf76034913960400191505060405180910390fd5b6040516000906001600160a01b038616907f0000000000000000000000000000000000000000000000000000000000000000859003908381818185875af1925050503d80600081146116bc576040519150601f19603f3d011682016040523d82523d6000602084013e6116c1565b606091505b50509050806117015760405162461bcd60e51b8152600401808060200182810382526025815260200180611d146025913960400191505060405180910390fd5b8215611797576040516001600160a01b038516908490600081818185875af1925050503d8060008114611750576040519150601f19603f3d011682016040523d82523d6000602084013e611755565b606091505b505080915050806117975760405162461bcd60e51b8152600401808060200182810382526023815260200180611d396023913960400191505060405180910390fd5b5050505050565b60035460009063ffffffff600160201b9091048116907f0000000000000000000000000000000000000000000000000000000000000000811660020a168114156118195760405162461bcd60e51b8152600401808060200182810382526030815260200180611d9e6030913960400191505060405180910390fd5b8083600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff1610156118e657600185166118895763ffffffff81166000908152600160209081526040808320549183905290912085905584935091506118a5565b63ffffffff811660009081526020819052604090205492508391505b6118d07f00000000000000000000000000000000000000000000000000000000000000008484610d8b565b9350600263ffffffff8616049450600101611820565b505060038054601e63ffffffff8083166001908101821692909206811663ffffffff199093168317845560009283526002602052604090922094909455815493860116600160201b0267ffffffff00000000199093169290921790915550909392505050565b7f000000000000000000000000000000000000000000000000000000000000000034146119aa5760405162461bcd60e51b8152600401808060200182810382526038815260200180611b6e6038913960400191505060405180910390fd5b565b3b63ffffffff16151590565b60008115806119d3575050808202828282816119d057fe5b04145b611a1b576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b80820182811015611a1b576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115611a1b576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004e6577206665652072656365697665722073686f756c64206e6f7420626520616464726573732030666c6173684c6f616e28293a20666c6173686c6f616e20746f205f726563697069656e7420646964206e6f7420676f207468726f7567682e666c6173684c6f616e28293a205f726563697069656e742073686f756c64206265206120636f6e74726163742e506c656173652073656e6420606d697844656e6f6d696e6174696f6e602045544820616c6f6e672077697468207472616e73616374696f6e5f72696768742073686f756c6420626520696e7369646520746865206669656c64666c6173684c6f616e28293a204e6f7420656e6f7567682066756e647320666f722074686520666c6173686c6f616e2e526566756e642076616c756520697320737570706f73656420746f206265207a65726f20666f722045544820696e7374616e636530644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000014f6e6c792063757272656e7420666c6173684c6f616e46656552656365697665722063616e206368616e676520746869732076616c75652e666c6173684c6f616e28293a20506c656173652073656c65637420616e20706f73697469766520666c6173686c6f616e205f616d6f756e742e666c6173684c6f616e28293a207061796d656e7420746f2066656552656365697665722020646964206e6f7420676f207468726f75676854686520636f6d6d69746d656e7420686173206265656e207375626d69747465647061796d656e7420746f205f726563697069656e7420646964206e6f7420676f20746872757061796d656e7420746f205f72656c6179657220646964206e6f7420676f2074687275666c6173684c6f616e28293a2046696e616c2062616c616e63652073686f756c6420626520657175616c20746f2074686520696e697469616c2062616c616e63652e4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c65617665732063616e2062652061646465644d6573736167652076616c756520697320737570706f73656420746f206265207a65726f20666f722045544820696e7374616e6365a2646970667358221220b0aa0aa75587c73cbfb1e9ae1943410b96283fc5128d942b7ef158685b7883a764736f6c6343000706003364656e6f6d696e6174696f6e2073686f756c642062652067726561746572207468616e203066656552656365697665722073686f756c64206e6f7420626520746865205a65726f20416464726573735f72696768742073686f756c6420626520696e7369646520746865206669656c6430644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f6c6576656c732073686f756c642062652067726561746572207468616e207a65726f000000000000000000000000576a1907479df42bf4756f345b43e810a7947dd3000000000000000000000000cf940b652181e684457e66db7a6c134cbbaa329d0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000005d60dbb646b1f578cdc6c8bcb559ef559a7231e6
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000576a1907479df42bf4756F345B43e810a7947dd3000000000000000000000000cf940b652181e684457e66dB7A6c134cBBAa329D0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000005d60dbb646b1f578cdc6c8bcb559ef559a7231e6
-----Decoded View---------------
Arg [0] : _verifier (address): 0x576a1907479df42bf4756f345b43e810a7947dd3
Arg [1] : _hasher (address): 0xcf940b652181e684457e66db7a6c134cbbaa329d
Arg [2] : _denomination (uint256): 1000000000000000000
Arg [3] : _merkleTreeHeight (uint32): 20
Arg [4] : _flashLoanFeeReceiver (address): 0x5d60dbb646b1f578cdc6c8bcb559ef559a7231e6
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000576a1907479df42bf4756F345B43e810a7947dd3
Arg [1] : 000000000000000000000000cf940b652181e684457e66dB7A6c134cBBAa329D
Arg [2] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [4] : 0000000000000000000000005d60dbb646b1f578cdc6c8bcb559ef559a7231e6
Deployed ByteCode Sourcemap
24755:1207:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22730:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;10448:47;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10448:47:0;;:::i;12528:878::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12528:878:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12528:878:0;;;;;;;;;;;;-1:-1:-1;12528:878:0;-1:-1:-1;12528:878:0;;;;;;;;-1:-1:-1;;;;;12528:878:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10364:35;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;10364:35:0;;;;;;;;;;;;;;3066:114;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18312:28;;;;;;;;;;;;;:::i;19801:304::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19801:304:0;;:::i;3381:30::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6053:410;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6053:410:0;;:::i;19140:416::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19140:416:0;-1:-1:-1;;;;;19140:416:0;;:::i;10592:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10592:43:0;;:::i;10404:37::-;;;;;;;;;;;;;:::i;4563:493::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4563:493:0;;;;;;;;;;;;;:::i;3914:34::-;;;;;;;;;;;;;:::i;18272:35::-;;;;;;;;;;;;;:::i;13861:305::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13861:305:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13861:305:0;;;;;;;;;;-1:-1:-1;13861:305:0;;-1:-1:-1;13861:305:0;-1:-1:-1;13861:305:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11679:332;;;;;;;;;;;;;;;;-1:-1:-1;11679:332:0;;:::i;6514:96::-;;;;;;;;;;;;;:::i;3819:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3819:40:0;;:::i;3864:45::-;;;;;;;;;;;;;:::i;20804:1697::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20804:1697:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20804:1697:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20804:1697:0;;;;;;;;;;-1:-1:-1;20804:1697:0;;-1:-1:-1;20804:1697:0;-1:-1:-1;20804:1697:0;:::i;13678:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13678:119:0;;:::i;3774:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3774:40:0;;:::i;3185:114::-;;;;;;;;;;;;;:::i;3345:31::-;;;;;;;;;;;;;:::i;3720:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3720:49:0;;:::i;3953:27::-;;;;;;;;;;;;;:::i;22730:74::-;22794:4;22730:74;:::o;10448:47::-;;;;;;;;;;;;;;;:::o;12528:878::-;8369:1;8975:7;;:19;;8967:63;;;;;-1:-1:-1;;;8967:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8967:63:0;;;;;;;;;;;;;;;8369:1;9108:7;:18;12786:12:::1;12778:20:::0;::::1;;12770:59;;;::::0;;-1:-1:-1;;;12770:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12845:31;::::0;;;:15:::1;:31;::::0;;;;;::::1;;12844:32;12836:76;;;::::0;;-1:-1:-1;;;12836:76:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12927:18;12939:5;12927:11;:18::i;:::-;12919:59;;;::::0;;-1:-1:-1;;;12919:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13034:8;-1:-1:-1::0;;;;;13034:20:0::1;;13065:6;;13034:153;;;;;;;;13091:5;13083:14;;13034:153;;;;13107:14;13099:23;;13034:153;;;;13132:10;-1:-1:-1::0;;;;;13124:19:0::1;13034:153;;;;13153:8;-1:-1:-1::0;;;;;13145:17:0::1;13034:153;;;;13164:4;13034:153;;;;13170:7;13034:153;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13034:153:0;13018:209:::1;;;::::0;;-1:-1:-1;;;13018:209:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;13018:209:0;;;;;;;;;;;;;::::1;;13236:31;::::0;;;:15:::1;:31;::::0;;;;:38;;-1:-1:-1;;13236:38:0::1;13270:4;13236:38;::::0;;13281:53:::1;13298:10:::0;13310:8;13320:4;13326:7;13281:16:::1;:53::i;:::-;13346:54;::::0;;-1:-1:-1;;;;;13346:54:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;8325:1:0;9287:7;:22;-1:-1:-1;;;;;;12528:878:0:o;10364:35::-;;;:::o;3066:114::-;-1:-1:-1;;;;;;;;;;;3066:114:0;:::o;18312:28::-;;;;:::o;19801:304::-;19883:4;8369:1;8975:7;;:19;;8967:63;;;;;-1:-1:-1;;;8967:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8967:63:0;;;;;;;;;;;;;;;8369:1;9108:7;:18;19917:20:::1;::::0;-1:-1:-1;;;;;19917:20:0::1;19903:10;:34;19895:103;;;;-1:-1:-1::0;;;19895:103:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20005:12;:31:::0;;;20048:33:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;20095:4:0::1;8325:1:::0;9287:7;:22;19801:304;;-1:-1:-1;19801:304:0:o;3381:30::-;;;:::o;6053:410::-;6110:4;6127:10;6123:45;;-1:-1:-1;6155:5:0;6148:12;;6123:45;6201:16;;;;;6259:180;6284:8;;;;;;;:5;:8;;;;;;6275:17;;6271:55;;;6312:4;6305:11;;;;;;6271:55;6338:6;;;6334:54;;-1:-1:-1;3907:2:0;6334:54;-1:-1:-1;;6396:3:0;6415:22;;;;;;;;;6259:180;;6452:5;6445:12;;;;6053:410;;;;:::o;19140:416::-;19223:4;8369:1;8975:7;;:19;;8967:63;;;;;-1:-1:-1;;;8967:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8967:63:0;;;;;;;;;;;;;;;8369:1;9108:7;:18;19257:20:::1;::::0;-1:-1:-1;;;;;19257:20:0::1;19243:10;:34;19235:103;;;;-1:-1:-1::0;;;19235:103:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;19353:28:0;::::1;19345:81;;;;-1:-1:-1::0;;;19345:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19433:20;:38:::0;;-1:-1:-1;;;;;;19433:38:0::1;-1:-1:-1::0;;;;;19433:38:0;;::::1;::::0;;;::::1;::::0;;;;19483:49:::1;::::0;;19511:20;;;::::1;19483:49:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;-1:-1:-1::0;19546:4:0::1;8325:1:::0;9287:7;:22;19140:416;;-1:-1:-1;19140:416:0:o;10592:43::-;;;;;;;;;;;;;;;:::o;10404:37::-;;;:::o;4563:493::-;4675:7;-1:-1:-1;;;;;;;;;;;4699:27:0;;4691:72;;;;;-1:-1:-1;;;4691:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4778:28:0;;4770:74;;;;-1:-1:-1;;;4770:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4913:24;;;-1:-1:-1;;;4913:24:0;;;;;;;;4851:9;4913:24;;;;;;;;4871:5;;4851:9;;-1:-1:-1;;;;;4913:18:0;;;;;:24;;;;;;;;;;:18;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4913:24:0;;;;;;;;;-1:-1:-1;4913:24:0;-1:-1:-1;;;;;;;;;;;;4966:6:0;4955:1;4948:38;4944:42;;5002:7;-1:-1:-1;;;;;5002:18:0;;5021:1;5024;5002:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5002:24:0;;4563:493;-1:-1:-1;;;;;;4563:493:0:o;3914:34::-;;;;;;:::o;18272:35::-;;;-1:-1:-1;;;;;18272:35:0;;:::o;13861:305::-;13943:19;13990:16;13979:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13979:35:0;;13971:43;;14026:9;14021:140;14041:27;;;14021:140;;;14088:28;14096:16;;14113:1;14096:19;;;;;;;;;;;;;14088:7;:28::i;:::-;14084:70;;;14140:4;14129:5;14135:1;14129:8;;;;;;;;:15;;;:8;;;;;;;;;;;:15;14084:70;14070:3;;14021:140;;;;13861:305;;;;:::o;11679:332::-;8369:1;8975:7;;:19;;8967:63;;;;;-1:-1:-1;;;8967:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8967:63:0;;;;;;;;;;;;;;;8369:1;9108:7;:18;11763:24:::1;::::0;;;:11:::1;:24;::::0;;;;;::::1;;11762:25;11754:71;;;;-1:-1:-1::0;;;11754:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11834:20;11857;11865:11;11857:7;:20::i;:::-;11884:24;::::0;;;:11:::1;:24;::::0;;;;:31;;-1:-1:-1;;11884:31:0::1;11911:4;11884:31;::::0;;11834:43;-1:-1:-1;11922:17:0::1;:15;:17::i;:::-;11953:52;::::0;;::::1;::::0;::::1;::::0;;11989:15:::1;11953:52;::::0;::::1;::::0;;;11961:11;;11953:52:::1;::::0;;;;;;::::1;-1:-1:-1::0;;8325:1:0;9287:7;:22;11679:332::o;6514:96::-;6587:16;;;;6558:7;6581:23;;;:5;:23;;;;;;6514:96;:::o;3819:40::-;;;;;;;;;;;;;:::o;3864:45::-;3907:2;3864:45;:::o;20804:1697::-;20960:4;8369:1;8975:7;;:19;;8967:63;;;;;-1:-1:-1;;;8967:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8967:63:0;;;;;;;;;;;;;;;8369:1;9108:7;:18;21013:11;21005:81:::1;;;;-1:-1:-1::0;;;21005:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21101:22;21112:10;21101;:22::i;:::-;21093:80;;;;-1:-1:-1::0;;;21093:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21249:21;21285:26:::0;;::::1;;21277:87;;;;-1:-1:-1::0;;;21277:87:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21487:53;::::0;-1:-1:-1;;;21487:53:0;;::::1;;::::0;::::1;::::0;;;;;;;;;21421:10;;21373:27:::1;::::0;-1:-1:-1;;;;;21487:30:0;::::1;::::0;::::1;::::0;21525:7;;21534:5;;;;21487:53;;;;21534:5;;;;21487:53;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;21487:53:0::1;::::0;;::::1;::::0;-1:-1:-1;21487:53:0::1;::::0;-1:-1:-1;21487:53:0;;-1:-1:-1;;;21487:53:0;;::::1;::::0;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;21487:53:0;;-1:-1:-1;21487:53:0;21547:77:::1;;;;-1:-1:-1::0;;;21547:77:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21809:20;21832:25;21844:12;;21832:7;:11;;:25;;;;:::i;:::-;21809:48:::0;-1:-1:-1;21911:45:0::1;21809:48:::0;21911:27:::1;:15:::0;21931:6:::1;21911:19;:27::i;:::-;:31:::0;::::1;:45::i;:::-;21874:33;:21;21900:6;21874:25;:33::i;:::-;:82;;21866:128;;;::::0;;-1:-1:-1;;;21866:128:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22043:16:::0;;22039:225:::1;;22091:20;::::0;22072:13:::1;::::0;-1:-1:-1;;;;;22091:20:0::1;22124:42;:21;22150:15:::0;22124:25:::1;:42::i;:::-;22091:80;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22071:100;;;22188:8;22180:76;;;;-1:-1:-1::0;;;22180:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22039:225;;22341:15;22316:21;:40;22308:119;;;;-1:-1:-1::0;;;22308:119:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22441:36;22451:10;22463:7;22471:5;;22441:36;;;;-1:-1:-1::0;;;;;22441:36:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;22441:36:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;22441:36:0;;-1:-1:-1;;;;;;22441:36:0::1;22491:4;22484:11;;;;;;8325:1:::0;9287:7;:22;20804:1697;;-1:-1:-1;;;;20804:1697:0:o;13678:119::-;13740:4;13760:31;;;:15;:31;;;;;;;;;13678:119::o;3774:40::-;;;;;;;;;;;;;:::o;3185:114::-;3222:77;3185:114;:::o;3345:31::-;;;:::o;3720:49::-;;;;;;;;;;;;;;:::o;3953:27::-;;;-1:-1:-1;;;3953:27:0;;;;;:::o;25286:671::-;25491:9;:14;25483:80;;;;-1:-1:-1;;;25483:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25580:12;;25572:77;;;;-1:-1:-1;;;25572:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25679:49;;25661:12;;-1:-1:-1;;;;;25679:15:0;;;25703:12;:19;;;;25661:12;25679:49;25661:12;25679:49;25703:19;25679:15;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25660:68;;;25745:7;25737:57;;;;-1:-1:-1;;;25737:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25807:8;;25803:147;;25842:32;;-1:-1:-1;;;;;25842:13:0;;;25864:4;;25842:32;;;;25864:4;25842:13;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25828:46;;;;;25893:7;25885:55;;;;-1:-1:-1;;;25885:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25286:671;;;;;:::o;5062:914::-;5153:9;;5112:12;;5153:9;-1:-1:-1;;;5153:9:0;;;;;;5202:6;5191:17;;5198:1;5191:17;5177:31;;;;5169:92;;;;-1:-1:-1;;;5169:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5290:10;5334:5;5268:19;;;5387:371;5410:6;5406:10;;:1;:10;;;5387:371;;;5436:16;;;5432:231;;5512:8;;;;;;;:5;:8;;;;;;;;;5531:17;;;;;;;:36;;;5477:16;;-1:-1:-1;5512:8:0;-1:-1:-1;5432:231:0;;;5601:17;;;:14;:17;;;;;;;;;;;;-1:-1:-1;5637:16:0;;-1:-1:-1;5432:231:0;5690:34;5704:6;5712:4;5718:5;5690:13;:34::i;:::-;5671:53;-1:-1:-1;5749:1:0;5733:17;;;;;-1:-1:-1;5418:3:0;;5387:371;;;-1:-1:-1;;5789:16:0;;;3907:2;5788:42;5789:16;;;;:20;;;5788:42;;;;;;5837:31;;-1:-1:-1;;5837:31:0;;;;;;;-1:-1:-1;5875:19:0;;;:5;:19;;;;;;:38;;;;5920:26;;5932:14;;;5920:26;-1:-1:-1;;;5920:26:0;-1:-1:-1;;5920:26:0;;;;;;;;;;-1:-1:-1;5932:14:0;;;-1:-1:-1;;;5062:914:0:o;25122:156::-;25197:12;25184:9;:25;25176:94;;;;-1:-1:-1;;;25176:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25122:156::o;20313:155::-;20420:18;20455:8;;;;;20313:155::o;14868:142::-;14920:6;14947;;;:30;;-1:-1:-1;;14962:5:0;;;14976:1;14971;14962:5;14971:1;14957:15;;;;;:20;14947:30;14939:63;;;;;-1:-1:-1;;;14939:63:0;;;;;;;;;;;;-1:-1:-1;;;14939:63:0;;;;;;;;;;;;;;;14868:142;;;;:::o;14595:128::-;14679:5;;;14674:16;;;;14666:49;;;;;-1:-1:-1;;;14666:49:0;;;;;;;;;;;;-1:-1:-1;;;14666:49:0;;;;;;;;;;;;;;14731:129;14815:5;;;14810:16;;;;14802:50;;;;;-1:-1:-1;;;14802:50:0;;;;;;;;;;;;-1:-1:-1;;;14802:50:0;;;;;;;;;;;;;
Swarm Source
ipfs://b0aa0aa75587c73cbfb1e9ae1943410b96283fc5128d942b7ef158685b7883a7
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.