Spend less on fees, more on crypto. Buy crypto easily with MoonPay Balance. 20M+ users trust MoonPay worldwide.
Don’t invest unless you’re prepared to lose all the money you invest.
3000+ Slots, 20+ Cryptos, 75K Raffle, Sports Promos - World's largest Crypto Casino & Sportsbook - Provably Fair!
300% up to 5 BTC welcome bonus + 200 Free spins
Monthly Wagering Contest - $500,000+ rewards. Provably Fair, Low House Edge and best VIP Program!
Daily free Spin 50000 Matic ,760% Deposit Bonus, 20%Rakeback, And Get 1000000 Matic free bonus on BC.Game
Deposit BONUS 300% and Cashbacks. without verification!
Discover your secret gift and collect 7 BTC + Free Spins welcome bonus!
Overview
POL Balance
POL Value
$6,646.11 (@ $0.51/POL)Token Holdings
Could not find any matches!
- ERC-20 Tokens (84)5 MEGAMEGA STAKE T... (MEGA)43,767 AAVE [ACCESS AAVE.ASIA]ERC-20: ! AAVE.as... (AAVE [...)0.001 ARZERC-20: Arzona (ARZ)10,000 AVAXVOUCHER.COM SWAP NOWERC-20: AVAX (AVAXVO...)10,000 AVAXVOUCHER.COM SWAP NOWERC-20: AVAX (AVAXVO...)1 Debridge Acces https://t.ly/ethersERC-20: Debridge ... (Debrid...)1 deBridge Airdrop https://t.ly/ethersERC-20: deBridge ... (deBrid...)1 deBridge Airdrop https://t.ly/ethersERC-20: deBridge ... (deBrid...)1 https://t.ly/ethersERC-20: deBridge ... (https:...)1 https://t.ly/ethersERC-20: deBridge ... (https:...)1 https://t.ly/ethersERC-20: deBridge ... (https:...)0.00000001 deUnibox Airdrop https://t.ly/UNIBOXERC-20: deUnibox ... (deUnib...)100 DPEXDPEX80,000 pepe-erc.vipERC-20: Free PEPE... (pepe-e...)10,000 https://t.ly/grassdropERC-20: Grass Air... (https:...)10,000 $ Check: gasfee.io You received a refundERC-20: GSF ($ Chec...)13.643078 SIMSimba Empire50,000 TBBT.orgERC-20: TBBT.org (TBBT.o...)888ERC20 ***1,000 WWW.POOFERS.FUNERC-20: WWW.POOFE... (WWW.PO...)487,900 TokenERC-20 TOKEN*[Suspicious]714,707 TokenERC-20 TOKEN*[Suspicious]745,900 TokenERC-20 TOKEN*[Suspicious]8,726 TokenERC-20 TOKEN*[Suspicious]9,543 TokenERC-20 TOKEN*[Suspicious]8,750 TokenERC-20 TOKEN*[Suspicious]8,750 TokenERC-20 TOKEN*[Suspicious]90,000,000,000 TokenERC-20 TOKEN*[Suspicious]989 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1,024 TokenERC-20 TOKEN*[Suspicious]10,000 TokenERC-20 TOKEN*[Suspicious]60,000 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]1 TokenERC-20 TOKEN*[Suspicious]10,000 TokenERC-20 TOKEN*[Suspicious]10,000 TokenERC-20 TOKEN*[Suspicious]10,000 TokenERC-20 TOKEN*[Unsafe]10,000 TokenERC-20 TOKEN*[Unsafe]10,000 TokenERC-20 TOKEN*[Unsafe]10,000 TokenERC-20 TOKEN*[Unsafe]10,000 TokenERC-20 TOKEN*[Unsafe]3,750 TokenERC-20 TOKEN*[Spam]550,000 TokenERC-20 TOKEN*[Spam]550,000 TokenERC-20 TOKEN*[Spam]550,000 TokenERC-20 TOKEN*[Spam]9,600 TokenERC-20 TOKEN*[Spam]22,400 TokenERC-20 TOKEN*[Spam]8,273 TokenERC-20 TOKEN*[Spam]4,376 TokenERC-20 TOKEN*[Spam]9,600 TokenERC-20 TOKEN*[Spam]10,000 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]518 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]10,000 TokenERC-20 TOKEN*[Spam]777 TokenERC-20 TOKEN*[Spam]9,860 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]88,888 TokenERC-20 TOKEN*[Spam]8,750 TokenERC-20 TOKEN*[Spam]888,888 TokenERC-20 TOKEN*[Spam]777 TokenERC-20 TOKEN*[Spam]7,777 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]NFT Tokens (27)GIVEAWAY$100,000,000ERC-1155Vouchers5 stETH EventERC-1155NFTVoucher5000$ CYBERERC-1155NFTVoucher5000$ CYBERERC-1155Vouchers50M $SHIB VoucherERC-1155APE COINAPE NFT TICKETSERC-1155APE COINAPE NFT TICKETSERC-1155deBridge Airdrop https://t.ly/ethersdeBridge AirdropERC-721deBridge Airdrop https://t.ly/ethersdeBridge AirdropERC-721https://t.ly/ethersdeBridge Airdropx2ERC-721https://t.ly/ethersdeBridge Airdropx2ERC-721https://t.ly/ethersdeBridge AirdropERC-721UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155UNI-V3-PoSUniswap V3 Positions NFT-V1ERC-1155ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]
- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Multichain Portfolio
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 10,553 transactions
Transaction Hash MethodBlockFromToPayment Check 66330885 2025-01-05 11:07:37 8 hrs ago 1736075257 IN 0 POL$0.00 0.00220167 53.1625066 Payment Check 66327143 2025-01-05 8:46:39 10 hrs ago 1736066799 IN 0 POL$0.00 0.00252386 60.9245866 Payment Check 66315927 2025-01-05 1:34:36 17 hrs ago 1736040876 IN 0 POL$0.00 0.00219825 53.08000003 Payment Check 66311985 2025-01-04 23:06:28 20 hrs ago 1736031988 IN 0 POL$0.00 0.00215352 52.00000003 Payment Check 66302116 2025-01-04 17:03:37 26 hrs ago 1736010217 IN 0 POL$0.00 0.00248361 59.97044441 Payment Check 66294450 2025-01-04 12:20:35 30 hrs ago 1735993235 IN 0 POL$0.00 0.00217507 52.52028669 Payment Check 66293292 2025-01-04 11:36:27 31 hrs ago 1735990587 IN 0 POL$0.00 0.00217586 52.53924158 Payment Check 66270128 2025-01-03 21:14:41 45 hrs ago 1735938881 IN 0 POL$0.00 0.00306773 74.07476387 Payment Check 66265090 2025-01-03 18:00:36 2 days ago 1735927236 IN 0 POL$0.00 0.00463992 112.00508831 Payment Check 66264811 2025-01-03 17:50:42 2 days ago 1735926642 IN 0 POL$0.00 0.00449531 108.51422679 Payment Check 66239014 2025-01-03 1:43:36 2 days ago 1735868616 IN 0 POL$0.00 0.00216429 52.26000232 Payment Check 66232618 2025-01-02 21:44:34 2 days ago 1735854274 IN 0 POL$0.00 0.00219467 52.99359407 Payment Check 66232392 2025-01-02 21:36:34 2 days ago 1735853794 IN 0 POL$0.00 0.00219467 52.99359408 Payment Check 66230954 2025-01-02 20:44:34 2 days ago 1735850674 IN 0 POL$0.00 0.00222139 53.63866667 Payment Check 66215428 2025-01-02 11:06:36 3 days ago 1735815996 IN 0 POL$0.00 0.00530297 128.01087189 Payment Check 66215359 2025-01-02 11:03:36 3 days ago 1735815816 IN 0 POL$0.00 0.00418341 100.98535448 Payment Check 66208974 2025-01-02 7:00:36 3 days ago 1735801236 IN 0 POL$0.00 0.00212073 51.20826939 Payment Check 66208666 2025-01-02 6:48:38 3 days ago 1735800518 IN 0 POL$0.00 0.00212073 51.20826937 Payment Check 66185491 2025-01-01 16:18:36 4 days ago 1735748316 IN 0 POL$0.00 0.00308258 74.43351735 Payment Check 66153013 2024-12-31 20:12:34 4 days ago 1735675954 IN 0 POL$0.00 0.00303836 73.36556156 Payment Check 66126320 2024-12-31 3:38:26 5 days ago 1735616306 IN 0 POL$0.00 0.00247316 59.70081042 Payment Check 66126209 2024-12-31 3:33:26 5 days ago 1735616006 IN 0 POL$0.00 0.00240423 58.03683543 Payment Check 66125969 2024-12-31 3:24:24 5 days ago 1735615464 IN 0 POL$0.00 0.00273175 65.94301345 Payment Check 66125900 2024-12-31 3:21:24 5 days ago 1735615284 IN 0 POL$0.00 0.0026648 64.34551915 Payment Check 66116057 2024-12-30 21:27:37 5 days ago 1735594057 IN 0 POL$0.00 0.00216966 52.37437639 Latest 25 internal transactions (View All)
Parent Transaction Hash Block From To 66336854 2025-01-05 14:43:21 4 hrs ago 1736088201 6.5358 POL$3.36 66331396 2025-01-05 11:25:53 7 hrs ago 1736076353 5.8388 POL$3.00 66330885 2025-01-05 11:07:37 8 hrs ago 1736075257 0.04518654 POL$0.02 66327143 2025-01-05 8:46:39 10 hrs ago 1736066799 0.37681687 POL$0.19 66315927 2025-01-05 1:34:36 17 hrs ago 1736040876 0.02749138 POL$0.01 66312505 2025-01-04 23:25:56 19 hrs ago 1736033156 16.8469 POL$8.65 66311985 2025-01-04 23:06:28 20 hrs ago 1736031988 0.0460927 POL$0.02 66302116 2025-01-04 17:03:37 26 hrs ago 1736010217 0.05510535 POL$0.03 66302052 2025-01-04 17:01:21 26 hrs ago 1736010081 1 POL$0.51 66296472 2025-01-04 13:36:13 29 hrs ago 1735997773 7.2242 POL$3.71 66294450 2025-01-04 12:20:35 30 hrs ago 1735993235 0.04419562 POL$0.02 66293292 2025-01-04 11:36:27 31 hrs ago 1735990587 0.03687441 POL$0.02 66293209 2025-01-04 11:33:31 31 hrs ago 1735990411 5.9308 POL$3.05 66293021 2025-01-04 11:25:59 31 hrs ago 1735989959 5.9308 POL$3.05 66270128 2025-01-03 21:14:41 45 hrs ago 1735938881 0.04999288 POL$0.03 66269878 2025-01-03 21:05:15 46 hrs ago 1735938315 5 POL$2.57 66265401 2025-01-03 18:12:08 2 days ago 1735927928 4.2127 POL$2.16 66265090 2025-01-03 18:00:36 2 days ago 1735927236 0.79738509 POL$0.41 66264811 2025-01-03 17:50:42 2 days ago 1735926642 0.55875291 POL$0.29 66245660 2025-01-03 5:45:07 2 days ago 1735883107 9.7096 POL$4.99 66244726 2025-01-03 5:11:31 2 days ago 1735881091 5.7366 POL$2.95 66242217 2025-01-03 3:40:14 2 days ago 1735875614 4 POL$2.05 66239697 2025-01-03 2:08:52 2 days ago 1735870132 9.8778 POL$5.07 66239014 2025-01-03 1:43:36 2 days ago 1735868616 0.0344363 POL$0.02 66232618 2025-01-02 21:44:34 2 days ago 1735854274 0.02744616 POL$0.01 Loading...LoadingContract Name:FeeBoxMATIC
Compiler Versionv0.8.17+commit.8df45f5f
Optimization Enabled:Yes with 10000 runs
Other Settings:default evmVersionContract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0 <0.9.0; import "../base/AdapterBase.sol"; import "./VerifierBasic.sol"; import "../../interfaces/IWMATIC.sol"; import "../../core/controller/IAccount.sol"; /* Users deposit some MATIC/WMATIC as gas fee to support automatic contract calls in the background */ contract Verifier is VerifierBasic { function getMessageHash( address _account, uint256 _amount, bool _access, uint256 _deadline, uint256 _nonce ) public pure returns (bytes32) { return keccak256( abi.encodePacked(_account, _amount, _access, _deadline, _nonce) ); } function verify( address _signer, address _account, uint256 _amount, bool _access, uint256 _deadline, bytes memory signature ) internal returns (bool) { require(_deadline >= block.timestamp, "Signature expired"); bytes32 messageHash = getMessageHash( _account, _amount, _access, _deadline, nonces[_account]++ ); bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); return recoverSigner(ethSignedMessageHash, signature) == _signer; } } contract FeeBoxMATIC is Verifier, AdapterBase { using SafeERC20 for IERC20; event FeeBoxMATICDeposit( address account, uint256 amount, uint256 consumedAmount ); event FeeBoxMATICWithdraw( address account, uint256 amount, uint256 consumedAmount ); address public balanceController; address public feeReceiver; mapping(address => uint256) public maticBalance; event Initialize(address _balanceController, address _feeReceiver); event SetAdapterManager(address newAdapterManager); constructor(address _adapterManager, address _timelock) AdapterBase(_adapterManager, _timelock, "FeeBoxMATIC") {} function initialize(address _balanceController, address _feeReceiver) external onlyTimelock { balanceController = _balanceController; feeReceiver = _feeReceiver; emit Initialize(balanceController, feeReceiver); } function setAdapterManager(address newAdapterManger) external onlyTimelock { ADAPTER_MANAGER = newAdapterManger; emit SetAdapterManager(ADAPTER_MANAGER); } modifier onlySigner() { require(balanceController == msg.sender, "!Signer"); _; } function setBalance(address[] memory users, uint256[] memory balance) external onlySigner { require(users.length == balance.length, "length error!"); for (uint256 i = 0; i < users.length; i++) { maticBalance[users[i]] = balance[i]; } } function paymentCheck(address account, uint256 consumedAmount) external onlySigner { require(maticBalance[account] >= consumedAmount); maticBalance[account] -= consumedAmount; safeTransferMATIC(feeReceiver, consumedAmount); } function depositWithPermit(address account, bytes calldata encodedData) external payable onlyAdapterManager { require(tx.origin == IAccount(account).owner(), "!EOA"); ( uint256 amount, uint256 consumedAmount, bool access, uint256 deadline, bytes memory signature ) = abi.decode(encodedData, (uint256, uint256, bool, uint256, bytes)); require(access, "Not deposit method."); require( verify( balanceController, account, consumedAmount, access, deadline, signature ), "Verify failed!" ); if (amount != 0) { pullTokensIfNeeded(wmaticAddr, account, amount); IWMATIC(wmaticAddr).withdraw(amount); } require( maticBalance[account] + amount + msg.value >= consumedAmount, "Insolvent!" ); maticBalance[account] = maticBalance[account] + amount + msg.value - consumedAmount; if (consumedAmount != 0) { safeTransferMATIC(feeReceiver, consumedAmount); } emit FeeBoxMATICDeposit(account, amount + msg.value, consumedAmount); } function withdrawWithPermit(address account, bytes calldata encodedData) external onlyAdapterManager { ( bool isNative, uint256 amount, uint256 consumedAmount, bool access, uint256 deadline, bytes memory signature ) = abi.decode( encodedData, (bool, uint256, uint256, bool, uint256, bytes) ); require(!access, "Not withdraw method."); require( verify( balanceController, account, consumedAmount, access, deadline, signature ), "Verify failed!" ); require(maticBalance[account] >= consumedAmount + amount, "Insolvent!"); maticBalance[account] = maticBalance[account] - amount - consumedAmount; if (isNative) { safeTransferMATIC(account, amount); } else { IWMATIC(wmaticAddr).deposit{value: amount}(); IERC20(wmaticAddr).safeTransfer(account, amount); } if (consumedAmount != 0) { safeTransferMATIC(feeReceiver, consumedAmount); } emit FeeBoxMATICWithdraw(account, amount, consumedAmount); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0 <0.9.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "../../timelock/TimelockCallable.sol"; import "../../common/Basic.sol"; abstract contract AdapterBase is Basic, Ownable, TimelockCallable { using SafeERC20 for IERC20; address public ADAPTER_MANAGER; address public immutable ADAPTER_ADDRESS; string public ADAPTER_NAME; mapping(address => mapping(address => bool)) private approved; receive() external payable {} modifier onlyAdapterManager() { require( ADAPTER_MANAGER == msg.sender, "Caller is not the adapterManager." ); _; } modifier onlyDelegation() { require(ADAPTER_ADDRESS != address(this), "Only for delegatecall."); _; } constructor( address _adapterManager, address _timelock, string memory _name ) TimelockCallable(_timelock) { ADAPTER_MANAGER = _adapterManager; ADAPTER_ADDRESS = address(this); ADAPTER_NAME = _name; } function pullTokensIfNeeded( address _token, address _from, uint256 _amount ) internal { if (_amount == 0) return; require(_token != address(0) && _token != maticAddr); uint256 balance = IERC20(_token).balanceOf(_from); uint256 currentAmount = balance < _amount ? balance : _amount; IERC20(_token).safeTransferFrom(_from, address(this), currentAmount); } function approveToken( address _token, address _spender, uint256 _amount ) internal { if (_amount == 0) return; if (!approved[_token][_spender]) { IERC20 token = IERC20(_token); token.safeApprove(_spender, 0); token.safeApprove(_spender, type(uint256).max); approved[_token][_spender] = true; } } /// @dev get the token from sender, and approve to the user in one step function pullAndApprove( address _token, address _from, address _spender, uint256 _amount ) internal { pullTokensIfNeeded(_token, _from, _amount); approveToken(_token, _spender, _amount); } function returnAsset( address _token, address _to, uint256 _amount ) internal { if (_amount > 0) { if (_token == maticAddr) { safeTransferMATIC(_to, _amount); } else { require(_token != address(0), "Token error!"); IERC20(_token).safeTransfer(_to, _amount); } } } function toCallback( address _target, bytes4 _selector, bytes memory _callData ) internal { (bool success, bytes memory returnData) = _target.call( abi.encodePacked(_selector, _callData) ); require(success, string(returnData)); } //Handle when someone else accidentally transfers assets to this contract function sweep(address[] memory tokens, address receiver) external onlyTimelock { require(address(this) == ADAPTER_ADDRESS, "!Invalid call"); for (uint256 i = 0; i < tokens.length; i++) { address token = tokens[i]; if (token == address(0)) continue; uint256 amount = IERC20(token).balanceOf(address(this)); if (amount > 0) { IERC20(token).safeTransfer(receiver, amount); } } uint256 balance = address(this).balance; if (balance > 0) { safeTransferMATIC(receiver, balance); } } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0 <0.9.0; interface IAccount { function owner() external view returns (address); function createSubAccount(bytes memory _data, uint256 _costETH) external payable returns (address newSubAccount); function executeOnAdapter(bytes calldata _callBytes, bool _callType) external payable returns (bytes memory); function multiCall( bool[] calldata _callType, bytes[] calldata _callArgs, bool[] calldata _isNeedCallback ) external; function setAdvancedOption(bool val) external; function callOnSubAccount( address _target, bytes calldata _callArgs, uint256 amountETH ) external; function withdrawAssets( address[] calldata _tokens, address _receiver, uint256[] calldata _amounts ) external; function approve( address tokenAddr, address to, uint256 amount ) external; function approveTokens( address[] calldata _tokens, address[] calldata _spenders, uint256[] calldata _amounts ) external; function isSubAccount(address subAccount) external view returns (bool); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0 <0.9.0; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "../base/AdapterBase.sol"; contract VerifierBasic { using ECDSA for bytes32; mapping(address => uint256) public nonces; function getEthSignedMessageHash(bytes32 _messageHash) public pure returns (bytes32) { return keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n32", _messageHash ) ); } function recoverSigner( bytes32 _ethSignedMessageHash, bytes memory _signature ) public pure returns (address) { (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); return _ethSignedMessageHash.recover(v, r, s); } function splitSignature(bytes memory sig) public pure returns ( bytes32 r, bytes32 s, uint8 v ) { require(sig.length == 65, "invalid signature length"); assembly { /* First 32 bytes stores the length of the signature add(sig, 32) = pointer of sig + 32 effectively, skips first 32 bytes of signature mload(p) loads next 32 bytes starting at the memory address p into memory */ // first 32 bytes, after the length prefix r := mload(add(sig, 32)) // second 32 bytes s := mload(add(sig, 64)) // final byte (first byte of the next 32 bytes) v := byte(0, mload(add(sig, 96))) } // implicitly return (r, s, v) } function getEthBlockTimestamp() public view returns (uint256 timestamp) { timestamp = block.timestamp; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0 <0.9.0; interface IWMATIC { function allowance(address, address) external view returns (uint256); function approve(address guy, uint256 wad) external returns (bool); function balanceOf(address) external view returns (uint256); function decimals() external view returns (uint8); function deposit() external payable; function name() external view returns (string memory); function symbol() external view returns (string memory); function totalSupply() external view returns (uint256); function transfer(address dst, uint256 wad) external returns (bool); function transferFrom( address src, address dst, uint256 wad ) external returns (bool); function withdraw(uint256 wad) external; }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0 <0.9.0; abstract contract TimelockCallable { address public TIMELOCK_ADDRESS; event SetTimeLock(address newTimelock); constructor(address _timelock) { TIMELOCK_ADDRESS = _timelock; } modifier onlyTimelock() { require(TIMELOCK_ADDRESS == msg.sender, "Caller is not the timelock."); _; } function setTimelock(address newTimelock) external onlyTimelock { require(newTimelock != address(0)); TIMELOCK_ADDRESS = newTimelock; emit SetTimeLock(newTimelock); } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.8.0 <0.9.0; abstract contract Basic { /// @dev Return MATIC address address public constant maticAddr = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; /// @dev Return Wrapped MATIC address address public constant wmaticAddr = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270; function safeTransferMATIC(address to, uint256 value) internal { if (value != 0) { (bool success, ) = to.call{value: value}(new bytes(0)); require( success, "helper::safeTransferMATIC: MATIC transfer failed" ); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, 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 // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; import "../IERC20.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 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' 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) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _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 require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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"); (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"); (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"); (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"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "../Strings.sol"; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
{ "optimizer": { "enabled": true, "runs": 10000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"inputs":[{"internalType":"address","name":"_adapterManager","type":"address"},{"internalType":"address","name":"_timelock","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"consumedAmount","type":"uint256"}],"name":"FeeBoxMATICDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"consumedAmount","type":"uint256"}],"name":"FeeBoxMATICWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_balanceController","type":"address"},{"indexed":false,"internalType":"address","name":"_feeReceiver","type":"address"}],"name":"Initialize","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAdapterManager","type":"address"}],"name":"SetAdapterManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newTimelock","type":"address"}],"name":"SetTimeLock","type":"event"},{"inputs":[],"name":"ADAPTER_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ADAPTER_MANAGER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ADAPTER_NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceController","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes","name":"encodedData","type":"bytes"}],"name":"depositWithPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEthBlockTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_messageHash","type":"bytes32"}],"name":"getEthSignedMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_access","type":"bool"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"getMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_balanceController","type":"address"},{"internalType":"address","name":"_feeReceiver","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maticAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maticBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"consumedAmount","type":"uint256"}],"name":"paymentCheck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_ethSignedMessageHash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdapterManger","type":"address"}],"name":"setAdapterManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"balance","type":"uint256[]"}],"name":"setBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTimelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address","name":"receiver","type":"address"}],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes","name":"encodedData","type":"bytes"}],"name":"withdrawWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wmaticAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162002b9938038062002b99833981016040819052620000349162000135565b81816040518060400160405280600b81526020016a466565426f784d4154494360a81b81525081620000756200006f620000c260201b60201c565b620000c6565b600280546001600160a01b03199081166001600160a01b039384161790915560038054909116918516919091179055306080526004620000b6828262000212565b505050505050620002de565b3390565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200013057600080fd5b919050565b600080604083850312156200014957600080fd5b620001548362000118565b9150620001646020840162000118565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200019857607f821691505b602082108103620001b957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200020d57600081815260208120601f850160051c81016020861015620001e85750805b601f850160051c820191505b818110156200020957828155600101620001f4565b5050505b505050565b81516001600160401b038111156200022e576200022e6200016d565b62000246816200023f845462000183565b84620001bf565b602080601f8311600181146200027e5760008415620002655750858301515b600019600386901b1c1916600185901b17855562000209565b600085815260208120601f198616915b82811015620002af578886015182559484019460019091019084016200028e565b5085821015620002ce5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805161289862000301600039600081816101c3015261127501526128986000f3fe6080604052600436106101a55760003560e01c80638da5cb5b116100e1578063b3f006741161008a578063d20c88bd11610064578063d20c88bd14610542578063f2fde38b14610562578063fa54080114610582578063ff22506d146105f057600080fd5b8063b3f00674146104e2578063bdacb30314610502578063c21fdad21461052257600080fd5b80639a697238116100bb5780639a69723814610454578063a7bb58031461047c578063af589da3146104ba57600080fd5b80638da5cb5b146103855780638e9bbdad146103a357806397aba7f91461043457600080fd5b806358e56c9d1161014e5780637ecebe00116101285780637ecebe00146102e95780637fd3cd8b1461031657806380c9849a14610338578063857cf24e1461036557600080fd5b806358e56c9d146102a15780636292c33d146102c1578063715018a6146102d457600080fd5b8063366bd8d41161017f578063366bd8d414610244578063431c183014610261578063485cc9551461028157600080fd5b8063060b9c57146101b157806312f5a86d1461020257806326c2172f1461022257600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101e57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561020e57600080fd5b506006546101e5906001600160a01b031681565b34801561022e57600080fd5b5061024261023d3660046120ab565b610610565b005b34801561025057600080fd5b50425b6040519081526020016101f9565b34801561026d57600080fd5b506002546101e5906001600160a01b031681565b34801561028d57600080fd5b5061024261029c3660046120c8565b6106dc565b3480156102ad57600080fd5b506102426102bc366004612101565b6107bc565b6102426102cf366004612101565b610ada565b3480156102e057600080fd5b50610242610ee1565b3480156102f557600080fd5b506102536103043660046120ab565b60006020819052908152604090205481565b34801561032257600080fd5b5061032b610f47565b6040516101f991906121aa565b34801561034457600080fd5b506102536103533660046120ab565b60086020526000908152604090205481565b34801561037157600080fd5b506102426103803660046121fb565b610fd5565b34801561039157600080fd5b506001546001600160a01b03166101e5565b3480156103af57600080fd5b506102536103be366004612235565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660208201526034810185905283151560f81b6054820152605581018390526075810182905260009060950160405160208183030381529060405280519060200120905095945050505050565b34801561044057600080fd5b506101e561044f366004612393565b61109b565b34801561046057600080fd5b506101e5730d500b1d8e8ef31e21c99d1db9a6444d3adf127081565b34801561048857600080fd5b5061049c6104973660046123da565b6110c9565b60408051938452602084019290925260ff16908201526060016101f9565b3480156104c657600080fd5b506101e573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156104ee57600080fd5b506007546101e5906001600160a01b031681565b34801561050e57600080fd5b5061024261051d3660046120ab565b61113d565b34801561052e57600080fd5b506003546101e5906001600160a01b031681565b34801561054e57600080fd5b5061024261055d3660046124af565b611210565b34801561056e57600080fd5b5061024261057d3660046120ab565b6113f8565b34801561058e57600080fd5b5061025361059d3660046124f6565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b3480156105fc57600080fd5b5061024261060b36600461250f565b6114da565b6002546001600160a01b0316331461066f5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652074696d656c6f636b2e000000000060448201526064015b60405180910390fd5b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f7582a2f870696df13f21a7d88c053679e90e6e57d0c6f2e9fa7b8b11bf5da10d906020015b60405180910390a150565b6002546001600160a01b031633146107365760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652074696d656c6f636b2e00000000006044820152606401610666565b600680546001600160a01b038481167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909355600780549185169190921681179091556040805192835260208301919091527fdc90fed0326ba91706deeac7eb34ac9f8b680734f9d782864dc29704d23bed6a910160405180910390a15050565b6003546001600160a01b0316331461083c5760405162461bcd60e51b815260206004820152602160248201527f43616c6c6572206973206e6f742074686520616461707465724d616e6167657260448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610666565b6000808080808061084f878901896125ca565b95509550955095509550955082156108a95760405162461bcd60e51b815260206004820152601460248201527f4e6f74207769746864726177206d6574686f642e0000000000000000000000006044820152606401610666565b6006546108c3906001600160a01b03168a86868686611600565b61090f5760405162461bcd60e51b815260206004820152600e60248201527f566572696679206661696c6564210000000000000000000000000000000000006044820152606401610666565b6109198585612677565b6001600160a01b038a1660009081526008602052604090205410156109805760405162461bcd60e51b815260206004820152600a60248201527f496e736f6c76656e7421000000000000000000000000000000000000000000006044820152606401610666565b6001600160a01b03891660009081526008602052604090205484906109a690879061268a565b6109b0919061268a565b6001600160a01b038a1660009081526008602052604090205585156109de576109d98986611784565b610a69565b730d500b1d8e8ef31e21c99d1db9a6444d3adf12706001600160a01b031663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a2d57600080fd5b505af1158015610a41573d6000803e3d6000fd5b50610a699350730d500b1d8e8ef31e21c99d1db9a6444d3adf127092508c915088905061186d565b8315610a8557600754610a85906001600160a01b031685611784565b604080516001600160a01b038b168152602081018790529081018590527f1d882b86fa295fdfe0927d98ca351aae36e6202514bbafaa2005711931e4bc209060600160405180910390a1505050505050505050565b6003546001600160a01b03163314610b5a5760405162461bcd60e51b815260206004820152602160248201527f43616c6c6572206973206e6f742074686520616461707465724d616e6167657260448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610666565b826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbc919061269d565b6001600160a01b0316326001600160a01b031614610c1e5760405162461bcd60e51b81526004016106669060208082526004908201527f21454f4100000000000000000000000000000000000000000000000000000000604082015260600190565b600080808080610c30868801886126ba565b9450945094509450945082610c875760405162461bcd60e51b815260206004820152601360248201527f4e6f74206465706f736974206d6574686f642e000000000000000000000000006044820152606401610666565b600654610ca1906001600160a01b03168986868686611600565b610ced5760405162461bcd60e51b815260206004820152600e60248201527f566572696679206661696c6564210000000000000000000000000000000000006044820152606401610666565b8415610d9157610d12730d500b1d8e8ef31e21c99d1db9a6444d3adf12708987611934565b6040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101869052730d500b1d8e8ef31e21c99d1db9a6444d3adf127090632e1a7d4d90602401600060405180830381600087803b158015610d7857600080fd5b505af1158015610d8c573d6000803e3d6000fd5b505050505b6001600160a01b03881660009081526008602052604090205484903490610db9908890612677565b610dc39190612677565b1015610e115760405162461bcd60e51b815260206004820152600a60248201527f496e736f6c76656e7421000000000000000000000000000000000000000000006044820152606401610666565b6001600160a01b03881660009081526008602052604090205484903490610e39908890612677565b610e439190612677565b610e4d919061268a565b6001600160a01b0389166000908152600860205260409020558315610e8257600754610e82906001600160a01b031685611784565b7f05c00e3ec57dfa7b15014254132c44ae2826c4de581f47d19c0c0a18e5a5448f88610eae3488612677565b604080516001600160a01b0390931683526020830191909152810186905260600160405180910390a15050505050505050565b6001546001600160a01b03163314610f3b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610666565b610f456000611a37565b565b60048054610f5490612727565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8090612727565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505081565b6006546001600160a01b0316331461102f5760405162461bcd60e51b815260206004820152600760248201527f215369676e6572000000000000000000000000000000000000000000000000006044820152606401610666565b6001600160a01b03821660009081526008602052604090205481111561105457600080fd5b6001600160a01b0382166000908152600860205260408120805483929061107c90849061268a565b9091555050600754611097906001600160a01b031682611784565b5050565b6000806000806110aa856110c9565b919450925090506110bd86828585611aa1565b93505050505b92915050565b6000806000835160411461111f5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610666565b50505060208101516040820151606090920151909260009190911a90565b6002546001600160a01b031633146111975760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652074696d656c6f636b2e00000000006044820152606401610666565b6001600160a01b0381166111aa57600080fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f087857e9a8e6bcdb5918f98e558ad983e7c50ec69df7912e2103379d0afa61f7906020016106d1565b6002546001600160a01b0316331461126a5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652074696d656c6f636b2e00000000006044820152606401610666565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112e25760405162461bcd60e51b815260206004820152600d60248201527f21496e76616c69642063616c6c000000000000000000000000000000000000006044820152606401610666565b60005b82518110156113e15760008382815181106113025761130261277a565b6020026020010151905060006001600160a01b0316816001600160a01b03160361132c57506113cf565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561138c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b091906127a9565b905080156113cc576113cc6001600160a01b038316858361186d565b50505b806113d9816127c2565b9150506112e5565b504780156113f3576113f38282611784565b505050565b6001546001600160a01b031633146114525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610666565b6001600160a01b0381166114ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610666565b6114d781611a37565b50565b6006546001600160a01b031633146115345760405162461bcd60e51b815260206004820152600760248201527f215369676e6572000000000000000000000000000000000000000000000000006044820152606401610666565b80518251146115855760405162461bcd60e51b815260206004820152600d60248201527f6c656e677468206572726f7221000000000000000000000000000000000000006044820152606401610666565b60005b82518110156113f3578181815181106115a3576115a361277a565b6020026020010151600860008584815181106115c1576115c161277a565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806115f8906127c2565b915050611588565b6000428310156116525760405162461bcd60e51b815260206004820152601160248201527f5369676e617475726520657870697265640000000000000000000000000000006044820152606401610666565b6001600160a01b038616600090815260208190526040812080546116fc91899189918991899187611682836127c2565b919050556040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660208201526034810185905283151560f81b6054820152605581018390526075810182905260009060950160405160208183030381529060405280519060200120905095945050505050565b90506000611757826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050886001600160a01b031661176d828661109b565b6001600160a01b0316149998505050505050505050565b801561109757604080516000808252602082019092526001600160a01b0384169083906040516117b491906127fa565b60006040518083038185875af1925050503d80600081146117f1576040519150601f19603f3d011682016040523d82523d6000602084013e6117f6565b606091505b50509050806113f35760405162461bcd60e51b815260206004820152603060248201527f68656c7065723a3a736166655472616e736665724d415449433a204d4154494360448201527f207472616e73666572206661696c6564000000000000000000000000000000006064820152608401610666565b6040516001600160a01b0383166024820152604481018290526113f39084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611ac9565b8060000361194157505050565b6001600160a01b0383161580159061197657506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b61197f57600080fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600091908516906370a0823190602401602060405180830381865afa1580156119e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0691906127a9565b90506000828210611a175782611a19565b815b9050611a306001600160a01b038616853084611bae565b5050505050565b600180546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806000611ab287878787611c05565b91509150611abf81611d10565b5095945050505050565b6000611b1e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611efc9092919063ffffffff16565b8051909150156113f35780806020019051810190611b3c9190612816565b6113f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610666565b6040516001600160a01b0380851660248301528316604482015260648101829052611bff9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016118b2565b50505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611c3c5750600090506003611d07565b8460ff16601b14158015611c5457508460ff16601c14155b15611c655750600090506004611d07565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611cb9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116611d0057600060019250925050611d07565b9150600090505b94509492505050565b6000816004811115611d2457611d24612833565b03611d2c5750565b6001816004811115611d4057611d40612833565b03611d8d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610666565b6002816004811115611da157611da1612833565b03611dee5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610666565b6003816004811115611e0257611e02612833565b03611e755760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610666565b6004816004811115611e8957611e89612833565b036114d75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610666565b6060611f0b8484600085611f15565b90505b9392505050565b606082471015611f8d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610666565b6001600160a01b0385163b611fe45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610666565b600080866001600160a01b0316858760405161200091906127fa565b60006040518083038185875af1925050503d806000811461203d576040519150601f19603f3d011682016040523d82523d6000602084013e612042565b606091505b509150915061205282828661205d565b979650505050505050565b6060831561206c575081611f0e565b82511561207c5782518084602001fd5b8160405162461bcd60e51b815260040161066691906121aa565b6001600160a01b03811681146114d757600080fd5b6000602082840312156120bd57600080fd5b8135611f0e81612096565b600080604083850312156120db57600080fd5b82356120e681612096565b915060208301356120f681612096565b809150509250929050565b60008060006040848603121561211657600080fd5b833561212181612096565b9250602084013567ffffffffffffffff8082111561213e57600080fd5b818601915086601f83011261215257600080fd5b81358181111561216157600080fd5b87602082850101111561217357600080fd5b6020830194508093505050509250925092565b60005b838110156121a1578181015183820152602001612189565b50506000910152565b60208152600082518060208401526121c9816040850160208701612186565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561220e57600080fd5b823561221981612096565b946020939093013593505050565b80151581146114d757600080fd5b600080600080600060a0868803121561224d57600080fd5b853561225881612096565b945060208601359350604086013561226f81612227565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156122fd576122fd612287565b604052919050565b600082601f83011261231657600080fd5b813567ffffffffffffffff81111561233057612330612287565b61236160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016122b6565b81815284602083860101111561237657600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156123a657600080fd5b82359150602083013567ffffffffffffffff8111156123c457600080fd5b6123d085828601612305565b9150509250929050565b6000602082840312156123ec57600080fd5b813567ffffffffffffffff81111561240357600080fd5b61240f84828501612305565b949350505050565b600067ffffffffffffffff82111561243157612431612287565b5060051b60200190565b600082601f83011261244c57600080fd5b8135602061246161245c83612417565b6122b6565b82815260059290921b8401810191818101908684111561248057600080fd5b8286015b848110156124a457803561249781612096565b8352918301918301612484565b509695505050505050565b600080604083850312156124c257600080fd5b823567ffffffffffffffff8111156124d957600080fd5b6124e58582860161243b565b92505060208301356120f681612096565b60006020828403121561250857600080fd5b5035919050565b6000806040838503121561252257600080fd5b823567ffffffffffffffff8082111561253a57600080fd5b6125468683870161243b565b935060209150818501358181111561255d57600080fd5b85019050601f8101861361257057600080fd5b803561257e61245c82612417565b81815260059190911b8201830190838101908883111561259d57600080fd5b928401925b828410156125bb578335825292840192908401906125a2565b80955050505050509250929050565b60008060008060008060c087890312156125e357600080fd5b86356125ee81612227565b95506020870135945060408701359350606087013561260c81612227565b92506080870135915060a087013567ffffffffffffffff81111561262f57600080fd5b61263b89828a01612305565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156110c3576110c3612648565b818103818111156110c3576110c3612648565b6000602082840312156126af57600080fd5b8151611f0e81612096565b600080600080600060a086880312156126d257600080fd5b853594506020860135935060408601356126eb81612227565b925060608601359150608086013567ffffffffffffffff81111561270e57600080fd5b61271a88828901612305565b9150509295509295909350565b600181811c9082168061273b57607f821691505b602082108103612774577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156127bb57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127f3576127f3612648565b5060010190565b6000825161280c818460208701612186565b9190910192915050565b60006020828403121561282857600080fd5b8151611f0e81612227565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea26469706673582212208a9c173bb4177e7a2addb11fdb6b9f8309827f1470055d897633e322741804e964736f6c63430008110033000000000000000000000000907883da917ca9750ad202ff6395c4c6ab14e60e000000000000000000000000ce672de0d2d38944716c21bca7db1164685af2acDeployed Bytecode
0x6080604052600436106101a55760003560e01c80638da5cb5b116100e1578063b3f006741161008a578063d20c88bd11610064578063d20c88bd14610542578063f2fde38b14610562578063fa54080114610582578063ff22506d146105f057600080fd5b8063b3f00674146104e2578063bdacb30314610502578063c21fdad21461052257600080fd5b80639a697238116100bb5780639a69723814610454578063a7bb58031461047c578063af589da3146104ba57600080fd5b80638da5cb5b146103855780638e9bbdad146103a357806397aba7f91461043457600080fd5b806358e56c9d1161014e5780637ecebe00116101285780637ecebe00146102e95780637fd3cd8b1461031657806380c9849a14610338578063857cf24e1461036557600080fd5b806358e56c9d146102a15780636292c33d146102c1578063715018a6146102d457600080fd5b8063366bd8d41161017f578063366bd8d414610244578063431c183014610261578063485cc9551461028157600080fd5b8063060b9c57146101b157806312f5a86d1461020257806326c2172f1461022257600080fd5b366101ac57005b600080fd5b3480156101bd57600080fd5b506101e57f0000000000000000000000001c8126e02e8a7dac69fd6444ef0b8be5430df77681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561020e57600080fd5b506006546101e5906001600160a01b031681565b34801561022e57600080fd5b5061024261023d3660046120ab565b610610565b005b34801561025057600080fd5b50425b6040519081526020016101f9565b34801561026d57600080fd5b506002546101e5906001600160a01b031681565b34801561028d57600080fd5b5061024261029c3660046120c8565b6106dc565b3480156102ad57600080fd5b506102426102bc366004612101565b6107bc565b6102426102cf366004612101565b610ada565b3480156102e057600080fd5b50610242610ee1565b3480156102f557600080fd5b506102536103043660046120ab565b60006020819052908152604090205481565b34801561032257600080fd5b5061032b610f47565b6040516101f991906121aa565b34801561034457600080fd5b506102536103533660046120ab565b60086020526000908152604090205481565b34801561037157600080fd5b506102426103803660046121fb565b610fd5565b34801561039157600080fd5b506001546001600160a01b03166101e5565b3480156103af57600080fd5b506102536103be366004612235565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660208201526034810185905283151560f81b6054820152605581018390526075810182905260009060950160405160208183030381529060405280519060200120905095945050505050565b34801561044057600080fd5b506101e561044f366004612393565b61109b565b34801561046057600080fd5b506101e5730d500b1d8e8ef31e21c99d1db9a6444d3adf127081565b34801561048857600080fd5b5061049c6104973660046123da565b6110c9565b60408051938452602084019290925260ff16908201526060016101f9565b3480156104c657600080fd5b506101e573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156104ee57600080fd5b506007546101e5906001600160a01b031681565b34801561050e57600080fd5b5061024261051d3660046120ab565b61113d565b34801561052e57600080fd5b506003546101e5906001600160a01b031681565b34801561054e57600080fd5b5061024261055d3660046124af565b611210565b34801561056e57600080fd5b5061024261057d3660046120ab565b6113f8565b34801561058e57600080fd5b5061025361059d3660046124f6565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b3480156105fc57600080fd5b5061024261060b36600461250f565b6114da565b6002546001600160a01b0316331461066f5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652074696d656c6f636b2e000000000060448201526064015b60405180910390fd5b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f7582a2f870696df13f21a7d88c053679e90e6e57d0c6f2e9fa7b8b11bf5da10d906020015b60405180910390a150565b6002546001600160a01b031633146107365760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652074696d656c6f636b2e00000000006044820152606401610666565b600680546001600160a01b038481167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909355600780549185169190921681179091556040805192835260208301919091527fdc90fed0326ba91706deeac7eb34ac9f8b680734f9d782864dc29704d23bed6a910160405180910390a15050565b6003546001600160a01b0316331461083c5760405162461bcd60e51b815260206004820152602160248201527f43616c6c6572206973206e6f742074686520616461707465724d616e6167657260448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610666565b6000808080808061084f878901896125ca565b95509550955095509550955082156108a95760405162461bcd60e51b815260206004820152601460248201527f4e6f74207769746864726177206d6574686f642e0000000000000000000000006044820152606401610666565b6006546108c3906001600160a01b03168a86868686611600565b61090f5760405162461bcd60e51b815260206004820152600e60248201527f566572696679206661696c6564210000000000000000000000000000000000006044820152606401610666565b6109198585612677565b6001600160a01b038a1660009081526008602052604090205410156109805760405162461bcd60e51b815260206004820152600a60248201527f496e736f6c76656e7421000000000000000000000000000000000000000000006044820152606401610666565b6001600160a01b03891660009081526008602052604090205484906109a690879061268a565b6109b0919061268a565b6001600160a01b038a1660009081526008602052604090205585156109de576109d98986611784565b610a69565b730d500b1d8e8ef31e21c99d1db9a6444d3adf12706001600160a01b031663d0e30db0866040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a2d57600080fd5b505af1158015610a41573d6000803e3d6000fd5b50610a699350730d500b1d8e8ef31e21c99d1db9a6444d3adf127092508c915088905061186d565b8315610a8557600754610a85906001600160a01b031685611784565b604080516001600160a01b038b168152602081018790529081018590527f1d882b86fa295fdfe0927d98ca351aae36e6202514bbafaa2005711931e4bc209060600160405180910390a1505050505050505050565b6003546001600160a01b03163314610b5a5760405162461bcd60e51b815260206004820152602160248201527f43616c6c6572206973206e6f742074686520616461707465724d616e6167657260448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610666565b826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbc919061269d565b6001600160a01b0316326001600160a01b031614610c1e5760405162461bcd60e51b81526004016106669060208082526004908201527f21454f4100000000000000000000000000000000000000000000000000000000604082015260600190565b600080808080610c30868801886126ba565b9450945094509450945082610c875760405162461bcd60e51b815260206004820152601360248201527f4e6f74206465706f736974206d6574686f642e000000000000000000000000006044820152606401610666565b600654610ca1906001600160a01b03168986868686611600565b610ced5760405162461bcd60e51b815260206004820152600e60248201527f566572696679206661696c6564210000000000000000000000000000000000006044820152606401610666565b8415610d9157610d12730d500b1d8e8ef31e21c99d1db9a6444d3adf12708987611934565b6040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101869052730d500b1d8e8ef31e21c99d1db9a6444d3adf127090632e1a7d4d90602401600060405180830381600087803b158015610d7857600080fd5b505af1158015610d8c573d6000803e3d6000fd5b505050505b6001600160a01b03881660009081526008602052604090205484903490610db9908890612677565b610dc39190612677565b1015610e115760405162461bcd60e51b815260206004820152600a60248201527f496e736f6c76656e7421000000000000000000000000000000000000000000006044820152606401610666565b6001600160a01b03881660009081526008602052604090205484903490610e39908890612677565b610e439190612677565b610e4d919061268a565b6001600160a01b0389166000908152600860205260409020558315610e8257600754610e82906001600160a01b031685611784565b7f05c00e3ec57dfa7b15014254132c44ae2826c4de581f47d19c0c0a18e5a5448f88610eae3488612677565b604080516001600160a01b0390931683526020830191909152810186905260600160405180910390a15050505050505050565b6001546001600160a01b03163314610f3b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610666565b610f456000611a37565b565b60048054610f5490612727565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8090612727565b8015610fcd5780601f10610fa257610100808354040283529160200191610fcd565b820191906000526020600020905b815481529060010190602001808311610fb057829003601f168201915b505050505081565b6006546001600160a01b0316331461102f5760405162461bcd60e51b815260206004820152600760248201527f215369676e6572000000000000000000000000000000000000000000000000006044820152606401610666565b6001600160a01b03821660009081526008602052604090205481111561105457600080fd5b6001600160a01b0382166000908152600860205260408120805483929061107c90849061268a565b9091555050600754611097906001600160a01b031682611784565b5050565b6000806000806110aa856110c9565b919450925090506110bd86828585611aa1565b93505050505b92915050565b6000806000835160411461111f5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610666565b50505060208101516040820151606090920151909260009190911a90565b6002546001600160a01b031633146111975760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652074696d656c6f636b2e00000000006044820152606401610666565b6001600160a01b0381166111aa57600080fd5b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f087857e9a8e6bcdb5918f98e558ad983e7c50ec69df7912e2103379d0afa61f7906020016106d1565b6002546001600160a01b0316331461126a5760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652074696d656c6f636b2e00000000006044820152606401610666565b306001600160a01b037f0000000000000000000000001c8126e02e8a7dac69fd6444ef0b8be5430df77616146112e25760405162461bcd60e51b815260206004820152600d60248201527f21496e76616c69642063616c6c000000000000000000000000000000000000006044820152606401610666565b60005b82518110156113e15760008382815181106113025761130261277a565b6020026020010151905060006001600160a01b0316816001600160a01b03160361132c57506113cf565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561138c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b091906127a9565b905080156113cc576113cc6001600160a01b038316858361186d565b50505b806113d9816127c2565b9150506112e5565b504780156113f3576113f38282611784565b505050565b6001546001600160a01b031633146114525760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610666565b6001600160a01b0381166114ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610666565b6114d781611a37565b50565b6006546001600160a01b031633146115345760405162461bcd60e51b815260206004820152600760248201527f215369676e6572000000000000000000000000000000000000000000000000006044820152606401610666565b80518251146115855760405162461bcd60e51b815260206004820152600d60248201527f6c656e677468206572726f7221000000000000000000000000000000000000006044820152606401610666565b60005b82518110156113f3578181815181106115a3576115a361277a565b6020026020010151600860008584815181106115c1576115c161277a565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806115f8906127c2565b915050611588565b6000428310156116525760405162461bcd60e51b815260206004820152601160248201527f5369676e617475726520657870697265640000000000000000000000000000006044820152606401610666565b6001600160a01b038616600090815260208190526040812080546116fc91899189918991899187611682836127c2565b919050556040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660208201526034810185905283151560f81b6054820152605581018390526075810182905260009060950160405160208183030381529060405280519060200120905095945050505050565b90506000611757826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b9050886001600160a01b031661176d828661109b565b6001600160a01b0316149998505050505050505050565b801561109757604080516000808252602082019092526001600160a01b0384169083906040516117b491906127fa565b60006040518083038185875af1925050503d80600081146117f1576040519150601f19603f3d011682016040523d82523d6000602084013e6117f6565b606091505b50509050806113f35760405162461bcd60e51b815260206004820152603060248201527f68656c7065723a3a736166655472616e736665724d415449433a204d4154494360448201527f207472616e73666572206661696c6564000000000000000000000000000000006064820152608401610666565b6040516001600160a01b0383166024820152604481018290526113f39084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611ac9565b8060000361194157505050565b6001600160a01b0383161580159061197657506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b61197f57600080fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600091908516906370a0823190602401602060405180830381865afa1580156119e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0691906127a9565b90506000828210611a175782611a19565b815b9050611a306001600160a01b038616853084611bae565b5050505050565b600180546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806000611ab287878787611c05565b91509150611abf81611d10565b5095945050505050565b6000611b1e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611efc9092919063ffffffff16565b8051909150156113f35780806020019051810190611b3c9190612816565b6113f35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610666565b6040516001600160a01b0380851660248301528316604482015260648101829052611bff9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016118b2565b50505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611c3c5750600090506003611d07565b8460ff16601b14158015611c5457508460ff16601c14155b15611c655750600090506004611d07565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611cb9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001519150506001600160a01b038116611d0057600060019250925050611d07565b9150600090505b94509492505050565b6000816004811115611d2457611d24612833565b03611d2c5750565b6001816004811115611d4057611d40612833565b03611d8d5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610666565b6002816004811115611da157611da1612833565b03611dee5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610666565b6003816004811115611e0257611e02612833565b03611e755760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610666565b6004816004811115611e8957611e89612833565b036114d75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610666565b6060611f0b8484600085611f15565b90505b9392505050565b606082471015611f8d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610666565b6001600160a01b0385163b611fe45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610666565b600080866001600160a01b0316858760405161200091906127fa565b60006040518083038185875af1925050503d806000811461203d576040519150601f19603f3d011682016040523d82523d6000602084013e612042565b606091505b509150915061205282828661205d565b979650505050505050565b6060831561206c575081611f0e565b82511561207c5782518084602001fd5b8160405162461bcd60e51b815260040161066691906121aa565b6001600160a01b03811681146114d757600080fd5b6000602082840312156120bd57600080fd5b8135611f0e81612096565b600080604083850312156120db57600080fd5b82356120e681612096565b915060208301356120f681612096565b809150509250929050565b60008060006040848603121561211657600080fd5b833561212181612096565b9250602084013567ffffffffffffffff8082111561213e57600080fd5b818601915086601f83011261215257600080fd5b81358181111561216157600080fd5b87602082850101111561217357600080fd5b6020830194508093505050509250925092565b60005b838110156121a1578181015183820152602001612189565b50506000910152565b60208152600082518060208401526121c9816040850160208701612186565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806040838503121561220e57600080fd5b823561221981612096565b946020939093013593505050565b80151581146114d757600080fd5b600080600080600060a0868803121561224d57600080fd5b853561225881612096565b945060208601359350604086013561226f81612227565b94979396509394606081013594506080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156122fd576122fd612287565b604052919050565b600082601f83011261231657600080fd5b813567ffffffffffffffff81111561233057612330612287565b61236160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016122b6565b81815284602083860101111561237657600080fd5b816020850160208301376000918101602001919091529392505050565b600080604083850312156123a657600080fd5b82359150602083013567ffffffffffffffff8111156123c457600080fd5b6123d085828601612305565b9150509250929050565b6000602082840312156123ec57600080fd5b813567ffffffffffffffff81111561240357600080fd5b61240f84828501612305565b949350505050565b600067ffffffffffffffff82111561243157612431612287565b5060051b60200190565b600082601f83011261244c57600080fd5b8135602061246161245c83612417565b6122b6565b82815260059290921b8401810191818101908684111561248057600080fd5b8286015b848110156124a457803561249781612096565b8352918301918301612484565b509695505050505050565b600080604083850312156124c257600080fd5b823567ffffffffffffffff8111156124d957600080fd5b6124e58582860161243b565b92505060208301356120f681612096565b60006020828403121561250857600080fd5b5035919050565b6000806040838503121561252257600080fd5b823567ffffffffffffffff8082111561253a57600080fd5b6125468683870161243b565b935060209150818501358181111561255d57600080fd5b85019050601f8101861361257057600080fd5b803561257e61245c82612417565b81815260059190911b8201830190838101908883111561259d57600080fd5b928401925b828410156125bb578335825292840192908401906125a2565b80955050505050509250929050565b60008060008060008060c087890312156125e357600080fd5b86356125ee81612227565b95506020870135945060408701359350606087013561260c81612227565b92506080870135915060a087013567ffffffffffffffff81111561262f57600080fd5b61263b89828a01612305565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156110c3576110c3612648565b818103818111156110c3576110c3612648565b6000602082840312156126af57600080fd5b8151611f0e81612096565b600080600080600060a086880312156126d257600080fd5b853594506020860135935060408601356126eb81612227565b925060608601359150608086013567ffffffffffffffff81111561270e57600080fd5b61271a88828901612305565b9150509295509295909350565b600181811c9082168061273b57607f821691505b602082108103612774577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156127bb57600080fd5b5051919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127f3576127f3612648565b5060010190565b6000825161280c818460208701612186565b9190910192915050565b60006020828403121561282857600080fd5b8151611f0e81612227565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea26469706673582212208a9c173bb4177e7a2addb11fdb6b9f8309827f1470055d897633e322741804e964736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000907883da917ca9750ad202ff6395c4c6ab14e60e000000000000000000000000ce672de0d2d38944716c21bca7db1164685af2ac
-----Decoded View---------------
Arg [0] : _adapterManager (address): 0x907883da917ca9750ad202ff6395C4C6aB14e60E
Arg [1] : _timelock (address): 0xCe672de0D2d38944716c21BCA7DB1164685Af2aC
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000907883da917ca9750ad202ff6395c4c6ab14e60e
Arg [1] : 000000000000000000000000ce672de0d2d38944716c21bca7db1164685af2acLoading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingMultichain Portfolio | 30 Chains
Chain Token Portfolio % Price Amount Value POL Polygon (POL)100.00% $0.513071 12,943.9615 $6,641.17 [ 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.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to VerbatimInvalidDeduplication (low-severity), FullInlinerNonExpressionSplitArgumentEvaluationOrder (low-severity), MissingSideEffectsOnSelectorAccess (low-severity) Solidity Compiler Bugs.
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Before You Copy
Transaction Private Note
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.