Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 252 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 18986662 | 173 days ago | IN | 0 ETH | 0.00756499 | ||||
Deposit | 18986654 | 173 days ago | IN | 0.1 ETH | 0.0194573 | ||||
Withdraw | 18824843 | 196 days ago | IN | 0 ETH | 0.01141392 | ||||
Deposit | 18824833 | 196 days ago | IN | 1 ETH | 0.03360121 | ||||
Withdraw | 18823210 | 196 days ago | IN | 0 ETH | 0.01393173 | ||||
Withdraw | 18820880 | 197 days ago | IN | 0 ETH | 0.024243 | ||||
Withdraw | 18814540 | 198 days ago | IN | 0 ETH | 0.03015315 | ||||
Deposit | 18814394 | 198 days ago | IN | 1 ETH | 0.06151641 | ||||
Deposit | 18814383 | 198 days ago | IN | 1 ETH | 0.07037704 | ||||
Withdraw | 18684603 | 216 days ago | IN | 0 ETH | 0.01295213 | ||||
Withdraw | 18684596 | 216 days ago | IN | 0 ETH | 0.01313986 | ||||
Withdraw | 18684586 | 216 days ago | IN | 0 ETH | 0.01174636 | ||||
Deposit | 18684549 | 216 days ago | IN | 1 ETH | 0.02947818 | ||||
Deposit | 18684543 | 216 days ago | IN | 1 ETH | 0.0312475 | ||||
Deposit | 18684535 | 216 days ago | IN | 1 ETH | 0.02937182 | ||||
Withdraw | 18664808 | 219 days ago | IN | 0 ETH | 0.01417645 | ||||
Deposit | 18625175 | 224 days ago | IN | 1 ETH | 0.02218587 | ||||
Withdraw | 18622986 | 224 days ago | IN | 0 ETH | 0.01469088 | ||||
Deposit | 18622976 | 224 days ago | IN | 10 ETH | 0.03979674 | ||||
Withdraw | 18516807 | 239 days ago | IN | 0 ETH | 0.00816601 | ||||
Withdraw | 18516799 | 239 days ago | IN | 0 ETH | 0.00822092 | ||||
Withdraw | 18516788 | 239 days ago | IN | 0 ETH | 0.00939192 | ||||
Deposit | 18482783 | 244 days ago | IN | 0.1 ETH | 0.01496823 | ||||
Deposit | 18482745 | 244 days ago | IN | 0.1 ETH | 0.01276035 | ||||
Deposit | 18482692 | 244 days ago | IN | 0.1 ETH | 0.01372875 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
18986654 | 173 days ago | 0.1 ETH | ||||
18824833 | 196 days ago | 1 ETH | ||||
18814394 | 198 days ago | 1 ETH | ||||
18814383 | 198 days ago | 1 ETH | ||||
18684549 | 216 days ago | 1 ETH | ||||
18684543 | 216 days ago | 1 ETH | ||||
18684535 | 216 days ago | 1 ETH | ||||
18625175 | 224 days ago | 1 ETH | ||||
18622976 | 224 days ago | 10 ETH | ||||
18482783 | 244 days ago | 0.1 ETH | ||||
18482745 | 244 days ago | 0.1 ETH | ||||
18482692 | 244 days ago | 0.1 ETH | ||||
18468094 | 246 days ago | 0.5 ETH | ||||
18466779 | 246 days ago | 1 ETH | ||||
18462506 | 247 days ago | 1 ETH | ||||
18460404 | 247 days ago | 1 ETH | ||||
18433873 | 251 days ago | 0.1 ETH | ||||
18428904 | 252 days ago | 2 ETH | ||||
18428706 | 252 days ago | 1 ETH | ||||
18428689 | 252 days ago | 1 ETH | ||||
18428677 | 252 days ago | 1 ETH | ||||
18428653 | 252 days ago | 1 ETH | ||||
18428612 | 252 days ago | 1 ETH | ||||
18414795 | 254 days ago | 1 ETH | ||||
18411437 | 254 days ago | 0.1 ETH |
Loading...
Loading
Contract Name:
HashlessProxy
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; pragma solidity ^0.7.0; pragma abicoder v2; interface IHashlessInstance { function token() external view returns (address); function denomination() external view returns (uint256); function deposit(bytes32 commitment) external payable; function withdraw( bytes calldata _proof, bytes32 _root, bytes32 _nullifierHash, address payable _recipient, address payable _relayer, address payable _referral, uint256 _refund ) external payable; } contract HashlessProxy { using SafeERC20 for IERC20; uint256 public depositCounter; uint256 public withdrawCounter; event EncryptedNote(address indexed sender, bytes encryptedNote); event Deposit(address token, uint256 denomination, uint256 timestamp, uint256 count); event Withdraw(address token, uint256 denomination, uint256 timestamp, uint256 count); function deposit( IHashlessInstance _hashless, bytes32 _commitment, bytes calldata _encryptedNote ) external payable { address token = _hashless.token(); uint256 denomination = _hashless.denomination(); if (token != address(0)) { IERC20(token).transferFrom(msg.sender, address(this), denomination); IERC20(token).approve(address(_hashless), denomination); } _hashless.deposit{ value: msg.value }(_commitment); emit EncryptedNote(msg.sender, _encryptedNote); emit Deposit(token, denomination, block.timestamp, ++depositCounter); } function withdraw( IHashlessInstance _hashless, bytes calldata _proof, bytes32 _root, bytes32 _nullifierHash, address payable _recipient, address payable _relayer, address payable _referral, uint256 _refund ) external payable { _hashless.withdraw{ value: msg.value }(_proof, _root, _nullifierHash, _recipient, _relayer, _referral, _refund); emit Withdraw(_hashless.token(), _hashless.denomination(), block.timestamp, ++withdrawCounter); } function backupNotes(bytes[] calldata _encryptedNotes) external { for (uint256 i = 0; i < _encryptedNotes.length; i++) { emit EncryptedNote(msg.sender, _encryptedNotes[i]); } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting 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) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. 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 mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. 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 mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "./IERC20.sol"; import "../../math/SafeMath.sol"; import "../../utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"denomination","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"bytes","name":"encryptedNote","type":"bytes"}],"name":"EncryptedNote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"denomination","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"bytes[]","name":"_encryptedNotes","type":"bytes[]"}],"name":"backupNotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IHashlessInstance","name":"_hashless","type":"address"},{"internalType":"bytes32","name":"_commitment","type":"bytes32"},{"internalType":"bytes","name":"_encryptedNote","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"depositCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IHashlessInstance","name":"_hashless","type":"address"},{"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":"address payable","name":"_referral","type":"address"},{"internalType":"uint256","name":"_refund","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061098b806100206000396000f3fe60806040526004361061004a5760003560e01c806313d98d131461004f5780636485ba2a14610064578063877fcb6714610084578063ca16e3eb14610097578063ecb3dc88146100c2575b600080fd5b61006261005d3660046106d9565b6100d7565b005b34801561007057600080fd5b5061006261007f36600461064a565b6103c8565b610062610092366004610733565b610436565b3480156100a357600080fd5b506100ac6105d4565b6040516100b99190610882565b60405180910390f35b3480156100ce57600080fd5b506100ac6105da565b6000846001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561011257600080fd5b505afa158015610126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014a9190610627565b90506000856001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b15801561018757600080fd5b505afa15801561019b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bf91906107dd565b90506001600160a01b038216156102d5576040516323b872dd60e01b81526001600160a01b038316906323b872dd906102009033903090869060040161081f565b602060405180830381600087803b15801561021a57600080fd5b505af115801561022e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025291906106b9565b5060405163095ea7b360e01b81526001600160a01b0383169063095ea7b3906102819089908590600401610843565b602060405180830381600087803b15801561029b57600080fd5b505af11580156102af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d391906106b9565b505b60405163b214faa560e01b81526001600160a01b0387169063b214faa5903490610303908990600401610882565b6000604051808303818588803b15801561031c57600080fd5b505af1158015610330573d6000803e3d6000fd5b5050505050336001600160a01b03167ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b4008858560405161037092919061088b565b60405180910390a260008054600101908190556040517f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e916103b8918591859142919061085c565b60405180910390a1505050505050565b60005b8181101561043157337ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b400884848481811061040157fe5b905060200281019061041391906108f8565b60405161042192919061088b565b60405180910390a26001016103cb565b505050565b60405163a237579f60e01b81526001600160a01b038a169063a237579f903490610472908c908c908c908c908c908c908c908c906004016108a7565b6000604051808303818588803b15801561048b57600080fd5b505af115801561049f573d6000803e3d6000fd5b50505050507f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94896001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fe57600080fd5b505afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105369190610627565b8a6001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b15801561056f57600080fd5b505afa158015610583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a791906107dd565b600180548101908190556040516105c1939291429161085c565b60405180910390a1505050505050505050565b60015481565b60005481565b60008083601f8401126105f1578182fd5b50813567ffffffffffffffff811115610608578182fd5b60208301915083602082850101111561062057600080fd5b9250929050565b600060208284031215610638578081fd5b81516106438161093d565b9392505050565b6000806020838503121561065c578081fd5b823567ffffffffffffffff80821115610673578283fd5b818501915085601f830112610686578283fd5b813581811115610694578384fd5b86602080830285010111156106a7578384fd5b60209290920196919550909350505050565b6000602082840312156106ca578081fd5b81518015158114610643578182fd5b600080600080606085870312156106ee578182fd5b84356106f98161093d565b935060208501359250604085013567ffffffffffffffff81111561071b578283fd5b610727878288016105e0565b95989497509550505050565b60008060008060008060008060006101008a8c031215610751578485fd5b893561075c8161093d565b985060208a013567ffffffffffffffff811115610777578586fd5b6107838c828d016105e0565b90995097505060408a0135955060608a0135945060808a01356107a58161093d565b935060a08a01356107b58161093d565b925060c08a01356107c58161093d565b8092505060e08a013590509295985092959850929598565b6000602082840312156107ee578081fd5b5051919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b90815260200190565b60006020825261089f6020830184866107f5565b949350505050565b600060e082526108bb60e083018a8c6107f5565b60208301989098525060408101959095526001600160a01b039384166060860152918316608085015290911660a083015260c09091015292915050565b6000808335601e1984360301811261090e578283fd5b83018035915067ffffffffffffffff821115610928578283fd5b60200191503681900382131561062057600080fd5b6001600160a01b038116811461095257600080fd5b5056fea264697066735822122062e9ecf4d31d17aea7378f4be4bb1c4d80bea08ea380f78695ef587a8494fa0264736f6c63430007060033
Deployed Bytecode
0x60806040526004361061004a5760003560e01c806313d98d131461004f5780636485ba2a14610064578063877fcb6714610084578063ca16e3eb14610097578063ecb3dc88146100c2575b600080fd5b61006261005d3660046106d9565b6100d7565b005b34801561007057600080fd5b5061006261007f36600461064a565b6103c8565b610062610092366004610733565b610436565b3480156100a357600080fd5b506100ac6105d4565b6040516100b99190610882565b60405180910390f35b3480156100ce57600080fd5b506100ac6105da565b6000846001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561011257600080fd5b505afa158015610126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014a9190610627565b90506000856001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b15801561018757600080fd5b505afa15801561019b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101bf91906107dd565b90506001600160a01b038216156102d5576040516323b872dd60e01b81526001600160a01b038316906323b872dd906102009033903090869060040161081f565b602060405180830381600087803b15801561021a57600080fd5b505af115801561022e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025291906106b9565b5060405163095ea7b360e01b81526001600160a01b0383169063095ea7b3906102819089908590600401610843565b602060405180830381600087803b15801561029b57600080fd5b505af11580156102af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d391906106b9565b505b60405163b214faa560e01b81526001600160a01b0387169063b214faa5903490610303908990600401610882565b6000604051808303818588803b15801561031c57600080fd5b505af1158015610330573d6000803e3d6000fd5b5050505050336001600160a01b03167ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b4008858560405161037092919061088b565b60405180910390a260008054600101908190556040517f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e916103b8918591859142919061085c565b60405180910390a1505050505050565b60005b8181101561043157337ffa28df43db3553771f7209dcef046f3bdfea15870ab625dcda30ac58b82b400884848481811061040157fe5b905060200281019061041391906108f8565b60405161042192919061088b565b60405180910390a26001016103cb565b505050565b60405163a237579f60e01b81526001600160a01b038a169063a237579f903490610472908c908c908c908c908c908c908c908c906004016108a7565b6000604051808303818588803b15801561048b57600080fd5b505af115801561049f573d6000803e3d6000fd5b50505050507f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94896001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104fe57600080fd5b505afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105369190610627565b8a6001600160a01b0316638bca6d166040518163ffffffff1660e01b815260040160206040518083038186803b15801561056f57600080fd5b505afa158015610583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a791906107dd565b600180548101908190556040516105c1939291429161085c565b60405180910390a1505050505050505050565b60015481565b60005481565b60008083601f8401126105f1578182fd5b50813567ffffffffffffffff811115610608578182fd5b60208301915083602082850101111561062057600080fd5b9250929050565b600060208284031215610638578081fd5b81516106438161093d565b9392505050565b6000806020838503121561065c578081fd5b823567ffffffffffffffff80821115610673578283fd5b818501915085601f830112610686578283fd5b813581811115610694578384fd5b86602080830285010111156106a7578384fd5b60209290920196919550909350505050565b6000602082840312156106ca578081fd5b81518015158114610643578182fd5b600080600080606085870312156106ee578182fd5b84356106f98161093d565b935060208501359250604085013567ffffffffffffffff81111561071b578283fd5b610727878288016105e0565b95989497509550505050565b60008060008060008060008060006101008a8c031215610751578485fd5b893561075c8161093d565b985060208a013567ffffffffffffffff811115610777578586fd5b6107838c828d016105e0565b90995097505060408a0135955060608a0135945060808a01356107a58161093d565b935060a08a01356107b58161093d565b925060c08a01356107c58161093d565b8092505060e08a013590509295985092959850929598565b6000602082840312156107ee578081fd5b5051919050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b90815260200190565b60006020825261089f6020830184866107f5565b949350505050565b600060e082526108bb60e083018a8c6107f5565b60208301989098525060408101959095526001600160a01b039384166060860152918316608085015290911660a083015260c09091015292915050565b6000808335601e1984360301811261090e578283fd5b83018035915067ffffffffffffffff821115610928578283fd5b60200191503681900382131561062057600080fd5b6001600160a01b038116811461095257600080fd5b5056fea264697066735822122062e9ecf4d31d17aea7378f4be4bb1c4d80bea08ea380f78695ef587a8494fa0264736f6c63430007060033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.