More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 976 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stake And Burn | 329291803 | 5 mins ago | IN | 0 ETH | 0.00000333 | ||||
Stake And Burn | 329270677 | 1 hr ago | IN | 0 ETH | 0.00000227 | ||||
Stake And Burn | 329269808 | 1 hr ago | IN | 0 ETH | 0.00000236 | ||||
Stake And Burn | 329267491 | 1 hr ago | IN | 0 ETH | 0.00000289 | ||||
Stake And Burn | 329215005 | 5 hrs ago | IN | 0 ETH | 0.00000291 | ||||
Stake And Burn | 329183708 | 7 hrs ago | IN | 0 ETH | 0.00000188 | ||||
Stake And Burn | 329172635 | 8 hrs ago | IN | 0 ETH | 0.00000691 | ||||
Stake And Burn | 329086058 | 14 hrs ago | IN | 0 ETH | 0.00000445 | ||||
Stake And Burn | 329077628 | 14 hrs ago | IN | 0 ETH | 0.00001528 | ||||
Stake And Burn | 329071619 | 15 hrs ago | IN | 0 ETH | 0.00003867 | ||||
Stake And Burn | 329063231 | 15 hrs ago | IN | 0 ETH | 0.00002051 | ||||
Stake And Burn | 329062469 | 16 hrs ago | IN | 0 ETH | 0.0000188 | ||||
Stake And Burn | 329062093 | 16 hrs ago | IN | 0 ETH | 0.00001394 | ||||
Stake And Burn | 329040441 | 17 hrs ago | IN | 0 ETH | 0.00001507 | ||||
Stake And Burn | 329040067 | 17 hrs ago | IN | 0 ETH | 0.00001663 | ||||
Stake And Burn | 329036686 | 17 hrs ago | IN | 0 ETH | 0.00000965 | ||||
Stake And Burn | 329010380 | 19 hrs ago | IN | 0 ETH | 0.00000085 | ||||
Stake And Burn | 328985566 | 21 hrs ago | IN | 0 ETH | 0.00000062 | ||||
Stake And Burn | 328977690 | 21 hrs ago | IN | 0 ETH | 0.00000054 | ||||
Stake And Burn | 328912752 | 26 hrs ago | IN | 0 ETH | 0.00000049 | ||||
Stake And Burn | 328910317 | 26 hrs ago | IN | 0 ETH | 0.0000009 | ||||
Stake And Burn | 328893918 | 27 hrs ago | IN | 0 ETH | 0.00000051 | ||||
Stake And Burn | 328893539 | 27 hrs ago | IN | 0 ETH | 0.00000051 | ||||
Stake And Burn | 328872994 | 29 hrs ago | IN | 0 ETH | 0.00000153 | ||||
Stake And Burn | 328868273 | 29 hrs ago | IN | 0 ETH | 0.00000048 |
Loading...
Loading
Contract Name:
NFTBoosterV2
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 20000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /* ░██╗░░░░░░░██╗░█████╗░░█████╗░░░░░░░███████╗██╗ ░██║░░██╗░░██║██╔══██╗██╔══██╗░░░░░░██╔════╝██║ ░╚██╗████╗██╔╝██║░░██║██║░░██║█████╗█████╗░░██║ ░░████╔═████║░██║░░██║██║░░██║╚════╝██╔══╝░░██║ ░░╚██╔╝░╚██╔╝░╚█████╔╝╚█████╔╝░░░░░░██║░░░░░██║ ░░░╚═╝░░░╚═╝░░░╚════╝░░╚════╝░░░░░░░╚═╝░░░░░╚═╝ * * MIT License * =========== * * Copyright (c) 2020 WooTrade * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import {IERC1155Receiver} from "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; import {BaseAdminOperation} from "../BaseAdminOperation.sol"; import {INFTBoosterV2} from "../interfaces/INFTBoosterV2.sol"; import {IRewardNFT} from "../interfaces/IRewardNFT.sol"; import {IWooStakingManager} from "../interfaces/IWooStakingManager.sol"; contract NFTBoosterV2 is INFTBoosterV2, IERC1155Receiver, BaseAdminOperation { IRewardNFT public stakedNFT; IWooStakingManager public stakingManager; uint256 public base; // Default: 10000th, 100: 1%, 5000: 50% uint256 public tierCount = 10; // stakeTokenId => ttl mapping(uint256 => uint256) public stakeTokenTTLs; // Default: 10000th, 100: 1%, 5000: 50%, stakeTokenId => nftBoostRatio mapping(uint256 => uint256) public nftBoostRatios; // userAddress => stakeShortTokens mapping(address => StakeShortToken[3]) public userStakeShortTokens; // bucketIndex => isActive mapping(uint256 => bool) public isActiveBucket; // tier => wooBalThreshold mapping(uint256 => uint256) public tierThresholds; // tokenId => boostDecayRate mapping(uint256 => uint256) public tokenBoostDecayRatios; constructor(address _stakedNFT, address _stakingManager) { stakedNFT = IRewardNFT(_stakedNFT); stakingManager = IWooStakingManager(_stakingManager); base = 10000; isActiveBucket[0] = true; uint256[] memory tokenIds = stakedNFT.getAllTokenIds(); uint256 len = tokenIds.length; for (uint256 i = 0; i < len; ++i) { uint256 tokenId = tokenIds[i]; stakeTokenTTLs[tokenId] = 5 days; } tierThresholds[1] = 1_800e18; tierThresholds[2] = 5_000e18; tierThresholds[3] = 10_000e18; tierThresholds[4] = 25_000e18; tierThresholds[5] = 100_000e18; tierThresholds[6] = 250_000e18; tierThresholds[7] = 420_000e18; tierThresholds[8] = 690_000e18; tierThresholds[9] = 1_000_000e18; tierThresholds[10] = 5_000_000e18; } // --------------------- Business Functions --------------------- // function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external override returns (bytes4) { // NOTE: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/utils/ERC1155Holder.sol return this.onERC1155Received.selector; } function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external override returns (bytes4) { return this.onERC1155BatchReceived.selector; } function stakeAndBurn(uint256 _tokenId, uint256 _index) external { address user = msg.sender; require(isActiveBucket[_index], "NFTBooster: !activeBucket"); require(_index < userStakeShortTokens[user].length, "NFTBooster: !largeBucket"); require(stakeTokenTTLs[_tokenId] > 0, "NFTBooster: !tokenId"); stakedNFT.burn(user, _tokenId, 1); userStakeShortTokens[user][_index] = StakeShortToken(_tokenId, block.timestamp); } function supportsInterface(bytes4 interfaceId) external view returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId; } function boostRatio(address _user) external view returns (uint256 compoundRatio, uint8[3] memory stakeTokenIds) { uint256 len = userStakeShortTokens[_user].length; uint256 userTier = getUserTier(_user); compoundRatio = base; for (uint256 i = 0; i < len; ++i) { if (!isActiveBucket[i]) continue; // not active bucket uint256 tokenId = userStakeShortTokens[_user][i].tokenId; uint256 timestamp = userStakeShortTokens[_user][i].timestamp; if (tokenId == 0) continue; // empty token if ((block.timestamp - timestamp) > stakeTokenTTLs[tokenId]) continue; uint256 ratio = nftBoostRatios[tokenId] == 0 ? base : nftBoostRatios[tokenId]; uint256 accBoostDecayRatio = (base - tokenBoostDecayRatios[tokenId]) ** (userTier - 1); uint256 ratioAfterDecay = (ratio * accBoostDecayRatio) / (base ** (userTier - 1)); compoundRatio = (compoundRatio * ratioAfterDecay) / base; stakeTokenIds[i] = uint8(tokenId); } } function getUserTier(address _user) public view returns (uint256 userTier) { uint256 wooBal = stakingManager.wooBalance(_user); for (uint256 i = tierCount; i > 0; --i) { if (wooBal >= tierThresholds[i]) { return i; } } return 1; // regard tier0 as tier1 in nft boost calculation } // --------------------- Admin Functions --------------------- // function setStakedNFT(address _stakedNFT) external onlyOwner { stakedNFT = IRewardNFT(_stakedNFT); } function setStakingManager(address _stakingManager) external onlyOwner { stakingManager = IWooStakingManager(_stakingManager); } function setBase(uint256 _base) external onlyAdmin { base = _base; } function setTierCount(uint256 _tierCount) external onlyOwner { tierCount = _tierCount; } function setStakeTokenTTL(uint256 _tokenId, uint256 _ttl) external onlyAdmin { uint256 oldTTL = stakeTokenTTLs[_tokenId]; stakeTokenTTLs[_tokenId] = _ttl; emit SetStakeTokenTTL(_tokenId, _ttl, oldTTL); } function setNFTBoostRatios(uint256[] calldata _tokenIds, uint256[] calldata _ratios) external onlyOwner { uint256 len = _tokenIds.length; for (uint256 i = 0; i < len; ++i) { require(_ratios[i] != 0, "NFTBooster: !_ratios"); nftBoostRatios[_tokenIds[i]] = _ratios[i]; } } function setActiveBucket(uint256 _bucket, bool _active) external onlyOwner { isActiveBucket[_bucket] = _active; } function setTierThresholds(uint256[] calldata _tiers, uint256[] calldata _thresholds) external onlyOwner { uint256 len = _tiers.length; for (uint256 i = 0; i < len; ++i) { tierThresholds[_tiers[i]] = _thresholds[i]; } } function setTokenBoostDecayRatios( uint256[] calldata _tokenIds, uint256[] calldata _boostDecayRatios ) external onlyOwner { uint256 len = _tokenIds.length; for (uint256 i = 0; i < len; ++i) { tokenBoostDecayRatios[_tokenIds[i]] = _boostDecayRatios[i]; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /* ░██╗░░░░░░░██╗░█████╗░░█████╗░░░░░░░███████╗██╗ ░██║░░██╗░░██║██╔══██╗██╔══██╗░░░░░░██╔════╝██║ ░╚██╗████╗██╔╝██║░░██║██║░░██║█████╗█████╗░░██║ ░░████╔═████║░██║░░██║██║░░██║╚════╝██╔══╝░░██║ ░░╚██╔╝░╚██╔╝░╚█████╔╝╚█████╔╝░░░░░░██║░░░░░██║ ░░░╚═╝░░░╚═╝░░░╚════╝░░╚════╝░░░░░░░╚═╝░░░░░╚═╝ * * MIT License * =========== * * Copyright (c) 2020 WooTrade * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol"; import {TransferHelper} from "./util/TransferHelper.sol"; abstract contract BaseAdminOperation is Pausable, Ownable { event AdminUpdated(address indexed addr, bool flag); mapping(address => bool) public isAdmin; modifier onlyAdmin() { require(_msgSender() == owner() || isAdmin[_msgSender()], "BaseAdminOperation: !admin"); _; } function pause() public onlyAdmin { _pause(); } function unpause() public onlyAdmin { _unpause(); } function setAdmin(address addr, bool flag) public onlyAdmin { isAdmin[addr] = flag; emit AdminUpdated(addr, flag); } function inCaseTokenGotStuck(address stuckToken) external virtual onlyOwner { if (stuckToken == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { TransferHelper.safeTransferETH(_msgSender(), address(this).balance); } else { uint256 amount = IERC20(stuckToken).balanceOf(address(this)); TransferHelper.safeTransfer(stuckToken, _msgSender(), amount); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface INFTBoosterV2 { event SetStakeTokenTTL(uint256 tokenId, uint256 newTTL, uint256 oldTTL); struct StakeShortToken { uint256 tokenId; uint256 timestamp; } function base() external view returns (uint256); function stakeAndBurn(uint256 _tokenId, uint256 _index) external; function boostRatio(address _user) external view returns (uint256 compoundRatio, uint8[3] memory stakeTokenIds); function getUserTier(address _user) external view returns (uint256 userTier); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; interface IRewardNFT is IERC1155 { function mint(address _user, uint256 _tokenId, uint256 _amount) external; function burn(address _user, uint256 _tokenId, uint256 _amount) external; function getAllTokenIds() external view returns (uint256[] memory allTokenIds); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; interface IWooStakingManager { /* ----- Events ----- */ event StakeWooOnStakingManager(address indexed user, uint256 amount); event UnstakeWooOnStakingManager(address indexed user, uint256 amount); event AddMPOnStakingManager(address indexed user, uint256 amount); event CompoundMPOnStakingManager(address indexed user); event CompoundRewardsOnStakingManager(address indexed user, uint256 wooAmount); event CompoundAllOnStakingManager(address indexed user); event CompoundAllForUsersOnStakingManager(address[] users, uint256[] wooRewards); event SetAutoCompoundOnStakingManager(address indexed user, bool flag); event SetMPRewarderOnStakingManager(address indexed rewarder); event SetWooPPOnStakingManager(address indexed wooPP); event SetStakingLocalOnStakingManager(address indexed stakingProxy); event SetCompounderOnStakingManager(address indexed compounder); event AddRewarderOnStakingManager(address indexed rewarder); event RemoveRewarderOnStakingManager(address indexed rewarder); event ClaimRewardsOnStakingManager(address indexed user); /* ----- State Variables ----- */ /* ----- Functions ----- */ function stakeWoo(address _user, uint256 _amount) external; function unstakeWoo(address _user, uint256 _amount) external; function mpBalance(address _user) external view returns (uint256); function wooBalance(address _user) external view returns (uint256); function wooTotalBalance() external view returns (uint256); function totalBalance(address _user) external view returns (uint256); function totalBalance() external view returns (uint256); function compoundMP(address _user) external; function addMP(address _user, uint256 _amount) external; function compoundRewards(address _user) external; function compoundAll(address _user) external; function compoundAllForUsers(address[] memory _users) external; function setAutoCompound(address _user, bool _flag) external; function pendingRewards( address _user ) external view returns (uint256 mpRewardAmount, address[] memory rewardTokens, uint256[] memory amounts); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint256 value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeApprove: approve failed" ); } function safeTransfer(address token, address to, uint256 value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeTransfer: transfer failed" ); } function safeTransferFrom(address token, address from, address to, uint256 value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::transferFrom: transferFrom failed" ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, "TransferHelper::safeTransferETH: ETH transfer failed"); } }
{ "optimizer": { "enabled": true, "runs": 20000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_stakedNFT","type":"address"},{"internalType":"address","name":"_stakingManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"AdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTTL","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldTTL","type":"uint256"}],"name":"SetStakeTokenTTL","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"base","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"boostRatio","outputs":[{"internalType":"uint256","name":"compoundRatio","type":"uint256"},{"internalType":"uint8[3]","name":"stakeTokenIds","type":"uint8[3]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserTier","outputs":[{"internalType":"uint256","name":"userTier","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stuckToken","type":"address"}],"name":"inCaseTokenGotStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isActiveBucket","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftBoostRatios","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bucket","type":"uint256"},{"internalType":"bool","name":"_active","type":"bool"}],"name":"setActiveBucket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_base","type":"uint256"}],"name":"setBase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_ratios","type":"uint256[]"}],"name":"setNFTBoostRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_ttl","type":"uint256"}],"name":"setStakeTokenTTL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakedNFT","type":"address"}],"name":"setStakedNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingManager","type":"address"}],"name":"setStakingManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tierCount","type":"uint256"}],"name":"setTierCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tiers","type":"uint256[]"},{"internalType":"uint256[]","name":"_thresholds","type":"uint256[]"}],"name":"setTierThresholds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_boostDecayRatios","type":"uint256[]"}],"name":"setTokenBoostDecayRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"stakeAndBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeTokenTTLs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedNFT","outputs":[{"internalType":"contract IRewardNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingManager","outputs":[{"internalType":"contract IWooStakingManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tierCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tierThresholds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenBoostDecayRatios","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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userStakeShortTokens","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600a6005553480156200001657600080fd5b506040516200268c3803806200268c8339810160408190526200003991620003c7565b6000805460ff191690556200004e3362000351565b600280546001600160a01b038085166001600160a01b0319928316811790935560038054918516919092161790556127106004908155600080805260096020527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b805460ff1916600117905560408051635edf6b9160e11b8152905191939263bdbed72292828201928692908290030181865afa158015620000f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200011e919081019062000415565b805190915060005b818110156200017a576000838281518110620001465762000146620004de565b6020908102919091018101516000908152600690915260409020620697809055506200017281620004f4565b905062000126565b5050600a6020819052686194049f30f72000007fbbc70db1b6c7afd11e79c0fb0051300458f1a3acb8ee9789d9b6b26c61ad9bc75569010f0cf064dd592000007fbff4442b8ed600beeb8e26b1279a0f0d14c6edfaec26d968ee13c86f7d4c2ba85569021e19e0c9bab24000007fa856840544dc26124927add067d799967eac11be13e14d82cc281ea46fa397595569054b40b1f852bda000007fe1eb2b2161a492c07c5a334e48012567cba93ec021043f53c1955516a3c5a8415569152d02c7e14af68000007ff35035bc2b01d44bd35a1dcdc552315cffb73da35cfd60570b7b777f98036f9f556934f086f3b33b684000007f10d9dd018e4cae503383c9f804c1c1603ada5856ee7894375d9b97cd8c8b27db556958f03ee118a13e8000007f22e39f61d1e4986b4f116cea9067f62cc77d74dff1780ae9c8b5166d1dd288295569921cf9965f520b4000007f2c1fd36ba11b13b555f58753742999069764391f450ca8727fe8a3eeffe677755569d3c21bcecceda10000007f825eb4cda6b8b44578c55770496c59e6dc3cf2235f690bcdaf51a61898ceb2845560005250506a0422ca8b0a00a4250000007f3e57c57b03145299956be61386751c5b285d460d484d5c2403a6be086d9d6baa55506200051c565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b80516001600160a01b0381168114620003c257600080fd5b919050565b60008060408385031215620003db57600080fd5b620003e683620003aa565b9150620003f660208401620003aa565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200042957600080fd5b82516001600160401b03808211156200044157600080fd5b818501915085601f8301126200045657600080fd5b8151818111156200046b576200046b620003ff565b8060051b604051601f19603f83011681018181108582111715620004935762000493620003ff565b604052918252848201925083810185019188831115620004b257600080fd5b938501935b82851015620004d257845184529385019392850192620004b7565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000600182016200051557634e487b7160e01b600052601160045260246000fd5b5060010190565b612160806200052c6000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063893929311161012a578063b1f15ca3116100bd578063e1a4e72a1161008c578063ec5b28e211610071578063ec5b28e2146105c1578063f23a6e61146105d4578063f2fde38b1461060d57600080fd5b8063e1a4e72a1461059b578063e4d2620e146105ae57600080fd5b8063b1f15ca3146104e9578063bc197c81146104fc578063bc9f725d14610568578063dac7926d1461057b57600080fd5b806396b55f7d116100f957806396b55f7d1461049a578063a100d69d146104a3578063a885093c146104c3578063b00bba6a146104d657600080fd5b8063893929311461042e5780638bdc894a146104515780638da5cb5b1461046457806390b631c81461048757600080fd5b80634b0bddd2116101bd578063715018a61161018c57806374db02cf1161017157806374db02cf146103dd578063779430cb146103fe5780638456cb591461042657600080fd5b8063715018a6146103b55780637364ac6c146103bd57600080fd5b80634b0bddd21461036e5780635001f3b514610381578063513795c31461038a5780635c975abb146103aa57600080fd5b806338e80f68116101f957806338e80f68146103125780633ed41382146103255780633f4ba83a146103535780634683245d1461035b57600080fd5b806301ffc9a71461022b57806322828cc21461029557806324d7806c146102da578063378310f0146102fd575b600080fd5b610280610239366004611a9f565b7fffffffff00000000000000000000000000000000000000000000000000000000167f4e2312e0000000000000000000000000000000000000000000000000000000001490565b60405190151581526020015b60405180910390f35b6003546102b59073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161028c565b6102806102e8366004611b11565b60016020526000908152604090205460ff1681565b61031061030b366004611b78565b610620565b005b610310610320366004611be4565b610695565b610345610333366004611be4565b60076020526000908152604090205481565b60405190815260200161028c565b61031061076b565b610310610369366004611bfd565b610841565b61031061037c366004611c2d565b610ad1565b61034560045481565b610345610398366004611be4565b60066020526000908152604090205481565b60005460ff16610280565b610310610c27565b6002546102b59073ffffffffffffffffffffffffffffffffffffffff1681565b6103f06103eb366004611b11565b610c39565b60405161028c929190611c64565b61041161040c366004611c9f565b610e38565b6040805192835260208301919091520161028c565b610310610e68565b61028061043c366004611be4565b60096020526000908152604090205460ff1681565b61031061045f366004611bfd565b610f3c565b600054610100900473ffffffffffffffffffffffffffffffffffffffff166102b5565b610310610495366004611be4565b611063565b61034560055481565b6103456104b1366004611be4565b600a6020526000908152604090205481565b6103106104d1366004611b11565b611070565b6103106104e4366004611b11565b6110bf565b6103106104f7366004611b78565b61110e565b61053761050a366004611d0b565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161028c565b610310610576366004611b78565b6111fd565b610345610589366004611be4565b600b6020526000908152604090205481565b6103106105a9366004611b11565b61126a565b6103456105bc366004611b11565b611352565b6103106105cf366004611dc6565b61142d565b6105376105e2366004611deb565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b61031061061b366004611b11565b611473565b610628611527565b8260005b8181101561068d5783838281811061064657610646611e63565b90506020020135600a600088888581811061066357610663611e63565b905060200201358152602001908152602001600020819055508061068690611ec1565b905061062c565b505050505050565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106fb57503360009081526001602052604090205460ff165b610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4261736541646d696e4f7065726174696f6e3a202161646d696e00000000000060448201526064015b60405180910390fd5b600455565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806107d157503360009081526001602052604090205460ff165b610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4261736541646d696e4f7065726174696f6e3a202161646d696e000000000000604482015260640161075d565b61083f6115ae565b565b600081815260096020526040902054339060ff166108bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4e4654426f6f737465723a20216163746976654275636b657400000000000000604482015260640161075d565b73ffffffffffffffffffffffffffffffffffffffff8116600052600860205260038210610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4e4654426f6f737465723a20216c617267654275636b65740000000000000000604482015260640161075d565b6000838152600660205260409020546109b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e4654426f6f737465723a2021746f6b656e4964000000000000000000000000604482015260640161075d565b6002546040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201869052600160448301529091169063f5298aca90606401600060405180830381600087803b158015610a3457600080fd5b505af1158015610a48573d6000803e3d6000fd5b50505050604051806040016040528084815260200142815250600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360038110610ab157610ab1611e63565b600202016000820151816000015560208201518160010155905050505050565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b3757503360009081526001602052604090205460ff165b610b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4261736541646d696e4f7065726174696f6e3a202161646d696e000000000000604482015260640161075d565b73ffffffffffffffffffffffffffffffffffffffff821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a11133910160405180910390a25050565b610c2f611527565b61083f600061162b565b6000610c43611a81565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052600390610c7085611352565b9050600454935060005b82811015610e305760008181526009602052604090205460ff1615610e205773ffffffffffffffffffffffffffffffffffffffff861660009081526008602052604081208260038110610ccf57610ccf611e63565b600202015473ffffffffffffffffffffffffffffffffffffffff88166000908152600860205260408120919250908360038110610d0e57610d0e611e63565b6002020160010154905081600003610d27575050610e20565b600082815260066020526040902054610d408242611ef9565b1115610d4d575050610e20565b60008281526007602052604081205415610d7557600083815260076020526040902054610d79565b6004545b90506000610d88600187611ef9565b6000858152600b6020526040902054600454610da49190611ef9565b610dae9190612032565b90506000610dbd600188611ef9565b600454610dca9190612032565b610dd4838561203e565b610dde9190612055565b600454909150610dee828c61203e565b610df89190612055565b995084898760038110610e0d57610e0d611e63565b60ff909216602092909202015250505050505b610e2981611ec1565b9050610c7a565b505050915091565b60086020528160005260406000208160038110610e5457600080fd5b600202018054600190910154909250905082565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ece57503360009081526001602052604090205460ff165b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4261736541646d696e4f7065726174696f6e3a202161646d696e000000000000604482015260640161075d565b61083f6116a8565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fa257503360009081526001602052604090205460ff165b611008576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4261736541646d696e4f7065726174696f6e3a202161646d696e000000000000604482015260640161075d565b60008281526006602090815260409182902080549084905582518581529182018490529181018290527f9e2b7bc240b6c87b5f7cc13741362823aa3cef135d42a5839ff1281b73dc479e9060600160405180910390a1505050565b61106b611527565b600555565b611078611527565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6110c7611527565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611116611527565b8260005b8181101561068d5783838281811061113457611134611e63565b905060200201356000036111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e4654426f6f737465723a20215f726174696f73000000000000000000000000604482015260640161075d565b8383828181106111b6576111b6611e63565b90506020020135600760008888858181106111d3576111d3611e63565b90506020020135815260200190815260200160002081905550806111f690611ec1565b905061111a565b611205611527565b8260005b8181101561068d5783838281811061122357611223611e63565b90506020020135600b600088888581811061124057611240611e63565b905060200201358152602001908152602001600020819055508061126390611ec1565b9050611209565b611272611527565b73ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee036112b0576112ad3347611703565b50565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561131d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113419190612090565b905061134e823383611812565b5050565b6003546040517f7865742900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000928392911690637865742990602401602060405180830381865afa1580156113c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ea9190612090565b6005549091505b8015611423576000818152600a60205260409020548210611413579392505050565b61141c816120a9565b90506113f1565b5060019392505050565b611435611527565b60009182526009602052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b61147b611527565b73ffffffffffffffffffffffffffffffffffffffff811661151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161075d565b6112ad8161162b565b60005473ffffffffffffffffffffffffffffffffffffffff61010090910416331461083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075d565b6115b66119a8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000805473ffffffffffffffffffffffffffffffffffffffff8381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6116b0611a14565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116013390565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff841690839060405161173a91906120de565b60006040518083038185875af1925050503d8060008114611777576040519150601f19603f3d011682016040523d82523d6000602084013e61177c565b606091505b505090508061180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c6564000000000000000000000000606482015260840161075d565b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916118a991906120de565b6000604051808303816000865af19150503d80600081146118e6576040519150601f19603f3d011682016040523d82523d6000602084013e6118eb565b606091505b5091509150818015611915575080511580611915575080806020019051810190611915919061210d565b6119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201527f616e73666572206661696c656400000000000000000000000000000000000000606482015260840161075d565b5050505050565b60005460ff1661083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161075d565b60005460ff161561083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161075d565b60405180606001604052806003906020820280368337509192915050565b600060208284031215611ab157600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611ae157600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611b0c57600080fd5b919050565b600060208284031215611b2357600080fd5b611ae182611ae8565b60008083601f840112611b3e57600080fd5b50813567ffffffffffffffff811115611b5657600080fd5b6020830191508360208260051b8501011115611b7157600080fd5b9250929050565b60008060008060408587031215611b8e57600080fd5b843567ffffffffffffffff80821115611ba657600080fd5b611bb288838901611b2c565b90965094506020870135915080821115611bcb57600080fd5b50611bd887828801611b2c565b95989497509550505050565b600060208284031215611bf657600080fd5b5035919050565b60008060408385031215611c1057600080fd5b50508035926020909101359150565b80151581146112ad57600080fd5b60008060408385031215611c4057600080fd5b611c4983611ae8565b91506020830135611c5981611c1f565b809150509250929050565b8281526080810160208083018460005b6003811015611c9457815160ff1683529183019190830190600101611c74565b505050509392505050565b60008060408385031215611cb257600080fd5b611cbb83611ae8565b946020939093013593505050565b60008083601f840112611cdb57600080fd5b50813567ffffffffffffffff811115611cf357600080fd5b602083019150836020828501011115611b7157600080fd5b60008060008060008060008060a0898b031215611d2757600080fd5b611d3089611ae8565b9750611d3e60208a01611ae8565b9650604089013567ffffffffffffffff80821115611d5b57600080fd5b611d678c838d01611b2c565b909850965060608b0135915080821115611d8057600080fd5b611d8c8c838d01611b2c565b909650945060808b0135915080821115611da557600080fd5b50611db28b828c01611cc9565b999c989b5096995094979396929594505050565b60008060408385031215611dd957600080fd5b823591506020830135611c5981611c1f565b60008060008060008060a08789031215611e0457600080fd5b611e0d87611ae8565b9550611e1b60208801611ae8565b94506040870135935060608701359250608087013567ffffffffffffffff811115611e4557600080fd5b611e5189828a01611cc9565b979a9699509497509295939492505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ef257611ef2611e92565b5060010190565b81810381811115611f0c57611f0c611e92565b92915050565b600181815b80851115611f6b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611f5157611f51611e92565b80851615611f5e57918102915b93841c9390800290611f17565b509250929050565b600082611f8257506001611f0c565b81611f8f57506000611f0c565b8160018114611fa55760028114611faf57611fcb565b6001915050611f0c565b60ff841115611fc057611fc0611e92565b50506001821b611f0c565b5060208310610133831016604e8410600b8410161715611fee575081810a611f0c565b611ff88383611f12565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561202a5761202a611e92565b029392505050565b6000611ae18383611f73565b8082028115828204841417611f0c57611f0c611e92565b60008261208b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156120a257600080fd5b5051919050565b6000816120b8576120b8611e92565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6000825160005b818110156120ff57602081860181015185830152016120e5565b506000920191825250919050565b60006020828403121561211f57600080fd5b8151611ae181611c1f56fea2646970667358221220465bac04675f4cdee469596e8edb0d259e1d6b20801765919b64603a2d04f60764736f6c63430008110033000000000000000000000000c2c1e8ce01f589e827a339ff417606da3e1d86ff000000000000000000000000a9e245c1fa7e17263cc7c896488a3da8072924fb
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102265760003560e01c8063893929311161012a578063b1f15ca3116100bd578063e1a4e72a1161008c578063ec5b28e211610071578063ec5b28e2146105c1578063f23a6e61146105d4578063f2fde38b1461060d57600080fd5b8063e1a4e72a1461059b578063e4d2620e146105ae57600080fd5b8063b1f15ca3146104e9578063bc197c81146104fc578063bc9f725d14610568578063dac7926d1461057b57600080fd5b806396b55f7d116100f957806396b55f7d1461049a578063a100d69d146104a3578063a885093c146104c3578063b00bba6a146104d657600080fd5b8063893929311461042e5780638bdc894a146104515780638da5cb5b1461046457806390b631c81461048757600080fd5b80634b0bddd2116101bd578063715018a61161018c57806374db02cf1161017157806374db02cf146103dd578063779430cb146103fe5780638456cb591461042657600080fd5b8063715018a6146103b55780637364ac6c146103bd57600080fd5b80634b0bddd21461036e5780635001f3b514610381578063513795c31461038a5780635c975abb146103aa57600080fd5b806338e80f68116101f957806338e80f68146103125780633ed41382146103255780633f4ba83a146103535780634683245d1461035b57600080fd5b806301ffc9a71461022b57806322828cc21461029557806324d7806c146102da578063378310f0146102fd575b600080fd5b610280610239366004611a9f565b7fffffffff00000000000000000000000000000000000000000000000000000000167f4e2312e0000000000000000000000000000000000000000000000000000000001490565b60405190151581526020015b60405180910390f35b6003546102b59073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161028c565b6102806102e8366004611b11565b60016020526000908152604090205460ff1681565b61031061030b366004611b78565b610620565b005b610310610320366004611be4565b610695565b610345610333366004611be4565b60076020526000908152604090205481565b60405190815260200161028c565b61031061076b565b610310610369366004611bfd565b610841565b61031061037c366004611c2d565b610ad1565b61034560045481565b610345610398366004611be4565b60066020526000908152604090205481565b60005460ff16610280565b610310610c27565b6002546102b59073ffffffffffffffffffffffffffffffffffffffff1681565b6103f06103eb366004611b11565b610c39565b60405161028c929190611c64565b61041161040c366004611c9f565b610e38565b6040805192835260208301919091520161028c565b610310610e68565b61028061043c366004611be4565b60096020526000908152604090205460ff1681565b61031061045f366004611bfd565b610f3c565b600054610100900473ffffffffffffffffffffffffffffffffffffffff166102b5565b610310610495366004611be4565b611063565b61034560055481565b6103456104b1366004611be4565b600a6020526000908152604090205481565b6103106104d1366004611b11565b611070565b6103106104e4366004611b11565b6110bf565b6103106104f7366004611b78565b61110e565b61053761050a366004611d0b565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161028c565b610310610576366004611b78565b6111fd565b610345610589366004611be4565b600b6020526000908152604090205481565b6103106105a9366004611b11565b61126a565b6103456105bc366004611b11565b611352565b6103106105cf366004611dc6565b61142d565b6105376105e2366004611deb565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b61031061061b366004611b11565b611473565b610628611527565b8260005b8181101561068d5783838281811061064657610646611e63565b90506020020135600a600088888581811061066357610663611e63565b905060200201358152602001908152602001600020819055508061068690611ec1565b905061062c565b505050505050565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106fb57503360009081526001602052604090205460ff165b610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4261736541646d696e4f7065726174696f6e3a202161646d696e00000000000060448201526064015b60405180910390fd5b600455565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806107d157503360009081526001602052604090205460ff165b610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4261736541646d696e4f7065726174696f6e3a202161646d696e000000000000604482015260640161075d565b61083f6115ae565b565b600081815260096020526040902054339060ff166108bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4e4654426f6f737465723a20216163746976654275636b657400000000000000604482015260640161075d565b73ffffffffffffffffffffffffffffffffffffffff8116600052600860205260038210610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4e4654426f6f737465723a20216c617267654275636b65740000000000000000604482015260640161075d565b6000838152600660205260409020546109b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e4654426f6f737465723a2021746f6b656e4964000000000000000000000000604482015260640161075d565b6002546040517ff5298aca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015260248201869052600160448301529091169063f5298aca90606401600060405180830381600087803b158015610a3457600080fd5b505af1158015610a48573d6000803e3d6000fd5b50505050604051806040016040528084815260200142815250600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360038110610ab157610ab1611e63565b600202016000820151816000015560208201518160010155905050505050565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b3757503360009081526001602052604090205460ff165b610b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4261736541646d696e4f7065726174696f6e3a202161646d696e000000000000604482015260640161075d565b73ffffffffffffffffffffffffffffffffffffffff821660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a11133910160405180910390a25050565b610c2f611527565b61083f600061162b565b6000610c43611a81565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052600390610c7085611352565b9050600454935060005b82811015610e305760008181526009602052604090205460ff1615610e205773ffffffffffffffffffffffffffffffffffffffff861660009081526008602052604081208260038110610ccf57610ccf611e63565b600202015473ffffffffffffffffffffffffffffffffffffffff88166000908152600860205260408120919250908360038110610d0e57610d0e611e63565b6002020160010154905081600003610d27575050610e20565b600082815260066020526040902054610d408242611ef9565b1115610d4d575050610e20565b60008281526007602052604081205415610d7557600083815260076020526040902054610d79565b6004545b90506000610d88600187611ef9565b6000858152600b6020526040902054600454610da49190611ef9565b610dae9190612032565b90506000610dbd600188611ef9565b600454610dca9190612032565b610dd4838561203e565b610dde9190612055565b600454909150610dee828c61203e565b610df89190612055565b995084898760038110610e0d57610e0d611e63565b60ff909216602092909202015250505050505b610e2981611ec1565b9050610c7a565b505050915091565b60086020528160005260406000208160038110610e5457600080fd5b600202018054600190910154909250905082565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ece57503360009081526001602052604090205460ff165b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4261736541646d696e4f7065726174696f6e3a202161646d696e000000000000604482015260640161075d565b61083f6116a8565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fa257503360009081526001602052604090205460ff165b611008576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4261736541646d696e4f7065726174696f6e3a202161646d696e000000000000604482015260640161075d565b60008281526006602090815260409182902080549084905582518581529182018490529181018290527f9e2b7bc240b6c87b5f7cc13741362823aa3cef135d42a5839ff1281b73dc479e9060600160405180910390a1505050565b61106b611527565b600555565b611078611527565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6110c7611527565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611116611527565b8260005b8181101561068d5783838281811061113457611134611e63565b905060200201356000036111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e4654426f6f737465723a20215f726174696f73000000000000000000000000604482015260640161075d565b8383828181106111b6576111b6611e63565b90506020020135600760008888858181106111d3576111d3611e63565b90506020020135815260200190815260200160002081905550806111f690611ec1565b905061111a565b611205611527565b8260005b8181101561068d5783838281811061122357611223611e63565b90506020020135600b600088888581811061124057611240611e63565b905060200201358152602001908152602001600020819055508061126390611ec1565b9050611209565b611272611527565b73ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee036112b0576112ad3347611703565b50565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561131d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113419190612090565b905061134e823383611812565b5050565b6003546040517f7865742900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526000928392911690637865742990602401602060405180830381865afa1580156113c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ea9190612090565b6005549091505b8015611423576000818152600a60205260409020548210611413579392505050565b61141c816120a9565b90506113f1565b5060019392505050565b611435611527565b60009182526009602052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b61147b611527565b73ffffffffffffffffffffffffffffffffffffffff811661151e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161075d565b6112ad8161162b565b60005473ffffffffffffffffffffffffffffffffffffffff61010090910416331461083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161075d565b6115b66119a8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000805473ffffffffffffffffffffffffffffffffffffffff8381166101008181027fffffffffffffffffffffff0000000000000000000000000000000000000000ff851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6116b0611a14565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116013390565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff841690839060405161173a91906120de565b60006040518083038185875af1925050503d8060008114611777576040519150601f19603f3d011682016040523d82523d6000602084013e61177c565b606091505b505090508061180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c6564000000000000000000000000606482015260840161075d565b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916118a991906120de565b6000604051808303816000865af19150503d80600081146118e6576040519150601f19603f3d011682016040523d82523d6000602084013e6118eb565b606091505b5091509150818015611915575080511580611915575080806020019051810190611915919061210d565b6119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201527f616e73666572206661696c656400000000000000000000000000000000000000606482015260840161075d565b5050505050565b60005460ff1661083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161075d565b60005460ff161561083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161075d565b60405180606001604052806003906020820280368337509192915050565b600060208284031215611ab157600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611ae157600080fd5b9392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611b0c57600080fd5b919050565b600060208284031215611b2357600080fd5b611ae182611ae8565b60008083601f840112611b3e57600080fd5b50813567ffffffffffffffff811115611b5657600080fd5b6020830191508360208260051b8501011115611b7157600080fd5b9250929050565b60008060008060408587031215611b8e57600080fd5b843567ffffffffffffffff80821115611ba657600080fd5b611bb288838901611b2c565b90965094506020870135915080821115611bcb57600080fd5b50611bd887828801611b2c565b95989497509550505050565b600060208284031215611bf657600080fd5b5035919050565b60008060408385031215611c1057600080fd5b50508035926020909101359150565b80151581146112ad57600080fd5b60008060408385031215611c4057600080fd5b611c4983611ae8565b91506020830135611c5981611c1f565b809150509250929050565b8281526080810160208083018460005b6003811015611c9457815160ff1683529183019190830190600101611c74565b505050509392505050565b60008060408385031215611cb257600080fd5b611cbb83611ae8565b946020939093013593505050565b60008083601f840112611cdb57600080fd5b50813567ffffffffffffffff811115611cf357600080fd5b602083019150836020828501011115611b7157600080fd5b60008060008060008060008060a0898b031215611d2757600080fd5b611d3089611ae8565b9750611d3e60208a01611ae8565b9650604089013567ffffffffffffffff80821115611d5b57600080fd5b611d678c838d01611b2c565b909850965060608b0135915080821115611d8057600080fd5b611d8c8c838d01611b2c565b909650945060808b0135915080821115611da557600080fd5b50611db28b828c01611cc9565b999c989b5096995094979396929594505050565b60008060408385031215611dd957600080fd5b823591506020830135611c5981611c1f565b60008060008060008060a08789031215611e0457600080fd5b611e0d87611ae8565b9550611e1b60208801611ae8565b94506040870135935060608701359250608087013567ffffffffffffffff811115611e4557600080fd5b611e5189828a01611cc9565b979a9699509497509295939492505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ef257611ef2611e92565b5060010190565b81810381811115611f0c57611f0c611e92565b92915050565b600181815b80851115611f6b57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115611f5157611f51611e92565b80851615611f5e57918102915b93841c9390800290611f17565b509250929050565b600082611f8257506001611f0c565b81611f8f57506000611f0c565b8160018114611fa55760028114611faf57611fcb565b6001915050611f0c565b60ff841115611fc057611fc0611e92565b50506001821b611f0c565b5060208310610133831016604e8410600b8410161715611fee575081810a611f0c565b611ff88383611f12565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561202a5761202a611e92565b029392505050565b6000611ae18383611f73565b8082028115828204841417611f0c57611f0c611e92565b60008261208b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000602082840312156120a257600080fd5b5051919050565b6000816120b8576120b8611e92565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6000825160005b818110156120ff57602081860181015185830152016120e5565b506000920191825250919050565b60006020828403121561211f57600080fd5b8151611ae181611c1f56fea2646970667358221220465bac04675f4cdee469596e8edb0d259e1d6b20801765919b64603a2d04f60764736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c2c1e8ce01f589e827a339ff417606da3e1d86ff000000000000000000000000a9e245c1fa7e17263cc7c896488a3da8072924fb
-----Decoded View---------------
Arg [0] : _stakedNFT (address): 0xC2C1E8Ce01f589e827A339fF417606DA3e1D86fF
Arg [1] : _stakingManager (address): 0xa9E245C1FA7E17263Cc7C896488A3da8072924Fb
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c2c1e8ce01f589e827a339ff417606da3e1d86ff
Arg [1] : 000000000000000000000000a9e245c1fa7e17263cc7c896488a3da8072924fb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.