More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 937 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake721 | 20578477 | 5 days ago | IN | 0 ETH | 0.00561566 | ||||
Unstake721 | 20550089 | 9 days ago | IN | 0 ETH | 0.00024083 | ||||
Update Accumulat... | 20520822 | 13 days ago | IN | 0 ETH | 0.00066782 | ||||
Update Accumulat... | 20520588 | 13 days ago | IN | 0 ETH | 0.00058148 | ||||
Update Accumulat... | 20448057 | 23 days ago | IN | 0 ETH | 0.00018285 | ||||
Update Accumulat... | 20448047 | 23 days ago | IN | 0 ETH | 0.00025414 | ||||
Unstake721 | 20414491 | 28 days ago | IN | 0 ETH | 0.00044549 | ||||
Update Accumulat... | 20407276 | 29 days ago | IN | 0 ETH | 0.00022214 | ||||
Update Accumulat... | 20391760 | 31 days ago | IN | 0 ETH | 0.00033554 | ||||
Update Accumulat... | 20391706 | 31 days ago | IN | 0 ETH | 0.00062269 | ||||
Unstake721 | 20352036 | 37 days ago | IN | 0 ETH | 0.00744545 | ||||
Unstake721 | 20278178 | 47 days ago | IN | 0 ETH | 0.00202723 | ||||
Update Accumulat... | 20278165 | 47 days ago | IN | 0 ETH | 0.00089475 | ||||
Update Accumulat... | 20276169 | 47 days ago | IN | 0 ETH | 0.00082314 | ||||
Update Accumulat... | 20276168 | 47 days ago | IN | 0 ETH | 0.00087665 | ||||
Stake721 | 20276164 | 47 days ago | IN | 0 ETH | 0.00129105 | ||||
Unstake721 | 20234990 | 53 days ago | IN | 0 ETH | 0.04381002 | ||||
Unstake721 | 20229632 | 54 days ago | IN | 0 ETH | 0.00043401 | ||||
Unstake721 | 20224449 | 54 days ago | IN | 0 ETH | 0.00052083 | ||||
Unstake721 | 20224440 | 54 days ago | IN | 0 ETH | 0.0016316 | ||||
Unstake721 | 20224286 | 54 days ago | IN | 0 ETH | 0.009108 | ||||
Unstake721 | 20223523 | 55 days ago | IN | 0 ETH | 0.00067973 | ||||
Unstake721 | 20223521 | 55 days ago | IN | 0 ETH | 0.00157834 | ||||
Update Accumulat... | 20223288 | 55 days ago | IN | 0 ETH | 0.0005816 | ||||
Unstake721 | 20222587 | 55 days ago | IN | 0 ETH | 0.00443754 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MoonStakingS2
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved( uint256 tokenId ) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll( address owner, address operator ) external view returns (bool); } // File: @openzeppelin/contracts/utils/Context.sol // 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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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); } } // File: MoonStakingS2.sol pragma solidity ^0.8.17; interface IMoonStaking { function getTokenYield( address contractAddress, uint256 tokenId ) external view returns (uint256); function getStakerNFT( address staker ) external view returns ( uint256[] memory, uint256[] memory, uint256[] memory, uint256[] memory, uint256[] memory ); function balanceOf(address owner) external view returns (uint256 balance); } contract MoonStakingS2 is ERC721Holder, Ownable, ReentrancyGuard { IERC721 public GenesisNFT; IERC721 public MutantNFT; IERC721 public DekuNFT; IMoonStaking public MoonStakingS1; uint256 public constant SECONDS_IN_DAY = 86400; uint256 public startTimestamp; bool public stakingLaunched; bool public depositPaused; bool public genesisOwnershipRequired; struct Staker { uint256 accumulatedAmount; // DO need this uint256 lastCheckpoint; // AND his uint256[] stakedGENESIS; uint256[] stakedMUTANT; uint256[] stakedDEKU; } mapping(address => Staker) private _stakers; mapping(uint256 => uint256) private _yieldmapping; enum ContractTypes { GENESIS, MUTANT, DEKU } mapping(address => ContractTypes) private _contractTypes; mapping(address => uint256) public _baseRates; mapping(address => mapping(uint256 => uint256)) private _rarityMultiplyer; mapping(address => mapping(uint256 => address)) private _ownerOfToken; uint256[] private _mutantRewards; mapping(address => bool) private _authorised; address[] public authorisedLog; event Stake721( address indexed staker, address contractAddress, uint256 tokensAmount ); event Unstake721( address indexed staker, address contractAddress, uint256 tokensAmount ); event ForceWithdraw721( address indexed receiver, address indexed tokenAddress, uint256 indexed tokenId ); constructor(address _genesis, address _mooonstakings1) { GenesisNFT = IERC721(_genesis); _contractTypes[_genesis] = ContractTypes.GENESIS; _baseRates[_genesis] = 250 ether; MoonStakingS1 = IMoonStaking(_mooonstakings1); _yieldmapping[150000000000000000000] = 250000000000000000000; _yieldmapping[180000000000000000000] = 300000000000000000000; _yieldmapping[210000000000000000000] = 350000000000000000000; _yieldmapping[240000000000000000000] = 425000000000000000000; _yieldmapping[300000000000000000000] = 550000000000000000000; genesisOwnershipRequired = true; } modifier authorised() { require( _authorised[_msgSender()], "The token contract is not authorised" ); _; } function _validateGenesisOwnership( address user ) internal view returns (bool) { if (!genesisOwnershipRequired) return true; if (balanceOf(user) > 0) { return true; } return GenesisNFT.balanceOf(user) > 0; } function stake721( address contractAddress, uint256[] memory tokenIds ) public nonReentrant { require(!depositPaused, "Deposit paused"); require(stakingLaunched, "Staking is not launched yet"); require( (contractAddress != address(0) && contractAddress == address(GenesisNFT)) || contractAddress == address(MutantNFT) || contractAddress == address(DekuNFT), "Unknown contract or staking is not yet enabled for this NFT" ); if (contractAddress == address(MutantNFT) && genesisOwnershipRequired) { require( _validateGenesisOwnership(_msgSender()), "You do not have any Genesis NFTs" ); } ContractTypes contractType = _contractTypes[contractAddress]; Staker storage user = _stakers[_msgSender()]; for (uint256 i; i < tokenIds.length; i++) { require( IERC721(contractAddress).ownerOf(tokenIds[i]) == _msgSender(), "Not the owner of staking NFT" ); IERC721(contractAddress).safeTransferFrom( _msgSender(), address(this), tokenIds[i] ); _ownerOfToken[contractAddress][tokenIds[i]] = _msgSender(); if (contractType == ContractTypes.GENESIS) { user.stakedGENESIS.push(tokenIds[i]); } if (contractType == ContractTypes.MUTANT) { user.stakedMUTANT.push(tokenIds[i]); } if (contractType == ContractTypes.DEKU) { user.stakedDEKU.push(tokenIds[i]); } } accumulate(_msgSender()); emit Stake721(_msgSender(), contractAddress, tokenIds.length); } function unstake721( address contractAddress, uint256[] memory tokenIds ) public nonReentrant { require( (contractAddress != address(0) && contractAddress == address(GenesisNFT)) || contractAddress == address(MutantNFT) || contractAddress == address(DekuNFT), "Unknown contract or staking is not yet enabled for this NFT" ); ContractTypes contractType = _contractTypes[contractAddress]; Staker storage user = _stakers[_msgSender()]; for (uint256 i; i < tokenIds.length; i++) { require( IERC721(contractAddress).ownerOf(tokenIds[i]) == address(this), "Not the owner" ); _ownerOfToken[contractAddress][tokenIds[i]] = address(0); if (contractType == ContractTypes.GENESIS) { user.stakedGENESIS = _prepareForDeletion( user.stakedGENESIS, tokenIds[i] ); user.stakedGENESIS.pop(); } if (contractType == ContractTypes.MUTANT) { user.stakedMUTANT = _prepareForDeletion( user.stakedMUTANT, tokenIds[i] ); user.stakedMUTANT.pop(); } if (contractType == ContractTypes.DEKU) { user.stakedDEKU = _prepareForDeletion( user.stakedDEKU, tokenIds[i] ); user.stakedDEKU.pop(); } IERC721(contractAddress).safeTransferFrom( address(this), _msgSender(), tokenIds[i] ); } accumulate(_msgSender()); // TODO make sure this is up to date emit Unstake721(_msgSender(), contractAddress, tokenIds.length); } function getTokenYield( address contractAddress, uint256 tokenId ) public view returns (uint256) { if (contractAddress == address(GenesisNFT)) { return getGenesisYield(tokenId); } else if (contractAddress == address(MutantNFT)) { return getMutantsYield(tokenId); } else if (contractAddress == address(DekuNFT)) { return getDekuYield(tokenId); } else { return 0; } } function getGenesisYield(uint genesisId) public view returns (uint256) { uint s1Yield = MoonStakingS1.getTokenYield( address(GenesisNFT), genesisId ); return _yieldmapping[s1Yield]; } function getMutantsYield(uint mutantId) public view returns (uint256) { if (mutantId > 16000) { return _mutantRewards[2]; } else if (mutantId > 10000) { return _mutantRewards[1]; } else { return _mutantRewards[0]; } } function getDekuYield(uint dekuId) public view returns (uint256) { uint256 tokenYield = _rarityMultiplyer[address(DekuNFT)][dekuId] * _baseRates[address(DekuNFT)]; if (tokenYield == 0) { tokenYield = _baseRates[address(DekuNFT)]; } return tokenYield; } function getStakerYield(address staker) public view returns (uint256) { // return _stakers[staker].currentYield; uint256[] memory remoteGenesis; (remoteGenesis, , , , ) = MoonStakingS1.getStakerNFT(staker); uint256 yield = 0; for (uint256 i = 0; i < remoteGenesis.length; i++) { yield += getGenesisYield(remoteGenesis[i]); } // uint256[] localGenesis = _stakers[staker].stakedGENESIS; for (uint256 i = 0; i < _stakers[staker].stakedGENESIS.length; i++) { yield += getGenesisYield(_stakers[staker].stakedGENESIS[i]); } uint256[] memory localMutant = _stakers[staker].stakedMUTANT; for (uint256 i = 0; i < localMutant.length; i++) { yield += getMutantsYield(localMutant[i]); } uint256[] memory localDeku = _stakers[staker].stakedDEKU; for (uint256 i = 0; i < localDeku.length; i++) { yield += getMutantsYield(localDeku[i]); } return yield; } function getStakerNFT( address staker ) public view returns ( uint256[] memory, uint256[] memory, uint256[] memory, uint256[] memory ) { uint256[] memory remoteGenesis; (remoteGenesis, , , , ) = MoonStakingS1.getStakerNFT(staker); return ( _stakers[staker].stakedGENESIS, _stakers[staker].stakedMUTANT, _stakers[staker].stakedDEKU, remoteGenesis ); } /* Moving the token last in list */ function _prepareForDeletion( uint256[] memory list, uint256 tokenId ) internal pure returns (uint256[] memory) { bool inlist = false; for (uint256 i = 0; i < list.length; i++) { if (list[i] == tokenId) { list[i] = list[list.length - 1]; list[list.length - 1] = tokenId; inlist = true; break; } } require(inlist, "Not the owner or duplicate NFT in list"); return list; } function getCurrentReward(address staker) public view returns (uint256) { require(stakingLaunched, "Staking not launched"); Staker memory user = _stakers[staker]; uint256 userYield = getStakerYield(staker); if (user.lastCheckpoint == 0) { if (userYield != 0) { return ((block.timestamp - startTimestamp) * userYield) / SECONDS_IN_DAY; } return 0; } return ((block.timestamp - user.lastCheckpoint) * userYield) / SECONDS_IN_DAY; } function getAccumulatedAmount( address staker ) external view returns (uint256) { return _stakers[staker].accumulatedAmount + getCurrentReward(staker); } function accumulate(address staker) internal { _stakers[staker].accumulatedAmount += getCurrentReward(staker); _stakers[staker].lastCheckpoint = block.timestamp; } function updateAccumulatedAmount(address staker) public { accumulate(staker); } /** * CONTRACTS */ function ownerOf( address contractAddress, uint256 tokenId ) public view returns (address) { return _ownerOfToken[contractAddress][tokenId]; } function balanceOf(address user) public view returns (uint256) { uint oldBalanceOf = MoonStakingS1.balanceOf(user); return _stakers[user].stakedGENESIS.length + oldBalanceOf; } function setDEKUContract( address _deku, uint256 _baseReward ) public onlyOwner { DekuNFT = IERC721(_deku); _contractTypes[_deku] = ContractTypes.DEKU; _baseRates[_deku] = _baseReward; } function setMUTANTContract( address _mutant, uint256[] memory _mutantrewards ) public onlyOwner { require(_mutantrewards.length == 3, "wrong number of rewards"); MutantNFT = IERC721(_mutant); _contractTypes[_mutant] = ContractTypes.MUTANT; _mutantRewards = _mutantrewards; } /** * ADMIN */ function authorise(address toAuth) public onlyOwner { _authorised[toAuth] = true; authorisedLog.push(toAuth); } function unauthorise(address addressToUnAuth) public onlyOwner { _authorised[addressToUnAuth] = false; } function forceWithdraw721( address tokenAddress, uint256[] memory tokenIds ) public onlyOwner { require(tokenIds.length <= 50, "50 is max per tx"); pauseDeposit(true); for (uint256 i; i < tokenIds.length; i++) { address receiver = _ownerOfToken[tokenAddress][tokenIds[i]]; if ( receiver != address(0) && IERC721(tokenAddress).ownerOf(tokenIds[i]) == address(this) ) { IERC721(tokenAddress).transferFrom( address(this), receiver, tokenIds[i] ); emit ForceWithdraw721(receiver, tokenAddress, tokenIds[i]); } } } function pauseDeposit(bool _pause) public onlyOwner { depositPaused = _pause; } function launchStaking() public onlyOwner { require(!stakingLaunched, "Staking has been launched already"); stakingLaunched = true; startTimestamp = block.timestamp; } function updateBaseYield( address _contract, uint256 _yield ) public onlyOwner { _baseRates[_contract] = _yield; } function setIndividualRates( address contractAddress, uint256[] memory tokenIds, uint256[] memory rates ) public onlyOwner { // TODO redo this for Deku only? require( (contractAddress != address(0) && contractAddress == address(GenesisNFT)) || contractAddress == address(MutantNFT) || contractAddress == address(DekuNFT), "Unknown contract" ); require(tokenIds.length == rates.length, "Lists not same length"); for (uint256 i; i < tokenIds.length; i++) { _rarityMultiplyer[contractAddress][tokenIds[i]] = rates[i]; } } function setGenesisOwnershipRequired(bool _newvalue) public onlyOwner { genesisOwnershipRequired = _newvalue; } function withdrawETH() external onlyOwner { payable(owner()).transfer(address(this).balance); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_genesis","type":"address"},{"internalType":"address","name":"_mooonstakings1","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ForceWithdraw721","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":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensAmount","type":"uint256"}],"name":"Stake721","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensAmount","type":"uint256"}],"name":"Unstake721","type":"event"},{"inputs":[],"name":"DekuNFT","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GenesisNFT","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MoonStakingS1","outputs":[{"internalType":"contract IMoonStaking","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MutantNFT","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SECONDS_IN_DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_baseRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toAuth","type":"address"}],"name":"authorise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"authorisedLog","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"forceWithdraw721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesisOwnershipRequired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getAccumulatedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getCurrentReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dekuId","type":"uint256"}],"name":"getDekuYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"genesisId","type":"uint256"}],"name":"getGenesisYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mutantId","type":"uint256"}],"name":"getMutantsYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakerNFT","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakerYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"pauseDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_deku","type":"address"},{"internalType":"uint256","name":"_baseReward","type":"uint256"}],"name":"setDEKUContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_newvalue","type":"bool"}],"name":"setGenesisOwnershipRequired","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"rates","type":"uint256[]"}],"name":"setIndividualRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mutant","type":"address"},{"internalType":"uint256[]","name":"_mutantrewards","type":"uint256[]"}],"name":"setMUTANTContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stake721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addressToUnAuth","type":"address"}],"name":"unauthorise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstake721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"updateAccumulatedAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"_yield","type":"uint256"}],"name":"updateBaseYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002c6c38038062002c6c833981016040819052620000349162000205565b6200003f3362000198565b60018055600280546001600160a01b039384166001600160a01b031991821681179092556000918252600a60209081526040808420805460ff19169055600b82528320680d8d726b7177a8000090819055600580549093169490951693909317905560099091527f2deb660a9ce364f9ced4f5d3ec78141643dba9e2c042008480aca059e817fcc891909155681043561a88293000007f5aac62eeb182f01e5e86431ecdd01bc6f1f45951813029d16c3a58f90a170a9c8190556812f939c99edab800007f23b10cbf4004b98a1be05f57aa4c448206decd8b2a713b4b9a550aea72c240d05568170a0f5040e50400007f2802753ca5223474032df103ca92e2c00c350ee6c84fd18c85a05ea893772f05559052681dd0c885f9a0d800007fba2fe1702a7171803f3fc9fa6382d9051058aeeb204d0c2b5b5c85fb2335114455600780546201000062ff0000199091161790556200023d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200020057600080fd5b919050565b600080604083850312156200021957600080fd5b6200022483620001e8565b91506200023460208401620001e8565b90509250929050565b612a1f806200024d6000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c80637f4a67bf1161013b578063c68e5161116100b8578063e086e5ec1161007c578063e086e5ec14610537578063e1af56981461053f578063e6fd48bc1461054c578063eb4426b614610555578063f2fde38b1461057857600080fd5b8063c68e5161146104d8578063c82bc61d146104eb578063cd79b454146104fe578063d87f468f14610511578063da9b5fc61461052457600080fd5b80639ed7898a116100ff5780639ed7898a14610484578063a30a247414610497578063a90401271461049f578063b7ebd6e8146104b2578063c21af1f8146104c557600080fd5b80637f4a67bf1461042757806380833d781461043a57806389b131611461044d5780638c884518146104605780638da5cb5b1461047357600080fd5b80633588415b116101c957806361a52a361161018d57806361a52a36146103dc57806366e6c8af146103e6578063708c94c7146103f957806370a082311461040c578063715018a61461041f57600080fd5b80633588415b1461037d578063415855d6146103905780634bee21d4146103a35780634d307e3f146103b657806361499ab9146103c957600080fd5b8063150b7a0211610210578063150b7a02146102ca5780631f29d2dc1461030157806323101e27146103375780632377893d14610357578063266690c91461036a57600080fd5b8063011c18471461024257806302befd2414610272578063041296671461029457806309cd99d7146102b5575b600080fd5b600354610255906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60075461028490610100900460ff1681565b6040519015158152602001610269565b6102a76102a23660046123e2565b61058b565b604051908152602001610269565b6102c86102c33660046124d5565b6105bf565b005b6102e86102d836600461254b565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610269565b61025561030f36600461260f565b6001600160a01b039182166000908152600d6020908152604080832093835292905220541690565b6102a76103453660046123e2565b600b6020526000908152604090205481565b6102c861036536600461263b565b61073b565b600254610255906001600160a01b031681565b6102c861038b36600461260f565b6107e5565b6102c861039e36600461268b565b610834565b6102a76103b13660046123e2565b610856565b6102a76103c43660046123e2565b610b16565b6102a76103d736600461260f565b610d04565b6102a76201518081565b6102c86103f43660046123e2565b610d73565b6102c861040736600461263b565b610de1565b6102a761041a3660046123e2565b611339565b6102c86113dc565b6102c861043536600461263b565b6113f0565b6102c86104483660046123e2565b611904565b6102a761045b3660046126ad565b61192d565b6102c861046e36600461268b565b611992565b6000546001600160a01b0316610255565b6102c86104923660046123e2565b6119b6565b6102c86119c2565b600554610255906001600160a01b031681565b6102a76104c03660046126ad565b611a3a565b600454610255906001600160a01b031681565b6102c86104e636600461260f565b611a9e565b6102556104f93660046126ad565b611ac2565b6102c861050c36600461263b565b611aec565b6007546102849062010000900460ff1681565b6102a76105323660046126ad565b611d52565b6102c8611de3565b6007546102849060ff1681565b6102a760065481565b6105686105633660046123e2565b611e25565b6040516102699493929190612701565b6102c86105863660046123e2565b611fd4565b600061059682610b16565b6001600160a01b0383166000908152600860205260409020546105b9919061276f565b92915050565b6105c761204a565b6001600160a01b038316158015906105ec57506002546001600160a01b038481169116145b8061060457506003546001600160a01b038481169116145b8061061c57506004546001600160a01b038481169116145b6106605760405162461bcd60e51b815260206004820152601060248201526f155b9adb9bdddb8818dbdb9d1c9858dd60821b60448201526064015b60405180910390fd5b80518251146106a95760405162461bcd60e51b8152602060048201526015602482015274098d2e6e8e640dcdee840e6c2daca40d8cadccee8d605b1b6044820152606401610657565b60005b8251811015610735578181815181106106c7576106c7612782565b6020026020010151600c6000866001600160a01b03166001600160a01b03168152602001908152602001600020600085848151811061070857610708612782565b6020026020010151815260200190815260200160002081905550808061072d90612798565b9150506106ac565b50505050565b61074361204a565b80516003146107945760405162461bcd60e51b815260206004820152601760248201527f77726f6e67206e756d626572206f6620726577617264730000000000000000006044820152606401610657565b600380546001600160a01b0319166001600160a01b0384169081179091556000908152600a60209081526040909120805460ff1916600117905581516107e091600e919084019061236d565b505050565b6107ed61204a565b600480546001600160a01b03939093166001600160a01b0319909316831790556000918252600a60209081526040808420805460ff19166002179055600b90915290912055565b61083c61204a565b600780549115156101000261ff0019909216919091179055565b6005546040516375a2135b60e11b81526001600160a01b03838116600483015260009260609291169063eb4426b690602401600060405180830381865afa1580156108a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108cd9190810190612822565b5092935060009250829150505b8251811015610923576109058382815181106108f8576108f8612782565b6020026020010151611d52565b61090f908361276f565b91508061091b81612798565b9150506108da565b5060005b6001600160a01b0385166000908152600860205260409020600201548110156109aa576001600160a01b0385166000908152600860205260409020600201805461098c91908390811061097c5761097c612782565b9060005260206000200154611d52565b610996908361276f565b9150806109a281612798565b915050610927565b506001600160a01b038416600090815260086020908152604080832060030180548251818502810185019093528083529192909190830182828015610a0e57602002820191906000526020600020905b8154815260200190600101908083116109fa575b5050505050905060005b8151811015610a6157610a43828281518110610a3657610a36612782565b6020026020010151611a3a565b610a4d908461276f565b925080610a5981612798565b915050610a18565b506001600160a01b038516600090815260086020908152604080832060040180548251818502810185019093528083529192909190830182828015610ac557602002820191906000526020600020905b815481526020019060010190808311610ab1575b5050505050905060005b8151811015610b0b57610aed828281518110610a3657610a36612782565b610af7908561276f565b935080610b0381612798565b915050610acf565b509195945050505050565b60075460009060ff16610b625760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99c81b9bdd081b185d5b98da195960621b6044820152606401610657565b6001600160a01b0382166000908152600860209081526040808320815160a08101835281548152600182015481850152600282018054845181870281018701865281815292959394860193830182828015610bdc57602002820191906000526020600020905b815481526020019060010190808311610bc8575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610c3457602002820191906000526020600020905b815481526020019060010190808311610c20575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610c8c57602002820191906000526020600020905b815481526020019060010190808311610c78575b50505050508152505090506000610ca284610856565b90508160200151600003610cef578015610ce557620151808160065442610cc991906128f4565b610cd39190612907565b610cdd919061291e565b949350505050565b5060009392505050565b6201518081836020015142610cc991906128f4565b6002546000906001600160a01b0390811690841603610d2d57610d2682611d52565b90506105b9565b6003546001600160a01b0390811690841603610d4c57610d2682611a3a565b6004546001600160a01b0390811690841603610d6b57610d268261192d565b5060006105b9565b610d7b61204a565b6001600160a01b03166000818152600f60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b610de96120a4565b6001600160a01b03821615801590610e0e57506002546001600160a01b038381169116145b80610e2657506003546001600160a01b038381169116145b80610e3e57506004546001600160a01b038381169116145b610e5a5760405162461bcd60e51b815260040161065790612940565b6001600160a01b0382166000908152600a60209081526040808320543384526008909252822060ff909116915b83518110156112d857306001600160a01b0316856001600160a01b0316636352211e868481518110610ebb57610ebb612782565b60200260200101516040518263ffffffff1660e01b8152600401610ee191815260200190565b602060405180830381865afa158015610efe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f22919061299d565b6001600160a01b031614610f685760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329037bbb732b960991b6044820152606401610657565b6001600160a01b0385166000908152600d6020526040812085518290879085908110610f9657610f96612782565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060006002811115610fe357610fe36127b1565b836002811115610ff557610ff56127b1565b036110b05761106f8260020180548060200260200160405190810160405280929190818152602001828054801561104b57602002820191906000526020600020905b815481526020019060010190808311611037575b505050505085838151811061106257611062612782565b60200260200101516120fd565b805161108591600285019160209091019061236d565b5081600201805480611099576110996129ba565b600190038181906000526020600020016000905590555b60018360028111156110c4576110c46127b1565b036111705761112f8260030180548060200260200160405190810160405280929190818152602001828054801561104b576020028201919060005260206000209081548152602001906001019080831161103757505050505085838151811061106257611062612782565b805161114591600385019160209091019061236d565b5081600301805480611159576111596129ba565b600190038181906000526020600020016000905590555b6002836002811115611184576111846127b1565b03611230576111ef8260040180548060200260200160405190810160405280929190818152602001828054801561104b576020028201919060005260206000209081548152602001906001019080831161103757505050505085838151811061106257611062612782565b805161120591600485019160209091019061236d565b5081600401805480611219576112196129ba565b600190038181906000526020600020016000905590555b6001600160a01b0385166342842e0e303387858151811061125357611253612782565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156112ad57600080fd5b505af11580156112c1573d6000803e3d6000fd5b5050505080806112d090612798565b915050610e87565b506112e23361221d565b8251604080516001600160a01b0387168152602081019290925233917f4ba5edd9b1f5ba1a48c7179f325e7dcbd7f63c4eb006f8ebf5e46cbe6fbfc36091015b60405180910390a2505061133560018055565b5050565b6005546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a0823190602401602060405180830381865afa158015611387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ab91906129d0565b6001600160a01b0384166000908152600860205260409020600201549091506113d590829061276f565b9392505050565b6113e461204a565b6113ee6000612273565b565b6113f86120a4565b600754610100900460ff16156114415760405162461bcd60e51b815260206004820152600e60248201526d11195c1bdcda5d081c185d5cd95960921b6044820152606401610657565b60075460ff166114935760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e67206973206e6f74206c61756e636865642079657400000000006044820152606401610657565b6001600160a01b038216158015906114b857506002546001600160a01b038381169116145b806114d057506003546001600160a01b038381169116145b806114e857506004546001600160a01b038381169116145b6115045760405162461bcd60e51b815260040161065790612940565b6003546001600160a01b038381169116148015611529575060075462010000900460ff165b1561158357611537336122c3565b6115835760405162461bcd60e51b815260206004820181905260248201527f596f7520646f206e6f74206861766520616e792047656e65736973204e4654736044820152606401610657565b6001600160a01b0382166000908152600a60209081526040808320543384526008909252822060ff909116915b83518110156118b657336001600160a01b0316856001600160a01b0316636352211e8684815181106115e4576115e4612782565b60200260200101516040518263ffffffff1660e01b815260040161160a91815260200190565b602060405180830381865afa158015611627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164b919061299d565b6001600160a01b0316146116a15760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420746865206f776e6572206f66207374616b696e67204e4654000000006044820152606401610657565b6001600160a01b0385166342842e0e33308785815181106116c4576116c4612782565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561171e57600080fd5b505af1158015611732573d6000803e3d6000fd5b5050505061173d3390565b6001600160a01b0386166000908152600d60205260408120865190919087908590811061176c5761176c612782565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600060028111156117b9576117b96127b1565b8360028111156117cb576117cb6127b1565b0361180657816002018482815181106117e6576117e6612782565b602090810291909101810151825460018101845560009384529190922001555b600183600281111561181a5761181a6127b1565b03611855578160030184828151811061183557611835612782565b602090810291909101810151825460018101845560009384529190922001555b6002836002811115611869576118696127b1565b036118a4578160040184828151811061188457611884612782565b602090810291909101810151825460018101845560009384529190922001555b806118ae81612798565b9150506115b0565b506118c03361221d565b8251604080516001600160a01b0387168152602081019290925233917fe7de321cbdf2d1b2d2e5e22013ef745d72ebdc806ec3b664584b1cc8dc9abe819101611322565b61190c61204a565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6004546001600160a01b03166000908152600b6020908152604080832054600c8352818420858552909252822054829161196691612907565b9050806000036105b957506004546001600160a01b03166000908152600b602052604090205492915050565b61199a61204a565b60078054911515620100000262ff000019909216919091179055565b6119bf8161221d565b50565b6119ca61204a565b60075460ff1615611a275760405162461bcd60e51b815260206004820152602160248201527f5374616b696e6720686173206265656e206c61756e6368656420616c726561646044820152607960f81b6064820152608401610657565b6007805460ff1916600117905542600655565b6000613e80821115611a6c57600e600281548110611a5a57611a5a612782565b90600052602060002001549050919050565b612710821115611a8a57600e600181548110611a5a57611a5a612782565b600e600081548110611a5a57611a5a612782565b611aa661204a565b6001600160a01b039091166000908152600b6020526040902055565b60108181548110611ad257600080fd5b6000918252602090912001546001600160a01b0316905081565b611af461204a565b603281511115611b395760405162461bcd60e51b815260206004820152601060248201526f06a6040d2e640dac2f040e0cae440e8f60831b6044820152606401610657565b611b436001610834565b60005b81518110156107e0576001600160a01b0383166000908152600d6020526040812083518290859085908110611b7d57611b7d612782565b6020908102919091018101518252810191909152604001600020546001600160a01b031690508015801590611c4a5750306001600160a01b0316846001600160a01b0316636352211e858581518110611bd857611bd8612782565b60200260200101516040518263ffffffff1660e01b8152600401611bfe91815260200190565b602060405180830381865afa158015611c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3f919061299d565b6001600160a01b0316145b15611d3f57836001600160a01b03166323b872dd3083868681518110611c7257611c72612782565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015611ccc57600080fd5b505af1158015611ce0573d6000803e3d6000fd5b50505050828281518110611cf657611cf6612782565b6020026020010151846001600160a01b0316826001600160a01b03167f639cf5a59a0ba34d5cf248cfcc10a75f2fdbc9f613ff75acffb80269dbed612860405160405180910390a45b5080611d4a81612798565b915050611b46565b6005546002546040516361499ab960e01b81526001600160a01b03918216600482015260248101849052600092839216906361499ab990604401602060405180830381865afa158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd91906129d0565b6000908152600960205260409020549392505050565b611deb61204a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156119bf573d6000803e3d6000fd5b6005546040516375a2135b60e11b81526001600160a01b038381166004830152606092839283928392839291169063eb4426b690602401600060405180830381865afa158015611e79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ea19190810190612822565b505050506001600160a01b0387166000908152600860209081526040918290206002810180548451818502810185019095528085529495509360038201936004909201928692918691830182828015611f1957602002820191906000526020600020905b815481526020019060010190808311611f05575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015611f6b57602002820191906000526020600020905b815481526020019060010190808311611f57575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015611fbd57602002820191906000526020600020905b815481526020019060010190808311611fa9575b505050505091509450945094509450509193509193565b611fdc61204a565b6001600160a01b0381166120415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610657565b6119bf81612273565b6000546001600160a01b031633146113ee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610657565b6002600154036120f65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610657565b6002600155565b60606000805b84518110156121b8578385828151811061211f5761211f612782565b6020026020010151036121a657846001865161213b91906128f4565b8151811061214b5761214b612782565b602002602001015185828151811061216557612165612782565b60200260200101818152505083856001875161218191906128f4565b8151811061219157612191612782565b602002602001018181525050600191506121b8565b806121b081612798565b915050612103565b50806122155760405162461bcd60e51b815260206004820152602660248201527f4e6f7420746865206f776e6572206f72206475706c6963617465204e465420696044820152651b881b1a5cdd60d21b6064820152608401610657565b509192915050565b61222681610b16565b6001600160a01b0382166000908152600860205260408120805490919061224e90849061276f565b90915550506001600160a01b0316600090815260086020526040902042600190910155565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60075460009062010000900460ff166122de57506001919050565b60006122e983611339565b11156122f757506001919050565b6002546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a0823190602401602060405180830381865afa158015612342573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236691906129d0565b1192915050565b8280548282559060005260206000209081019282156123a8579160200282015b828111156123a857825182559160200191906001019061238d565b506123b49291506123b8565b5090565b5b808211156123b457600081556001016123b9565b6001600160a01b03811681146119bf57600080fd5b6000602082840312156123f457600080fd5b81356113d5816123cd565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561243e5761243e6123ff565b604052919050565b600067ffffffffffffffff821115612460576124606123ff565b5060051b60200190565b600082601f83011261247b57600080fd5b8135602061249061248b83612446565b612415565b82815260059290921b840181019181810190868411156124af57600080fd5b8286015b848110156124ca57803583529183019183016124b3565b509695505050505050565b6000806000606084860312156124ea57600080fd5b83356124f5816123cd565b9250602084013567ffffffffffffffff8082111561251257600080fd5b61251e8783880161246a565b9350604086013591508082111561253457600080fd5b506125418682870161246a565b9150509250925092565b6000806000806080858703121561256157600080fd5b843561256c816123cd565b935060208581013561257d816123cd565b935060408601359250606086013567ffffffffffffffff808211156125a157600080fd5b818801915088601f8301126125b557600080fd5b8135818111156125c7576125c76123ff565b6125d9601f8201601f19168501612415565b915080825289848285010111156125ef57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561262257600080fd5b823561262d816123cd565b946020939093013593505050565b6000806040838503121561264e57600080fd5b8235612659816123cd565b9150602083013567ffffffffffffffff81111561267557600080fd5b6126818582860161246a565b9150509250929050565b60006020828403121561269d57600080fd5b813580151581146113d557600080fd5b6000602082840312156126bf57600080fd5b5035919050565b600081518084526020808501945080840160005b838110156126f6578151875295820195908201906001016126da565b509495945050505050565b60808152600061271460808301876126c6565b828103602084015261272681876126c6565b9050828103604084015261273a81866126c6565b9050828103606084015261274e81856126c6565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156105b9576105b9612759565b634e487b7160e01b600052603260045260246000fd5b6000600182016127aa576127aa612759565b5060010190565b634e487b7160e01b600052602160045260246000fd5b600082601f8301126127d857600080fd5b815160206127e861248b83612446565b82815260059290921b8401810191818101908684111561280757600080fd5b8286015b848110156124ca578051835291830191830161280b565b600080600080600060a0868803121561283a57600080fd5b855167ffffffffffffffff8082111561285257600080fd5b61285e89838a016127c7565b9650602088015191508082111561287457600080fd5b61288089838a016127c7565b9550604088015191508082111561289657600080fd5b6128a289838a016127c7565b945060608801519150808211156128b857600080fd5b6128c489838a016127c7565b935060808801519150808211156128da57600080fd5b506128e7888289016127c7565b9150509295509295909350565b818103818111156105b9576105b9612759565b80820281158282048414176105b9576105b9612759565b60008261293b57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252603b908201527f556e6b6e6f776e20636f6e7472616374206f72207374616b696e67206973206e60408201527f6f742079657420656e61626c656420666f722074686973204e46540000000000606082015260800190565b6000602082840312156129af57600080fd5b81516113d5816123cd565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156129e257600080fd5b505191905056fea264697066735822122069448715093a92cc5c5df398c36acc7a497e5d1467a98874faf14b4a3a2376eb64736f6c6343000811003300000000000000000000000034c4eba1966b502dfcf0868b6f271d85cc8a231200000000000000000000000000a103267a22971375c3c37d6e1f1bdfb548e946
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061023d5760003560e01c80637f4a67bf1161013b578063c68e5161116100b8578063e086e5ec1161007c578063e086e5ec14610537578063e1af56981461053f578063e6fd48bc1461054c578063eb4426b614610555578063f2fde38b1461057857600080fd5b8063c68e5161146104d8578063c82bc61d146104eb578063cd79b454146104fe578063d87f468f14610511578063da9b5fc61461052457600080fd5b80639ed7898a116100ff5780639ed7898a14610484578063a30a247414610497578063a90401271461049f578063b7ebd6e8146104b2578063c21af1f8146104c557600080fd5b80637f4a67bf1461042757806380833d781461043a57806389b131611461044d5780638c884518146104605780638da5cb5b1461047357600080fd5b80633588415b116101c957806361a52a361161018d57806361a52a36146103dc57806366e6c8af146103e6578063708c94c7146103f957806370a082311461040c578063715018a61461041f57600080fd5b80633588415b1461037d578063415855d6146103905780634bee21d4146103a35780634d307e3f146103b657806361499ab9146103c957600080fd5b8063150b7a0211610210578063150b7a02146102ca5780631f29d2dc1461030157806323101e27146103375780632377893d14610357578063266690c91461036a57600080fd5b8063011c18471461024257806302befd2414610272578063041296671461029457806309cd99d7146102b5575b600080fd5b600354610255906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60075461028490610100900460ff1681565b6040519015158152602001610269565b6102a76102a23660046123e2565b61058b565b604051908152602001610269565b6102c86102c33660046124d5565b6105bf565b005b6102e86102d836600461254b565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610269565b61025561030f36600461260f565b6001600160a01b039182166000908152600d6020908152604080832093835292905220541690565b6102a76103453660046123e2565b600b6020526000908152604090205481565b6102c861036536600461263b565b61073b565b600254610255906001600160a01b031681565b6102c861038b36600461260f565b6107e5565b6102c861039e36600461268b565b610834565b6102a76103b13660046123e2565b610856565b6102a76103c43660046123e2565b610b16565b6102a76103d736600461260f565b610d04565b6102a76201518081565b6102c86103f43660046123e2565b610d73565b6102c861040736600461263b565b610de1565b6102a761041a3660046123e2565b611339565b6102c86113dc565b6102c861043536600461263b565b6113f0565b6102c86104483660046123e2565b611904565b6102a761045b3660046126ad565b61192d565b6102c861046e36600461268b565b611992565b6000546001600160a01b0316610255565b6102c86104923660046123e2565b6119b6565b6102c86119c2565b600554610255906001600160a01b031681565b6102a76104c03660046126ad565b611a3a565b600454610255906001600160a01b031681565b6102c86104e636600461260f565b611a9e565b6102556104f93660046126ad565b611ac2565b6102c861050c36600461263b565b611aec565b6007546102849062010000900460ff1681565b6102a76105323660046126ad565b611d52565b6102c8611de3565b6007546102849060ff1681565b6102a760065481565b6105686105633660046123e2565b611e25565b6040516102699493929190612701565b6102c86105863660046123e2565b611fd4565b600061059682610b16565b6001600160a01b0383166000908152600860205260409020546105b9919061276f565b92915050565b6105c761204a565b6001600160a01b038316158015906105ec57506002546001600160a01b038481169116145b8061060457506003546001600160a01b038481169116145b8061061c57506004546001600160a01b038481169116145b6106605760405162461bcd60e51b815260206004820152601060248201526f155b9adb9bdddb8818dbdb9d1c9858dd60821b60448201526064015b60405180910390fd5b80518251146106a95760405162461bcd60e51b8152602060048201526015602482015274098d2e6e8e640dcdee840e6c2daca40d8cadccee8d605b1b6044820152606401610657565b60005b8251811015610735578181815181106106c7576106c7612782565b6020026020010151600c6000866001600160a01b03166001600160a01b03168152602001908152602001600020600085848151811061070857610708612782565b6020026020010151815260200190815260200160002081905550808061072d90612798565b9150506106ac565b50505050565b61074361204a565b80516003146107945760405162461bcd60e51b815260206004820152601760248201527f77726f6e67206e756d626572206f6620726577617264730000000000000000006044820152606401610657565b600380546001600160a01b0319166001600160a01b0384169081179091556000908152600a60209081526040909120805460ff1916600117905581516107e091600e919084019061236d565b505050565b6107ed61204a565b600480546001600160a01b03939093166001600160a01b0319909316831790556000918252600a60209081526040808420805460ff19166002179055600b90915290912055565b61083c61204a565b600780549115156101000261ff0019909216919091179055565b6005546040516375a2135b60e11b81526001600160a01b03838116600483015260009260609291169063eb4426b690602401600060405180830381865afa1580156108a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108cd9190810190612822565b5092935060009250829150505b8251811015610923576109058382815181106108f8576108f8612782565b6020026020010151611d52565b61090f908361276f565b91508061091b81612798565b9150506108da565b5060005b6001600160a01b0385166000908152600860205260409020600201548110156109aa576001600160a01b0385166000908152600860205260409020600201805461098c91908390811061097c5761097c612782565b9060005260206000200154611d52565b610996908361276f565b9150806109a281612798565b915050610927565b506001600160a01b038416600090815260086020908152604080832060030180548251818502810185019093528083529192909190830182828015610a0e57602002820191906000526020600020905b8154815260200190600101908083116109fa575b5050505050905060005b8151811015610a6157610a43828281518110610a3657610a36612782565b6020026020010151611a3a565b610a4d908461276f565b925080610a5981612798565b915050610a18565b506001600160a01b038516600090815260086020908152604080832060040180548251818502810185019093528083529192909190830182828015610ac557602002820191906000526020600020905b815481526020019060010190808311610ab1575b5050505050905060005b8151811015610b0b57610aed828281518110610a3657610a36612782565b610af7908561276f565b935080610b0381612798565b915050610acf565b509195945050505050565b60075460009060ff16610b625760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99c81b9bdd081b185d5b98da195960621b6044820152606401610657565b6001600160a01b0382166000908152600860209081526040808320815160a08101835281548152600182015481850152600282018054845181870281018701865281815292959394860193830182828015610bdc57602002820191906000526020600020905b815481526020019060010190808311610bc8575b5050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610c3457602002820191906000526020600020905b815481526020019060010190808311610c20575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020018280548015610c8c57602002820191906000526020600020905b815481526020019060010190808311610c78575b50505050508152505090506000610ca284610856565b90508160200151600003610cef578015610ce557620151808160065442610cc991906128f4565b610cd39190612907565b610cdd919061291e565b949350505050565b5060009392505050565b6201518081836020015142610cc991906128f4565b6002546000906001600160a01b0390811690841603610d2d57610d2682611d52565b90506105b9565b6003546001600160a01b0390811690841603610d4c57610d2682611a3a565b6004546001600160a01b0390811690841603610d6b57610d268261192d565b5060006105b9565b610d7b61204a565b6001600160a01b03166000818152600f60205260408120805460ff191660019081179091556010805491820181559091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319169091179055565b610de96120a4565b6001600160a01b03821615801590610e0e57506002546001600160a01b038381169116145b80610e2657506003546001600160a01b038381169116145b80610e3e57506004546001600160a01b038381169116145b610e5a5760405162461bcd60e51b815260040161065790612940565b6001600160a01b0382166000908152600a60209081526040808320543384526008909252822060ff909116915b83518110156112d857306001600160a01b0316856001600160a01b0316636352211e868481518110610ebb57610ebb612782565b60200260200101516040518263ffffffff1660e01b8152600401610ee191815260200190565b602060405180830381865afa158015610efe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f22919061299d565b6001600160a01b031614610f685760405162461bcd60e51b815260206004820152600d60248201526c2737ba103a34329037bbb732b960991b6044820152606401610657565b6001600160a01b0385166000908152600d6020526040812085518290879085908110610f9657610f96612782565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060006002811115610fe357610fe36127b1565b836002811115610ff557610ff56127b1565b036110b05761106f8260020180548060200260200160405190810160405280929190818152602001828054801561104b57602002820191906000526020600020905b815481526020019060010190808311611037575b505050505085838151811061106257611062612782565b60200260200101516120fd565b805161108591600285019160209091019061236d565b5081600201805480611099576110996129ba565b600190038181906000526020600020016000905590555b60018360028111156110c4576110c46127b1565b036111705761112f8260030180548060200260200160405190810160405280929190818152602001828054801561104b576020028201919060005260206000209081548152602001906001019080831161103757505050505085838151811061106257611062612782565b805161114591600385019160209091019061236d565b5081600301805480611159576111596129ba565b600190038181906000526020600020016000905590555b6002836002811115611184576111846127b1565b03611230576111ef8260040180548060200260200160405190810160405280929190818152602001828054801561104b576020028201919060005260206000209081548152602001906001019080831161103757505050505085838151811061106257611062612782565b805161120591600485019160209091019061236d565b5081600401805480611219576112196129ba565b600190038181906000526020600020016000905590555b6001600160a01b0385166342842e0e303387858151811061125357611253612782565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156112ad57600080fd5b505af11580156112c1573d6000803e3d6000fd5b5050505080806112d090612798565b915050610e87565b506112e23361221d565b8251604080516001600160a01b0387168152602081019290925233917f4ba5edd9b1f5ba1a48c7179f325e7dcbd7f63c4eb006f8ebf5e46cbe6fbfc36091015b60405180910390a2505061133560018055565b5050565b6005546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a0823190602401602060405180830381865afa158015611387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ab91906129d0565b6001600160a01b0384166000908152600860205260409020600201549091506113d590829061276f565b9392505050565b6113e461204a565b6113ee6000612273565b565b6113f86120a4565b600754610100900460ff16156114415760405162461bcd60e51b815260206004820152600e60248201526d11195c1bdcda5d081c185d5cd95960921b6044820152606401610657565b60075460ff166114935760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e67206973206e6f74206c61756e636865642079657400000000006044820152606401610657565b6001600160a01b038216158015906114b857506002546001600160a01b038381169116145b806114d057506003546001600160a01b038381169116145b806114e857506004546001600160a01b038381169116145b6115045760405162461bcd60e51b815260040161065790612940565b6003546001600160a01b038381169116148015611529575060075462010000900460ff165b1561158357611537336122c3565b6115835760405162461bcd60e51b815260206004820181905260248201527f596f7520646f206e6f74206861766520616e792047656e65736973204e4654736044820152606401610657565b6001600160a01b0382166000908152600a60209081526040808320543384526008909252822060ff909116915b83518110156118b657336001600160a01b0316856001600160a01b0316636352211e8684815181106115e4576115e4612782565b60200260200101516040518263ffffffff1660e01b815260040161160a91815260200190565b602060405180830381865afa158015611627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164b919061299d565b6001600160a01b0316146116a15760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420746865206f776e6572206f66207374616b696e67204e4654000000006044820152606401610657565b6001600160a01b0385166342842e0e33308785815181106116c4576116c4612782565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561171e57600080fd5b505af1158015611732573d6000803e3d6000fd5b5050505061173d3390565b6001600160a01b0386166000908152600d60205260408120865190919087908590811061176c5761176c612782565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600060028111156117b9576117b96127b1565b8360028111156117cb576117cb6127b1565b0361180657816002018482815181106117e6576117e6612782565b602090810291909101810151825460018101845560009384529190922001555b600183600281111561181a5761181a6127b1565b03611855578160030184828151811061183557611835612782565b602090810291909101810151825460018101845560009384529190922001555b6002836002811115611869576118696127b1565b036118a4578160040184828151811061188457611884612782565b602090810291909101810151825460018101845560009384529190922001555b806118ae81612798565b9150506115b0565b506118c03361221d565b8251604080516001600160a01b0387168152602081019290925233917fe7de321cbdf2d1b2d2e5e22013ef745d72ebdc806ec3b664584b1cc8dc9abe819101611322565b61190c61204a565b6001600160a01b03166000908152600f60205260409020805460ff19169055565b6004546001600160a01b03166000908152600b6020908152604080832054600c8352818420858552909252822054829161196691612907565b9050806000036105b957506004546001600160a01b03166000908152600b602052604090205492915050565b61199a61204a565b60078054911515620100000262ff000019909216919091179055565b6119bf8161221d565b50565b6119ca61204a565b60075460ff1615611a275760405162461bcd60e51b815260206004820152602160248201527f5374616b696e6720686173206265656e206c61756e6368656420616c726561646044820152607960f81b6064820152608401610657565b6007805460ff1916600117905542600655565b6000613e80821115611a6c57600e600281548110611a5a57611a5a612782565b90600052602060002001549050919050565b612710821115611a8a57600e600181548110611a5a57611a5a612782565b600e600081548110611a5a57611a5a612782565b611aa661204a565b6001600160a01b039091166000908152600b6020526040902055565b60108181548110611ad257600080fd5b6000918252602090912001546001600160a01b0316905081565b611af461204a565b603281511115611b395760405162461bcd60e51b815260206004820152601060248201526f06a6040d2e640dac2f040e0cae440e8f60831b6044820152606401610657565b611b436001610834565b60005b81518110156107e0576001600160a01b0383166000908152600d6020526040812083518290859085908110611b7d57611b7d612782565b6020908102919091018101518252810191909152604001600020546001600160a01b031690508015801590611c4a5750306001600160a01b0316846001600160a01b0316636352211e858581518110611bd857611bd8612782565b60200260200101516040518263ffffffff1660e01b8152600401611bfe91815260200190565b602060405180830381865afa158015611c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3f919061299d565b6001600160a01b0316145b15611d3f57836001600160a01b03166323b872dd3083868681518110611c7257611c72612782565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015611ccc57600080fd5b505af1158015611ce0573d6000803e3d6000fd5b50505050828281518110611cf657611cf6612782565b6020026020010151846001600160a01b0316826001600160a01b03167f639cf5a59a0ba34d5cf248cfcc10a75f2fdbc9f613ff75acffb80269dbed612860405160405180910390a45b5080611d4a81612798565b915050611b46565b6005546002546040516361499ab960e01b81526001600160a01b03918216600482015260248101849052600092839216906361499ab990604401602060405180830381865afa158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd91906129d0565b6000908152600960205260409020549392505050565b611deb61204a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156119bf573d6000803e3d6000fd5b6005546040516375a2135b60e11b81526001600160a01b038381166004830152606092839283928392839291169063eb4426b690602401600060405180830381865afa158015611e79573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ea19190810190612822565b505050506001600160a01b0387166000908152600860209081526040918290206002810180548451818502810185019095528085529495509360038201936004909201928692918691830182828015611f1957602002820191906000526020600020905b815481526020019060010190808311611f05575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015611f6b57602002820191906000526020600020905b815481526020019060010190808311611f57575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015611fbd57602002820191906000526020600020905b815481526020019060010190808311611fa9575b505050505091509450945094509450509193509193565b611fdc61204a565b6001600160a01b0381166120415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610657565b6119bf81612273565b6000546001600160a01b031633146113ee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610657565b6002600154036120f65760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610657565b6002600155565b60606000805b84518110156121b8578385828151811061211f5761211f612782565b6020026020010151036121a657846001865161213b91906128f4565b8151811061214b5761214b612782565b602002602001015185828151811061216557612165612782565b60200260200101818152505083856001875161218191906128f4565b8151811061219157612191612782565b602002602001018181525050600191506121b8565b806121b081612798565b915050612103565b50806122155760405162461bcd60e51b815260206004820152602660248201527f4e6f7420746865206f776e6572206f72206475706c6963617465204e465420696044820152651b881b1a5cdd60d21b6064820152608401610657565b509192915050565b61222681610b16565b6001600160a01b0382166000908152600860205260408120805490919061224e90849061276f565b90915550506001600160a01b0316600090815260086020526040902042600190910155565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60075460009062010000900460ff166122de57506001919050565b60006122e983611339565b11156122f757506001919050565b6002546040516370a0823160e01b81526001600160a01b03848116600483015260009216906370a0823190602401602060405180830381865afa158015612342573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236691906129d0565b1192915050565b8280548282559060005260206000209081019282156123a8579160200282015b828111156123a857825182559160200191906001019061238d565b506123b49291506123b8565b5090565b5b808211156123b457600081556001016123b9565b6001600160a01b03811681146119bf57600080fd5b6000602082840312156123f457600080fd5b81356113d5816123cd565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561243e5761243e6123ff565b604052919050565b600067ffffffffffffffff821115612460576124606123ff565b5060051b60200190565b600082601f83011261247b57600080fd5b8135602061249061248b83612446565b612415565b82815260059290921b840181019181810190868411156124af57600080fd5b8286015b848110156124ca57803583529183019183016124b3565b509695505050505050565b6000806000606084860312156124ea57600080fd5b83356124f5816123cd565b9250602084013567ffffffffffffffff8082111561251257600080fd5b61251e8783880161246a565b9350604086013591508082111561253457600080fd5b506125418682870161246a565b9150509250925092565b6000806000806080858703121561256157600080fd5b843561256c816123cd565b935060208581013561257d816123cd565b935060408601359250606086013567ffffffffffffffff808211156125a157600080fd5b818801915088601f8301126125b557600080fd5b8135818111156125c7576125c76123ff565b6125d9601f8201601f19168501612415565b915080825289848285010111156125ef57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561262257600080fd5b823561262d816123cd565b946020939093013593505050565b6000806040838503121561264e57600080fd5b8235612659816123cd565b9150602083013567ffffffffffffffff81111561267557600080fd5b6126818582860161246a565b9150509250929050565b60006020828403121561269d57600080fd5b813580151581146113d557600080fd5b6000602082840312156126bf57600080fd5b5035919050565b600081518084526020808501945080840160005b838110156126f6578151875295820195908201906001016126da565b509495945050505050565b60808152600061271460808301876126c6565b828103602084015261272681876126c6565b9050828103604084015261273a81866126c6565b9050828103606084015261274e81856126c6565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156105b9576105b9612759565b634e487b7160e01b600052603260045260246000fd5b6000600182016127aa576127aa612759565b5060010190565b634e487b7160e01b600052602160045260246000fd5b600082601f8301126127d857600080fd5b815160206127e861248b83612446565b82815260059290921b8401810191818101908684111561280757600080fd5b8286015b848110156124ca578051835291830191830161280b565b600080600080600060a0868803121561283a57600080fd5b855167ffffffffffffffff8082111561285257600080fd5b61285e89838a016127c7565b9650602088015191508082111561287457600080fd5b61288089838a016127c7565b9550604088015191508082111561289657600080fd5b6128a289838a016127c7565b945060608801519150808211156128b857600080fd5b6128c489838a016127c7565b935060808801519150808211156128da57600080fd5b506128e7888289016127c7565b9150509295509295909350565b818103818111156105b9576105b9612759565b80820281158282048414176105b9576105b9612759565b60008261293b57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252603b908201527f556e6b6e6f776e20636f6e7472616374206f72207374616b696e67206973206e60408201527f6f742079657420656e61626c656420666f722074686973204e46540000000000606082015260800190565b6000602082840312156129af57600080fd5b81516113d5816123cd565b634e487b7160e01b600052603160045260246000fd5b6000602082840312156129e257600080fd5b505191905056fea264697066735822122069448715093a92cc5c5df398c36acc7a497e5d1467a98874faf14b4a3a2376eb64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000034c4eba1966b502dfcf0868b6f271d85cc8a231200000000000000000000000000a103267a22971375c3c37d6e1f1bdfb548e946
-----Decoded View---------------
Arg [0] : _genesis (address): 0x34c4EBA1966B502dfCF0868b6f271d85CC8A2312
Arg [1] : _mooonstakings1 (address): 0x00a103267A22971375C3C37d6E1f1BDfb548e946
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000034c4eba1966b502dfcf0868b6f271d85cc8a2312
Arg [1] : 00000000000000000000000000a103267a22971375c3c37d6e1f1bdfb548e946
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.