Contract Overview
Balance:
0 AVAX
AVAX Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xcf5a9c11e63c68ab24d174baefc57d41ced04aae7d8d5980288cdf22ecc02802 | 0x61010060 | 12740723 | 52 days 7 hrs ago | 0x209484169c126f69db7c83df8d7cd0cb3db22519 | IN | Create: AvacashFinance_AVAX | 0 AVAX | 0.7754121 |
[ 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
610100604052600380546001600160401b03191681556008553480156200002557600080fd5b50604051620023cb380380620023cb833981810160405260a08110156200004b57600080fd5b508051602082015160408301516060840151608090940151929391929091908085858585808363ffffffff8216620000b55760405162461bcd60e51b8152600401808060200182810382526023815260200180620023a86023913960400191505060405180910390fd5b60208263ffffffff161062000111576040805162461bcd60e51b815260206004820152601e60248201527f5f6c6576656c732073686f756c64206265206c657373207468616e2033320000604482015290519081900360640190fd5b6001600160e01b031960e083901b1660a0526001600160601b0319606082901b166080527f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c60005b8363ffffffff168163ffffffff161015620001aa5763ffffffff811660009081526001602090815260408083208590559082905290208290556200019f838380620002a6565b915060010162000159565b506000805260026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5550506001600455816200021b5760405162461bcd60e51b8152600401808060200182810382526025815260200180620023186025913960400191505060405180910390fd5b5060609290921b6001600160601b03191660c0525060e0526001600160a01b0381166200027a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806200233d602a913960400191505060405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055506200047e9350505050565b60006000805160206200238883398151915283106200030c576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b6000805160206200238883398151915282106200035b5760405162461bcd60e51b8152600401808060200182810382526021815260200180620023676021913960400191505060405180910390fd5b6040805163f47d33b560e01b8152600481018590526000602482018190528251869391926001600160a01b0389169263f47d33b592604480840193829003018186803b158015620003ab57600080fd5b505afa158015620003c0573d6000803e3d6000fd5b505050506040513d6040811015620003d757600080fd5b5080516020909101519092509050600080516020620023888339815191528483089150856001600160a01b031663f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b1580156200044657600080fd5b505afa1580156200045b573d6000803e3d6000fd5b505050506040513d60408110156200047257600080fd5b50519695505050505050565b60805160601c60a05160e01c60c05160601c60e051611e38620004e06000398061073c5280610d695280611661528061194e52508061086f5280610a6a525080610b8052806117b6528061182252508061158d52806118aa5250611e386000f3fe60806040526004361061019c5760003560e01c806390eeb02b116100ec578063e0232b421161008a578063ec73295911610064578063ec7329591461066c578063ed33639f14610681578063f178e47c14610696578063fc7e9c6f146106c05761019c565b8063e0232b4214610588578063e5285dcc14610618578063e8295588146106425761019c565b8063b214faa5116100c6578063b214faa514610517578063ba70f75714610534578063c2b40ae414610549578063cd87a3b4146105735761019c565b806390eeb02b1461042257806394829c98146104375780639fa12d0b1461044c5761019c565b80634e22e074116101595780637c08b964116101335780637c08b96414610371578063839df945146103a45780638bca6d16146103ce5780638ea3099e146103e35761019c565b80634e22e074146102ef5780634ecf518b146103195780636d9833e3146103475761019c565b8063019f64cc146101a157806317cc915c146101bd57806321a0adb6146101e75780632b7ac3f314610282578063414a37ba146102b35780634847cdc8146102da575b600080fd5b6101a96106d5565b604080519115158252519081900360200190f35b3480156101c957600080fd5b506101a9600480360360208110156101e057600080fd5b50356106da565b610280600480360360e08110156101fd57600080fd5b810190602081018135600160201b81111561021757600080fd5b82018360208201111561022957600080fd5b803590602001918460018302840111600160201b8311171561024a57600080fd5b91935091508035906020810135906001600160a01b03604082013581169160608101359091169060808101359060a001356106ef565b005b34801561028e57600080fd5b50610297610a68565b604080516001600160a01b039092168252519081900360200190f35b3480156102bf57600080fd5b506102c8610a8c565b60408051918252519081900360200190f35b3480156102e657600080fd5b506102c8610a9e565b3480156102fb57600080fd5b506101a96004803603602081101561031257600080fd5b5035610aa4565b34801561032557600080fd5b5061032e610b7e565b6040805163ffffffff9092168252519081900360200190f35b34801561035357600080fd5b506101a96004803603602081101561036a57600080fd5b5035610ba2565b34801561037d57600080fd5b506101a96004803603602081101561039457600080fd5b50356001600160a01b0316610c14565b3480156103b057600080fd5b506101a9600480360360208110156103c757600080fd5b5035610d52565b3480156103da57600080fd5b506102c8610d67565b3480156103ef57600080fd5b506102c86004803603606081101561040657600080fd5b506001600160a01b038135169060208101359060400135610d8b565b34801561042e57600080fd5b5061032e610f57565b34801561044357600080fd5b50610297610f63565b34801561045857600080fd5b506104c76004803603602081101561046f57600080fd5b810190602081018135600160201b81111561048957600080fd5b82018360208201111561049b57600080fd5b803590602001918460208302840111600160201b831117156104bc57600080fd5b509092509050610f72565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105035781810151838201526020016104eb565b505050509050019250505060405180910390f35b6102806004803603602081101561052d57600080fd5b5035611011565b34801561054057600080fd5b506102c8611120565b34801561055557600080fd5b506102c86004803603602081101561056c57600080fd5b503561113b565b34801561057f57600080fd5b5061032e61114d565b34801561059457600080fd5b506101a9600480360360608110156105ab57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156105da57600080fd5b8201836020820111156105ec57600080fd5b803590602001918460018302840111600160201b8311171561060d57600080fd5b509092509050611152565b34801561062457600080fd5b506101a96004803603602081101561063b57600080fd5b5035611540565b34801561064e57600080fd5b506102c86004803603602081101561066557600080fd5b5035611555565b34801561067857600080fd5b506102c8611567565b34801561068d57600080fd5b5061029761158b565b3480156106a257600080fd5b506102c8600480360360208110156106b957600080fd5b50356115af565b3480156106cc57600080fd5b5061032e6115c1565b600190565b60056020526000908152604090205460ff1681565b60026004541415610735576040805162461bcd60e51b815260206004820152601f6024820152600080516020611ac1833981519152604482015290519081900360640190fd5b60026004557f00000000000000000000000000000000000000000000000000000000000000008211156107af576040805162461bcd60e51b815260206004820152601a60248201527f4665652065786365656473207472616e736665722076616c7565000000000000604482015290519081900360640190fd5b60008581526005602052604090205460ff1615610813576040805162461bcd60e51b815260206004820152601f60248201527f546865206e6f746520686173206265656e20616c7265616479207370656e7400604482015290519081900360640190fd5b61081c86610ba2565b61086d576040805162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f7400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663695ef6f989896040518060c001604052808b60001c81526020018a60001c8152602001896001600160a01b03168152602001886001600160a01b03168152602001878152602001868152506040518463ffffffff1660e01b8152600401808060200183600660200280838360005b8381101561091e578181015183820152602001610906565b505050509050018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050945050505050602060405180830381600087803b15801561097057600080fd5b505af1158015610984573d6000803e3d6000fd5b505050506040513d602081101561099a57600080fd5b50516109e6576040805162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b604482015290519081900360640190fd5b6000858152600560205260409020805460ff19166001179055610a0b848484846115d4565b604080516001600160a01b038681168252602082018890528183018590529151918516917fe9e508bad6d4c3227e881ca19068f099da81b5164dd6d62b2eaf1e8bc6c349319181900360600190a250506001600455505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080516020611c2b83398151915281565b60085481565b600060026004541415610aec576040805162461bcd60e51b815260206004820152601f6024820152600080516020611ac1833981519152604482015290519081900360640190fd5b60026004556007546001600160a01b03163314610b3a5760405162461bcd60e51b8152600401808060200182810382526038815260200180611c4b6038913960400191505060405180910390fd5b60088290556040805183815290517f615aafc8dd47d9882eabcfd0e1a08060b087e4402d36ccbe79fd149b7bc099689181900360200190a150600180600455919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081610bb157506000610c0f565b60035463ffffffff16805b63ffffffff8116600090815260026020526040902054841415610be457600192505050610c0f565b63ffffffff8116610bf35750601e5b6000190163ffffffff8082169083161415610bbc576000925050505b919050565b600060026004541415610c5c576040805162461bcd60e51b815260206004820152601f6024820152600080516020611ac1833981519152604482015290519081900360640190fd5b60026004556007546001600160a01b03163314610caa5760405162461bcd60e51b8152600401808060200182810382526038815260200180611c4b6038913960400191505060405180910390fd5b6001600160a01b038216610cef5760405162461bcd60e51b8152600401808060200182810382526028815260200180611ae16028913960400191505060405180910390fd5b600780546001600160a01b0319166001600160a01b03848116919091179182905560408051929091168252517f52137cae927b3fe3b3b69be747601190f8c6d08cee6956739e35c4a1bed38413916020908290030190a150600180600455919050565b60066020526000908152604090205460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600080516020611c2b8339815191528310610def576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b600080516020611c2b8339815191528210610e3b5760405162461bcd60e51b8152600401808060200182810382526021815260200180611ba66021913960400191505060405180910390fd5b6040805163f47d33b560e01b8152600481018590526000602482018190528251869391926001600160a01b0389169263f47d33b592604480840193829003018186803b158015610e8a57600080fd5b505afa158015610e9e573d6000803e3d6000fd5b505050506040513d6040811015610eb457600080fd5b5080516020909101519092509050600080516020611c2b8339815191528483089150856001600160a01b031663f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b158015610f2157600080fd5b505afa158015610f35573d6000803e3d6000fd5b505050506040513d6040811015610f4b57600080fd5b50519695505050505050565b60035463ffffffff1681565b6007546001600160a01b031681565b60608167ffffffffffffffff81118015610f8b57600080fd5b50604051908082528060200260200182016040528015610fb5578160200160208202803683370190505b50905060005b8281101561100a57610fde848483818110610fd257fe5b90506020020135611540565b15611002576001828281518110610ff157fe5b911515602092830291909101909101525b600101610fbb565b5092915050565b60026004541415611057576040805162461bcd60e51b815260206004820152601f6024820152600080516020611ac1833981519152604482015290519081900360640190fd5b600260045560008181526006602052604090205460ff16156110aa5760405162461bcd60e51b8152600401808060200182810382526021815260200180611cf36021913960400191505060405180910390fd5b60006110b58261179e565b6000838152600660205260409020805460ff1916600117905590506110d861194c565b6040805163ffffffff83168152426020820152815184927fa945e51eec50ab98c161376f0db4cf2aeba3ec92755fe2fcd388bdbbb80ff196928290030190a250506001600455565b60035463ffffffff1660009081526002602052604090205490565b60026020526000908152604090205481565b601e81565b60006002600454141561119a576040805162461bcd60e51b815260206004820152601f6024820152600080516020611ac1833981519152604482015290519081900360640190fd5b6002600455836111db5760405162461bcd60e51b8152600401808060200182810382526039815260200180611c836039913960400191505060405180910390fd5b6111e4856119ac565b61121f5760405162461bcd60e51b815260040180806020018281038252602d815260200180611b41602d913960400191505060405180910390fd5b478481101561125f5760405162461bcd60e51b8152600401808060200182810382526030815260200180611bc76030913960400191505060405180910390fd5b6040516332e4be4f60e21b81526020600482019081526024820185905287916000916001600160a01b0384169163cb92f93c918a918a918a918190604401848480828437600083820152604051601f909101601f19169092019550602094509092505050808303818588803b1580156112d757600080fd5b505af11580156112eb573d6000803e3d6000fd5b50505050506040513d602081101561130257600080fd5b50519050806113425760405162461bcd60e51b8152600401808060200182810382526038815260200180611b096038913960400191505060405180910390fd5b6000611359600854896119b890919063ffffffff16565b90506113728161136c86620186a06119b8565b90611a21565b61137f47620186a06119b8565b10156113d2576040805162461bcd60e51b815260206004820181905260248201527f666c6173684c6f616e28293a204e6f7420656e6f756768206665652070616964604482015290519081900360640190fd5b8015611474576007546000906001600160a01b03166113f14787611a70565b604051600081818185875af1925050503d806000811461142d576040519150601f19603f3d011682016040523d82523d6000602084013e611432565b606091505b50509050806114725760405162461bcd60e51b8152600401808060200182810382526037815260200180611cbc6037913960400191505060405180910390fd5b505b8347146114b25760405162461bcd60e51b8152600401808060200182810382526042815260200180611d5c6042913960600191505060405180910390fd5b7f5d96b1c1e2770f4b3966db06a5d8a9252c85a74d9bd6e1c01abc12db8af0f60f8989898960405180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a160019450505050506001600455949350505050565b60009081526005602052604090205460ff1690565b60016020526000908152604090205481565b7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006020819052908152604090205481565b600354600160201b900463ffffffff1681565b34156116115760405162461bcd60e51b8152600401808060200182810382526035815260200180611dce6035913960400191505060405180910390fd5b801561164e5760405162461bcd60e51b8152600401808060200182810382526034815260200180611bf76034913960400191505060405180910390fd5b6040516000906001600160a01b038616907f0000000000000000000000000000000000000000000000000000000000000000859003908381818185875af1925050503d80600081146116bc576040519150601f19603f3d011682016040523d82523d6000602084013e6116c1565b606091505b50509050806117015760405162461bcd60e51b8152600401808060200182810382526025815260200180611d146025913960400191505060405180910390fd5b8215611797576040516001600160a01b038516908490600081818185875af1925050503d8060008114611750576040519150601f19603f3d011682016040523d82523d6000602084013e611755565b606091505b505080915050806117975760405162461bcd60e51b8152600401808060200182810382526023815260200180611d396023913960400191505060405180910390fd5b5050505050565b60035460009063ffffffff600160201b9091048116907f0000000000000000000000000000000000000000000000000000000000000000811660020a168114156118195760405162461bcd60e51b8152600401808060200182810382526030815260200180611d9e6030913960400191505060405180910390fd5b8083600080805b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff1610156118e657600185166118895763ffffffff81166000908152600160209081526040808320549183905290912085905584935091506118a5565b63ffffffff811660009081526020819052604090205492508391505b6118d07f00000000000000000000000000000000000000000000000000000000000000008484610d8b565b9350600263ffffffff8616049450600101611820565b505060038054601e63ffffffff8083166001908101821692909206811663ffffffff199093168317845560009283526002602052604090922094909455815493860116600160201b0267ffffffff00000000199093169290921790915550909392505050565b7f000000000000000000000000000000000000000000000000000000000000000034146119aa5760405162461bcd60e51b8152600401808060200182810382526038815260200180611b6e6038913960400191505060405180910390fd5b565b3b63ffffffff16151590565b60008115806119d3575050808202828282816119d057fe5b04145b611a1b576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b92915050565b80820182811015611a1b576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115611a1b576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004e6577206665652072656365697665722073686f756c64206e6f7420626520616464726573732030666c6173684c6f616e28293a20666c6173686c6f616e20746f205f726563697069656e7420646964206e6f7420676f207468726f7567682e666c6173684c6f616e28293a205f726563697069656e742073686f756c64206265206120636f6e74726163742e506c656173652073656e6420606d697844656e6f6d696e6174696f6e602045544820616c6f6e672077697468207472616e73616374696f6e5f72696768742073686f756c6420626520696e7369646520746865206669656c64666c6173684c6f616e28293a204e6f7420656e6f7567682066756e647320666f722074686520666c6173686c6f616e2e526566756e642076616c756520697320737570706f73656420746f206265207a65726f20666f722045544820696e7374616e636530644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000014f6e6c792063757272656e7420666c6173684c6f616e46656552656365697665722063616e206368616e676520746869732076616c75652e666c6173684c6f616e28293a20506c656173652073656c65637420616e20706f73697469766520666c6173686c6f616e205f616d6f756e742e666c6173684c6f616e28293a207061796d656e7420746f2066656552656365697665722020646964206e6f7420676f207468726f75676854686520636f6d6d69746d656e7420686173206265656e207375626d69747465647061796d656e7420746f205f726563697069656e7420646964206e6f7420676f20746872757061796d656e7420746f205f72656c6179657220646964206e6f7420676f2074687275666c6173684c6f616e28293a2046696e616c2062616c616e63652073686f756c6420626520657175616c20746f2074686520696e697469616c2062616c616e63652e4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c65617665732063616e2062652061646465644d6573736167652076616c756520697320737570706f73656420746f206265207a65726f20666f722045544820696e7374616e6365a2646970667358221220b0aa0aa75587c73cbfb1e9ae1943410b96283fc5128d942b7ef158685b7883a764736f6c6343000706003364656e6f6d696e6174696f6e2073686f756c642062652067726561746572207468616e203066656552656365697665722073686f756c64206e6f7420626520746865205a65726f20416464726573735f72696768742073686f756c6420626520696e7369646520746865206669656c6430644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f6c6576656c732073686f756c642062652067726561746572207468616e207a65726f000000000000000000000000576a1907479df42bf4756f345b43e810a7947dd3000000000000000000000000cf940b652181e684457e66db7a6c134cbbaa329d0000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000005d60dbb646b1f578cdc6c8bcb559ef559a7231e6
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000576a1907479df42bf4756F345B43e810a7947dd3000000000000000000000000cf940b652181e684457e66dB7A6c134cBBAa329D0000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000005d60dbb646b1f578cdc6c8bcb559ef559a7231e6
-----Decoded View---------------
Arg [0] : _verifier (address): 0x576a1907479df42bf4756f345b43e810a7947dd3
Arg [1] : _hasher (address): 0xcf940b652181e684457e66db7a6c134cbbaa329d
Arg [2] : _denomination (uint256): 100000000000000000000
Arg [3] : _merkleTreeHeight (uint32): 20
Arg [4] : _flashLoanFeeReceiver (address): 0x5d60dbb646b1f578cdc6c8bcb559ef559a7231e6
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000576a1907479df42bf4756F345B43e810a7947dd3
Arg [1] : 000000000000000000000000cf940b652181e684457e66dB7A6c134cBBAa329D
Arg [2] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [4] : 0000000000000000000000005d60dbb646b1f578cdc6c8bcb559ef559a7231e6
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.