Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 96 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake Tokens | 19425692 | 355 days ago | IN | 0 ETH | 0.00794619 | ||||
Unstake Tokens | 19424689 | 355 days ago | IN | 0 ETH | 0.00541495 | ||||
Unstake Tokens | 19339726 | 367 days ago | IN | 0 ETH | 0.00210123 | ||||
Stake Tokens | 19264172 | 378 days ago | IN | 0 ETH | 0.00241717 | ||||
Stake Tokens | 18286774 | 515 days ago | IN | 0 ETH | 0.00080741 | ||||
Stake Tokens | 18263413 | 518 days ago | IN | 0 ETH | 0.00159188 | ||||
Stake Tokens | 18216143 | 524 days ago | IN | 0 ETH | 0.00058183 | ||||
Stake Tokens | 18167095 | 531 days ago | IN | 0 ETH | 0.00123754 | ||||
Stake Tokens | 18066986 | 545 days ago | IN | 0 ETH | 0.00071317 | ||||
Stake Tokens | 18024157 | 551 days ago | IN | 0 ETH | 0.00129592 | ||||
Stake Tokens | 17915590 | 567 days ago | IN | 0 ETH | 0.0016568 | ||||
Stake Tokens | 17870000 | 573 days ago | IN | 0 ETH | 0.0018162 | ||||
Stake Tokens | 17829051 | 579 days ago | IN | 0 ETH | 0.00268821 | ||||
Stake Tokens | 17828674 | 579 days ago | IN | 0 ETH | 0.00371163 | ||||
Stake Tokens | 17828577 | 579 days ago | IN | 0 ETH | 0.00188088 | ||||
Stake Tokens | 17772918 | 586 days ago | IN | 0 ETH | 0.00223938 | ||||
Unstake Tokens | 17753896 | 589 days ago | IN | 0 ETH | 0.00065461 | ||||
Stake Tokens | 17705453 | 596 days ago | IN | 0 ETH | 0.00094126 | ||||
Stake Tokens | 17684979 | 599 days ago | IN | 0 ETH | 0.00171452 | ||||
Stake Tokens | 17557157 | 617 days ago | IN | 0 ETH | 0.00087795 | ||||
Stake Tokens | 17487459 | 627 days ago | IN | 0 ETH | 0.00163249 | ||||
Stake Tokens | 17466749 | 629 days ago | IN | 0 ETH | 0.00165247 | ||||
Stake Tokens | 17458325 | 631 days ago | IN | 0 ETH | 0.00155615 | ||||
Stake Tokens | 17457626 | 631 days ago | IN | 0 ETH | 0.0012466 | ||||
Stake Tokens | 17430015 | 635 days ago | IN | 0 ETH | 0.0020983 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Staking
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "./IStaking.sol"; import "../library/Manageable.sol"; import "../library/erc721A/IERC721A.sol"; error Staking__ZeroAddressProhibited(); error Staking__InvalidStakingBonusPercent(); error Staking__InvalidMaxCumulativeStakingBonusPercent(); error Staking__NotATokenOwner(address wallet, uint256 tokenId); error Staking__EmptyTierRequirements(); error Staking__EmptyArray(); error Staking__StakingBatchIsTooBig(); error Staking__TokenIsAlreadyStaked(uint256 tokenId); error Staking__TokenIsNotStaked(uint256 tokenId); /** * @title Staking * @author DeployLabs.io * * @dev Staking contract for ERC721A collections. Allows to stake NFTs and get rewards. * Requieres {IERC721A} interface to be implemented by collection contract. */ contract Staking is IStaking, Manageable { struct WalletStakingInfo { uint32 lastStakingMilestoneUnixTime; uint32 savedStakingPoints; uint16 countOfStakedTokens; } /// @dev Fananees collection contract. IERC721A private immutable i_collectionContract; uint8 private s_stakingBonusPercent = 2; uint8 private s_maxCumulativeStakingBonusPercent = 20; /// @dev Staking tier requirements in staking points. uint32[] private s_stakingTierRequirements; /// @dev Mapping of token ID to their staking status. mapping(uint256 => bool) private s_isTokenStaked; /// @dev Mapping of wallet to staking info mapping(address => WalletStakingInfo) private s_walletStakingInfo; constructor(IERC721A collectionContract) { if (address(collectionContract) == address(0)) revert Staking__ZeroAddressProhibited(); i_collectionContract = collectionContract; } /// @inheritdoc IStaking function stakeTokens(uint256[] calldata tokenIds) external { if (tokenIds.length == 0) revert Staking__EmptyArray(); if (tokenIds.length > 100) revert Staking__StakingBatchIsTooBig(); uint32 currentTime = uint32(block.timestamp); uint32 currentStakingPoints = getStakingPoints(msg.sender); uint16 currentCountOfStakedTokens = s_walletStakingInfo[msg.sender].countOfStakedTokens; s_walletStakingInfo[msg.sender] = WalletStakingInfo({ lastStakingMilestoneUnixTime: currentTime, savedStakingPoints: currentStakingPoints, countOfStakedTokens: currentCountOfStakedTokens + uint16(tokenIds.length) }); for (uint256 i = 0; i < tokenIds.length; i++) { uint256 tokenId = tokenIds[i]; if (isTokenStaked(tokenId)) revert Staking__TokenIsAlreadyStaked(tokenId); if (i_collectionContract.ownerOf(tokenId) != msg.sender) revert Staking__NotATokenOwner(msg.sender, tokenId); s_isTokenStaked[tokenId] = true; emit TokenStaked(msg.sender, tokenId); } } /// @inheritdoc IStaking function unstakeTokens(uint256[] calldata tokenIds) external { if (tokenIds.length == 0) revert Staking__EmptyArray(); if (tokenIds.length > 100) revert Staking__StakingBatchIsTooBig(); uint32 currentTime = uint32(block.timestamp); uint32 currentStakingPoints = getStakingPoints(msg.sender); uint16 currentCountOfStakedTokens = s_walletStakingInfo[msg.sender].countOfStakedTokens; s_walletStakingInfo[msg.sender] = WalletStakingInfo({ lastStakingMilestoneUnixTime: currentTime, savedStakingPoints: currentStakingPoints, countOfStakedTokens: currentCountOfStakedTokens - uint16(tokenIds.length) }); for (uint256 i = 0; i < tokenIds.length; i++) { uint256 tokenId = tokenIds[i]; if (!isTokenStaked(tokenId)) revert Staking__TokenIsNotStaked(tokenId); if (i_collectionContract.ownerOf(tokenId) != msg.sender) revert Staking__NotATokenOwner(msg.sender, tokenId); s_isTokenStaked[tokenId] = false; emit TokenUnstaked(msg.sender, tokenId); } } /** * @dev Set the staking tier requirements for each tier. * * @param pointsPerTier Array of staking points for each tier. */ function setStakingTierRequirements(uint32[] memory pointsPerTier) external onlyManager { if (pointsPerTier.length == 0) revert Staking__EmptyTierRequirements(); s_stakingTierRequirements = pointsPerTier; } /** * @dev Set the staking bonus percent. * * @param stakingBonusPercent Staking bonus percent. */ function setStakingBonusPercent(uint8 stakingBonusPercent) external onlyManager { if (stakingBonusPercent > 100) revert Staking__InvalidStakingBonusPercent(); s_stakingBonusPercent = stakingBonusPercent; } /** * @dev Set the max cumulative staking bonus percent. * * @param maxCumulativeStakingBonusPercent Max cumulative staking bonus percent. */ function setMaxCumulativeStakingBonusPercent( uint8 maxCumulativeStakingBonusPercent ) external onlyManager { if (maxCumulativeStakingBonusPercent > 100) revert Staking__InvalidMaxCumulativeStakingBonusPercent(); s_maxCumulativeStakingBonusPercent = maxCumulativeStakingBonusPercent; } /// @inheritdoc IStaking function getStakingTier(address wallet) external view returns (uint16) { if (wallet == address(0)) revert Staking__ZeroAddressProhibited(); uint32 stakingPoints = getStakingPoints(wallet); uint32[] memory stakingTierRequirementsInSeconds = s_stakingTierRequirements; uint16 stakingTier = 0; for (uint16 i = 0; i < stakingTierRequirementsInSeconds.length; i++) { if (stakingPoints < stakingTierRequirementsInSeconds[i]) break; stakingTier++; } return stakingTier; } /** * @dev Get current amount of the staking points of a wallet. * * @param wallet Wallet to get staking points. * * @return Amount of the staking points. */ function getStakingPoints(address wallet) public view returns (uint32) { WalletStakingInfo storage walletStakingInfo = s_walletStakingInfo[wallet]; uint32 savedStakingPoints = walletStakingInfo.savedStakingPoints; uint256 secondsPassed = block.timestamp - walletStakingInfo.lastStakingMilestoneUnixTime; uint32 basisStakingPointsPerSecond = getBasisStakingPointsPerSecond(wallet); uint32 stakingPointsGained = uint32((secondsPassed * basisStakingPointsPerSecond) / 100); return savedStakingPoints + stakingPointsGained; } /** * @dev Get the amount of the staking points gained per second for a wallet.~ * * @param wallet Wallet to get staking points per second. * * @return Amount of the staking points gained per second, multiplied by 100. */ function getBasisStakingPointsPerSecond(address wallet) public view returns (uint32) { if (wallet == address(0)) revert Staking__ZeroAddressProhibited(); uint16 stakedTokensCount = s_walletStakingInfo[wallet].countOfStakedTokens; if (stakedTokensCount == 0) return 0; uint32 stakingBonusPercent = (stakedTokensCount - 1) * s_stakingBonusPercent; if (stakingBonusPercent > s_maxCumulativeStakingBonusPercent) stakingBonusPercent = s_maxCumulativeStakingBonusPercent; return 100 + stakingBonusPercent; } /** * @dev Get the staking bonus percent for each additional staked token, except from the first one. * * @return Staking bonus percent, multiplied by 100. */ function getStakingBonusPercetnt() public view returns (uint32) { return s_stakingBonusPercent; } /** * @dev Get the maximum cumulative staking bonus percent for all staked tokens. * * @return Maximum cumulative staking bonus percent. */ function getMaxCumulativeStakingBonusPercent() public view returns (uint32) { return s_maxCumulativeStakingBonusPercent; } /** * @dev Get the stakin tier requirements in staking points needed to reach each tier. * * @return Array of staking points for each tier. */ function getStakingTierRequirements() public view returns (uint32[] memory) { return s_stakingTierRequirements; } /** * @dev Get staking info for wallet. * * @param wallet Wallet to get staking info. * * @return Staking info for wallet. */ function getWalletStakingInfo(address wallet) public view returns (WalletStakingInfo memory) { return s_walletStakingInfo[wallet]; } /// @inheritdoc IStaking function isTokenStaked(uint256 tokenId) public view returns (bool) { return s_isTokenStaked[tokenId]; } }
// SPDX-License-Identifier: MIT // ERC721A Contracts v4.2.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721A. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the * ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); // ============================================================= // STRUCTS // ============================================================= struct TokenOwnership { // The address of the owner. address addr; // Stores the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}. uint24 extraData; } // ============================================================= // TOKEN COUNTERS // ============================================================= /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see {_totalMinted}. */ function totalSupply() external view returns (uint256); // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================================================= // IERC721 // ============================================================= /** * @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, bytes calldata data ) external; /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` 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 Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} * for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll}. */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================================================= // IERC721Metadata // ============================================================= /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); // ============================================================= // IERC2309 // ============================================================= /** * @dev Emitted when tokens in `fromTokenId` to `toTokenId` * (inclusive) is transferred from `from` to `to`, as defined in the * [ERC2309](https://eips.ethereum.org/EIPS/eip-2309) standard. * * See {_mintERC2309} for more details. */ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.2; import "@openzeppelin/contracts/access/Ownable.sol"; error Manageable__WalletIsNotAManager(); error Manageable__ZeroAddressProhibited(); /** * @title Manageable * @author DeployLabs.io * * @dev This module is an extention of {Ownable} contract. It will make available * the modifier `onlyManager`, which can be applied to your functions to restrict their use to managers. * Managers can be added and removed by the owner. * Note, that the owner of the contract is also considered a manager. */ abstract contract Manageable is Ownable { /// @dev Mapping of wallet to their manager status. mapping(address => bool) private s_managers; /// @dev Throws if called by any account other than a manager. modifier onlyManager() { _checkManager(); _; } constructor() {} /// @dev Add a list of addresses to a list of managers. function addManagers(address[] calldata wallets) external onlyOwner { for (uint256 index = 0; index < wallets.length; index++) { _addManager(wallets[index]); } } /// @dev Remove a list of addresses from a list of managers. function removeManagers(address[] calldata wallets) external onlyOwner { for (uint256 index = 0; index < wallets.length; index++) { _removeManager(wallets[index]); } } /// @dev Check, whether a wallet is a manager or not. function isManager(address wallet) public view returns (bool) { if (owner() == wallet) return true; return s_managers[wallet]; } /// @dev Add an address to a list of managers. function _addManager(address wallet) internal { if (wallet == address(0)) revert Manageable__ZeroAddressProhibited(); s_managers[wallet] = true; } /// @dev Remove an address from a list of managers. function _removeManager(address wallet) internal { if (!isManager(wallet)) revert Manageable__WalletIsNotAManager(); if (wallet == address(0)) revert Manageable__ZeroAddressProhibited(); s_managers[wallet] = false; } /// @dev Throws if the sender is not a manager. function _checkManager() internal view { if (!isManager(_msgSender())) revert Manageable__WalletIsNotAManager(); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; interface IStaking { /// @dev Emitted when a token is staked. event TokenStaked(address owner, uint256 indexed tokenId); /// @dev Emitted when a token is unstaked. event TokenUnstaked(address owner, uint256 indexed tokenId); /** * @dev Stake a list of tokens. * Each extra token should give a bonus of X% or Y% to staking points gain. * * @param tokenIds List of token IDs to stake. */ function stakeTokens(uint256[] calldata tokenIds) external; /** * @dev Unstake a list of tokens. * Progress is saved on the wallet, so tokens can be unstaked and staked again. * * @param tokenIds List of token IDs to unstake. */ function unstakeTokens(uint256[] calldata tokenIds) external; /** * @dev Check if a token is staked. * * @param tokenId Token ID to check. * * @return True if token is staked. */ function isTokenStaked(uint256 tokenId) external view returns (bool); /** * @dev Get current staking tier of a wallet. * * @param wallet Wallet address to check. * * @return Current staking tier. */ function getStakingTier(address wallet) external view returns (uint16); }
// 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 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; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC721A","name":"collectionContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Manageable__WalletIsNotAManager","type":"error"},{"inputs":[],"name":"Manageable__ZeroAddressProhibited","type":"error"},{"inputs":[],"name":"Staking__EmptyArray","type":"error"},{"inputs":[],"name":"Staking__EmptyTierRequirements","type":"error"},{"inputs":[],"name":"Staking__InvalidMaxCumulativeStakingBonusPercent","type":"error"},{"inputs":[],"name":"Staking__InvalidStakingBonusPercent","type":"error"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Staking__NotATokenOwner","type":"error"},{"inputs":[],"name":"Staking__StakingBatchIsTooBig","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Staking__TokenIsAlreadyStaked","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Staking__TokenIsNotStaked","type":"error"},{"inputs":[],"name":"Staking__ZeroAddressProhibited","type":"error"},{"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":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenUnstaked","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"addManagers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getBasisStakingPointsPerSecond","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxCumulativeStakingBonusPercent","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingBonusPercetnt","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getStakingPoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getStakingTier","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingTierRequirements","outputs":[{"internalType":"uint32[]","name":"","type":"uint32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getWalletStakingInfo","outputs":[{"components":[{"internalType":"uint32","name":"lastStakingMilestoneUnixTime","type":"uint32"},{"internalType":"uint32","name":"savedStakingPoints","type":"uint32"},{"internalType":"uint16","name":"countOfStakedTokens","type":"uint16"}],"internalType":"struct Staking.WalletStakingInfo","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isTokenStaked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"removeManagers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"maxCumulativeStakingBonusPercent","type":"uint8"}],"name":"setMaxCumulativeStakingBonusPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"stakingBonusPercent","type":"uint8"}],"name":"setStakingBonusPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"pointsPerTier","type":"uint32[]"}],"name":"setStakingTierRequirements","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405260028060006101000a81548160ff021916908360ff1602179055506014600260016101000a81548160ff021916908360ff1602179055503480156200004857600080fd5b50604051620025cb380380620025cb83398181016040528101906200006e91906200027a565b6200008e620000826200013060201b60201c565b6200013860201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000f5576040517f2cc8191100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620002ac565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022e8262000201565b9050919050565b6000620002428262000221565b9050919050565b620002548162000235565b81146200026057600080fd5b50565b600081519050620002748162000249565b92915050565b600060208284031215620002935762000292620001fc565b5b6000620002a38482850162000263565b91505092915050565b6080516122fc620002cf600039600081816108ec0152610fa201526122fc6000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80638c5f9e74116100ad578063c782311c11610071578063c782311c146102e0578063d8e348dc146102fc578063f0a524241461032c578063f2fde38b1461035c578063f3ae24151461037857610121565b80638c5f9e741461023c5780638da5cb5b14610258578063a8a82fd714610276578063ad293b71146102a6578063c169c67c146102c257610121565b806341edd686116100f457806341edd6861461019a578063485e636e146101ca5780634ca006b0146101fa57806370ea028f14610216578063715018a61461023257610121565b806310f3ee291461012657806320564e74146101425780632ce38f4d146101605780633cad3d891461017c575b600080fd5b610140600480360381019061013b9190611875565b6103a8565b005b61014a610406565b60405161015791906118e1565b60405180910390f35b61017a60048036038101906101759190611935565b610420565b005b610184610484565b60405161019191906118e1565b60405180910390f35b6101b460048036038101906101af91906119c0565b61049e565b6040516101c191906118e1565b60405180910390f35b6101e460048036038101906101df91906119c0565b61056c565b6040516101f19190611a5b565b60405180910390f35b610214600480360381019061020f9190611bf1565b610631565b005b610230600480360381019061022b9190611c90565b61068e565b005b61023a610a5e565b005b61025660048036038101906102519190611875565b610a72565b005b610260610ad0565b60405161026d9190611cec565b60405180910390f35b610290600480360381019061028b91906119c0565b610af9565b60405161029d9190611d16565b60405180910390f35b6102c060048036038101906102bb9190611935565b610c5d565b005b6102ca610cc1565b6040516102d79190611de0565b60405180910390f35b6102fa60048036038101906102f59190611c90565b610d45565b005b610316600480360381019061031191906119c0565b611114565b60405161032391906118e1565b60405180910390f35b61034660048036038101906103419190611e38565b611265565b6040516103539190611e80565b60405180910390f35b610376600480360381019061037191906119c0565b61128f565b005b610392600480360381019061038d91906119c0565b611312565b60405161039f9190611e80565b60405180910390f35b6103b06113ac565b60005b82829050811015610401576103ee8383838181106103d4576103d3611e9b565b5b90506020020160208101906103e991906119c0565b61142a565b80806103f990611ef9565b9150506103b3565b505050565b6000600260019054906101000a900460ff1660ff16905090565b61042861152a565b60648160ff161115610466576040517f26639e1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260006101000a81548160ff021916908360ff16021790555050565b6000600260009054906101000a900460ff1660ff16905090565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160049054906101000a900463ffffffff16905060008260000160009054906101000a900463ffffffff1663ffffffff16426105239190611f41565b9050600061053086611114565b9050600060648263ffffffff16846105489190611f75565b6105529190611fe6565b905080846105609190612017565b95505050505050919050565b6105746116fe565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900461ffff1661ffff1661ffff16815250509050919050565b61063961152a565b6000815103610674576040517fc2bc092a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003908051906020019061068a92919061172f565b5050565b600082829050036106cb576040517f64ac5cf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6064828290501115610709576040517fcb92b75800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600042905060006107193361049e565b90506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900461ffff16905060405180606001604052808463ffffffff1681526020018363ffffffff16815260200186869050836107a2919061204f565b61ffff16815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548161ffff021916908361ffff16021790555090505060005b85859050811015610a5657600086868381811061087f5761087e611e9b565b5b90506020020135905061089181611265565b156108d357806040517f1237f8560000000000000000000000000000000000000000000000000000000081526004016108ca9190612094565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016109439190612094565b602060405180830381865afa158015610960573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098491906120c4565b73ffffffffffffffffffffffffffffffffffffffff16146109de5733816040517f49faa32f0000000000000000000000000000000000000000000000000000000081526004016109d59291906120f1565b60405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807f1fdab8a8457aaf782e4b6217d6ffa6f5006eda7e50922dd092b2e1524275d77433604051610a3a9190611cec565b60405180910390a2508080610a4e90611ef9565b91505061085f565b505050505050565b610a666113ac565b610a706000611572565b565b610a7a6113ac565b60005b82829050811015610acb57610ab8838383818110610a9e57610a9d611e9b565b5b9050602002016020810190610ab391906119c0565b611636565b8080610ac390611ef9565b915050610a7d565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b60576040517f2cc8191100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b6b8361049e565b905060006003805480602002602001604051908101604052809291908181526020018280548015610be757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610baa5790505b505050505090506000805b82518161ffff161015610c5157828161ffff1681518110610c1657610c15611e9b565b5b602002602001015163ffffffff168463ffffffff1610610c51578180610c3b9061211a565b9250508080610c499061211a565b915050610bf2565b50809350505050919050565b610c6561152a565b60648160ff161115610ca3576040517ffb31fc0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260016101000a81548160ff021916908360ff16021790555050565b60606003805480602002602001604051908101604052809291908181526020018280548015610d3b57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610cfe5790505b5050505050905090565b60008282905003610d82576040517f64ac5cf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6064828290501115610dc0576040517fcb92b75800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004290506000610dd03361049e565b90506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900461ffff16905060405180606001604052808463ffffffff1681526020018363ffffffff1681526020018686905083610e599190612144565b61ffff16815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548161ffff021916908361ffff16021790555090505060005b8585905081101561110c576000868683818110610f3657610f35611e9b565b5b905060200201359050610f4881611265565b610f8957806040517fca2ddb9a000000000000000000000000000000000000000000000000000000008152600401610f809190612094565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610ff99190612094565b602060405180830381865afa158015611016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103a91906120c4565b73ffffffffffffffffffffffffffffffffffffffff16146110945733816040517f49faa32f00000000000000000000000000000000000000000000000000000000815260040161108b9291906120f1565b60405180910390fd5b60006004600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807ff0dbb2abe50e936f0d3720a39c0debe7706007b2c50286a913f24298e9be36ba336040516110f09190611cec565b60405180910390a250808061110490611ef9565b915050610f16565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361117b576040517f2cc8191100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900461ffff16905060008161ffff16036111e6576000915050611260565b6000600260009054906101000a900460ff1660ff166001836112089190612144565b611212919061217a565b61ffff169050600260019054906101000a900460ff1660ff168163ffffffff16111561124e57600260019054906101000a900460ff1660ff1690505b80606461125b9190612017565b925050505b919050565b60006004600083815260200190815260200160002060009054906101000a900460ff169050919050565b6112976113ac565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd9061223a565b60405180910390fd5b61130f81611572565b50565b60008173ffffffffffffffffffffffffffffffffffffffff16611333610ad0565b73ffffffffffffffffffffffffffffffffffffffff160361135757600190506113a7565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b919050565b6113b46116f6565b73ffffffffffffffffffffffffffffffffffffffff166113d2610ad0565b73ffffffffffffffffffffffffffffffffffffffff1614611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f906122a6565b60405180910390fd5b565b61143381611312565b611469576040517fe0794bd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114cf576040517f341247d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61153a6115356116f6565b611312565b611570576040517fe0794bd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361169c576040517f341247d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b6040518060600160405280600063ffffffff168152602001600063ffffffff168152602001600061ffff1681525090565b828054828255906000526020600020906007016008900481019282156117ce5791602002820160005b8382111561179c57835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302611758565b80156117cc5782816101000a81549063ffffffff021916905560040160208160030104928301926001030261179c565b505b5090506117db91906117df565b5090565b5b808211156117f85760008160009055506001016117e0565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261183557611834611810565b5b8235905067ffffffffffffffff81111561185257611851611815565b5b60208301915083602082028301111561186e5761186d61181a565b5b9250929050565b6000806020838503121561188c5761188b611806565b5b600083013567ffffffffffffffff8111156118aa576118a961180b565b5b6118b68582860161181f565b92509250509250929050565b600063ffffffff82169050919050565b6118db816118c2565b82525050565b60006020820190506118f660008301846118d2565b92915050565b600060ff82169050919050565b611912816118fc565b811461191d57600080fd5b50565b60008135905061192f81611909565b92915050565b60006020828403121561194b5761194a611806565b5b600061195984828501611920565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061198d82611962565b9050919050565b61199d81611982565b81146119a857600080fd5b50565b6000813590506119ba81611994565b92915050565b6000602082840312156119d6576119d5611806565b5b60006119e4848285016119ab565b91505092915050565b6119f6816118c2565b82525050565b600061ffff82169050919050565b611a13816119fc565b82525050565b606082016000820151611a2f60008501826119ed565b506020820151611a4260208501826119ed565b506040820151611a556040850182611a0a565b50505050565b6000606082019050611a706000830184611a19565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611abf82611a76565b810181811067ffffffffffffffff82111715611ade57611add611a87565b5b80604052505050565b6000611af16117fc565b9050611afd8282611ab6565b919050565b600067ffffffffffffffff821115611b1d57611b1c611a87565b5b602082029050602081019050919050565b611b37816118c2565b8114611b4257600080fd5b50565b600081359050611b5481611b2e565b92915050565b6000611b6d611b6884611b02565b611ae7565b90508083825260208201905060208402830185811115611b9057611b8f61181a565b5b835b81811015611bb95780611ba58882611b45565b845260208401935050602081019050611b92565b5050509392505050565b600082601f830112611bd857611bd7611810565b5b8135611be8848260208601611b5a565b91505092915050565b600060208284031215611c0757611c06611806565b5b600082013567ffffffffffffffff811115611c2557611c2461180b565b5b611c3184828501611bc3565b91505092915050565b60008083601f840112611c5057611c4f611810565b5b8235905067ffffffffffffffff811115611c6d57611c6c611815565b5b602083019150836020820283011115611c8957611c8861181a565b5b9250929050565b60008060208385031215611ca757611ca6611806565b5b600083013567ffffffffffffffff811115611cc557611cc461180b565b5b611cd185828601611c3a565b92509250509250929050565b611ce681611982565b82525050565b6000602082019050611d016000830184611cdd565b92915050565b611d10816119fc565b82525050565b6000602082019050611d2b6000830184611d07565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611d6983836119ed565b60208301905092915050565b6000602082019050919050565b6000611d8d82611d31565b611d978185611d3c565b9350611da283611d4d565b8060005b83811015611dd3578151611dba8882611d5d565b9750611dc583611d75565b925050600181019050611da6565b5085935050505092915050565b60006020820190508181036000830152611dfa8184611d82565b905092915050565b6000819050919050565b611e1581611e02565b8114611e2057600080fd5b50565b600081359050611e3281611e0c565b92915050565b600060208284031215611e4e57611e4d611806565b5b6000611e5c84828501611e23565b91505092915050565b60008115159050919050565b611e7a81611e65565b82525050565b6000602082019050611e956000830184611e71565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f0482611e02565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f3657611f35611eca565b5b600182019050919050565b6000611f4c82611e02565b9150611f5783611e02565b9250828203905081811115611f6f57611f6e611eca565b5b92915050565b6000611f8082611e02565b9150611f8b83611e02565b9250828202611f9981611e02565b91508282048414831517611fb057611faf611eca565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611ff182611e02565b9150611ffc83611e02565b92508261200c5761200b611fb7565b5b828204905092915050565b6000612022826118c2565b915061202d836118c2565b9250828201905063ffffffff81111561204957612048611eca565b5b92915050565b600061205a826119fc565b9150612065836119fc565b9250828201905061ffff81111561207f5761207e611eca565b5b92915050565b61208e81611e02565b82525050565b60006020820190506120a96000830184612085565b92915050565b6000815190506120be81611994565b92915050565b6000602082840312156120da576120d9611806565b5b60006120e8848285016120af565b91505092915050565b60006040820190506121066000830185611cdd565b6121136020830184612085565b9392505050565b6000612125826119fc565b915061ffff820361213957612138611eca565b5b600182019050919050565b600061214f826119fc565b915061215a836119fc565b9250828203905061ffff81111561217457612173611eca565b5b92915050565b6000612185826119fc565b9150612190836119fc565b925082820261219e816119fc565b91508082146121b0576121af611eca565b5b5092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006122246026836121b7565b915061222f826121c8565b604082019050919050565b6000602082019050818103600083015261225381612217565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006122906020836121b7565b915061229b8261225a565b602082019050919050565b600060208201905081810360008301526122bf81612283565b905091905056fea2646970667358221220b6216aa9b54fada03e71a887e1217fb963764af80a79a5753e191a6b29b3fe1664736f6c6343000813003300000000000000000000000097f7b6310e831e286087871c6aafc14b13152a87
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c80638c5f9e74116100ad578063c782311c11610071578063c782311c146102e0578063d8e348dc146102fc578063f0a524241461032c578063f2fde38b1461035c578063f3ae24151461037857610121565b80638c5f9e741461023c5780638da5cb5b14610258578063a8a82fd714610276578063ad293b71146102a6578063c169c67c146102c257610121565b806341edd686116100f457806341edd6861461019a578063485e636e146101ca5780634ca006b0146101fa57806370ea028f14610216578063715018a61461023257610121565b806310f3ee291461012657806320564e74146101425780632ce38f4d146101605780633cad3d891461017c575b600080fd5b610140600480360381019061013b9190611875565b6103a8565b005b61014a610406565b60405161015791906118e1565b60405180910390f35b61017a60048036038101906101759190611935565b610420565b005b610184610484565b60405161019191906118e1565b60405180910390f35b6101b460048036038101906101af91906119c0565b61049e565b6040516101c191906118e1565b60405180910390f35b6101e460048036038101906101df91906119c0565b61056c565b6040516101f19190611a5b565b60405180910390f35b610214600480360381019061020f9190611bf1565b610631565b005b610230600480360381019061022b9190611c90565b61068e565b005b61023a610a5e565b005b61025660048036038101906102519190611875565b610a72565b005b610260610ad0565b60405161026d9190611cec565b60405180910390f35b610290600480360381019061028b91906119c0565b610af9565b60405161029d9190611d16565b60405180910390f35b6102c060048036038101906102bb9190611935565b610c5d565b005b6102ca610cc1565b6040516102d79190611de0565b60405180910390f35b6102fa60048036038101906102f59190611c90565b610d45565b005b610316600480360381019061031191906119c0565b611114565b60405161032391906118e1565b60405180910390f35b61034660048036038101906103419190611e38565b611265565b6040516103539190611e80565b60405180910390f35b610376600480360381019061037191906119c0565b61128f565b005b610392600480360381019061038d91906119c0565b611312565b60405161039f9190611e80565b60405180910390f35b6103b06113ac565b60005b82829050811015610401576103ee8383838181106103d4576103d3611e9b565b5b90506020020160208101906103e991906119c0565b61142a565b80806103f990611ef9565b9150506103b3565b505050565b6000600260019054906101000a900460ff1660ff16905090565b61042861152a565b60648160ff161115610466576040517f26639e1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260006101000a81548160ff021916908360ff16021790555050565b6000600260009054906101000a900460ff1660ff16905090565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008160000160049054906101000a900463ffffffff16905060008260000160009054906101000a900463ffffffff1663ffffffff16426105239190611f41565b9050600061053086611114565b9050600060648263ffffffff16846105489190611f75565b6105529190611fe6565b905080846105609190612017565b95505050505050919050565b6105746116fe565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900461ffff1661ffff1661ffff16815250509050919050565b61063961152a565b6000815103610674576040517fc2bc092a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003908051906020019061068a92919061172f565b5050565b600082829050036106cb576040517f64ac5cf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6064828290501115610709576040517fcb92b75800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600042905060006107193361049e565b90506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900461ffff16905060405180606001604052808463ffffffff1681526020018363ffffffff16815260200186869050836107a2919061204f565b61ffff16815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548161ffff021916908361ffff16021790555090505060005b85859050811015610a5657600086868381811061087f5761087e611e9b565b5b90506020020135905061089181611265565b156108d357806040517f1237f8560000000000000000000000000000000000000000000000000000000081526004016108ca9190612094565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000097f7b6310e831e286087871c6aafc14b13152a8773ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016109439190612094565b602060405180830381865afa158015610960573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098491906120c4565b73ffffffffffffffffffffffffffffffffffffffff16146109de5733816040517f49faa32f0000000000000000000000000000000000000000000000000000000081526004016109d59291906120f1565b60405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807f1fdab8a8457aaf782e4b6217d6ffa6f5006eda7e50922dd092b2e1524275d77433604051610a3a9190611cec565b60405180910390a2508080610a4e90611ef9565b91505061085f565b505050505050565b610a666113ac565b610a706000611572565b565b610a7a6113ac565b60005b82829050811015610acb57610ab8838383818110610a9e57610a9d611e9b565b5b9050602002016020810190610ab391906119c0565b611636565b8080610ac390611ef9565b915050610a7d565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b60576040517f2cc8191100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b6b8361049e565b905060006003805480602002602001604051908101604052809291908181526020018280548015610be757602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610baa5790505b505050505090506000805b82518161ffff161015610c5157828161ffff1681518110610c1657610c15611e9b565b5b602002602001015163ffffffff168463ffffffff1610610c51578180610c3b9061211a565b9250508080610c499061211a565b915050610bf2565b50809350505050919050565b610c6561152a565b60648160ff161115610ca3576040517ffb31fc0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600260016101000a81548160ff021916908360ff16021790555050565b60606003805480602002602001604051908101604052809291908181526020018280548015610d3b57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610cfe5790505b5050505050905090565b60008282905003610d82576040517f64ac5cf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6064828290501115610dc0576040517fcb92b75800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004290506000610dd03361049e565b90506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900461ffff16905060405180606001604052808463ffffffff1681526020018363ffffffff1681526020018686905083610e599190612144565b61ffff16815250600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548161ffff021916908361ffff16021790555090505060005b8585905081101561110c576000868683818110610f3657610f35611e9b565b5b905060200201359050610f4881611265565b610f8957806040517fca2ddb9a000000000000000000000000000000000000000000000000000000008152600401610f809190612094565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000097f7b6310e831e286087871c6aafc14b13152a8773ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610ff99190612094565b602060405180830381865afa158015611016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103a91906120c4565b73ffffffffffffffffffffffffffffffffffffffff16146110945733816040517f49faa32f00000000000000000000000000000000000000000000000000000000815260040161108b9291906120f1565b60405180910390fd5b60006004600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807ff0dbb2abe50e936f0d3720a39c0debe7706007b2c50286a913f24298e9be36ba336040516110f09190611cec565b60405180910390a250808061110490611ef9565b915050610f16565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361117b576040517f2cc8191100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900461ffff16905060008161ffff16036111e6576000915050611260565b6000600260009054906101000a900460ff1660ff166001836112089190612144565b611212919061217a565b61ffff169050600260019054906101000a900460ff1660ff168163ffffffff16111561124e57600260019054906101000a900460ff1660ff1690505b80606461125b9190612017565b925050505b919050565b60006004600083815260200190815260200160002060009054906101000a900460ff169050919050565b6112976113ac565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd9061223a565b60405180910390fd5b61130f81611572565b50565b60008173ffffffffffffffffffffffffffffffffffffffff16611333610ad0565b73ffffffffffffffffffffffffffffffffffffffff160361135757600190506113a7565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b919050565b6113b46116f6565b73ffffffffffffffffffffffffffffffffffffffff166113d2610ad0565b73ffffffffffffffffffffffffffffffffffffffff1614611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f906122a6565b60405180910390fd5b565b61143381611312565b611469576040517fe0794bd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114cf576040517f341247d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61153a6115356116f6565b611312565b611570576040517fe0794bd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361169c576040517f341247d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b6040518060600160405280600063ffffffff168152602001600063ffffffff168152602001600061ffff1681525090565b828054828255906000526020600020906007016008900481019282156117ce5791602002820160005b8382111561179c57835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302611758565b80156117cc5782816101000a81549063ffffffff021916905560040160208160030104928301926001030261179c565b505b5090506117db91906117df565b5090565b5b808211156117f85760008160009055506001016117e0565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261183557611834611810565b5b8235905067ffffffffffffffff81111561185257611851611815565b5b60208301915083602082028301111561186e5761186d61181a565b5b9250929050565b6000806020838503121561188c5761188b611806565b5b600083013567ffffffffffffffff8111156118aa576118a961180b565b5b6118b68582860161181f565b92509250509250929050565b600063ffffffff82169050919050565b6118db816118c2565b82525050565b60006020820190506118f660008301846118d2565b92915050565b600060ff82169050919050565b611912816118fc565b811461191d57600080fd5b50565b60008135905061192f81611909565b92915050565b60006020828403121561194b5761194a611806565b5b600061195984828501611920565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061198d82611962565b9050919050565b61199d81611982565b81146119a857600080fd5b50565b6000813590506119ba81611994565b92915050565b6000602082840312156119d6576119d5611806565b5b60006119e4848285016119ab565b91505092915050565b6119f6816118c2565b82525050565b600061ffff82169050919050565b611a13816119fc565b82525050565b606082016000820151611a2f60008501826119ed565b506020820151611a4260208501826119ed565b506040820151611a556040850182611a0a565b50505050565b6000606082019050611a706000830184611a19565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611abf82611a76565b810181811067ffffffffffffffff82111715611ade57611add611a87565b5b80604052505050565b6000611af16117fc565b9050611afd8282611ab6565b919050565b600067ffffffffffffffff821115611b1d57611b1c611a87565b5b602082029050602081019050919050565b611b37816118c2565b8114611b4257600080fd5b50565b600081359050611b5481611b2e565b92915050565b6000611b6d611b6884611b02565b611ae7565b90508083825260208201905060208402830185811115611b9057611b8f61181a565b5b835b81811015611bb95780611ba58882611b45565b845260208401935050602081019050611b92565b5050509392505050565b600082601f830112611bd857611bd7611810565b5b8135611be8848260208601611b5a565b91505092915050565b600060208284031215611c0757611c06611806565b5b600082013567ffffffffffffffff811115611c2557611c2461180b565b5b611c3184828501611bc3565b91505092915050565b60008083601f840112611c5057611c4f611810565b5b8235905067ffffffffffffffff811115611c6d57611c6c611815565b5b602083019150836020820283011115611c8957611c8861181a565b5b9250929050565b60008060208385031215611ca757611ca6611806565b5b600083013567ffffffffffffffff811115611cc557611cc461180b565b5b611cd185828601611c3a565b92509250509250929050565b611ce681611982565b82525050565b6000602082019050611d016000830184611cdd565b92915050565b611d10816119fc565b82525050565b6000602082019050611d2b6000830184611d07565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000611d6983836119ed565b60208301905092915050565b6000602082019050919050565b6000611d8d82611d31565b611d978185611d3c565b9350611da283611d4d565b8060005b83811015611dd3578151611dba8882611d5d565b9750611dc583611d75565b925050600181019050611da6565b5085935050505092915050565b60006020820190508181036000830152611dfa8184611d82565b905092915050565b6000819050919050565b611e1581611e02565b8114611e2057600080fd5b50565b600081359050611e3281611e0c565b92915050565b600060208284031215611e4e57611e4d611806565b5b6000611e5c84828501611e23565b91505092915050565b60008115159050919050565b611e7a81611e65565b82525050565b6000602082019050611e956000830184611e71565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611f0482611e02565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f3657611f35611eca565b5b600182019050919050565b6000611f4c82611e02565b9150611f5783611e02565b9250828203905081811115611f6f57611f6e611eca565b5b92915050565b6000611f8082611e02565b9150611f8b83611e02565b9250828202611f9981611e02565b91508282048414831517611fb057611faf611eca565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611ff182611e02565b9150611ffc83611e02565b92508261200c5761200b611fb7565b5b828204905092915050565b6000612022826118c2565b915061202d836118c2565b9250828201905063ffffffff81111561204957612048611eca565b5b92915050565b600061205a826119fc565b9150612065836119fc565b9250828201905061ffff81111561207f5761207e611eca565b5b92915050565b61208e81611e02565b82525050565b60006020820190506120a96000830184612085565b92915050565b6000815190506120be81611994565b92915050565b6000602082840312156120da576120d9611806565b5b60006120e8848285016120af565b91505092915050565b60006040820190506121066000830185611cdd565b6121136020830184612085565b9392505050565b6000612125826119fc565b915061ffff820361213957612138611eca565b5b600182019050919050565b600061214f826119fc565b915061215a836119fc565b9250828203905061ffff81111561217457612173611eca565b5b92915050565b6000612185826119fc565b9150612190836119fc565b925082820261219e816119fc565b91508082146121b0576121af611eca565b5b5092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006122246026836121b7565b915061222f826121c8565b604082019050919050565b6000602082019050818103600083015261225381612217565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006122906020836121b7565b915061229b8261225a565b602082019050919050565b600060208201905081810360008301526122bf81612283565b905091905056fea2646970667358221220b6216aa9b54fada03e71a887e1217fb963764af80a79a5753e191a6b29b3fe1664736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000097f7b6310e831e286087871c6aafc14b13152a87
-----Decoded View---------------
Arg [0] : collectionContract (address): 0x97f7b6310E831e286087871c6AAFc14b13152a87
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000097f7b6310e831e286087871c6aafc14b13152a87
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.