More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 64 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake Batch | 15444007 | 923 days ago | IN | 0 ETH | 0.00141274 | ||||
Stake Batch | 15177259 | 965 days ago | IN | 0 ETH | 0.0073843 | ||||
Stake Batch | 15165993 | 966 days ago | IN | 0 ETH | 0.00682482 | ||||
Stake Batch | 15140194 | 970 days ago | IN | 0 ETH | 0.00032351 | ||||
Stake Batch | 15140194 | 970 days ago | IN | 0 ETH | 0.00370394 | ||||
Stake Batch | 15134119 | 971 days ago | IN | 0 ETH | 0.00515154 | ||||
Stake Batch | 15095526 | 977 days ago | IN | 0 ETH | 0.00736954 | ||||
Stake Batch | 15089294 | 978 days ago | IN | 0 ETH | 0.01034739 | ||||
Stake Batch | 15080639 | 980 days ago | IN | 0 ETH | 0.00677603 | ||||
Stake Batch | 15076540 | 980 days ago | IN | 0 ETH | 0.00689741 | ||||
Stake Batch | 15076362 | 980 days ago | IN | 0 ETH | 0.0133924 | ||||
Stake Batch | 15063467 | 982 days ago | IN | 0 ETH | 0.01239888 | ||||
Stake Batch | 15062884 | 982 days ago | IN | 0 ETH | 0.00393505 | ||||
Stake Batch | 15055836 | 983 days ago | IN | 0 ETH | 0.00640549 | ||||
Stake Batch | 15055233 | 983 days ago | IN | 0 ETH | 0.00689226 | ||||
Stake Batch | 15001990 | 993 days ago | IN | 0 ETH | 0.01239217 | ||||
Stake Batch | 14989902 | 995 days ago | IN | 0 ETH | 0.00575776 | ||||
Stake Batch | 14944816 | 1003 days ago | IN | 0 ETH | 0.01243834 | ||||
Stake Batch | 14891236 | 1012 days ago | IN | 0 ETH | 0.01532655 | ||||
Stake Batch | 14889386 | 1013 days ago | IN | 0 ETH | 0.01469895 | ||||
Stake Batch | 14888723 | 1013 days ago | IN | 0 ETH | 0.01160102 | ||||
Stake Batch | 14864306 | 1017 days ago | IN | 0 ETH | 0.00028359 | ||||
Stake Batch | 14864306 | 1017 days ago | IN | 0 ETH | 0.00306855 | ||||
Stake Batch | 14859687 | 1017 days ago | IN | 0 ETH | 0.00755481 | ||||
Stake Batch | 14859308 | 1017 days ago | IN | 0 ETH | 0.01063821 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
StakingSystem
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol"; contract StakingSystem is Ownable, ERC721Holder { IERC721 public nft; uint256 public stakedTotal; uint256 public stakingStartTime; uint256 public breakStakingCost; address payable public feeAccount; /// @notice staker define struct Staker { uint256[] tokenIds; // stake begin time uint256 stakeTime; // stake end time uint256 expireTime; uint256 productId; uint256 balance; } /// @notice stake product struct StakeProduct { uint256 productId; uint256 minStakeNumber; uint256 maxStakeNumber; bool breakStaking; // stake time uint seconds uint256 stakeTime; } /// @notice token owner info struct OwnerInfo { address user; uint256 productId; } constructor(IERC721 _nft) { nft = _nft; feeAccount = payable(msg.sender); } /// @notice mapping of stake products mapping(uint256 => StakeProduct) public stakeProducts; /// @notice product ids uint256[] public productIds; /// @notice mapping productId of mapping of a staker to its wallet mapping(uint256 => mapping(address => Staker)) public stakers; /// @notice Mapping from token ID to owner address mapping(uint256 => OwnerInfo) public tokenOwner; bool initialised; /// @notice event emitted when a user has staked a nft event Staked(address user, uint256 tokenId); /// @notice event emitted when a product has been staked" event StakedBatch(address user, uint256 productId, uint256 amount); /// @notice event emitted when a user has unstaked a nft event Unstaked(address user, uint256 tokenId); /// @notice event emitted when a user token unstaked by system event UnStakedBatch(address user, uint256 productId, uint256 amount); /// @notice event emitted when a user unstaked by system with a productId event SystemUnstakedByProductId(address user, uint256 productId, uint256 amount); /// @notice event emitted when a product is breaking event BreakStakingCost(address user, uint256 productId, uint256 amount); function initStaking() public onlyOwner { //needs access control require(!initialised, "Already initialised"); stakingStartTime = block.timestamp; initialised = true; } /// @notice add stake product function addStakeProduct(uint256 _productId, uint256 _minStakeNumber, uint256 _maxStakeNumber, bool _breakStaking, uint256 _stakeTime) public onlyOwner { require(_productId > 0, "Stake productId must be greater than 0"); require(_minStakeNumber > 0, "Stake _minStakeNumber must be greater than 0"); require(_maxStakeNumber > 0, "Stake _maxStakeNumber must be greater than 0"); require(_stakeTime > 0, "Stake _stakeTime must be greater than 0"); if (stakeProducts[_productId].productId == 0) { productIds.push(_productId); } stakeProducts[_productId] = StakeProduct( _productId, _minStakeNumber, _maxStakeNumber, _breakStaking, _stakeTime ); } function stakeBatch(uint256 _productId, uint256[] memory _tokenIds) public { require(initialised, "Staking System: the staking has not started"); address _user = msg.sender; require(!_hasStakeProduct(_productId, _user), "Stake product has been staked"); uint256 tokenNumber = _tokenIds.length; uint256 minSn = stakeProducts[_productId].minStakeNumber; uint256 maxSn = stakeProducts[_productId].maxStakeNumber; require(stakeProducts[_productId].productId > 0, "Stake product not exists"); require(tokenNumber >= minSn && tokenNumber <= maxSn, "stake token aount invalid"); for (uint256 i = 0; i < _tokenIds.length; i++) { _stake(_user, _productId, _tokenIds[i]); } emit StakedBatch(_user, _productId, tokenNumber); } function _stake(address _user, uint256 _productId, uint256 _tokenId) internal { require( nft.ownerOf(_tokenId) == _user, "user must be the owner of the token" ); require(tokenOwner[_tokenId].user == address(0x0), "the token has been staked"); Staker storage staker = stakers[_productId][_user]; staker.stakeTime = block.timestamp; staker.expireTime = staker.stakeTime + stakeProducts[_productId].stakeTime; staker.tokenIds.push(_tokenId); staker.balance++; staker.productId = _productId; tokenOwner[_tokenId] = OwnerInfo(_user, _productId); nft.approve(address(this), _tokenId); nft.safeTransferFrom(_user, address(this), _tokenId); emit Staked(_user, _tokenId); stakedTotal++; } function unstakeBatch(uint256 _productId) public payable { address _user = msg.sender; require(stakeProducts[_productId].breakStaking, "Nft Staking System: product can not break staking"); Staker storage staker = stakers[_productId][_user]; require(staker.balance > 0, "Staker balance must be greater than zero"); if (breakStakingCost > 0 && staker.expireTime > block.timestamp) { uint256 cost = breakStakingCost * staker.tokenIds.length; if (cost > 0) { require(msg.value >= cost, "break stake cost free not enough"); if (feeAccount != msg.sender) { feeAccount.transfer(cost); emit BreakStakingCost(msg.sender, _productId, staker.tokenIds.length); } } } for (uint256 i = 0; i < staker.tokenIds.length; i++) { _unstake(_user, staker.tokenIds[i]); staker.balance--; } emit UnStakedBatch(_user, _productId, staker.tokenIds.length); delete stakers[_productId][_user]; } function _unstake(address _user, uint256 _tokenId) internal { require( tokenOwner[_tokenId].user == _user, "Nft Staking System: user must be the owner of the staked nft" ); delete tokenOwner[_tokenId]; nft.safeTransferFrom(address(this), _user, _tokenId); emit Unstaked(_user, _tokenId); stakedTotal--; } function _hasStakeProduct(uint256 _productId, address _user) private view returns (bool) { return stakers[_productId][_user].balance > 0; } function systemUnstakeByProductId(address _user, uint256 _productId) public onlyOwner { Staker storage staker = stakers[_productId][_user]; require(staker.balance > 0, "Staker balance must be greater than zero"); require(staker.expireTime > 0, "Staker expireTime must be greater than zero"); require(staker.expireTime < block.timestamp, "Staker expireTime must be smaller than block.timestamp"); for (uint256 i = 0; i < staker.tokenIds.length; i++) { _unstake(_user, staker.tokenIds[i]); staker.balance--; } emit SystemUnstakedByProductId(_user, _productId, staker.tokenIds.length); delete stakers[_productId][_user]; } function getStakerTokenIdsByProduct(uint256 _productId, address _user) public view returns(uint256[] memory tokenIds) { Staker storage staker = stakers[_productId][_user]; return staker.tokenIds; } function getProductIds() public view returns(uint256[] memory ids) { return productIds; } function setBreakStakingCost(uint256 _breakStakingCost) public onlyOwner { breakStakingCost = _breakStakingCost; } function setFeeAccount(address _account) public onlyOwner { feeAccount = payable(_account); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @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`, 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 be 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: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts 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/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts 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 // OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.0; import "../IERC721Receiver.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC721","name":"_nft","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"productId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BreakStakingCost","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"productId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakedBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"productId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SystemUnstakedByProductId","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"productId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnStakedBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[{"internalType":"uint256","name":"_productId","type":"uint256"},{"internalType":"uint256","name":"_minStakeNumber","type":"uint256"},{"internalType":"uint256","name":"_maxStakeNumber","type":"uint256"},{"internalType":"bool","name":"_breakStaking","type":"bool"},{"internalType":"uint256","name":"_stakeTime","type":"uint256"}],"name":"addStakeProduct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"breakStakingCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAccount","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProductIds","outputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_productId","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getStakerTokenIdsByProduct","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nft","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","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":"uint256","name":"","type":"uint256"}],"name":"productIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_breakStakingCost","type":"uint256"}],"name":"setBreakStakingCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"setFeeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_productId","type":"uint256"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"stakeBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeProducts","outputs":[{"internalType":"uint256","name":"productId","type":"uint256"},{"internalType":"uint256","name":"minStakeNumber","type":"uint256"},{"internalType":"uint256","name":"maxStakeNumber","type":"uint256"},{"internalType":"bool","name":"breakStaking","type":"bool"},{"internalType":"uint256","name":"stakeTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"expireTime","type":"uint256"},{"internalType":"uint256","name":"productId","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_productId","type":"uint256"}],"name":"systemUnstakeByProductId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenOwner","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"productId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_productId","type":"uint256"}],"name":"unstakeBatch","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060405162001b9c38038062001b9c833981016040819052610031916100b8565b61003a33610068565b600180546001600160a01b039092166001600160a01b031992831617905560058054909116331790556100e8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100ca57600080fd5b81516001600160a01b03811681146100e157600080fd5b9392505050565b611aa480620000f86000396000f3fe6080604052600436106101355760003560e01c806368f7eb50116100ab578063b4efa66d1161006f578063b4efa66d14610445578063cb51bba91461045a578063cc0b35181461047a578063d1503fc11461049a578063d66692a7146104ba578063f2fde38b146104d057600080fd5b806368f7eb50146103bc5780636abfd183146103dc578063715018a6146103f257806386f06fde146104075780638da5cb5b1461042757600080fd5b806347428e7b116100fd57806347428e7b1461029f57806347ccca02146102c15780634b023cf8146102f95780635e2256211461031957806360ac93171461038957806365e17c9d1461039c57600080fd5b8063075713481461013a578063150b7a021461015c57806319efce67146101a55780631caaa4871461021c5780631d1482401461027b575b600080fd5b34801561014657600080fd5b5061015a610155366004611794565b6104f0565b005b34801561016857600080fd5b5061018761017736600461165b565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020015b60405180910390f35b3480156101b157600080fd5b506101f26101c036600461174b565b6006602052600090815260409020805460018201546002830154600384015460049094015492939192909160ff169085565b6040805195865260208601949094529284019190915215156060830152608082015260a00161019c565b34801561022857600080fd5b5061025c61023736600461174b565b600960205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161019c565b34801561028757600080fd5b5061029160045481565b60405190815260200161019c565b3480156102ab57600080fd5b506102b4610713565b60405161019c91906118bc565b3480156102cd57600080fd5b506001546102e1906001600160a01b031681565b6040516001600160a01b03909116815260200161019c565b34801561030557600080fd5b5061015a61031436600461161a565b61076b565b34801561032557600080fd5b50610369610334366004611764565b600860209081526000928352604080842090915290825290206001810154600282015460038301546004909301549192909184565b60408051948552602085019390935291830152606082015260800161019c565b61015a61039736600461174b565b6107b7565b3480156103a857600080fd5b506005546102e1906001600160a01b031681565b3480156103c857600080fd5b506102b46103d7366004611764565b610a72565b3480156103e857600080fd5b5061029160035481565b3480156103fe57600080fd5b5061015a610aeb565b34801561041357600080fd5b5061015a61042236600461171f565b610b21565b34801561043357600080fd5b506000546001600160a01b03166102e1565b34801561045157600080fd5b5061015a610d21565b34801561046657600080fd5b5061029161047536600461174b565b610da7565b34801561048657600080fd5b5061015a61049536600461184d565b610dc8565b3480156104a657600080fd5b5061015a6104b536600461174b565b61102b565b3480156104c657600080fd5b5061029160025481565b3480156104dc57600080fd5b5061015a6104eb36600461161a565b61105a565b600a5460ff1661055b5760405162461bcd60e51b815260206004820152602b60248201527f5374616b696e672053797374656d3a20746865207374616b696e67206861732060448201526a1b9bdd081cdd185c9d195960aa1b60648201526084015b60405180910390fd5b600082815260086020908152604080832033808552925290912060040154156105c65760405162461bcd60e51b815260206004820152601d60248201527f5374616b652070726f6475637420686173206265656e207374616b65640000006044820152606401610552565b815160008481526006602052604090206001810154600282015491549091906106315760405162461bcd60e51b815260206004820152601860248201527f5374616b652070726f64756374206e6f742065786973747300000000000000006044820152606401610552565b8183101580156106415750808311155b61068d5760405162461bcd60e51b815260206004820152601960248201527f7374616b6520746f6b656e20616f756e7420696e76616c6964000000000000006044820152606401610552565b60005b85518110156106cf576106bd85888884815181106106b0576106b0611a2d565b60200260200101516110f5565b806106c7816119fc565b915050610690565b507f05cb2af5f6efcc2a2180244193c097eed5489ebd9a7b8b8bdf50a84d6aba5f308487856040516107039392919061189b565b60405180910390a1505050505050565b6060600780548060200260200160405190810160405280929190818152602001828054801561076157602002820191906000526020600020905b81548152602001906001019080831161074d575b5050505050905090565b6000546001600160a01b031633146107955760405162461bcd60e51b815260040161055290611900565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260066020526040902060030154339060ff166108345760405162461bcd60e51b815260206004820152603160248201527f4e6674205374616b696e672053797374656d3a2070726f647563742063616e206044820152706e6f7420627265616b207374616b696e6760781b6064820152608401610552565b60008281526008602090815260408083206001600160a01b0385168452909152902060048101546108775760405162461bcd60e51b815260040161055290611935565b600060045411801561088c5750428160020154115b156109865780546004546000916108a2916119c6565b9050801561098457803410156108fa5760405162461bcd60e51b815260206004820181905260248201527f627265616b207374616b6520636f73742066726565206e6f7420656e6f7567686044820152606401610552565b6005546001600160a01b03163314610984576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610946573d6000803e3d6000fd5b5081546040517fdd6adf3f9faa5c5afea35a4e255d57f4a180dca7e93cc72c98a601ef412e53f89161097b913391889161189b565b60405180910390a15b505b60005b81548110156109e5576109bb838360000183815481106109ab576109ab611a2d565b906000526020600020015461141d565b6004820180549060006109cd836119e5565b919050555080806109dd906119fc565b915050610989565b5080546040517f867bc4913b49bf42b9dfd26f8e2b8552d510722c52cda16873648696c0080ec991610a1a918591879161189b565b60405180910390a160008381526008602090815260408083206001600160a01b0386168452909152812090610a4f82826115e8565b506000600182018190556002820181905560038201819055600490910155505050565b60008281526008602090815260408083206001600160a01b038516845282529182902080548351818402810184019094528084526060939192839190830182828015610add57602002820191906000526020600020905b815481526020019060010190808311610ac9575b505050505091505092915050565b6000546001600160a01b03163314610b155760405162461bcd60e51b815260040161055290611900565b610b1f6000611598565b565b6000546001600160a01b03163314610b4b5760405162461bcd60e51b815260040161055290611900565b60008181526008602090815260408083206001600160a01b038616845290915290206004810154610b8e5760405162461bcd60e51b815260040161055290611935565b6000816002015411610bf65760405162461bcd60e51b815260206004820152602b60248201527f5374616b65722065787069726554696d65206d7573742062652067726561746560448201526a72207468616e207a65726f60a81b6064820152608401610552565b42816002015410610c685760405162461bcd60e51b815260206004820152603660248201527f5374616b65722065787069726554696d65206d75737420626520736d616c6c65604482015275072207468616e20626c6f636b2e74696d657374616d760541b6064820152608401610552565b60005b8154811015610cb757610c8d848360000183815481106109ab576109ab611a2d565b600482018054906000610c9f836119e5565b91905055508080610caf906119fc565b915050610c6b565b5080546040517f1e71627733e75bff6ec80afdbb7a09eb8f602a7fc6bf11231f3ddd8ad375386c91610cec918691869161189b565b60405180910390a160008281526008602090815260408083206001600160a01b0387168452909152812090610a4f82826115e8565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b815260040161055290611900565b600a5460ff1615610d945760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5cd959606a1b6044820152606401610552565b42600355600a805460ff19166001179055565b60078181548110610db757600080fd5b600091825260209091200154905081565b6000546001600160a01b03163314610df25760405162461bcd60e51b815260040161055290611900565b60008511610e515760405162461bcd60e51b815260206004820152602660248201527f5374616b652070726f647563744964206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610552565b60008411610eb65760405162461bcd60e51b815260206004820152602c60248201527f5374616b65205f6d696e5374616b654e756d626572206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608401610552565b60008311610f1b5760405162461bcd60e51b815260206004820152602c60248201527f5374616b65205f6d61785374616b654e756d626572206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608401610552565b60008111610f7b5760405162461bcd60e51b815260206004820152602760248201527f5374616b65205f7374616b6554696d65206d75737420626520677265617465726044820152660207468616e20360cc1b6064820152608401610552565b600085815260066020526040902054610fc457600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018590555b6040805160a081018252868152602080820196875281830195865293151560608201908152608082019384526000978852600690945295209451855592516001850155905160028401555160038301805460ff191691151591909117905551600490910155565b6000546001600160a01b031633146110555760405162461bcd60e51b815260040161055290611900565b600455565b6000546001600160a01b031633146110845760405162461bcd60e51b815260040161055290611900565b6001600160a01b0381166110e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610552565b6110f281611598565b50565b6001546040516331a9108f60e11b8152600481018390526001600160a01b03858116921690636352211e9060240160206040518083038186803b15801561113b57600080fd5b505afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611173919061163e565b6001600160a01b0316146111d55760405162461bcd60e51b815260206004820152602360248201527f75736572206d75737420626520746865206f776e6572206f662074686520746f60448201526235b2b760e91b6064820152608401610552565b6000818152600960205260409020546001600160a01b03161561123a5760405162461bcd60e51b815260206004820152601960248201527f74686520746f6b656e20686173206265656e207374616b6564000000000000006044820152606401610552565b60008281526008602090815260408083206001600160a01b038716845282528083204260018201819055868552600690935292206004015461127b916119ae565b60028201558054600181018255600082815260208120909101839055600482018054916112a7836119fc565b9091555050600381018390556040805180820182526001600160a01b03868116825260208083018781526000878152600990925290849020925183546001600160a01b031916908316178355516001928301559054915163095ea7b360e01b81523060048201526024810185905291169063095ea7b390604401600060405180830381600087803b15801561133b57600080fd5b505af115801561134f573d6000803e3d6000fd5b5050600154604051632142170760e11b81526001600160a01b0388811660048301523060248301526044820187905290911692506342842e0e9150606401600060405180830381600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b5050604080516001600160a01b0388168152602081018690527f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d935001905060405180910390a160028054906000611412836119fc565b919050555050505050565b6000818152600960205260409020546001600160a01b038381169116146114ac5760405162461bcd60e51b815260206004820152603c60248201527f4e6674205374616b696e672053797374656d3a2075736572206d75737420626560448201527f20746865206f776e6572206f6620746865207374616b6564206e6674000000006064820152608401610552565b60008181526009602052604080822080546001600160a01b031916815560019081019290925590549051632142170760e11b81523060048201526001600160a01b03848116602483015260448201849052909116906342842e0e90606401600060405180830381600087803b15801561152457600080fd5b505af1158015611538573d6000803e3d6000fd5b5050604080516001600160a01b0386168152602081018590527f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75935001905060405180910390a16002805490600061158f836119e5565b91905055505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b50805460008255906000526020600020908101906110f291905b808211156116165760008155600101611602565b5090565b60006020828403121561162c57600080fd5b813561163781611a59565b9392505050565b60006020828403121561165057600080fd5b815161163781611a59565b6000806000806080858703121561167157600080fd5b843561167c81611a59565b935060208581013561168d81611a59565b935060408601359250606086013567ffffffffffffffff808211156116b157600080fd5b818801915088601f8301126116c557600080fd5b8135818111156116d7576116d7611a43565b6116e9601f8201601f1916850161197d565b915080825289848285010111156116ff57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561173257600080fd5b823561173d81611a59565b946020939093013593505050565b60006020828403121561175d57600080fd5b5035919050565b6000806040838503121561177757600080fd5b82359150602083013561178981611a59565b809150509250929050565b600080604083850312156117a757600080fd5b8235915060208084013567ffffffffffffffff808211156117c757600080fd5b818601915086601f8301126117db57600080fd5b8135818111156117ed576117ed611a43565b8060051b91506117fe84830161197d565b8181528481019084860184860187018b101561181957600080fd5b600095505b8386101561183c57803583526001959095019491860191860161181e565b508096505050505050509250929050565b600080600080600060a0868803121561186557600080fd5b8535945060208601359350604086013592506060860135801515811461188a57600080fd5b949793965091946080013592915050565b6001600160a01b039390931683526020830191909152604082015260600190565b6020808252825182820181905260009190848201906040850190845b818110156118f4578351835292840192918401916001016118d8565b50909695505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f5374616b65722062616c616e6365206d7573742062652067726561746572207460408201526768616e207a65726f60c01b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156119a6576119a6611a43565b604052919050565b600082198211156119c1576119c1611a17565b500190565b60008160001904831182151516156119e0576119e0611a17565b500290565b6000816119f4576119f4611a17565b506000190190565b6000600019821415611a1057611a10611a17565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110f257600080fdfea26469706673582212209e0a6ea15542c4c39952ce81fa43467465d16c696cfee49f0b8822c24bb5a03064736f6c63430008070033000000000000000000000000313d47ac9106ddcae354ba601a0f9097375587f0
Deployed Bytecode
0x6080604052600436106101355760003560e01c806368f7eb50116100ab578063b4efa66d1161006f578063b4efa66d14610445578063cb51bba91461045a578063cc0b35181461047a578063d1503fc11461049a578063d66692a7146104ba578063f2fde38b146104d057600080fd5b806368f7eb50146103bc5780636abfd183146103dc578063715018a6146103f257806386f06fde146104075780638da5cb5b1461042757600080fd5b806347428e7b116100fd57806347428e7b1461029f57806347ccca02146102c15780634b023cf8146102f95780635e2256211461031957806360ac93171461038957806365e17c9d1461039c57600080fd5b8063075713481461013a578063150b7a021461015c57806319efce67146101a55780631caaa4871461021c5780631d1482401461027b575b600080fd5b34801561014657600080fd5b5061015a610155366004611794565b6104f0565b005b34801561016857600080fd5b5061018761017736600461165b565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020015b60405180910390f35b3480156101b157600080fd5b506101f26101c036600461174b565b6006602052600090815260409020805460018201546002830154600384015460049094015492939192909160ff169085565b6040805195865260208601949094529284019190915215156060830152608082015260a00161019c565b34801561022857600080fd5b5061025c61023736600461174b565b600960205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161019c565b34801561028757600080fd5b5061029160045481565b60405190815260200161019c565b3480156102ab57600080fd5b506102b4610713565b60405161019c91906118bc565b3480156102cd57600080fd5b506001546102e1906001600160a01b031681565b6040516001600160a01b03909116815260200161019c565b34801561030557600080fd5b5061015a61031436600461161a565b61076b565b34801561032557600080fd5b50610369610334366004611764565b600860209081526000928352604080842090915290825290206001810154600282015460038301546004909301549192909184565b60408051948552602085019390935291830152606082015260800161019c565b61015a61039736600461174b565b6107b7565b3480156103a857600080fd5b506005546102e1906001600160a01b031681565b3480156103c857600080fd5b506102b46103d7366004611764565b610a72565b3480156103e857600080fd5b5061029160035481565b3480156103fe57600080fd5b5061015a610aeb565b34801561041357600080fd5b5061015a61042236600461171f565b610b21565b34801561043357600080fd5b506000546001600160a01b03166102e1565b34801561045157600080fd5b5061015a610d21565b34801561046657600080fd5b5061029161047536600461174b565b610da7565b34801561048657600080fd5b5061015a61049536600461184d565b610dc8565b3480156104a657600080fd5b5061015a6104b536600461174b565b61102b565b3480156104c657600080fd5b5061029160025481565b3480156104dc57600080fd5b5061015a6104eb36600461161a565b61105a565b600a5460ff1661055b5760405162461bcd60e51b815260206004820152602b60248201527f5374616b696e672053797374656d3a20746865207374616b696e67206861732060448201526a1b9bdd081cdd185c9d195960aa1b60648201526084015b60405180910390fd5b600082815260086020908152604080832033808552925290912060040154156105c65760405162461bcd60e51b815260206004820152601d60248201527f5374616b652070726f6475637420686173206265656e207374616b65640000006044820152606401610552565b815160008481526006602052604090206001810154600282015491549091906106315760405162461bcd60e51b815260206004820152601860248201527f5374616b652070726f64756374206e6f742065786973747300000000000000006044820152606401610552565b8183101580156106415750808311155b61068d5760405162461bcd60e51b815260206004820152601960248201527f7374616b6520746f6b656e20616f756e7420696e76616c6964000000000000006044820152606401610552565b60005b85518110156106cf576106bd85888884815181106106b0576106b0611a2d565b60200260200101516110f5565b806106c7816119fc565b915050610690565b507f05cb2af5f6efcc2a2180244193c097eed5489ebd9a7b8b8bdf50a84d6aba5f308487856040516107039392919061189b565b60405180910390a1505050505050565b6060600780548060200260200160405190810160405280929190818152602001828054801561076157602002820191906000526020600020905b81548152602001906001019080831161074d575b5050505050905090565b6000546001600160a01b031633146107955760405162461bcd60e51b815260040161055290611900565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260066020526040902060030154339060ff166108345760405162461bcd60e51b815260206004820152603160248201527f4e6674205374616b696e672053797374656d3a2070726f647563742063616e206044820152706e6f7420627265616b207374616b696e6760781b6064820152608401610552565b60008281526008602090815260408083206001600160a01b0385168452909152902060048101546108775760405162461bcd60e51b815260040161055290611935565b600060045411801561088c5750428160020154115b156109865780546004546000916108a2916119c6565b9050801561098457803410156108fa5760405162461bcd60e51b815260206004820181905260248201527f627265616b207374616b6520636f73742066726565206e6f7420656e6f7567686044820152606401610552565b6005546001600160a01b03163314610984576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610946573d6000803e3d6000fd5b5081546040517fdd6adf3f9faa5c5afea35a4e255d57f4a180dca7e93cc72c98a601ef412e53f89161097b913391889161189b565b60405180910390a15b505b60005b81548110156109e5576109bb838360000183815481106109ab576109ab611a2d565b906000526020600020015461141d565b6004820180549060006109cd836119e5565b919050555080806109dd906119fc565b915050610989565b5080546040517f867bc4913b49bf42b9dfd26f8e2b8552d510722c52cda16873648696c0080ec991610a1a918591879161189b565b60405180910390a160008381526008602090815260408083206001600160a01b0386168452909152812090610a4f82826115e8565b506000600182018190556002820181905560038201819055600490910155505050565b60008281526008602090815260408083206001600160a01b038516845282529182902080548351818402810184019094528084526060939192839190830182828015610add57602002820191906000526020600020905b815481526020019060010190808311610ac9575b505050505091505092915050565b6000546001600160a01b03163314610b155760405162461bcd60e51b815260040161055290611900565b610b1f6000611598565b565b6000546001600160a01b03163314610b4b5760405162461bcd60e51b815260040161055290611900565b60008181526008602090815260408083206001600160a01b038616845290915290206004810154610b8e5760405162461bcd60e51b815260040161055290611935565b6000816002015411610bf65760405162461bcd60e51b815260206004820152602b60248201527f5374616b65722065787069726554696d65206d7573742062652067726561746560448201526a72207468616e207a65726f60a81b6064820152608401610552565b42816002015410610c685760405162461bcd60e51b815260206004820152603660248201527f5374616b65722065787069726554696d65206d75737420626520736d616c6c65604482015275072207468616e20626c6f636b2e74696d657374616d760541b6064820152608401610552565b60005b8154811015610cb757610c8d848360000183815481106109ab576109ab611a2d565b600482018054906000610c9f836119e5565b91905055508080610caf906119fc565b915050610c6b565b5080546040517f1e71627733e75bff6ec80afdbb7a09eb8f602a7fc6bf11231f3ddd8ad375386c91610cec918691869161189b565b60405180910390a160008281526008602090815260408083206001600160a01b0387168452909152812090610a4f82826115e8565b6000546001600160a01b03163314610d4b5760405162461bcd60e51b815260040161055290611900565b600a5460ff1615610d945760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5cd959606a1b6044820152606401610552565b42600355600a805460ff19166001179055565b60078181548110610db757600080fd5b600091825260209091200154905081565b6000546001600160a01b03163314610df25760405162461bcd60e51b815260040161055290611900565b60008511610e515760405162461bcd60e51b815260206004820152602660248201527f5374616b652070726f647563744964206d75737420626520677265617465722060448201526507468616e20360d41b6064820152608401610552565b60008411610eb65760405162461bcd60e51b815260206004820152602c60248201527f5374616b65205f6d696e5374616b654e756d626572206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608401610552565b60008311610f1b5760405162461bcd60e51b815260206004820152602c60248201527f5374616b65205f6d61785374616b654e756d626572206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608401610552565b60008111610f7b5760405162461bcd60e51b815260206004820152602760248201527f5374616b65205f7374616b6554696d65206d75737420626520677265617465726044820152660207468616e20360cc1b6064820152608401610552565b600085815260066020526040902054610fc457600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018590555b6040805160a081018252868152602080820196875281830195865293151560608201908152608082019384526000978852600690945295209451855592516001850155905160028401555160038301805460ff191691151591909117905551600490910155565b6000546001600160a01b031633146110555760405162461bcd60e51b815260040161055290611900565b600455565b6000546001600160a01b031633146110845760405162461bcd60e51b815260040161055290611900565b6001600160a01b0381166110e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610552565b6110f281611598565b50565b6001546040516331a9108f60e11b8152600481018390526001600160a01b03858116921690636352211e9060240160206040518083038186803b15801561113b57600080fd5b505afa15801561114f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611173919061163e565b6001600160a01b0316146111d55760405162461bcd60e51b815260206004820152602360248201527f75736572206d75737420626520746865206f776e6572206f662074686520746f60448201526235b2b760e91b6064820152608401610552565b6000818152600960205260409020546001600160a01b03161561123a5760405162461bcd60e51b815260206004820152601960248201527f74686520746f6b656e20686173206265656e207374616b6564000000000000006044820152606401610552565b60008281526008602090815260408083206001600160a01b038716845282528083204260018201819055868552600690935292206004015461127b916119ae565b60028201558054600181018255600082815260208120909101839055600482018054916112a7836119fc565b9091555050600381018390556040805180820182526001600160a01b03868116825260208083018781526000878152600990925290849020925183546001600160a01b031916908316178355516001928301559054915163095ea7b360e01b81523060048201526024810185905291169063095ea7b390604401600060405180830381600087803b15801561133b57600080fd5b505af115801561134f573d6000803e3d6000fd5b5050600154604051632142170760e11b81526001600160a01b0388811660048301523060248301526044820187905290911692506342842e0e9150606401600060405180830381600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b5050604080516001600160a01b0388168152602081018690527f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d935001905060405180910390a160028054906000611412836119fc565b919050555050505050565b6000818152600960205260409020546001600160a01b038381169116146114ac5760405162461bcd60e51b815260206004820152603c60248201527f4e6674205374616b696e672053797374656d3a2075736572206d75737420626560448201527f20746865206f776e6572206f6620746865207374616b6564206e6674000000006064820152608401610552565b60008181526009602052604080822080546001600160a01b031916815560019081019290925590549051632142170760e11b81523060048201526001600160a01b03848116602483015260448201849052909116906342842e0e90606401600060405180830381600087803b15801561152457600080fd5b505af1158015611538573d6000803e3d6000fd5b5050604080516001600160a01b0386168152602081018590527f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75935001905060405180910390a16002805490600061158f836119e5565b91905055505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b50805460008255906000526020600020908101906110f291905b808211156116165760008155600101611602565b5090565b60006020828403121561162c57600080fd5b813561163781611a59565b9392505050565b60006020828403121561165057600080fd5b815161163781611a59565b6000806000806080858703121561167157600080fd5b843561167c81611a59565b935060208581013561168d81611a59565b935060408601359250606086013567ffffffffffffffff808211156116b157600080fd5b818801915088601f8301126116c557600080fd5b8135818111156116d7576116d7611a43565b6116e9601f8201601f1916850161197d565b915080825289848285010111156116ff57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561173257600080fd5b823561173d81611a59565b946020939093013593505050565b60006020828403121561175d57600080fd5b5035919050565b6000806040838503121561177757600080fd5b82359150602083013561178981611a59565b809150509250929050565b600080604083850312156117a757600080fd5b8235915060208084013567ffffffffffffffff808211156117c757600080fd5b818601915086601f8301126117db57600080fd5b8135818111156117ed576117ed611a43565b8060051b91506117fe84830161197d565b8181528481019084860184860187018b101561181957600080fd5b600095505b8386101561183c57803583526001959095019491860191860161181e565b508096505050505050509250929050565b600080600080600060a0868803121561186557600080fd5b8535945060208601359350604086013592506060860135801515811461188a57600080fd5b949793965091946080013592915050565b6001600160a01b039390931683526020830191909152604082015260600190565b6020808252825182820181905260009190848201906040850190845b818110156118f4578351835292840192918401916001016118d8565b50909695505050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f5374616b65722062616c616e6365206d7573742062652067726561746572207460408201526768616e207a65726f60c01b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156119a6576119a6611a43565b604052919050565b600082198211156119c1576119c1611a17565b500190565b60008160001904831182151516156119e0576119e0611a17565b500290565b6000816119f4576119f4611a17565b506000190190565b6000600019821415611a1057611a10611a17565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110f257600080fdfea26469706673582212209e0a6ea15542c4c39952ce81fa43467465d16c696cfee49f0b8822c24bb5a03064736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000313d47ac9106ddcae354ba601a0f9097375587f0
-----Decoded View---------------
Arg [0] : _nft (address): 0x313D47ac9106DdCae354ba601a0F9097375587f0
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000313d47ac9106ddcae354ba601a0f9097375587f0
Deployed Bytecode Sourcemap
306:8007:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3601:836;;;;;;;;;;-1:-1:-1;3601:836:9;;;;;:::i;:::-;;:::i;:::-;;607:207:3;;;;;;;;;;-1:-1:-1;607:207:3;;;;;:::i;:::-;-1:-1:-1;;;607:207:3;;;;;;;;;;-1:-1:-1;;;;;;6282:33:10;;;6264:52;;6252:2;6237:18;607:207:3;;;;;;;;1314:53:9;;;;;;;;;;-1:-1:-1;1314:53:9;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14429:25:10;;;14485:2;14470:18;;14463:34;;;;14513:18;;;14506:34;;;;14583:14;14576:22;14571:2;14556:18;;14549:50;14630:3;14615:19;;14608:35;14416:3;14401:19;1314:53:9;14176:473:10;1637:47:9;;;;;;;;;;-1:-1:-1;1637:47:9;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1637:47:9;;;;;;;;;;-1:-1:-1;;;;;5046:32:10;;;5028:51;;5110:2;5095:18;;5088:34;;;;5001:18;1637:47:9;4854:274:10;459:31:9;;;;;;;;;;;;;;;;;;;14140:25:10;;;14128:2;14113:18;459:31:9;13994:177:10;7956:103:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;361:18::-;;;;;;;;;;-1:-1:-1;361:18:9;;;;-1:-1:-1;;;;;361:18:9;;;;;;-1:-1:-1;;;;;4206:32:10;;;4188:51;;4176:2;4161:18;361::9;4042:203:10;8203:107:9;;;;;;;;;;-1:-1:-1;8203:107:9;;;;;:::i;:::-;;:::i;1509:61::-;;;;;;;;;;-1:-1:-1;1509:61:9;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14885:25:10;;;14941:2;14926:18;;14919:34;;;;14969:18;;;14962:34;15027:2;15012:18;;15005:34;14872:3;14857:19;1509:61:9;14654:391:10;5295:1129:9;;;;;;:::i;:::-;;:::i;497:33::-;;;;;;;;;;-1:-1:-1;497:33:9;;;;-1:-1:-1;;;;;497:33:9;;;7728:220;;;;;;;;;;-1:-1:-1;7728:220:9;;;;;:::i;:::-;;:::i;421:31::-;;;;;;;;;;;;;;;;1721:103:0;;;;;;;;;;;;;:::i;6994:726:9:-;;;;;;;;;;-1:-1:-1;6994:726:9;;;;;:::i;:::-;;:::i;1070:87:0:-;;;;;;;;;;-1:-1:-1;1116:7:0;1143:6;-1:-1:-1;;;;;1143:6:0;1070:87;;2533:209:9;;;;;;;;;;;;;:::i;1403:27::-;;;;;;;;;;-1:-1:-1;1403:27:9;;;;;:::i;:::-;;:::i;2785:808::-;;;;;;;;;;-1:-1:-1;2785:808:9;;;;;:::i;:::-;;:::i;8067:128::-;;;;;;;;;;-1:-1:-1;8067:128:9;;;;;:::i;:::-;;:::i;388:26::-;;;;;;;;;;;;;;;;1979:201:0;;;;;;;;;;-1:-1:-1;1979:201:0;;;;;:::i;:::-;;:::i;3601:836:9:-;3695:11;;;;3687:67;;;;-1:-1:-1;;;3687:67:9;;13022:2:10;3687:67:9;;;13004:21:10;13061:2;13041:18;;;13034:30;13100:34;13080:18;;;13073:62;-1:-1:-1;;;13151:18:10;;;13144:41;13202:19;;3687:67:9;;;;;;;;;6916:4;6940:19;;;:7;:19;;;;;;;;3781:10;6940:26;;;;;;;;:34;;;:38;3802:78;;;;-1:-1:-1;;;3802:78:9;;8753:2:10;3802:78:9;;;8735:21:10;8792:2;8772:18;;;8765:30;8831:31;8811:18;;;8804:59;8880:18;;3802:78:9;8551:353:10;3802:78:9;3913:16;;3891:19;3956:25;;;:13;:25;;;;;:40;;;;4023;;;;4082:35;;3956:40;;4023;4074:76;;;;-1:-1:-1;;;4074:76:9;;13434:2:10;4074:76:9;;;13416:21:10;13473:2;13453:18;;;13446:30;13512:26;13492:18;;;13485:54;13556:18;;4074:76:9;13232:348:10;4074:76:9;4184:5;4169:11;:20;;:44;;;;;4208:5;4193:11;:20;;4169:44;4161:82;;;;-1:-1:-1;;;4161:82:9;;10339:2:10;4161:82:9;;;10321:21:10;10378:2;10358:18;;;10351:30;10417:27;10397:18;;;10390:55;10462:18;;4161:82:9;10137:349:10;4161:82:9;4261:9;4256:113;4280:9;:16;4276:1;:20;4256:113;;;4318:39;4325:5;4332:10;4344:9;4354:1;4344:12;;;;;;;;:::i;:::-;;;;;;;4318:6;:39::i;:::-;4298:3;;;;:::i;:::-;;;;4256:113;;;;4386:43;4398:5;4405:10;4417:11;4386:43;;;;;;;;:::i;:::-;;;;;;;;3676:761;;;;3601:836;;:::o;7956:103::-;8001:20;8041:10;8034:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7956:103;:::o;8203:107::-;1116:7:0;1143:6;-1:-1:-1;;;;;1143:6:0;736:10:5;1290:23:0;1282:68;;;;-1:-1:-1;;;1282:68:0;;;;;;;:::i;:::-;8272:10:9::1;:30:::0;;-1:-1:-1;;;;;;8272:30:9::1;-1:-1:-1::0;;;;;8272:30:9;;;::::1;::::0;;;::::1;::::0;;8203:107::o;5295:1129::-;5363:13;5408:25;;;:13;:25;;;;;:38;;;5379:10;;5408:38;;5400:100;;;;-1:-1:-1;;;5400:100:9;;11408:2:10;5400:100:9;;;11390:21:10;11447:2;11427:18;;;11420:30;11486:34;11466:18;;;11459:62;-1:-1:-1;;;11537:18:10;;;11530:47;11594:19;;5400:100:9;11206:413:10;5400:100:9;5511:21;5535:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;5535:26:9;;;;;;;;;5580:14;;;;5572:71;;;;-1:-1:-1;;;5572:71:9;;;;;;;:::i;:::-;5679:1;5660:16;;:20;:59;;;;;5704:15;5684:6;:17;;;:35;5660:59;5656:485;;;5770:22;;5751:16;;5736:12;;5751:41;;;:::i;:::-;5736:56;-1:-1:-1;5811:8:9;;5807:323;;5861:4;5848:9;:17;;5840:62;;;;-1:-1:-1;;;5840:62:9;;11826:2:10;5840:62:9;;;11808:21:10;;;11845:18;;;11838:30;11904:34;11884:18;;;11877:62;11956:18;;5840:62:9;11624:356:10;5840:62:9;5925:10;;-1:-1:-1;;;;;5925:10:9;5939;5925:24;5921:194;;5974:10;;:25;;-1:-1:-1;;;;;5974:10:9;;;;:25;;;;;5994:4;;5974:10;:25;:10;:25;5994:4;5974:10;:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6072:22:9;;6031:64;;;;;;6048:10;;6060;;6031:64;:::i;:::-;;;;;;;;5921:194;5721:420;5656:485;6158:9;6153:146;6177:22;;6173:26;;6153:146;;;6221:35;6230:5;6237:6;:15;;6253:1;6237:18;;;;;;;;:::i;:::-;;;;;;;;;6221:8;:35::i;:::-;6271:14;;;:16;;;:14;:16;;;:::i;:::-;;;;;;6201:3;;;;;:::i;:::-;;;;6153:146;;;-1:-1:-1;6349:22:9;;6316:56;;;;;;6330:5;;6337:10;;6316:56;:::i;:::-;;;;;;;;6390:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;6390:26:9;;;;;;;;;;6383:33;6390:26;:19;6383:33;:::i;:::-;-1:-1:-1;6383:33:9;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5295:1129:9:o;7728:220::-;7857:21;7881:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;7881:26:9;;;;;;;;;;7918:22;;;;;;;;;;;;;;;;;7819:25;;7881:26;;;;7918:22;;;7881:26;7918:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7728:220;;;;:::o;1721:103:0:-;1116:7;1143:6;-1:-1:-1;;;;;1143:6:0;736:10:5;1290:23:0;1282:68;;;;-1:-1:-1;;;1282:68:0;;;;;;;:::i;:::-;1786:30:::1;1813:1;1786:18;:30::i;:::-;1721:103::o:0;6994:726:9:-;1116:7:0;1143:6;-1:-1:-1;;;;;1143:6:0;736:10:5;1290:23:0;1282:68;;;;-1:-1:-1;;;1282:68:0;;;;;;;:::i;:::-;7091:21:9::1;7115:19:::0;;;:7:::1;:19;::::0;;;;;;;-1:-1:-1;;;;;7115:26:9;::::1;::::0;;;;;;;7160:14:::1;::::0;::::1;::::0;7152:71:::1;;;;-1:-1:-1::0;;;7152:71:9::1;;;;;;;:::i;:::-;7262:1;7242:6;:17;;;:21;7234:77;;;::::0;-1:-1:-1;;;7234:77:9;;12187:2:10;7234:77:9::1;::::0;::::1;12169:21:10::0;12226:2;12206:18;;;12199:30;12265:34;12245:18;;;12238:62;-1:-1:-1;;;12316:18:10;;;12309:41;12367:19;;7234:77:9::1;11985:407:10::0;7234:77:9::1;7350:15;7330:6;:17;;;:35;7322:102;;;::::0;-1:-1:-1;;;7322:102:9;;12599:2:10;7322:102:9::1;::::0;::::1;12581:21:10::0;12638:2;12618:18;;;12611:30;12677:34;12657:18;;;12650:62;-1:-1:-1;;;12728:18:10;;;12721:52;12790:19;;7322:102:9::1;12397:418:10::0;7322:102:9::1;7442:9;7437:146;7461:22:::0;;7457:26;::::1;7437:146;;;7505:35;7514:5;7521:6;:15;;7537:1;7521:18;;;;;;;;:::i;7505:35::-;7555:14;::::0;::::1;:16:::0;;;:14:::1;:16;::::0;::::1;:::i;:::-;;;;;;7485:3;;;;;:::i;:::-;;;;7437:146;;;-1:-1:-1::0;7645:22:9;;7600:68:::1;::::0;::::1;::::0;::::1;::::0;7626:5;;7633:10;;7600:68:::1;:::i;:::-;;;;;;;;7686:19;::::0;;;:7:::1;:19;::::0;;;;;;;-1:-1:-1;;;;;7686:26:9;::::1;::::0;;;;;;;;7679:33:::1;7686:26:::0;:19;7679:33:::1;:::i;2533:209::-:0;1116:7:0;1143:6;-1:-1:-1;;;;;1143:6:0;736:10:5;1290:23:0;1282:68;;;;-1:-1:-1;;;1282:68:0;;;;;;;:::i;:::-;2625:11:9::1;::::0;::::1;;2624:12;2616:44;;;::::0;-1:-1:-1;;;2616:44:9;;6752:2:10;2616:44:9::1;::::0;::::1;6734:21:10::0;6791:2;6771:18;;;6764:30;-1:-1:-1;;;6810:18:10;;;6803:49;6869:18;;2616:44:9::1;6550:343:10::0;2616:44:9::1;2690:15;2671:16;:34:::0;2716:11:::1;:18:::0;;-1:-1:-1;;2716:18:9::1;2730:4;2716:18;::::0;;2533:209::o;1403:27::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1403:27:9;:::o;2785:808::-;1116:7:0;1143:6;-1:-1:-1;;;;;1143:6:0;736:10:5;1290:23:0;1282:68;;;;-1:-1:-1;;;1282:68:0;;;;;;;:::i;:::-;2978:1:9::1;2965:10;:14;2957:65;;;::::0;-1:-1:-1;;;2957:65:9;;9524:2:10;2957:65:9::1;::::0;::::1;9506:21:10::0;9563:2;9543:18;;;9536:30;9602:34;9582:18;;;9575:62;-1:-1:-1;;;9653:18:10;;;9646:36;9699:19;;2957:65:9::1;9322:402:10::0;2957:65:9::1;3059:1;3041:15;:19;3033:76;;;::::0;-1:-1:-1;;;3033:76:9;;7936:2:10;3033:76:9::1;::::0;::::1;7918:21:10::0;7975:2;7955:18;;;7948:30;8014:34;7994:18;;;7987:62;-1:-1:-1;;;8065:18:10;;;8058:42;8117:19;;3033:76:9::1;7734:408:10::0;3033:76:9::1;3146:1;3128:15;:19;3120:76;;;::::0;-1:-1:-1;;;3120:76:9;;9111:2:10;3120:76:9::1;::::0;::::1;9093:21:10::0;9150:2;9130:18;;;9123:30;9189:34;9169:18;;;9162:62;-1:-1:-1;;;9240:18:10;;;9233:42;9292:19;;3120:76:9::1;8909:408:10::0;3120:76:9::1;3228:1;3215:10;:14;3207:66;;;::::0;-1:-1:-1;;;3207:66:9;;9931:2:10;3207:66:9::1;::::0;::::1;9913:21:10::0;9970:2;9950:18;;;9943:30;10009:34;9989:18;;;9982:62;-1:-1:-1;;;10060:18:10;;;10053:37;10107:19;;3207:66:9::1;9729:403:10::0;3207:66:9::1;3288:25;::::0;;;:13:::1;:25;::::0;;;;:35;3284:100:::1;;3345:10;:27:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;3345:27:9;;;;;::::1;::::0;;;3284:100:::1;3424:161;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;::::1;;::::0;;;;;;;;;;;;-1:-1:-1;3396:25:9;;;:13:::1;:25:::0;;;;;:189;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;3396:189:9::1;::::0;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;2785:808::o;8067:128::-;1116:7:0;1143:6;-1:-1:-1;;;;;1143:6:0;736:10:5;1290:23:0;1282:68;;;;-1:-1:-1;;;1282:68:0;;;;;;;:::i;:::-;8151:16:9::1;:36:::0;8067:128::o;1979:201:0:-;1116:7;1143:6;-1:-1:-1;;;;;1143:6:0;736:10:5;1290:23:0;1282:68;;;;-1:-1:-1;;;1282:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2068:22:0;::::1;2060:73;;;::::0;-1:-1:-1;;;2060:73:0;;7529:2:10;2060:73:0::1;::::0;::::1;7511:21:10::0;7568:2;7548:18;;;7541:30;7607:34;7587:18;;;7580:62;-1:-1:-1;;;7658:18:10;;;7651:36;7704:19;;2060:73:0::1;7327:402:10::0;2060:73:0::1;2144:28;2163:8;2144:18;:28::i;:::-;1979:201:::0;:::o;4445:842:9:-;4556:3;;:21;;-1:-1:-1;;;4556:21:9;;;;;14140:25:10;;;-1:-1:-1;;;;;4556:30:9;;;;:3;;:11;;14113:18:10;;4556:21:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4556:30:9;;4534:115;;;;-1:-1:-1;;;4534:115:9;;8349:2:10;4534:115:9;;;8331:21:10;8388:2;8368:18;;;8361:30;8427:34;8407:18;;;8400:62;-1:-1:-1;;;8478:18:10;;;8471:33;8521:19;;4534:115:9;8147:399:10;4534:115:9;4707:3;4670:20;;;:10;:20;;;;;:25;-1:-1:-1;;;;;4670:25:9;:41;4662:79;;;;-1:-1:-1;;;4662:79:9;;11054:2:10;4662:79:9;;;11036:21:10;11093:2;11073:18;;;11066:30;11132:27;11112:18;;;11105:55;11177:18;;4662:79:9;10852:349:10;4662:79:9;4754:21;4778:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;4778:26:9;;;;;;;;;4834:15;4815:16;;;:34;;;4899:25;;;:13;:25;;;;;:35;;;4880:54;;;:::i;:::-;4860:17;;;:74;4945:30;;;;;;;:15;:30;;;;;;;;;;;;4986:14;;;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;5013:16:9;;;:29;;;5076:28;;;;;;;;-1:-1:-1;;;;;5076:28:9;;;;;;;;;;;;-1:-1:-1;5053:20:9;;;:10;:20;;;;;;;:51;;;;-1:-1:-1;;;;;;5053:51:9;;;;;;;;-1:-1:-1;5053:51:9;;;;5115:3;;:36;;-1:-1:-1;;;5115:36:9;;5135:4;5115:36;;;5028:51:10;5095:18;;;5088:34;;;5115:3:9;;;:11;;5001:18:10;;5115:36:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5162:3:9;;:52;;-1:-1:-1;;;5162:52:9;;-1:-1:-1;;;;;4732:15:10;;;5162:52:9;;;4714:34:10;5198:4:9;4764:18:10;;;4757:43;4816:18;;;4809:34;;;5162:3:9;;;;-1:-1:-1;5162:20:9;;-1:-1:-1;4649:18:10;;5162:52:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5232:23:9;;;-1:-1:-1;;;;;5046:32:10;;5028:51;;5110:2;5095:18;;5088:34;;;5232:23:9;;-1:-1:-1;5001:18:10;;-1:-1:-1;5232:23:9;;;;;;;5266:11;:13;;;:11;:13;;;:::i;:::-;;;;;;4523:764;4445:842;;;:::o;6434:391::-;6527:20;;;;:10;:20;;;;;:25;-1:-1:-1;;;;;6527:34:9;;;:25;;:34;6505:144;;;;-1:-1:-1;;;6505:144:9;;7100:2:10;6505:144:9;;;7082:21:10;7139:2;7119:18;;;7112:30;7178:34;7158:18;;;7151:62;7249:30;7229:18;;;7222:58;7297:19;;6505:144:9;6898:424:10;6505:144:9;6669:20;;;;:10;:20;;;;;;6662:27;;-1:-1:-1;;;;;;6662:27:9;;;-1:-1:-1;6662:27:9;;;;;;;6700:3;;:52;;-1:-1:-1;;;6700:52:9;;6729:4;6700:52;;;4714:34:10;-1:-1:-1;;;;;4784:15:10;;;4764:18;;;4757:43;4816:18;;;4809:34;;;6700:3:9;;;;:20;;4649:18:10;;6700:52:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6768:25:9;;;-1:-1:-1;;;;;5046:32:10;;5028:51;;5110:2;5095:18;;5088:34;;;6768:25:9;;-1:-1:-1;5001:18:10;;-1:-1:-1;6768:25:9;;;;;;;6804:11;:13;;;:11;:13;;;:::i;:::-;;;;;;6434:391;;:::o;2340:191:0:-;2414:16;2433:6;;-1:-1:-1;;;;;2450:17:0;;;-1:-1:-1;;;;;;2450:17:0;;;;;;2483:40;;2433:6;;;;;;;2483:40;;2414:16;2483:40;2403:128;2340:191;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:247:10:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;:::-;250:5;14:247;-1:-1:-1;;;14:247:10:o;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:1108::-;617:6;625;633;641;694:3;682:9;673:7;669:23;665:33;662:53;;;711:1;708;701:12;662:53;750:9;737:23;769:31;794:5;769:31;:::i;:::-;819:5;-1:-1:-1;843:2:10;882:18;;;869:32;910:33;869:32;910:33;:::i;:::-;962:7;-1:-1:-1;1016:2:10;1001:18;;988:32;;-1:-1:-1;1071:2:10;1056:18;;1043:32;1094:18;1124:14;;;1121:34;;;1151:1;1148;1141:12;1121:34;1189:6;1178:9;1174:22;1164:32;;1234:7;1227:4;1223:2;1219:13;1215:27;1205:55;;1256:1;1253;1246:12;1205:55;1292:2;1279:16;1314:2;1310;1307:10;1304:36;;;1320:18;;:::i;:::-;1362:53;1405:2;1386:13;;-1:-1:-1;;1382:27:10;1378:36;;1362:53;:::i;:::-;1349:66;;1438:2;1431:5;1424:17;1478:7;1473:2;1468;1464;1460:11;1456:20;1453:33;1450:53;;;1499:1;1496;1489:12;1450:53;1554:2;1549;1545;1541:11;1536:2;1529:5;1525:14;1512:45;1598:1;1593:2;1588;1581:5;1577:14;1573:23;1566:34;;1619:5;1609:15;;;;;522:1108;;;;;;;:::o;1635:315::-;1703:6;1711;1764:2;1752:9;1743:7;1739:23;1735:32;1732:52;;;1780:1;1777;1770:12;1732:52;1819:9;1806:23;1838:31;1863:5;1838:31;:::i;:::-;1888:5;1940:2;1925:18;;;;1912:32;;-1:-1:-1;;;1635:315:10:o;1955:180::-;2014:6;2067:2;2055:9;2046:7;2042:23;2038:32;2035:52;;;2083:1;2080;2073:12;2035:52;-1:-1:-1;2106:23:10;;1955:180;-1:-1:-1;1955:180:10:o;2140:315::-;2208:6;2216;2269:2;2257:9;2248:7;2244:23;2240:32;2237:52;;;2285:1;2282;2275:12;2237:52;2321:9;2308:23;2298:33;;2381:2;2370:9;2366:18;2353:32;2394:31;2419:5;2394:31;:::i;:::-;2444:5;2434:15;;;2140:315;;;;;:::o;2460:1025::-;2553:6;2561;2614:2;2602:9;2593:7;2589:23;2585:32;2582:52;;;2630:1;2627;2620:12;2582:52;2666:9;2653:23;2643:33;;2695:2;2748;2737:9;2733:18;2720:32;2771:18;2812:2;2804:6;2801:14;2798:34;;;2828:1;2825;2818:12;2798:34;2866:6;2855:9;2851:22;2841:32;;2911:7;2904:4;2900:2;2896:13;2892:27;2882:55;;2933:1;2930;2923:12;2882:55;2969:2;2956:16;2991:2;2987;2984:10;2981:36;;;2997:18;;:::i;:::-;3043:2;3040:1;3036:10;3026:20;;3066:28;3090:2;3086;3082:11;3066:28;:::i;:::-;3128:15;;;3159:12;;;;3191:11;;;3221;;;3217:20;;3214:33;-1:-1:-1;3211:53:10;;;3260:1;3257;3250:12;3211:53;3282:1;3273:10;;3292:163;3306:2;3303:1;3300:9;3292:163;;;3363:17;;3351:30;;3324:1;3317:9;;;;;3401:12;;;;3433;;3292:163;;;3296:3;3474:5;3464:15;;;;;;;;2460:1025;;;;;:::o;3490:547::-;3582:6;3590;3598;3606;3614;3667:3;3655:9;3646:7;3642:23;3638:33;3635:53;;;3684:1;3681;3674:12;3635:53;3720:9;3707:23;3697:33;;3777:2;3766:9;3762:18;3749:32;3739:42;;3828:2;3817:9;3813:18;3800:32;3790:42;;3882:2;3871:9;3867:18;3854:32;3929:5;3922:13;3915:21;3908:5;3905:32;3895:60;;3951:1;3948;3941:12;3895:60;3490:547;;;;-1:-1:-1;3490:547:10;;4026:3;4011:19;3998:33;;3490:547;-1:-1:-1;;3490:547:10:o;5133:345::-;-1:-1:-1;;;;;5353:32:10;;;;5335:51;;5417:2;5402:18;;5395:34;;;;5460:2;5445:18;;5438:34;5323:2;5308:18;;5133:345::o;5483:632::-;5654:2;5706:21;;;5776:13;;5679:18;;;5798:22;;;5625:4;;5654:2;5877:15;;;;5851:2;5836:18;;;5625:4;5920:169;5934:6;5931:1;5928:13;5920:169;;;5995:13;;5983:26;;6064:15;;;;6029:12;;;;5956:1;5949:9;5920:169;;;-1:-1:-1;6106:3:10;;5483:632;-1:-1:-1;;;;;;5483:632:10:o;10491:356::-;10693:2;10675:21;;;10712:18;;;10705:30;10771:34;10766:2;10751:18;;10744:62;10838:2;10823:18;;10491:356::o;13585:404::-;13787:2;13769:21;;;13826:2;13806:18;;;13799:30;13865:34;13860:2;13845:18;;13838:62;-1:-1:-1;;;13931:2:10;13916:18;;13909:38;13979:3;13964:19;;13585:404::o;15050:275::-;15121:2;15115:9;15186:2;15167:13;;-1:-1:-1;;15163:27:10;15151:40;;15221:18;15206:34;;15242:22;;;15203:62;15200:88;;;15268:18;;:::i;:::-;15304:2;15297:22;15050:275;;-1:-1:-1;15050:275:10:o;15330:128::-;15370:3;15401:1;15397:6;15394:1;15391:13;15388:39;;;15407:18;;:::i;:::-;-1:-1:-1;15443:9:10;;15330:128::o;15463:168::-;15503:7;15569:1;15565;15561:6;15557:14;15554:1;15551:21;15546:1;15539:9;15532:17;15528:45;15525:71;;;15576:18;;:::i;:::-;-1:-1:-1;15616:9:10;;15463:168::o;15636:136::-;15675:3;15703:5;15693:39;;15712:18;;:::i;:::-;-1:-1:-1;;;15748:18:10;;15636:136::o;15777:135::-;15816:3;-1:-1:-1;;15837:17:10;;15834:43;;;15857:18;;:::i;:::-;-1:-1:-1;15904:1:10;15893:13;;15777:135::o;15917:127::-;15978:10;15973:3;15969:20;15966:1;15959:31;16009:4;16006:1;15999:15;16033:4;16030:1;16023:15;16049:127;16110:10;16105:3;16101:20;16098:1;16091:31;16141:4;16138:1;16131:15;16165:4;16162:1;16155:15;16181:127;16242:10;16237:3;16233:20;16230:1;16223:31;16273:4;16270:1;16263:15;16297:4;16294:1;16287:15;16313:131;-1:-1:-1;;;;;16388:31:10;;16378:42;;16368:70;;16434:1;16431;16424:12
Swarm Source
ipfs://9e0a6ea15542c4c39952ce81fa43467465d16c696cfee49f0b8822c24bb5a030
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.