Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 207 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Token Loc... | 20361226 | 17 hrs ago | IN | 0 ETH | 0.00687635 | ||||
Create Token Loc... | 20357482 | 29 hrs ago | IN | 0 ETH | 0.01710772 | ||||
Create Token Loc... | 20357153 | 31 hrs ago | IN | 0 ETH | 0.02220967 | ||||
Create Token Loc... | 20344962 | 2 days ago | IN | 0 ETH | 0.00414092 | ||||
Create Token Loc... | 20341947 | 3 days ago | IN | 0 ETH | 0.01372515 | ||||
Create Token Loc... | 20339623 | 3 days ago | IN | 0 ETH | 0.00841509 | ||||
Create Token Loc... | 20333401 | 4 days ago | IN | 0 ETH | 0.01482516 | ||||
Create Token Loc... | 20327855 | 5 days ago | IN | 0 ETH | 0.01356012 | ||||
Create Token Loc... | 20326445 | 5 days ago | IN | 0 ETH | 0.01199401 | ||||
Create Token Loc... | 20303963 | 8 days ago | IN | 0 ETH | 0.00367182 | ||||
Create Token Loc... | 20301706 | 9 days ago | IN | 0 ETH | 0.00395709 | ||||
Create Token Loc... | 20278680 | 12 days ago | IN | 0 ETH | 0.00689712 | ||||
Create Token Loc... | 20276964 | 12 days ago | IN | 0 ETH | 0.02593348 | ||||
Create Token Loc... | 20263072 | 14 days ago | IN | 0 ETH | 0.0096058 | ||||
Create Token Loc... | 20256334 | 15 days ago | IN | 0 ETH | 0.00441216 | ||||
Create Token Loc... | 20255532 | 15 days ago | IN | 0 ETH | 0.00257318 | ||||
Create Token Loc... | 20243561 | 17 days ago | IN | 0 ETH | 0.00274175 | ||||
Create Token Loc... | 20235009 | 18 days ago | IN | 0 ETH | 0.01172692 | ||||
Create Token Loc... | 20216507 | 20 days ago | IN | 0 ETH | 0.00433795 | ||||
Create Token Loc... | 20216503 | 20 days ago | IN | 0 ETH | 0.00419294 | ||||
Create Token Loc... | 20216496 | 20 days ago | IN | 0 ETH | 0.00396642 | ||||
Create Token Loc... | 20216460 | 20 days ago | IN | 0 ETH | 0.00549116 | ||||
Create Token Loc... | 20216448 | 20 days ago | IN | 0 ETH | 0.00573197 | ||||
Create Token Loc... | 20216436 | 20 days ago | IN | 0 ETH | 0.00489836 | ||||
Create Token Loc... | 20187026 | 25 days ago | IN | 0 ETH | 0.0066818 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
TokenLockerManagerV1
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED /** /$$$$$$ /$$ /$$ /$$ /$$__ $$ | $$ | $$$ /$$$ | $$ \ $$ /$$$$$$$ | $$ /$$ /$$| $$$$ /$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$$ | $$ | $$| $$__ $$| $$| $$ | $$| $$ $$/$$ $$ /$$__ $$ /$$__ $$| $$__ $$ /$$_____/ | $$ | $$| $$ \ $$| $$| $$ | $$| $$ $$$| $$| $$ \ $$| $$ \ $$| $$ \ $$| $$$$$$ | $$ | $$| $$ | $$| $$| $$ | $$| $$\ $ | $$| $$ | $$| $$ | $$| $$ | $$ \____ $$ | $$$$$$/| $$ | $$| $$| $$$$$$$| $$ \/ | $$| $$$$$$/| $$$$$$/| $$ | $$ /$$$$$$$/ \______/ |__/ |__/|__/ \____ $$|__/ |__/ \______/ \______/ |__/ |__/|_______/ /$$ | $$ | $$$$$$/ \______/ https://onlymoons.io/ */ pragma solidity ^0.8.0; import { ITokenLockerManagerV1 } from "./ITokenLockerManagerV1.sol"; import { Ownable } from "./Ownable.sol"; import { IERC20 } from "./library/IERC20.sol"; import { TokenLockerV1 } from "./TokenLockerV1.sol"; contract TokenLockerManagerV1 is ITokenLockerManagerV1, Ownable { event TokenLockerCreated( uint40 id, address indexed token, /** @dev LP token pair addresses - these will be address(0) for regular tokens */ address indexed token0, address indexed token1, address createdBy, uint256 balance, uint40 unlockTime ); constructor() Ownable(_msgSender()) { _creationEnabled = true; } bool private _creationEnabled; uint40 private _tokenLockerCount; /** @dev main mapping for lock data */ mapping(uint40 => TokenLockerV1) private _tokenLockers; /** * @dev this mapping makes it possible to search for locks, * at the cost of paying higher gas fees to store the data. */ mapping(address => uint40[]) private _tokenLockersForAddress; modifier allowCreation() { require(_creationEnabled, "Locker creation is disabled"); _; } function tokenLockerCount() external view override returns (uint40) { return _tokenLockerCount; } function creationEnabled() external view override returns (bool) { return _creationEnabled; } /** * @dev allow turning off new lockers from being created, so that we can * migrate to new versions of the contract & stop people from locking * with the older versions. this will not prevent extending, depositing, * or withdrawing from old locks - it only stops new locks from being created. */ function setCreationEnabled(bool value_) external override onlyOwner { _creationEnabled = value_; } function createTokenLocker( address tokenAddress_, uint256 amount_, uint40 unlockTime_ ) external override allowCreation { uint40 id = _tokenLockerCount++; _tokenLockers[id] = new TokenLockerV1(address(this), id, _msgSender(), tokenAddress_, unlockTime_); address lockerAddress = address(_tokenLockers[id]); IERC20 token = IERC20(tokenAddress_); token.transferFrom(_msgSender(), lockerAddress, amount_); // add the creator to the token locker mapping, so it's // able to be searched. _tokenLockersForAddress[_msgSender()].push(id); // add the locked token to the token lockers mapping _tokenLockersForAddress[tokenAddress_].push(id); // add the locker contract to this mapping as well, so it's // searchable in the same way as tokens within the locker. _tokenLockersForAddress[lockerAddress].push(id); // get lp data (bool hasLpData,,address token0Address,address token1Address,,,,) = _tokenLockers[id].getLpData(); // if this is an lp token, also add the paired tokens to the mapping if (hasLpData) { _tokenLockersForAddress[token0Address].push(id); _tokenLockersForAddress[token1Address].push(id); } emit TokenLockerCreated( id, tokenAddress_, token0Address, token1Address, _msgSender(), token.balanceOf(lockerAddress), unlockTime_ ); } /** * @return the address of a locker contract with the given id */ function getTokenLockAddress(uint40 id_) external view override returns (address) { return address(_tokenLockers[id_]); } function getTokenLockData(uint40 id_) external view override returns ( bool isLpToken, uint40 id, address contractAddress, address lockOwner, address token, address createdBy, uint40 createdAt, uint40 unlockTime, uint256 balance, uint256 totalSupply ){ return _tokenLockers[id_].getLockData(); } function getLpData(uint40 id_) external view override returns ( bool hasLpData, uint40 id, address token0, address token1, uint256 balance0, uint256 balance1, uint256 price0, uint256 price1 ) { return _tokenLockers[id_].getLpData(); } /** @return an array of locker ids matching the given search address */ function getTokenLockersForAddress(address address_) external view override returns (uint40[] memory) { return _tokenLockersForAddress[address_]; } /** * @dev this gets called from TokenLockerV1. * it notifies this contract of the owner change so we can modify the search index */ function notifyLockerOwnerChange(uint40 id_, address newOwner_, address previousOwner_, address createdBy_) external override { require( _msgSender() == address(_tokenLockers[id_]), "Only the locker contract can call this function" ); // remove the previous owner from the locker address mapping, // only if it's not the same address as the creator. if (previousOwner_ != createdBy_) { for (uint256 i = 0; i < _tokenLockersForAddress[previousOwner_].length; i++) { // continue searching for id_ in the array until we find a match if (_tokenLockersForAddress[previousOwner_][i] != id_) continue; // replace the old item at this index with the last value. // we don't care about the order. _tokenLockersForAddress[previousOwner_][i] = _tokenLockersForAddress[ previousOwner_][_tokenLockersForAddress[previousOwner_].length - 1 ]; // remove the last item in the array, since we just moved it _tokenLockersForAddress[previousOwner_].pop(); // and we're done break; } } // push the new owner to the lockers address mapping so the new owner is searchable, // only if they don't already have this id in the lockers address mapping. bool hasId = false; // look for the id in the new owners address mapping for (uint256 i = 0; i < _tokenLockersForAddress[newOwner_].length; i++) { if (_tokenLockersForAddress[newOwner_][i] == id_) { hasId = true; break; } } // only add the id if they didn't already have it if (!hasId) { _tokenLockersForAddress[newOwner_].push(id_); } } }
// SPDX-License-Identifier: UNLICENSED /** /$$$$$$ /$$ /$$ /$$ /$$__ $$ | $$ | $$$ /$$$ | $$ \ $$ /$$$$$$$ | $$ /$$ /$$| $$$$ /$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$$ | $$ | $$| $$__ $$| $$| $$ | $$| $$ $$/$$ $$ /$$__ $$ /$$__ $$| $$__ $$ /$$_____/ | $$ | $$| $$ \ $$| $$| $$ | $$| $$ $$$| $$| $$ \ $$| $$ \ $$| $$ \ $$| $$$$$$ | $$ | $$| $$ | $$| $$| $$ | $$| $$\ $ | $$| $$ | $$| $$ | $$| $$ | $$ \____ $$ | $$$$$$/| $$ | $$| $$| $$$$$$$| $$ \/ | $$| $$$$$$/| $$$$$$/| $$ | $$ /$$$$$$$/ \______/ |__/ |__/|__/ \____ $$|__/ |__/ \______/ \______/ |__/ |__/|_______/ /$$ | $$ | $$$$$$/ \______/ https://onlymoons.io/ */ pragma solidity ^0.8.0; interface ITokenLockerManagerV1 { function tokenLockerCount() external view returns (uint40); function creationEnabled() external view returns (bool); function setCreationEnabled(bool value_) external; function createTokenLocker( address tokenAddress_, uint256 amount_, uint40 unlockTime_ ) external; function getTokenLockAddress(uint40 id_) external view returns (address); function getTokenLockData(uint40 id_) external view returns ( bool isLpToken, uint40 id, address contractAddress, address lockOwner, address token, address createdBy, uint40 createdAt, uint40 unlockTime, uint256 balance, uint256 totalSupply ); function getLpData(uint40 id_) external view returns ( bool hasLpData, uint40 id, address token0, address token1, uint256 balance0, uint256 balance1, uint256 price0, uint256 price1 ); function getTokenLockersForAddress(address address_) external view returns (uint40[] memory); function notifyLockerOwnerChange(uint40 id_, address newOwner_, address previousOwner_, address createdBy_) external; }
// SPDX-License-Identifier: UNLICENSED /** /$$$$$$ /$$ /$$ /$$ /$$__ $$ | $$ | $$$ /$$$ | $$ \ $$ /$$$$$$$ | $$ /$$ /$$| $$$$ /$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$$ | $$ | $$| $$__ $$| $$| $$ | $$| $$ $$/$$ $$ /$$__ $$ /$$__ $$| $$__ $$ /$$_____/ | $$ | $$| $$ \ $$| $$| $$ | $$| $$ $$$| $$| $$ \ $$| $$ \ $$| $$ \ $$| $$$$$$ | $$ | $$| $$ | $$| $$| $$ | $$| $$\ $ | $$| $$ | $$| $$ | $$| $$ | $$ \____ $$ | $$$$$$/| $$ | $$| $$| $$$$$$$| $$ \/ | $$| $$$$$$/| $$$$$$/| $$ | $$ /$$$$$$$/ \______/ |__/ |__/|__/ \____ $$|__/ |__/ \______/ \______/ |__/ |__/|_______/ /$$ | $$ | $$$$$$/ \______/ https://onlymoons.io/ */ pragma solidity ^0.8.0; import { Context } from "./library/Context.sol"; /** * @title Ownable * * parent for ownable contracts */ abstract contract Ownable is Context { constructor(address owner_) { _owner_ = owner_; emit OwnershipTransferred(address(0), _owner()); } address private _owner_; event OwnershipTransferred(address indexed oldOwner, address indexed newOwner); function _owner() internal view returns (address) { return _owner_; } function owner() external view returns (address) { return _owner(); } modifier onlyOwner() { require(_owner() == _msgSender(), "Only the owner can execute this function"); _; } function _transferOwnership(address newOwner_) virtual internal onlyOwner { // keep track of old owner for event address oldOwner = _owner(); // set the new owner _owner_ = newOwner_; // emit event about ownership change emit OwnershipTransferred(oldOwner, _owner()); } function transferOwnership(address newOwner_) external onlyOwner { _transferOwnership(newOwner_); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.0.0/contracts/token/ERC20/IERC20.sol interface IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: UNLICENSED /** /$$$$$$ /$$ /$$ /$$ /$$__ $$ | $$ | $$$ /$$$ | $$ \ $$ /$$$$$$$ | $$ /$$ /$$| $$$$ /$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$$ | $$ | $$| $$__ $$| $$| $$ | $$| $$ $$/$$ $$ /$$__ $$ /$$__ $$| $$__ $$ /$$_____/ | $$ | $$| $$ \ $$| $$| $$ | $$| $$ $$$| $$| $$ \ $$| $$ \ $$| $$ \ $$| $$$$$$ | $$ | $$| $$ | $$| $$| $$ | $$| $$\ $ | $$| $$ | $$| $$ | $$| $$ | $$ \____ $$ | $$$$$$/| $$ | $$| $$| $$$$$$$| $$ \/ | $$| $$$$$$/| $$$$$$/| $$ | $$ /$$$$$$$/ \______/ |__/ |__/|__/ \____ $$|__/ |__/ \______/ \______/ |__/ |__/|_______/ /$$ | $$ | $$$$$$/ \______/ https://onlymoons.io/ */ pragma solidity ^0.8.0; import { ITokenLockerManagerV1 } from "./ITokenLockerManagerV1.sol"; import { Ownable } from "./Ownable.sol"; import { IUniswapV2Pair } from "./library/Dex.sol"; import { IERC20 } from "./library/IERC20.sol"; import { Util } from "./Util.sol"; contract TokenLockerV1 is Ownable { event Extended(uint40 newUnlockTime); event Deposited(uint256 amount); event Withdrew(); constructor(address manager_, uint40 id_, address owner_, address tokenAddress_, uint40 unlockTime_) Ownable(owner_) { require(unlockTime_ > uint40(block.timestamp), "Unlock time must be in the future"); _manager = ITokenLockerManagerV1(manager_); _id = id_; _token = IERC20(tokenAddress_); _createdBy = owner_; _createdAt = uint40(block.timestamp); _unlockTime = unlockTime_; _isLpToken = Util.isLpToken(tokenAddress_); } ITokenLockerManagerV1 private _manager; bool private _isLpToken; uint40 private _id; IERC20 private _token; address private _createdBy; uint40 private _createdAt; uint40 private _unlockTime; bool private _transferLocked; modifier transferLocked() { require(!_transferLocked, "Transfering is locked. Wait for the previous transaction to complete"); _transferLocked = true; _; _transferLocked = false; } function _balance() private view returns (uint256) { return _token.balanceOf(address(this)); } function getIsLpToken() external view returns (bool) { return _isLpToken; } function getLockData() external view returns ( bool isLpToken, uint40 id, address contractAddress, address lockOwner, address token, address createdBy, uint40 createdAt, uint40 unlockTime, uint256 balance, uint256 totalSupply ){ isLpToken = _isLpToken; id = _id; contractAddress = address(this); lockOwner = _owner(); token = address(_token); createdBy = _createdBy; createdAt = _createdAt; unlockTime = _unlockTime; balance = _balance(); totalSupply = _token.totalSupply(); } function getLpData() external view returns ( bool hasLpData, uint40 id, address token0, address token1, uint256 balance0, uint256 balance1, uint256 price0, uint256 price1 ) { // always return the id id = _id; if (!_isLpToken) { // if this isn't an lp token, don't even bother calling getLpData hasLpData = false; } else { // this is an lp token, so let's get some data try Util.getLpData(address(_token)) returns ( address token0_, address token1_, uint256 balance0_, uint256 balance1_, uint256 price0_, uint256 price1_ ){ hasLpData = true; token0 = token0_; token1 = token1_; balance0 = balance0_; balance1 = balance1_; price0 = price0_; price1 = price1_; } catch Error(string memory /* reason */) { hasLpData = false; } catch (bytes memory /* lowLevelData */) { hasLpData = false; } } } /** * @dev deposit and extend duration in one call */ function deposit(uint256 amount_, uint40 newUnlockTime_) external onlyOwner transferLocked { if (newUnlockTime_ != 0) { require( newUnlockTime_ >= _unlockTime && newUnlockTime_ >= uint40(block.timestamp), "New unlock time must be a future time beyond the previous value" ); _unlockTime = newUnlockTime_; emit Extended(_unlockTime); } if (amount_ != 0) { uint256 oldBalance = _balance(); _token.transferFrom(_msgSender(), address(this), amount_); emit Deposited(_balance() - oldBalance); } } /** * @dev withdraw all of the deposited token */ function withdraw() external onlyOwner transferLocked { require(uint40(block.timestamp) >= _unlockTime, "Wait until unlockTime to withdraw"); _token.transfer(_owner(), _balance()); emit Withdrew(); } /** * @dev recovery function - * just in case this contract winds up with additional tokens (from dividends, etc). * attempting to withdraw the locked token will revert. */ function withdrawToken(address address_) external onlyOwner transferLocked { require(address_ != address(_token), "Use 'withdraw' to withdraw the primary locked token"); IERC20 theToken = IERC20(address_); theToken.transfer(_owner(), theToken.balanceOf(address(this))); } /** * @dev recovery function - * just in case this contract winds up with eth in it (from dividends etc) */ function withdrawEth() external onlyOwner transferLocked { address payable receiver = payable(_owner()); receiver.transfer(address(this).balance); } function _transferOwnership(address newOwner_) override internal onlyOwner { address previousOwner = _owner(); super._transferOwnership(newOwner_); // we need to notify the manager contract that we transferred // ownership, so that the new owner is searchable. _manager.notifyLockerOwnerChange(_id, newOwner_, previousOwner, _createdBy); } receive() external payable { // we need this function to receive eth, // which might happen from dividend tokens. // use `withdrawEth` to remove eth from the contract. } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.3.2 (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 pragma solidity >=0.6.2; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: UNLICENSED /** /$$$$$$ /$$ /$$ /$$ /$$__ $$ | $$ | $$$ /$$$ | $$ \ $$ /$$$$$$$ | $$ /$$ /$$| $$$$ /$$$$ /$$$$$$ /$$$$$$ /$$$$$$$ /$$$$$$$ | $$ | $$| $$__ $$| $$| $$ | $$| $$ $$/$$ $$ /$$__ $$ /$$__ $$| $$__ $$ /$$_____/ | $$ | $$| $$ \ $$| $$| $$ | $$| $$ $$$| $$| $$ \ $$| $$ \ $$| $$ \ $$| $$$$$$ | $$ | $$| $$ | $$| $$| $$ | $$| $$\ $ | $$| $$ | $$| $$ | $$| $$ | $$ \____ $$ | $$$$$$/| $$ | $$| $$| $$$$$$$| $$ \/ | $$| $$$$$$/| $$$$$$/| $$ | $$ /$$$$$$$/ \______/ |__/ |__/|__/ \____ $$|__/ |__/ \______/ \______/ |__/ |__/|_______/ /$$ | $$ | $$$$$$/ \______/ https://onlymoons.io/ */ pragma solidity ^0.8.0; import { IERC20 } from "./library/IERC20.sol"; import { IUniswapV2Pair } from "./library/Dex.sol"; library Util { /** * @dev retrieves basic information about a token, including sender balance */ function getTokenData(address address_) external view returns ( string memory name, string memory symbol, uint8 decimals, uint256 totalSupply, uint256 balance ){ IERC20 _token = IERC20(address_); name = _token.name(); symbol = _token.symbol(); decimals = _token.decimals(); totalSupply = _token.totalSupply(); balance = _token.balanceOf(msg.sender); } /** * @dev this throws an error on false, instead of returning false, * but can still be used the same way on frontend. */ function isLpToken(address address_) external view returns (bool) { IUniswapV2Pair pair = IUniswapV2Pair(address_); try pair.token0() returns (address tokenAddress_) { // any address returned successfully should be valid? // but we might as well check that it's not 0 return tokenAddress_ != address(0); } catch Error(string memory /* reason */) { return false; } catch (bytes memory /* lowLevelData */) { return false; } } /** * @dev this function will revert the transaction if it's called * on a token that isn't an LP token. so, it's recommended to be * sure that it's being called on an LP token, or expect the error. */ function getLpData(address address_) external view returns ( address token0, address token1, uint256 balance0, uint256 balance1, uint256 price0, uint256 price1 ) { IUniswapV2Pair _pair = IUniswapV2Pair(address_); token0 = _pair.token0(); token1 = _pair.token1(); balance0 = IERC20(token0).balanceOf(address(_pair)); balance1 = IERC20(token1).balanceOf(address(_pair)); price0 = _pair.price0CumulativeLast(); price1 = _pair.price1CumulativeLast(); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": { "contracts/Util.sol": { "Util": "0x8bf6fa865f15887a95d3af202ab34ed0c754a2de" } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint40","name":"id","type":"uint40"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"createdBy","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":false,"internalType":"uint40","name":"unlockTime","type":"uint40"}],"name":"TokenLockerCreated","type":"event"},{"inputs":[{"internalType":"address","name":"tokenAddress_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"uint40","name":"unlockTime_","type":"uint40"}],"name":"createTokenLocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint40","name":"id_","type":"uint40"}],"name":"getLpData","outputs":[{"internalType":"bool","name":"hasLpData","type":"bool"},{"internalType":"uint40","name":"id","type":"uint40"},{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"},{"internalType":"uint256","name":"balance0","type":"uint256"},{"internalType":"uint256","name":"balance1","type":"uint256"},{"internalType":"uint256","name":"price0","type":"uint256"},{"internalType":"uint256","name":"price1","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint40","name":"id_","type":"uint40"}],"name":"getTokenLockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint40","name":"id_","type":"uint40"}],"name":"getTokenLockData","outputs":[{"internalType":"bool","name":"isLpToken","type":"bool"},{"internalType":"uint40","name":"id","type":"uint40"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"address","name":"lockOwner","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"createdBy","type":"address"},{"internalType":"uint40","name":"createdAt","type":"uint40"},{"internalType":"uint40","name":"unlockTime","type":"uint40"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"getTokenLockersForAddress","outputs":[{"internalType":"uint40[]","name":"","type":"uint40[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint40","name":"id_","type":"uint40"},{"internalType":"address","name":"newOwner_","type":"address"},{"internalType":"address","name":"previousOwner_","type":"address"},{"internalType":"address","name":"createdBy_","type":"address"}],"name":"notifyLockerOwnerChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value_","type":"bool"}],"name":"setCreationEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenLockerCount","outputs":[{"internalType":"uint40","name":"","type":"uint40"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b1916600160a01b179055612652806100746000396000f3fe60806040523480156200001157600080fd5b5060043610620000b75760003560e01c806383a1364a116200007a57806383a1364a146200019d5780638da5cb5b14620001c3578063a28a1f7114620001e9578063a6817117146200021c578063cde7cced1462000299578063f2fde38b14620002b057600080fd5b806322df78d014620000bc57806326f3ed2b14620000de57806336ed16e214620001065780634c7ababd146200016d5780636a5dab9f1462000186575b600080fd5b600054600160a01b900460ff1660405190151581526020015b60405180910390f35b600054600160a81b900464ffffffffff1660405164ffffffffff9091168152602001620000d5565b6200011d6200011736600462000e9a565b620002c7565b60408051981515895264ffffffffff90971660208901526001600160a01b0395861696880196909652939092166060860152608085015260a084015260c083015260e082015261010001620000d5565b620001846200017e36600462000ed7565b62000388565b005b620001846200019736600462000f4b565b62000730565b620001b4620001ae36600462000f6b565b6200077b565b604051620000d5919062000f8b565b6000546001600160a01b03165b6040516001600160a01b039091168152602001620000d5565b620001d0620001fa36600462000e9a565b64ffffffffff166000908152600160205260409020546001600160a01b031690565b620002336200022d36600462000e9a565b62000817565b604080519a15158b5264ffffffffff998a1660208c01526001600160a01b03988916908b015295871660608a015293861660808901529190941660a087015292841660c08601529190921660e084015261010083015261012082015261014001620000d5565b62000184620002aa36600462000fd8565b620008e1565b62000184620002c136600462000f6b565b62000dc0565b600080600080600080600080600160008a64ffffffffff1664ffffffffff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663af74e6296040518163ffffffff1660e01b815260040161010060405180830381865afa15801562000347573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036d91906200101f565b97509750975097509750975097509750919395975091939597565b64ffffffffff84166000908152600160205260409020546001600160a01b0316336001600160a01b0316146200041d5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c7920746865206c6f636b657220636f6e74726163742063616e2063616c60448201526e36103a3434b990333ab731ba34b7b760891b60648201526084015b60405180910390fd5b806001600160a01b0316826001600160a01b031614620006215760005b6001600160a01b0383166000908152600260205260409020548110156200061f576001600160a01b0383166000908152600260205260409020805464ffffffffff8716919083908110620004925762000492620010ae565b90600052602060002090600691828204019190066005029054906101000a900464ffffffffff1664ffffffffff1614620004cc576200060a565b6001600160a01b03831660009081526002602052604090208054620004f490600190620010da565b81548110620005075762000507620010ae565b90600052602060002090600691828204019190066005029054906101000a900464ffffffffff1660026000856001600160a01b03166001600160a01b031681526020019081526020016000208281548110620005675762000567620010ae565b90600052602060002090600691828204019190066005026101000a81548164ffffffffff021916908364ffffffffff16021790555060026000846001600160a01b03166001600160a01b03168152602001908152602001600020805480620005d357620005d3620010f4565b60019003818190600052602060002090600691828204019190066005026101000a81549064ffffffffff021916905590556200061f565b8062000616816200110a565b9150506200043a565b505b6000805b6001600160a01b038516600090815260026020526040902054811015620006d1576001600160a01b0385166000908152600260205260409020805464ffffffffff88169190839081106200067d576200067d620010ae565b90600052602060002090600691828204019190066005029054906101000a900464ffffffffff1664ffffffffff161415620006bc5760019150620006d1565b80620006c8816200110a565b91505062000625565b508062000729576001600160a01b038416600090815260026020908152604082208054600181018255908352912060068083049091018054919092066005026101000a64ffffffffff81810219909216918816021790555b5050505050565b6000546001600160a01b031633146200075d5760405162461bcd60e51b8152600401620004149062001128565b60008054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b0381166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156200080b57602002820191906000526020600020906000905b82829054906101000a900464ffffffffff1664ffffffffff1681526020019060050190602082600401049283019260010382029150808411620007cb5790505b50505050509050919050565b600080600080600080600080600080600160008c64ffffffffff1664ffffffffff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b0316634c02bf0b6040518163ffffffff1660e01b815260040161014060405180830381865afa1580156200089a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c0919062001170565b99509950995099509950995099509950995099509193959799509193959799565b600054600160a01b900460ff166200093c5760405162461bcd60e51b815260206004820152601b60248201527f4c6f636b6572206372656174696f6e2069732064697361626c65640000000000604482015260640162000414565b60008054600160a81b900464ffffffffff168160156200095c8362001246565b91906101000a81548164ffffffffff021916908364ffffffffff16021790555090503081620009883390565b8685604051620009989062000e78565b6001600160a01b03958616815264ffffffffff94851660208201529285166040840152931660608201529116608082015260a001604051809103906000f080158015620009e9573d6000803e3d6000fd5b5064ffffffffff8216600090815260016020526040902080546001600160a01b0319166001600160a01b0392831690811790915590859081166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b0391821660048201529085166024820152604481018890526064016020604051808303816000875af115801562000a7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aa491906200126e565b503360009081526002602090815260408083208054600180820183559185528385206006808304909101805464ffffffffff8b8116600595859006860261010090810a82810290840219909416939093179093556001600160a01b038f81168a52878a2080548089018255908b52898b20868204018054918790068802850a808702908502199092169190911790558b81168a52878a2080548089018255908b52898b2086820401805496909106909602830a8085029202199094161790935586529190935281842054825163af74e62960e01b8152925185948594929093169263af74e62992600480820193918290030181865afa15801562000bac573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bd291906200101f565b5050505093509350509250821562000ccb5760026000836001600160a01b03166001600160a01b031681526020019081526020016000208690806001815401808255809150506001900390600052602060002090600691828204019190066005029091909190916101000a81548164ffffffffff021916908364ffffffffff16021790555060026000826001600160a01b03166001600160a01b031681526020019081526020016000208690806001815401808255809150506001900390600052602060002090600691828204019190066005029091909190916101000a81548164ffffffffff021916908364ffffffffff1602179055505b806001600160a01b0316826001600160a01b03168a6001600160a01b03167f531cba00a411ade37b4ca8175d92c94149f19536bd8e5a83d581aa7f040d192e8962000d133390565b6040516370a0823160e01b81526001600160a01b038c811660048301528b16906370a0823190602401602060405180830381865afa15801562000d5a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d8091906200128e565b6040805164ffffffffff94851681526001600160a01b039093166020840152820152908c16606082015260800160405180910390a4505050505050505050565b6000546001600160a01b0316331462000ded5760405162461bcd60e51b8152600401620004149062001128565b62000df88162000dfb565b50565b6000546001600160a01b0316331462000e285760405162461bcd60e51b8152600401620004149062001128565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61137480620012a983390190565b64ffffffffff8116811462000df857600080fd5b60006020828403121562000ead57600080fd5b813562000eba8162000e86565b9392505050565b6001600160a01b038116811462000df857600080fd5b6000806000806080858703121562000eee57600080fd5b843562000efb8162000e86565b9350602085013562000f0d8162000ec1565b9250604085013562000f1f8162000ec1565b9150606085013562000f318162000ec1565b939692955090935050565b801515811462000df857600080fd5b60006020828403121562000f5e57600080fd5b813562000eba8162000f3c565b60006020828403121562000f7e57600080fd5b813562000eba8162000ec1565b6020808252825182820181905260009190848201906040850190845b8181101562000fcc57835164ffffffffff168352928401929184019160010162000fa7565b50909695505050505050565b60008060006060848603121562000fee57600080fd5b833562000ffb8162000ec1565b9250602084013591506040840135620010148162000e86565b809150509250925092565b600080600080600080600080610100898b0312156200103d57600080fd5b88516200104a8162000f3c565b60208a01519098506200105d8162000e86565b60408a0151909750620010708162000ec1565b60608a0151909650620010838162000ec1565b60808a015160a08b015160c08c015160e0909c01519a9d999c50979a91999098919650945092505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015620010ef57620010ef620010c4565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415620011215762001121620010c4565b5060010190565b60208082526028908201527f4f6e6c7920746865206f776e65722063616e2065786563757465207468697320604082015267333ab731ba34b7b760c11b606082015260800190565b6000806000806000806000806000806101408b8d0312156200119157600080fd5b8a516200119e8162000f3c565b60208c0151909a50620011b18162000e86565b60408c0151909950620011c48162000ec1565b60608c0151909850620011d78162000ec1565b60808c0151909750620011ea8162000ec1565b60a08c0151909650620011fd8162000ec1565b60c08c0151909550620012108162000e86565b60e08c0151909450620012238162000e86565b809350506101008b015191506101208b015190509295989b9194979a5092959850565b600064ffffffffff80831681811415620012645762001264620010c4565b6001019392505050565b6000602082840312156200128157600080fd5b815162000eba8162000f3c565b600060208284031215620012a157600080fd5b505191905056fe60806040523480156200001157600080fd5b506040516200137438038062001374833981016040819052620000349162000288565b600080546001600160a01b0319166001600160a01b03851617905582620000636000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3504264ffffffffff168164ffffffffff1611620001105760405162461bcd60e51b815260206004820152602160248201527f556e6c6f636b2074696d65206d75737420626520696e207468652066757475726044820152606560f81b606482015260840160405180910390fd5b600180546001600160a01b038781167fffffffffffff0000000000ff000000000000000000000000000000000000000090921691909117600160a81b64ffffffffff8881169190910291909117909255600280546001600160a01b031916858316908117909155600380549287166001600160c81b031990931692909217600160a01b428516021764ffffffffff60c81b1916600160c81b93851693909302929092179055604051630f24ca7d60e01b81526004810191909152738bf6fa865f15887a95d3af202ab34ed0c754a2de90630f24ca7d90602401602060405180830381865af415801562000207573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022d9190620002f8565b60018054911515600160a01b0260ff60a01b1990921691909117905550620003239350505050565b80516001600160a01b03811681146200026d57600080fd5b919050565b805164ffffffffff811681146200026d57600080fd5b600080600080600060a08688031215620002a157600080fd5b620002ac8662000255565b9450620002bc6020870162000272565b9350620002cc6040870162000255565b9250620002dc6060870162000255565b9150620002ec6080870162000272565b90509295509295909350565b6000602082840312156200030b57600080fd5b815180151581146200031c57600080fd5b9392505050565b61104180620003336000396000f3fe60806040526004361061008a5760003560e01c8063a0ef91df11610059578063a0ef91df14610174578063af74e62914610189578063b05fb26f146101ed578063d88e7f4e14610217578063f2fde38b1461023757600080fd5b80633ccfd60b146100965780634c02bf0b146100ad578063894760691461012c5780638da5cb5b1461014c57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100ab610257565b005b3480156100b957600080fd5b506100c2610408565b604080519a15158b5264ffffffffff998a1660208c01526001600160a01b03988916908b015295871660608a015293861660808901529190941660a087015292841660c08601529190921660e0840152610100830152610120820152610140015b60405180910390f35b34801561013857600080fd5b506100ab610147366004610d5c565b610505565b34801561015857600080fd5b506000546040516001600160a01b039091168152602001610123565b34801561018057600080fd5b506100ab6106f6565b34801561019557600080fd5b5061019e6107ba565b60408051981515895264ffffffffff90971660208901526001600160a01b0395861696880196909652939092166060860152608085015260a084015260c083015260e082015261010001610123565b3480156101f957600080fd5b50600154600160a01b900460ff166040519015158152602001610123565b34801561022357600080fd5b506100ab610232366004610d80565b6108fa565b34801561024357600080fd5b506100ab610252366004610d5c565b610b63565b6000546001600160a01b0316331461028a5760405162461bcd60e51b815260040161028190610dba565b60405180910390fd5b600354600160f01b900460ff16156102b45760405162461bcd60e51b815260040161028190610e02565b6003805460ff60f01b1916600160f01b179081905564ffffffffff600160c81b90910481164290911610156103355760405162461bcd60e51b815260206004820152602160248201527f5761697420756e74696c20756e6c6f636b54696d6520746f20776974686472616044820152607760f81b6064820152608401610281565b6002546001600160a01b031663a9059cbb6103586000546001600160a01b031690565b610360610b99565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156103ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cf9190610e6c565b506040517f2610969932116214bd675dc19941eeba897ba78afe8423eaaa3046445eea28cd90600090a16003805460ff60f01b19169055565b60015460ff600160a01b8204169064ffffffffff600160a81b909104163060008080808080806104406000546001600160a01b031690565b6002546003549198506001600160a01b0390811697508116955064ffffffffff600160a01b820481169550600160c81b90910416925061047e610b99565b9150600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f79190610e8e565b905090919293949596979899565b6000546001600160a01b0316331461052f5760405162461bcd60e51b815260040161028190610dba565b600354600160f01b900460ff16156105595760405162461bcd60e51b815260040161028190610e02565b6003805460ff60f01b1916600160f01b1790556002546001600160a01b03828116911614156105e65760405162461bcd60e51b815260206004820152603360248201527f557365202777697468647261772720746f2077697468647261772074686520706044820152723934b6b0b93c903637b1b5b2b2103a37b5b2b760691b6064820152608401610281565b806001600160a01b03811663a9059cbb6106086000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa15801561064c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106709190610e8e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156106bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106df9190610e6c565b50506003805460ff60f01b1916905550565b905090565b6000546001600160a01b031633146107205760405162461bcd60e51b815260040161028190610dba565b600354600160f01b900460ff161561074a5760405162461bcd60e51b815260040161028190610e02565b6003805460ff60f01b1916600160f01b17905560006107716000546001600160a01b031690565b6040519091506001600160a01b038216904780156108fc02916000818181858888f193505050501580156107a9573d6000803e3d6000fd5b50506003805460ff60f01b19169055565b600154600090600160a81b810464ffffffffff1690829081908190819081908190600160a01b900460ff166107f257600097506108f0565b600254604051632590dc9d60e01b81526001600160a01b039091166004820152738bf6fa865f15887a95d3af202ab34ed0c754a2de90632590dc9d9060240160c060405180830381865af492505050801561086a575060408051601f3d908101601f1916820190925261086791810190610ea7565b60015b6108dc57610876610f05565b806308c379a014156108a0575061088b610f5c565b8061089657506108a2565b60009850506108f0565b505b3d8080156108cc576040519150601f19603f3d011682016040523d82523d6000602084013e6108d1565b606091505b5060009850506108f0565b60019d50949a509298509096509450925090505b9091929394959697565b6000546001600160a01b031633146109245760405162461bcd60e51b815260040161028190610dba565b600354600160f01b900460ff161561094e5760405162461bcd60e51b815260040161028190610e02565b6003805460ff60f01b1916600160f01b17905564ffffffffff811615610a6f5760035464ffffffffff600160c81b9091048116908216108015906109a057504264ffffffffff168164ffffffffff1610155b610a125760405162461bcd60e51b815260206004820152603f60248201527f4e657720756e6c6f636b2074696d65206d75737420626520612066757475726560448201527f2074696d65206265796f6e64207468652070726576696f75732076616c7565006064820152608401610281565b6003805464ffffffffff60c81b1916600160c81b64ffffffffff8481168202929092179283905560405192041681527fd316ae9629b69e6caec00227e7056a9d6b297beb56bf61e651212156c716567e9060200160405180910390a15b81156107a9576000610a7f610b99565b6002549091506001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303816000875af1158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b9190610e6c565b507f2a89b2e3d580398d6dc2db5e0f336b52602bbaa51afa9bb5cdf59239cf0d2bea81610b36610b99565b610b409190610fe6565b60405190815260200160405180910390a15050506003805460ff60f01b19169055565b6000546001600160a01b03163314610b8d5760405162461bcd60e51b815260040161028190610dba565b610b9681610c06565b50565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610be2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610e8e565b6000546001600160a01b03163314610c305760405162461bcd60e51b815260040161028190610dba565b6000546001600160a01b0316610c4582610ccd565b600154600354604051634c7ababd60e01b8152600160a81b830464ffffffffff1660048201526001600160a01b03858116602483015284811660448301529182166064820152911690634c7ababd90608401600060405180830381600087803b158015610cb157600080fd5b505af1158015610cc5573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610cf75760405162461bcd60e51b815260040161028190610dba565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114610b9657600080fd5b600060208284031215610d6e57600080fd5b8135610d7981610d47565b9392505050565b60008060408385031215610d9357600080fd5b82359150602083013564ffffffffff81168114610daf57600080fd5b809150509250929050565b60208082526028908201527f4f6e6c7920746865206f776e65722063616e2065786563757465207468697320604082015267333ab731ba34b7b760c11b606082015260800190565b60208082526044908201527f5472616e73666572696e67206973206c6f636b65642e205761697420666f722060408201527f7468652070726576696f7573207472616e73616374696f6e20746f20636f6d706060820152636c65746560e01b608082015260a00190565b600060208284031215610e7e57600080fd5b81518015158114610d7957600080fd5b600060208284031215610ea057600080fd5b5051919050565b60008060008060008060c08789031215610ec057600080fd5b8651610ecb81610d47565b6020880151909650610edc81610d47565b6040880151606089015160808a015160a0909a0151989b929a5090989097909650945092505050565b600060033d1115610f1e5760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715610f5557634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015610f6a5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715610f9a57505050505090565b8285019150815181811115610fb25750505050505090565b843d8701016020828501011115610fcc5750505050505090565b610fdb60208286010187610f21565b509095945050505050565b60008282101561100657634e487b7160e01b600052601160045260246000fd5b50039056fea2646970667358221220d5ba3b406add7fd6a96edf916b9b4aa1d066d210efe5d7e7f521ad625204af1864736f6c634300080a0033a2646970667358221220e1ffba0d15238b74d7afdd2263ff8e64b5b661a44e11980b412a222c9aea196364736f6c634300080a0033
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620000b75760003560e01c806383a1364a116200007a57806383a1364a146200019d5780638da5cb5b14620001c3578063a28a1f7114620001e9578063a6817117146200021c578063cde7cced1462000299578063f2fde38b14620002b057600080fd5b806322df78d014620000bc57806326f3ed2b14620000de57806336ed16e214620001065780634c7ababd146200016d5780636a5dab9f1462000186575b600080fd5b600054600160a01b900460ff1660405190151581526020015b60405180910390f35b600054600160a81b900464ffffffffff1660405164ffffffffff9091168152602001620000d5565b6200011d6200011736600462000e9a565b620002c7565b60408051981515895264ffffffffff90971660208901526001600160a01b0395861696880196909652939092166060860152608085015260a084015260c083015260e082015261010001620000d5565b620001846200017e36600462000ed7565b62000388565b005b620001846200019736600462000f4b565b62000730565b620001b4620001ae36600462000f6b565b6200077b565b604051620000d5919062000f8b565b6000546001600160a01b03165b6040516001600160a01b039091168152602001620000d5565b620001d0620001fa36600462000e9a565b64ffffffffff166000908152600160205260409020546001600160a01b031690565b620002336200022d36600462000e9a565b62000817565b604080519a15158b5264ffffffffff998a1660208c01526001600160a01b03988916908b015295871660608a015293861660808901529190941660a087015292841660c08601529190921660e084015261010083015261012082015261014001620000d5565b62000184620002aa36600462000fd8565b620008e1565b62000184620002c136600462000f6b565b62000dc0565b600080600080600080600080600160008a64ffffffffff1664ffffffffff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663af74e6296040518163ffffffff1660e01b815260040161010060405180830381865afa15801562000347573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036d91906200101f565b97509750975097509750975097509750919395975091939597565b64ffffffffff84166000908152600160205260409020546001600160a01b0316336001600160a01b0316146200041d5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c7920746865206c6f636b657220636f6e74726163742063616e2063616c60448201526e36103a3434b990333ab731ba34b7b760891b60648201526084015b60405180910390fd5b806001600160a01b0316826001600160a01b031614620006215760005b6001600160a01b0383166000908152600260205260409020548110156200061f576001600160a01b0383166000908152600260205260409020805464ffffffffff8716919083908110620004925762000492620010ae565b90600052602060002090600691828204019190066005029054906101000a900464ffffffffff1664ffffffffff1614620004cc576200060a565b6001600160a01b03831660009081526002602052604090208054620004f490600190620010da565b81548110620005075762000507620010ae565b90600052602060002090600691828204019190066005029054906101000a900464ffffffffff1660026000856001600160a01b03166001600160a01b031681526020019081526020016000208281548110620005675762000567620010ae565b90600052602060002090600691828204019190066005026101000a81548164ffffffffff021916908364ffffffffff16021790555060026000846001600160a01b03166001600160a01b03168152602001908152602001600020805480620005d357620005d3620010f4565b60019003818190600052602060002090600691828204019190066005026101000a81549064ffffffffff021916905590556200061f565b8062000616816200110a565b9150506200043a565b505b6000805b6001600160a01b038516600090815260026020526040902054811015620006d1576001600160a01b0385166000908152600260205260409020805464ffffffffff88169190839081106200067d576200067d620010ae565b90600052602060002090600691828204019190066005029054906101000a900464ffffffffff1664ffffffffff161415620006bc5760019150620006d1565b80620006c8816200110a565b91505062000625565b508062000729576001600160a01b038416600090815260026020908152604082208054600181018255908352912060068083049091018054919092066005026101000a64ffffffffff81810219909216918816021790555b5050505050565b6000546001600160a01b031633146200075d5760405162461bcd60e51b8152600401620004149062001128565b60008054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b0381166000908152600260209081526040918290208054835181840281018401909452808452606093928301828280156200080b57602002820191906000526020600020906000905b82829054906101000a900464ffffffffff1664ffffffffff1681526020019060050190602082600401049283019260010382029150808411620007cb5790505b50505050509050919050565b600080600080600080600080600080600160008c64ffffffffff1664ffffffffff16815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b0316634c02bf0b6040518163ffffffff1660e01b815260040161014060405180830381865afa1580156200089a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008c0919062001170565b99509950995099509950995099509950995099509193959799509193959799565b600054600160a01b900460ff166200093c5760405162461bcd60e51b815260206004820152601b60248201527f4c6f636b6572206372656174696f6e2069732064697361626c65640000000000604482015260640162000414565b60008054600160a81b900464ffffffffff168160156200095c8362001246565b91906101000a81548164ffffffffff021916908364ffffffffff16021790555090503081620009883390565b8685604051620009989062000e78565b6001600160a01b03958616815264ffffffffff94851660208201529285166040840152931660608201529116608082015260a001604051809103906000f080158015620009e9573d6000803e3d6000fd5b5064ffffffffff8216600090815260016020526040902080546001600160a01b0319166001600160a01b0392831690811790915590859081166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b0391821660048201529085166024820152604481018890526064016020604051808303816000875af115801562000a7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aa491906200126e565b503360009081526002602090815260408083208054600180820183559185528385206006808304909101805464ffffffffff8b8116600595859006860261010090810a82810290840219909416939093179093556001600160a01b038f81168a52878a2080548089018255908b52898b20868204018054918790068802850a808702908502199092169190911790558b81168a52878a2080548089018255908b52898b2086820401805496909106909602830a8085029202199094161790935586529190935281842054825163af74e62960e01b8152925185948594929093169263af74e62992600480820193918290030181865afa15801562000bac573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bd291906200101f565b5050505093509350509250821562000ccb5760026000836001600160a01b03166001600160a01b031681526020019081526020016000208690806001815401808255809150506001900390600052602060002090600691828204019190066005029091909190916101000a81548164ffffffffff021916908364ffffffffff16021790555060026000826001600160a01b03166001600160a01b031681526020019081526020016000208690806001815401808255809150506001900390600052602060002090600691828204019190066005029091909190916101000a81548164ffffffffff021916908364ffffffffff1602179055505b806001600160a01b0316826001600160a01b03168a6001600160a01b03167f531cba00a411ade37b4ca8175d92c94149f19536bd8e5a83d581aa7f040d192e8962000d133390565b6040516370a0823160e01b81526001600160a01b038c811660048301528b16906370a0823190602401602060405180830381865afa15801562000d5a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d8091906200128e565b6040805164ffffffffff94851681526001600160a01b039093166020840152820152908c16606082015260800160405180910390a4505050505050505050565b6000546001600160a01b0316331462000ded5760405162461bcd60e51b8152600401620004149062001128565b62000df88162000dfb565b50565b6000546001600160a01b0316331462000e285760405162461bcd60e51b8152600401620004149062001128565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61137480620012a983390190565b64ffffffffff8116811462000df857600080fd5b60006020828403121562000ead57600080fd5b813562000eba8162000e86565b9392505050565b6001600160a01b038116811462000df857600080fd5b6000806000806080858703121562000eee57600080fd5b843562000efb8162000e86565b9350602085013562000f0d8162000ec1565b9250604085013562000f1f8162000ec1565b9150606085013562000f318162000ec1565b939692955090935050565b801515811462000df857600080fd5b60006020828403121562000f5e57600080fd5b813562000eba8162000f3c565b60006020828403121562000f7e57600080fd5b813562000eba8162000ec1565b6020808252825182820181905260009190848201906040850190845b8181101562000fcc57835164ffffffffff168352928401929184019160010162000fa7565b50909695505050505050565b60008060006060848603121562000fee57600080fd5b833562000ffb8162000ec1565b9250602084013591506040840135620010148162000e86565b809150509250925092565b600080600080600080600080610100898b0312156200103d57600080fd5b88516200104a8162000f3c565b60208a01519098506200105d8162000e86565b60408a0151909750620010708162000ec1565b60608a0151909650620010838162000ec1565b60808a015160a08b015160c08c015160e0909c01519a9d999c50979a91999098919650945092505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015620010ef57620010ef620010c4565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415620011215762001121620010c4565b5060010190565b60208082526028908201527f4f6e6c7920746865206f776e65722063616e2065786563757465207468697320604082015267333ab731ba34b7b760c11b606082015260800190565b6000806000806000806000806000806101408b8d0312156200119157600080fd5b8a516200119e8162000f3c565b60208c0151909a50620011b18162000e86565b60408c0151909950620011c48162000ec1565b60608c0151909850620011d78162000ec1565b60808c0151909750620011ea8162000ec1565b60a08c0151909650620011fd8162000ec1565b60c08c0151909550620012108162000e86565b60e08c0151909450620012238162000e86565b809350506101008b015191506101208b015190509295989b9194979a5092959850565b600064ffffffffff80831681811415620012645762001264620010c4565b6001019392505050565b6000602082840312156200128157600080fd5b815162000eba8162000f3c565b600060208284031215620012a157600080fd5b505191905056fe60806040523480156200001157600080fd5b506040516200137438038062001374833981016040819052620000349162000288565b600080546001600160a01b0319166001600160a01b03851617905582620000636000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3504264ffffffffff168164ffffffffff1611620001105760405162461bcd60e51b815260206004820152602160248201527f556e6c6f636b2074696d65206d75737420626520696e207468652066757475726044820152606560f81b606482015260840160405180910390fd5b600180546001600160a01b038781167fffffffffffff0000000000ff000000000000000000000000000000000000000090921691909117600160a81b64ffffffffff8881169190910291909117909255600280546001600160a01b031916858316908117909155600380549287166001600160c81b031990931692909217600160a01b428516021764ffffffffff60c81b1916600160c81b93851693909302929092179055604051630f24ca7d60e01b81526004810191909152738bf6fa865f15887a95d3af202ab34ed0c754a2de90630f24ca7d90602401602060405180830381865af415801562000207573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022d9190620002f8565b60018054911515600160a01b0260ff60a01b1990921691909117905550620003239350505050565b80516001600160a01b03811681146200026d57600080fd5b919050565b805164ffffffffff811681146200026d57600080fd5b600080600080600060a08688031215620002a157600080fd5b620002ac8662000255565b9450620002bc6020870162000272565b9350620002cc6040870162000255565b9250620002dc6060870162000255565b9150620002ec6080870162000272565b90509295509295909350565b6000602082840312156200030b57600080fd5b815180151581146200031c57600080fd5b9392505050565b61104180620003336000396000f3fe60806040526004361061008a5760003560e01c8063a0ef91df11610059578063a0ef91df14610174578063af74e62914610189578063b05fb26f146101ed578063d88e7f4e14610217578063f2fde38b1461023757600080fd5b80633ccfd60b146100965780634c02bf0b146100ad578063894760691461012c5780638da5cb5b1461014c57600080fd5b3661009157005b600080fd5b3480156100a257600080fd5b506100ab610257565b005b3480156100b957600080fd5b506100c2610408565b604080519a15158b5264ffffffffff998a1660208c01526001600160a01b03988916908b015295871660608a015293861660808901529190941660a087015292841660c08601529190921660e0840152610100830152610120820152610140015b60405180910390f35b34801561013857600080fd5b506100ab610147366004610d5c565b610505565b34801561015857600080fd5b506000546040516001600160a01b039091168152602001610123565b34801561018057600080fd5b506100ab6106f6565b34801561019557600080fd5b5061019e6107ba565b60408051981515895264ffffffffff90971660208901526001600160a01b0395861696880196909652939092166060860152608085015260a084015260c083015260e082015261010001610123565b3480156101f957600080fd5b50600154600160a01b900460ff166040519015158152602001610123565b34801561022357600080fd5b506100ab610232366004610d80565b6108fa565b34801561024357600080fd5b506100ab610252366004610d5c565b610b63565b6000546001600160a01b0316331461028a5760405162461bcd60e51b815260040161028190610dba565b60405180910390fd5b600354600160f01b900460ff16156102b45760405162461bcd60e51b815260040161028190610e02565b6003805460ff60f01b1916600160f01b179081905564ffffffffff600160c81b90910481164290911610156103355760405162461bcd60e51b815260206004820152602160248201527f5761697420756e74696c20756e6c6f636b54696d6520746f20776974686472616044820152607760f81b6064820152608401610281565b6002546001600160a01b031663a9059cbb6103586000546001600160a01b031690565b610360610b99565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156103ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103cf9190610e6c565b506040517f2610969932116214bd675dc19941eeba897ba78afe8423eaaa3046445eea28cd90600090a16003805460ff60f01b19169055565b60015460ff600160a01b8204169064ffffffffff600160a81b909104163060008080808080806104406000546001600160a01b031690565b6002546003549198506001600160a01b0390811697508116955064ffffffffff600160a01b820481169550600160c81b90910416925061047e610b99565b9150600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f79190610e8e565b905090919293949596979899565b6000546001600160a01b0316331461052f5760405162461bcd60e51b815260040161028190610dba565b600354600160f01b900460ff16156105595760405162461bcd60e51b815260040161028190610e02565b6003805460ff60f01b1916600160f01b1790556002546001600160a01b03828116911614156105e65760405162461bcd60e51b815260206004820152603360248201527f557365202777697468647261772720746f2077697468647261772074686520706044820152723934b6b0b93c903637b1b5b2b2103a37b5b2b760691b6064820152608401610281565b806001600160a01b03811663a9059cbb6106086000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa15801561064c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106709190610e8e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156106bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106df9190610e6c565b50506003805460ff60f01b1916905550565b905090565b6000546001600160a01b031633146107205760405162461bcd60e51b815260040161028190610dba565b600354600160f01b900460ff161561074a5760405162461bcd60e51b815260040161028190610e02565b6003805460ff60f01b1916600160f01b17905560006107716000546001600160a01b031690565b6040519091506001600160a01b038216904780156108fc02916000818181858888f193505050501580156107a9573d6000803e3d6000fd5b50506003805460ff60f01b19169055565b600154600090600160a81b810464ffffffffff1690829081908190819081908190600160a01b900460ff166107f257600097506108f0565b600254604051632590dc9d60e01b81526001600160a01b039091166004820152738bf6fa865f15887a95d3af202ab34ed0c754a2de90632590dc9d9060240160c060405180830381865af492505050801561086a575060408051601f3d908101601f1916820190925261086791810190610ea7565b60015b6108dc57610876610f05565b806308c379a014156108a0575061088b610f5c565b8061089657506108a2565b60009850506108f0565b505b3d8080156108cc576040519150601f19603f3d011682016040523d82523d6000602084013e6108d1565b606091505b5060009850506108f0565b60019d50949a509298509096509450925090505b9091929394959697565b6000546001600160a01b031633146109245760405162461bcd60e51b815260040161028190610dba565b600354600160f01b900460ff161561094e5760405162461bcd60e51b815260040161028190610e02565b6003805460ff60f01b1916600160f01b17905564ffffffffff811615610a6f5760035464ffffffffff600160c81b9091048116908216108015906109a057504264ffffffffff168164ffffffffff1610155b610a125760405162461bcd60e51b815260206004820152603f60248201527f4e657720756e6c6f636b2074696d65206d75737420626520612066757475726560448201527f2074696d65206265796f6e64207468652070726576696f75732076616c7565006064820152608401610281565b6003805464ffffffffff60c81b1916600160c81b64ffffffffff8481168202929092179283905560405192041681527fd316ae9629b69e6caec00227e7056a9d6b297beb56bf61e651212156c716567e9060200160405180910390a15b81156107a9576000610a7f610b99565b6002549091506001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303816000875af1158015610ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0b9190610e6c565b507f2a89b2e3d580398d6dc2db5e0f336b52602bbaa51afa9bb5cdf59239cf0d2bea81610b36610b99565b610b409190610fe6565b60405190815260200160405180910390a15050506003805460ff60f01b19169055565b6000546001600160a01b03163314610b8d5760405162461bcd60e51b815260040161028190610dba565b610b9681610c06565b50565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610be2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190610e8e565b6000546001600160a01b03163314610c305760405162461bcd60e51b815260040161028190610dba565b6000546001600160a01b0316610c4582610ccd565b600154600354604051634c7ababd60e01b8152600160a81b830464ffffffffff1660048201526001600160a01b03858116602483015284811660448301529182166064820152911690634c7ababd90608401600060405180830381600087803b158015610cb157600080fd5b505af1158015610cc5573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610cf75760405162461bcd60e51b815260040161028190610dba565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114610b9657600080fd5b600060208284031215610d6e57600080fd5b8135610d7981610d47565b9392505050565b60008060408385031215610d9357600080fd5b82359150602083013564ffffffffff81168114610daf57600080fd5b809150509250929050565b60208082526028908201527f4f6e6c7920746865206f776e65722063616e2065786563757465207468697320604082015267333ab731ba34b7b760c11b606082015260800190565b60208082526044908201527f5472616e73666572696e67206973206c6f636b65642e205761697420666f722060408201527f7468652070726576696f7573207472616e73616374696f6e20746f20636f6d706060820152636c65746560e01b608082015260a00190565b600060208284031215610e7e57600080fd5b81518015158114610d7957600080fd5b600060208284031215610ea057600080fd5b5051919050565b60008060008060008060c08789031215610ec057600080fd5b8651610ecb81610d47565b6020880151909650610edc81610d47565b6040880151606089015160808a015160a0909a0151989b929a5090989097909650945092505050565b600060033d1115610f1e5760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715610f5557634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015610f6a5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715610f9a57505050505090565b8285019150815181811115610fb25750505050505090565b843d8701016020828501011115610fcc5750505050505090565b610fdb60208286010187610f21565b509095945050505050565b60008282101561100657634e487b7160e01b600052601160045260246000fd5b50039056fea2646970667358221220d5ba3b406add7fd6a96edf916b9b4aa1d066d210efe5d7e7f521ad625204af1864736f6c634300080a0033a2646970667358221220e1ffba0d15238b74d7afdd2263ff8e64b5b661a44e11980b412a222c9aea196364736f6c634300080a0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.