More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,338 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake Nfts | 21413632 | 9 days ago | IN | 0 ETH | 0.00145787 | ||||
Unstake Nfts | 21385279 | 13 days ago | IN | 0 ETH | 0.00699986 | ||||
Unstake Nfts | 21351704 | 18 days ago | IN | 0 ETH | 0.00214435 | ||||
Stake Nfts | 21347843 | 18 days ago | IN | 0 ETH | 0.00190916 | ||||
Unstake Nfts | 21346733 | 19 days ago | IN | 0 ETH | 0.00942822 | ||||
Unstake Nfts | 21335407 | 20 days ago | IN | 0 ETH | 0.00214533 | ||||
Unstake Nfts | 21251657 | 32 days ago | IN | 0 ETH | 0.003817 | ||||
Unstake Nfts | 21245921 | 33 days ago | IN | 0 ETH | 0.0066181 | ||||
Unstake Nfts | 21239652 | 34 days ago | IN | 0 ETH | 0.00342448 | ||||
Unstake Nfts | 21239649 | 34 days ago | IN | 0 ETH | 0.00118213 | ||||
Unstake Nfts | 21175233 | 43 days ago | IN | 0 ETH | 0.00699043 | ||||
Unstake Nfts | 21138671 | 48 days ago | IN | 0 ETH | 0.00271169 | ||||
Unstake Nfts | 21023631 | 64 days ago | IN | 0 ETH | 0.00122543 | ||||
Unstake Nfts | 20860286 | 86 days ago | IN | 0 ETH | 0.00071441 | ||||
Unstake Nfts | 20854169 | 87 days ago | IN | 0 ETH | 0.00056489 | ||||
Stake Nfts | 20610693 | 121 days ago | IN | 0 ETH | 0.00009974 | ||||
Stake Nfts | 20608648 | 122 days ago | IN | 0 ETH | 0.00011926 | ||||
Unstake Nfts | 20535813 | 132 days ago | IN | 0 ETH | 0.00105338 | ||||
Unstake Nfts | 20422787 | 148 days ago | IN | 0 ETH | 0.00168481 | ||||
Unstake Nfts | 20373386 | 154 days ago | IN | 0 ETH | 0.0044689 | ||||
Unstake Nfts | 20360164 | 156 days ago | IN | 0 ETH | 0.0011894 | ||||
Unstake Nfts | 20295011 | 165 days ago | IN | 0 ETH | 0.00019817 | ||||
Unstake Nfts | 20294992 | 165 days ago | IN | 0 ETH | 0.00014096 | ||||
Stake Nfts | 20259098 | 170 days ago | IN | 0 ETH | 0.00015059 | ||||
Unstake Nfts | 19986303 | 209 days ago | IN | 0 ETH | 0.00095274 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
OddworxStaking
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity ^0.8.4; import {IOddworx} from './IOddworx.sol'; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol"; error NotAdmin(); error InvalidInput(); error NotOwnerOfToken(); struct nftDataStruct { // Stored in 32 bytes / 256 bits address ownerAddress; // 20 bytes bool staked; // 1 byte uint64 timestamp; // 8 bytes bool legacyStaking; // 1 byte } /// @title Oddworx Staking /// @author Mytchall /// @notice Special Staking contract for ODDX contract OddworxStaking is Pausable { mapping(address => bool) public admin; mapping(IERC721 => bool) public nftInterfaces; mapping(IERC721 => mapping(uint256 => nftDataStruct)) public nftData; IOddworx public oddworxContract; bool public nftHoldRewardsActive = true; uint256 public STAKING_REWARD = 20 * 10 ** 18; uint256 public HOLDING_REWARD = 10 * 10 ** 18; address public oddworxContractAddress; constructor(address oddworxAddress) { oddworxContractAddress = oddworxAddress; oddworxContract = IOddworx(oddworxAddress); admin[msg.sender] = true; } /// @notice emitted when an item is purchased /// @param user address of the user that purchased an item /// @param itemSKU the SKU of the item purchased /// @param price the amount paid for the item event ItemPurchased(address indexed user, uint256 itemSKU, uint256 price); /// @notice emitted when a user stakes a token /// @param user address of the user that staked the NFT /// @param nftContract which NFT set was used /// @param nftId the id of the NFT staked event StakedNft(address indexed user, address indexed nftContract, uint256 indexed nftId); /// @notice emitted when a user unstakes a token /// @param user address of the user that unstaked the NFT /// @param nftContract which NFT set was used /// @param nftId the id of the NFT unstaked /// @param to address where NFT was unstaked to event UnstakedNft(address indexed user, address indexed nftContract, uint256 indexed nftId, address to); /// @notice emitted when a user claim NFT rewards /// @param user address of the user that claimed ODDX /// @param nftContract which NFT set was used /// @param nftId the id of the NFT that generated the rewards /// @param amount the amount of ODDX claimed event UserClaimedRewards(address indexed user, address indexed nftContract, uint256 indexed nftId, uint256 amount); modifier onlyAdmin() { if (admin[msg.sender] != true) revert NotAdmin(); _; } /*/////////////////////////////////////////////////////////////// General Functions //////////////////////////////////////////////////////////////*/ function pause() external onlyAdmin { _pause(); } function unpause() external onlyAdmin { _unpause(); } function toggleAdmin(address address_) external onlyAdmin { admin[address_] = !admin[address_]; } function mint(address to, uint256 amount) internal { oddworxContract.mint(to, amount); } function burn(address from, uint256 amount) internal { oddworxContract.burn(from, amount); } function setOddworxAddress(address address_) external onlyAdmin { oddworxContractAddress = address_; oddworxContract = IOddworx(address_); } function toggleNftInterface(IERC721 address_) external onlyAdmin { nftInterfaces[address_] = !nftInterfaces[address_]; } /*/////////////////////////////////////////////////////////////// Shop features //////////////////////////////////////////////////////////////*/ /// @notice Buy item in shop by burning Oddx, if NFT ids are supplied, it will claim rewards on them first. /// @param itemSKU A unique ID used to identify shop products. /// @param amount Amount of Oddx to pay. /// @param nftContract which NFT contract to use /// @param nftIds Which NFT ids to use function buyItem(uint itemSKU, uint amount, IERC721 nftContract, uint[] calldata nftIds, address user) public whenNotPaused { address realUser = (admin[msg.sender]==true) ? user : msg.sender; if (nftIds.length>0) claimRewards(nftContract, nftIds, realUser); oddworxContract.burn(realUser, amount); emit ItemPurchased(realUser, itemSKU, amount); } /*/////////////////////////////////////////////////////////////// Staking //////////////////////////////////////////////////////////////*/ /// @notice Get an array of data for a NFT /// @param nftContract which NFT contract to use /// @param id Which NFT to use function getNftData(address nftContract, uint256 id) external view returns (address, bool, uint64, bool) { nftDataStruct memory nft = nftData[IERC721(nftContract)][id]; return (nft.ownerAddress, nft.staked, nft.timestamp, nft.legacyStaking); } /// @notice Updates either Staked or Holding reward amount /// @param newAmount new amount to use, supply number in wei. /// @param changeStaking true to change Staking, false to change Hold rewards function changeRewardAmount(uint256 newAmount, bool changeStaking) external onlyAdmin { (changeStaking == true) ? STAKING_REWARD = newAmount : HOLDING_REWARD = newAmount; } /// @notice Manually update staking info (contract launch date - 3 weeks) /// @param nftContract which NFT contract to use /// @param nftIds NFT's to update /// @param newTimestamp new timestamp function setUserNftData(IERC721 nftContract, uint256[] calldata nftIds, address newOwner, bool isStaked, uint256 newTimestamp, bool usingLegacyStaking) external onlyAdmin { for (uint256 i; i<nftIds.length; i++) { nftData[nftContract][nftIds[i]] = nftDataStruct(newOwner, isStaked, uint64(newTimestamp), usingLegacyStaking); } } /// @notice Stake NFT and claim any Hold rewards owing if not legacyStaked, otherwise claim Staked rewards and update /// @param nftContract NFT contract to use /// @param nftIds List of NFTs to stake function stakeNfts(IERC721 nftContract, uint256[] calldata nftIds) external whenNotPaused { if (!nftInterfaces[nftContract]) revert InvalidInput(); uint256 totalRewards = 0; nftDataStruct memory nft; for (uint256 i; i<nftIds.length; i++) { uint256 nftId = nftIds[i]; nft = nftData[nftContract][nftId]; if (nft.legacyStaking == false) { totalRewards += _executeRewards(nftContract, nftId, HOLDING_REWARD, HOLDING_REWARD * 3); } else { totalRewards += _executeRewards(nftContract, nftId, STAKING_REWARD, 0); confirmLegacyStaking(nftContract, nftId); } nftData[nftContract][nftId] = nftDataStruct(msg.sender, true, uint64(block.timestamp), false); _transferNft(nftContract, msg.sender, address(this), nftId); emit StakedNft(msg.sender, address(nftContract), nftId); } if (totalRewards > 0) mint(msg.sender, totalRewards); } /// @notice Unstake NFT and claim Stake rewards owing, resetting Hold reward time /// @param nftContract NFT contract to use /// @param nftIds List of NFTs to stake function unstakeNfts(IERC721 nftContract, uint256[] calldata nftIds) external whenNotPaused { nftDataStruct memory nft; uint256 totalRewards; for (uint256 i; i<nftIds.length; i++) { uint256 nftId = nftIds[i]; nft = nftData[nftContract][nftId]; if (nft.staked == false) revert InvalidInput(); if (nft.ownerAddress != msg.sender) revert NotOwnerOfToken(); totalRewards += _executeRewards(nftContract, nftId, STAKING_REWARD, 0); nftData[nftContract][nftId] = nftDataStruct(msg.sender, false, uint64(block.timestamp), false); _transferNft(nftContract, address(this), nft.ownerAddress, nftId); emit UnstakedNft(msg.sender, address(nftContract), nftId, msg.sender); } if (totalRewards > 0) mint(msg.sender, totalRewards); } /// @notice Returns amount of rewards to mint /// @dev Emits event assuming mint will happen /// @param nftContract NFT contract to use /// @param nftId NFT to calculate rewards for /// @param rewardAmount Weekly reward amount /// @param initialReward Default reward amount function _executeRewards(IERC721 nftContract, uint256 nftId, uint256 rewardAmount, uint256 initialReward) internal returns (uint256) { uint256 rewards = _rewardsForTimestamp( nftData[nftContract][nftId].timestamp, rewardAmount, initialReward ); emit UserClaimedRewards(msg.sender, address(nftContract), nftId, rewards); return rewards; } /// @notice Emergency Unstake NFT /// @param nftContract NFT contract to use /// @param nftIds List of NFTs to stake /// @param to Where to send NFT function unstakeNftEmergency(IERC721 nftContract, uint256[] calldata nftIds, address user, address to) external onlyAdmin { for (uint256 i; i<nftIds.length; i++) { address realUser = (admin[msg.sender]==true) ? user : msg.sender; nftData[nftContract][nftIds[i]] = nftDataStruct(to, false, uint64(block.timestamp), false); _transferNft(nftContract, address(this), to, nftIds[i]); emit UnstakedNft(realUser, address(nftContract), nftIds[i], to); } } /// @notice Claim either Hold or Claim rewards for each Nft /// @param nftContract Which NFT set is being used /// @param nftIds NFT id's to claim for function claimRewards(IERC721 nftContract, uint256[] calldata nftIds, address user) public whenNotPaused { if (!nftInterfaces[nftContract] || msg.sender == address(0)) revert InvalidInput(); uint256 totalRewards; nftDataStruct memory nft; address realUser = (admin[msg.sender]==true) ? user : msg.sender; for (uint256 i; i<nftIds.length; i++) { uint256 nftId = nftIds[i]; nft = nftData[nftContract][nftId]; if (nft.staked == false) { if (nftContract.ownerOf(nftId) != realUser) revert NotOwnerOfToken(); totalRewards += _executeRewards(nftContract, nftId, HOLDING_REWARD, HOLDING_REWARD * 3); } else { if (nft.ownerAddress != realUser) revert NotOwnerOfToken(); totalRewards += _executeRewards(nftContract, nftId, STAKING_REWARD, 0); if (nft.legacyStaking == true) confirmLegacyStaking(nftContract, nftId); } nftData[nftContract][nftId].timestamp = uint64(block.timestamp); } if (totalRewards > 0) mint(realUser, totalRewards); } /// @notice Calculate Hold or Staked rewards based on timestamp /// @param timestamp Timestamp to use /// @param rewardValue How much to reward per week /// @param initialReward Initial reward if first time claiming function _rewardsForTimestamp(uint256 timestamp, uint256 rewardValue, uint256 initialReward) internal view returns (uint256) { return (timestamp > 0) ? rewardValue * ((block.timestamp - timestamp) / 1 weeks) : initialReward; } /// @notice Actually transfer NFT /// @dev Internal only, checks are done before this /// @param nftContract NFT contract to use /// @param from Where to transfer NFT from /// @param to Where to send NFT function _transferNft(IERC721 nftContract, address from, address to, uint256 nftId) internal { nftContract.transferFrom(from, to, nftId); } /// @notice Checks if NFT uses legacyStaking and if it's still valid, otherwise update struct to show not staked /// @param nftContract Which NFT contract to use /// @param nftId Which NFT to check function confirmLegacyStaking(IERC721 nftContract, uint256 nftId) internal { if (nftContract.ownerOf(nftId) != oddworxContractAddress ) { nftData[nftContract][nftId].legacyStaking = false; nftData[nftContract][nftId].staked = false; } } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity ^0.8.4; interface IOddworx { function burn(address _from, uint256 amount) external; function mint(address to, uint256 amount) external; function balanceOf(address account) external view returns (uint256); }
// 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 (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts 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 (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": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"oddworxAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidInput","type":"error"},{"inputs":[],"name":"NotAdmin","type":"error"},{"inputs":[],"name":"NotOwnerOfToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"itemSKU","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"ItemPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"nftContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"StakedNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"nftContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"UnstakedNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"nftContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UserClaimedRewards","type":"event"},{"inputs":[],"name":"HOLDING_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"itemSKU","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"contract IERC721","name":"nftContract","type":"address"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"internalType":"address","name":"user","type":"address"}],"name":"buyItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"},{"internalType":"bool","name":"changeStaking","type":"bool"}],"name":"changeRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"nftContract","type":"address"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"internalType":"address","name":"user","type":"address"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getNftData","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint64","name":"","type":"uint64"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftData","outputs":[{"internalType":"address","name":"ownerAddress","type":"address"},{"internalType":"bool","name":"staked","type":"bool"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bool","name":"legacyStaking","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftHoldRewardsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"name":"nftInterfaces","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oddworxContract","outputs":[{"internalType":"contract IOddworx","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oddworxContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setOddworxAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"nftContract","type":"address"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"isStaked","type":"bool"},{"internalType":"uint256","name":"newTimestamp","type":"uint256"},{"internalType":"bool","name":"usingLegacyStaking","type":"bool"}],"name":"setUserNftData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"nftContract","type":"address"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"stakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"toggleAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"address_","type":"address"}],"name":"toggleNftInterface","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"nftContract","type":"address"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"unstakeNftEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"nftContract","type":"address"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"}],"name":"unstakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526004805460ff60a01b1916600160a01b1790556801158e460913d00000600555678ac7230489e8000060065534801561003c57600080fd5b50604051611c1c380380611c1c83398101604081905261005b916100ae565b6000805460ff199081168255600780546001600160a01b039094166001600160a01b03199485168117909155600480549094161790925533815260016020819052604090912080549092161790556100dc565b6000602082840312156100bf578081fd5b81516001600160a01b03811681146100d5578182fd5b9392505050565b611b31806100eb6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806387d83bdc116100b8578063d127a98f1161007c578063d127a98f14610355578063d3b861411461036c578063dcfbd0751461037f578063e4aaccab14610388578063f0d5b7db1461039b578063f6b15d8a146103ae57600080fd5b806387d83bdc146102455780639df7d475146102585780639e768ff71461026b578063ba1238a11461027f578063ce55dcaa1461034257600080fd5b8063530389931161010a578063530389931461019d5780635c975abb146101cd57806363a846f8146101e4578063706be11f146102075780638456cb591461021a57806385a972861461022257600080fd5b806309b4084114610147578063249c421a1461015c57806334f0fce01461016f5780633f4ba83a1461018257806349db4ced1461018a575b600080fd5b61015a610155366004611976565b61040a565b005b61015a61016a366004611739565b610456565b61015a61017d3660046118d4565b6104b5565b61015a610625565b61015a6101983660046119a1565b610665565b6007546101b0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60005460ff165b60405190151581526020016101c4565b6101d46101f2366004611739565b60016020526000908152604090205460ff1681565b61015a6102153660046117f5565b61077e565b61015a610a8c565b6101d4610230366004611739565b60026020526000908152604090205460ff1681565b61015a610253366004611739565b610aca565b61015a6102663660046117a3565b610b2c565b6004546101d490600160a01b900460ff1681565b61030861028d366004611778565b6001600160a01b039182166000908152600360209081526040808320938352928152908290208251608081018452905493841680825260ff600160a01b8604811615159383018490526001600160401b03600160a81b870416948301859052600160e81b909504909416151560609091018190529293909290565b604080516001600160a01b03909516855292151560208501526001600160401b0390911691830191909152151560608201526080016101c4565b61015a61035036600461185a565b610e09565b61035e60065481565b6040519081526020016101c4565b61015a61037a366004611739565b611039565b61035e60055481565b61015a6103963660046117a3565b611098565b6004546101b0906001600160a01b031681565b6103086103bc366004611964565b60036020908152600092835260408084209091529082529020546001600160a01b0381169060ff600160a01b82048116916001600160401b03600160a81b82041691600160e81b9091041684565b3360009081526001602081905260409091205460ff1615151461044057604051637bfa4b9f60e01b815260040160405180910390fd5b6001811515146104505750600655565b50600555565b3360009081526001602081905260409091205460ff1615151461048c57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03166000908152600260205260409020805460ff19811660ff90911615179055565b3360009081526001602081905260409091205460ff161515146104eb57604051637bfa4b9f60e01b815260040160405180910390fd5b60005b8581101561061b576040518060800160405280866001600160a01b031681526020018515158152602001846001600160401b03168152602001831515815250600360008a6001600160a01b03166001600160a01b03168152602001908152602001600020600089898581811061057457634e487b7160e01b600052603260045260246000fd5b602090810292909201358352508181019290925260409081016000208351815493850151928501516060909501511515600160e81b0260ff60e81b196001600160401b03909616600160a81b029590951668ffffffffffffffffff60a81b19931515600160a01b026001600160a81b03199095166001600160a01b03909216919091179390931791909116919091179190911790558061061381611ab2565b9150506104ee565b5050505050505050565b3360009081526001602081905260409091205460ff1615151461065b57604051637bfa4b9f60e01b815260040160405180910390fd5b61066361138a565b565b60005460ff16156106915760405162461bcd60e51b815260040161068890611a1a565b60405180910390fd5b33600090815260016020819052604082205460ff161515146106b357336106b5565b815b905082156106c9576106c98585858461077e565b60048054604051632770a7eb60e21b81526001600160a01b038481169382019390935260248101899052911690639dc29fac90604401600060405180830381600087803b15801561071957600080fd5b505af115801561072d573d6000803e3d6000fd5b5050604080518a8152602081018a90526001600160a01b03851693507f1452773cf753d0d7c71ed9990f7c7e2bdde4a2d08d187b3647953877e400488d92500160405180910390a250505050505050565b60005460ff16156107a15760405162461bcd60e51b815260040161068890611a1a565b6001600160a01b03841660009081526002602052604090205460ff1615806107c7575033155b156107e55760405163b4fa3fb360e01b815260040160405180910390fd5b604080516080810182526000808252602082018190529181018290526060810182905233600090815260016020819052604082205460ff1615151461082a573361082c565b835b905060005b85811015610a7257600087878381811061085b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03808d16600090815260036020908152604080832094820296909601358083529381529085902085516080810187529054928316815260ff600160a01b8404811615159282018390526001600160401b03600160a81b85041696820196909652600160e81b90920490941615156060820152965092506109af9050576040516331a9108f60e11b8152600481018290526001600160a01b0380851691908b1690636352211e9060240160206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095b919061175c565b6001600160a01b0316146109825760405163130213c560e21b815260040160405180910390fd5b61099e898260065460065460036109999190611a7c565b61141d565b6109a89086611a44565b9450610a1b565b826001600160a01b031684600001516001600160a01b0316146109e55760405163130213c560e21b815260040160405180910390fd5b6109f48982600554600061141d565b6109fe9086611a44565b945083606001511515600115151415610a1b57610a1b89826114b7565b6001600160a01b038916600090815260036020908152604080832093835292905220805467ffffffffffffffff60a81b1916600160a81b426001600160401b03160217905580610a6a81611ab2565b915050610831565b508215610a8357610a838184611580565b50505050505050565b3360009081526001602081905260409091205460ff16151514610ac257604051637bfa4b9f60e01b815260040160405180910390fd5b6106636115e4565b3360009081526001602081905260409091205460ff16151514610b0057604051637bfa4b9f60e01b815260040160405180910390fd5b600780546001600160a01b039092166001600160a01b0319928316811790915560048054909216179055565b60005460ff1615610b4f5760405162461bcd60e51b815260040161068890611a1a565b604080516080810182526000808252602082018190529181018290526060810182905290805b83811015610df1576000858583818110610b9f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03808b16600090815260036020908152604080832094820296909601358083529381529085902085516080810187529054928316815260ff600160a01b8404811615159282018390526001600160401b03600160a81b85041696820196909652600160e81b9092049094161515606082015296509250610c3b90505760405163b4fa3fb360e01b815260040160405180910390fd5b83516001600160a01b03163314610c655760405163130213c560e21b815260040160405180910390fd5b610c748782600554600061141d565b610c7e9084611a44565b92506040518060800160405280336001600160a01b03168152602001600015158152602001426001600160401b031681526020016000151581525060036000896001600160a01b03166001600160a01b03168152602001908152602001600020600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160000160156101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600001601d6101000a81548160ff021916908315150217905550905050610d9c873086600001518461163c565b6040513380825282916001600160a01b038a1691907f0d4dc35be5fe5ad2ab4068e230049233a0db1b0aaff2a555a8998ada4b1e53f69060200160405180910390a45080610de981611ab2565b915050610b75565b508015610e0257610e023382611580565b5050505050565b3360009081526001602081905260409091205460ff16151514610e3f57604051637bfa4b9f60e01b815260040160405180910390fd5b60005b838110156110315733600090815260016020819052604082205460ff16151514610e6c5733610e6e565b835b604080516080810182526001600160a01b038087168252600060208084018290526001600160401b0342168486015260608401829052918c16815260039091529182209293509190888886818110610ed657634e487b7160e01b600052603260045260246000fd5b602090810292909201358352508181019290925260409081016000208351815493850151928501516060909501511515600160e81b0260ff60e81b196001600160401b03909616600160a81b029590951668ffffffffffffffffff60a81b19931515600160a01b026001600160a81b03199095166001600160a01b0390921691909117939093179190911691909117919091179055610f9d873085898987818110610f9157634e487b7160e01b600052603260045260246000fd5b9050602002013561163c565b858583818110610fbd57634e487b7160e01b600052603260045260246000fd5b90506020020135876001600160a01b0316826001600160a01b03167f0d4dc35be5fe5ad2ab4068e230049233a0db1b0aaff2a555a8998ada4b1e53f68660405161101691906001600160a01b0391909116815260200190565b60405180910390a4508061102981611ab2565b915050610e42565b505050505050565b3360009081526001602081905260409091205460ff1615151461106f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03166000908152600160205260409020805460ff19811660ff90911615179055565b60005460ff16156110bb5760405162461bcd60e51b815260040161068890611a1a565b6001600160a01b03831660009081526002602052604090205460ff166110f45760405163b4fa3fb360e01b815260040160405180910390fd5b604080516080810182526000808252602082018190529181018290526060810182905260005b8381101561137957600085858381811061114457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03808b16600090815260036020908152604080832094820296909601358083529381529085902085516080810187529054928316815260ff600160a01b840481161515928201929092526001600160401b03600160a81b84041695810195909552600160e81b9091041615156060840181905292955092506111f19050576111e0878260065460065460036109999190611a7c565b6111ea9085611a44565b9350611216565b6112008782600554600061141d565b61120a9085611a44565b935061121687826114b7565b6040518060800160405280336001600160a01b03168152602001600115158152602001426001600160401b031681526020016000151581525060036000896001600160a01b03166001600160a01b03168152602001908152602001600020600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160000160156101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600001601d6101000a81548160ff02191690831515021790555090505061132e8733308461163c565b60405181906001600160a01b0389169033907f25b173d9e82ea1a8609bb3fae1ed3fad6b1d41eba1ac0d7b9d5e2697d0082a3590600090a4508061137181611ab2565b91505061111a565b508115610e0257610e023383611580565b60005460ff166113d35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610688565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0384166000908152600360209081526040808320868452909152812054819061145e90600160a81b90046001600160401b031685856116a2565b905084866001600160a01b0316336001600160a01b03167f2f6844b46ab717fd5c35cb9274efc74c4348d73109e15891c9de7c3e7b16daf1846040516114a691815260200190565b60405180910390a495945050505050565b6007546040516331a9108f60e11b8152600481018390526001600160a01b0391821691841690636352211e9060240160206040518083038186803b1580156114fe57600080fd5b505afa158015611512573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611536919061175c565b6001600160a01b03161461157c576001600160a01b03821660009081526003602090815260408083208484529091529020805469ff0000000000000000ff60a01b191690555b5050565b600480546040516340c10f1960e01b81526001600160a01b0385811693820193909352602481018490529116906340c10f1990604401600060405180830381600087803b1580156115d057600080fd5b505af1158015611031573d6000803e3d6000fd5b60005460ff16156116075760405162461bcd60e51b815260040161068890611a1a565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114003390565b6040516323b872dd60e01b81526001600160a01b0384811660048301528381166024830152604482018390528516906323b872dd90606401600060405180830381600087803b15801561168e57600080fd5b505af115801561061b573d6000803e3d6000fd5b60008084116116b157816116d3565b62093a806116bf8542611a9b565b6116c99190611a5c565b6116d39084611a7c565b949350505050565b60008083601f8401126116ec578182fd5b5081356001600160401b03811115611702578182fd5b6020830191508360208260051b850101111561171d57600080fd5b9250929050565b8035801515811461173457600080fd5b919050565b60006020828403121561174a578081fd5b813561175581611ae3565b9392505050565b60006020828403121561176d578081fd5b815161175581611ae3565b6000806040838503121561178a578081fd5b823561179581611ae3565b946020939093013593505050565b6000806000604084860312156117b7578081fd5b83356117c281611ae3565b925060208401356001600160401b038111156117dc578182fd5b6117e8868287016116db565b9497909650939450505050565b6000806000806060858703121561180a578081fd5b843561181581611ae3565b935060208501356001600160401b0381111561182f578182fd5b61183b878288016116db565b909450925050604085013561184f81611ae3565b939692955090935050565b600080600080600060808688031215611871578081fd5b853561187c81611ae3565b945060208601356001600160401b03811115611896578182fd5b6118a2888289016116db565b90955093505060408601356118b681611ae3565b915060608601356118c681611ae3565b809150509295509295909350565b600080600080600080600060c0888a0312156118ee578182fd5b87356118f981611ae3565b965060208801356001600160401b03811115611913578283fd5b61191f8a828b016116db565b909750955050604088013561193381611ae3565b935061194160608901611724565b92506080880135915061195660a08901611724565b905092959891949750929550565b6000806040838503121561178a578182fd5b60008060408385031215611988578182fd5b8235915061199860208401611724565b90509250929050565b60008060008060008060a087890312156119b9578182fd5b863595506020870135945060408701356119d281611ae3565b935060608701356001600160401b038111156119ec578283fd5b6119f889828a016116db565b9094509250506080870135611a0c81611ae3565b809150509295509295509295565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60008219821115611a5757611a57611acd565b500190565b600082611a7757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a9657611a96611acd565b500290565b600082821015611aad57611aad611acd565b500390565b6000600019821415611ac657611ac6611acd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611af857600080fd5b5056fea264697066735822122041a2069c48f0944dcea36d94c5ce4fcabf7eb578f7b641d4860d969fa92f821a64736f6c634300080400330000000000000000000000004095547f958593b5431c0306e81df4293991d5b3
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c806387d83bdc116100b8578063d127a98f1161007c578063d127a98f14610355578063d3b861411461036c578063dcfbd0751461037f578063e4aaccab14610388578063f0d5b7db1461039b578063f6b15d8a146103ae57600080fd5b806387d83bdc146102455780639df7d475146102585780639e768ff71461026b578063ba1238a11461027f578063ce55dcaa1461034257600080fd5b8063530389931161010a578063530389931461019d5780635c975abb146101cd57806363a846f8146101e4578063706be11f146102075780638456cb591461021a57806385a972861461022257600080fd5b806309b4084114610147578063249c421a1461015c57806334f0fce01461016f5780633f4ba83a1461018257806349db4ced1461018a575b600080fd5b61015a610155366004611976565b61040a565b005b61015a61016a366004611739565b610456565b61015a61017d3660046118d4565b6104b5565b61015a610625565b61015a6101983660046119a1565b610665565b6007546101b0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60005460ff165b60405190151581526020016101c4565b6101d46101f2366004611739565b60016020526000908152604090205460ff1681565b61015a6102153660046117f5565b61077e565b61015a610a8c565b6101d4610230366004611739565b60026020526000908152604090205460ff1681565b61015a610253366004611739565b610aca565b61015a6102663660046117a3565b610b2c565b6004546101d490600160a01b900460ff1681565b61030861028d366004611778565b6001600160a01b039182166000908152600360209081526040808320938352928152908290208251608081018452905493841680825260ff600160a01b8604811615159383018490526001600160401b03600160a81b870416948301859052600160e81b909504909416151560609091018190529293909290565b604080516001600160a01b03909516855292151560208501526001600160401b0390911691830191909152151560608201526080016101c4565b61015a61035036600461185a565b610e09565b61035e60065481565b6040519081526020016101c4565b61015a61037a366004611739565b611039565b61035e60055481565b61015a6103963660046117a3565b611098565b6004546101b0906001600160a01b031681565b6103086103bc366004611964565b60036020908152600092835260408084209091529082529020546001600160a01b0381169060ff600160a01b82048116916001600160401b03600160a81b82041691600160e81b9091041684565b3360009081526001602081905260409091205460ff1615151461044057604051637bfa4b9f60e01b815260040160405180910390fd5b6001811515146104505750600655565b50600555565b3360009081526001602081905260409091205460ff1615151461048c57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03166000908152600260205260409020805460ff19811660ff90911615179055565b3360009081526001602081905260409091205460ff161515146104eb57604051637bfa4b9f60e01b815260040160405180910390fd5b60005b8581101561061b576040518060800160405280866001600160a01b031681526020018515158152602001846001600160401b03168152602001831515815250600360008a6001600160a01b03166001600160a01b03168152602001908152602001600020600089898581811061057457634e487b7160e01b600052603260045260246000fd5b602090810292909201358352508181019290925260409081016000208351815493850151928501516060909501511515600160e81b0260ff60e81b196001600160401b03909616600160a81b029590951668ffffffffffffffffff60a81b19931515600160a01b026001600160a81b03199095166001600160a01b03909216919091179390931791909116919091179190911790558061061381611ab2565b9150506104ee565b5050505050505050565b3360009081526001602081905260409091205460ff1615151461065b57604051637bfa4b9f60e01b815260040160405180910390fd5b61066361138a565b565b60005460ff16156106915760405162461bcd60e51b815260040161068890611a1a565b60405180910390fd5b33600090815260016020819052604082205460ff161515146106b357336106b5565b815b905082156106c9576106c98585858461077e565b60048054604051632770a7eb60e21b81526001600160a01b038481169382019390935260248101899052911690639dc29fac90604401600060405180830381600087803b15801561071957600080fd5b505af115801561072d573d6000803e3d6000fd5b5050604080518a8152602081018a90526001600160a01b03851693507f1452773cf753d0d7c71ed9990f7c7e2bdde4a2d08d187b3647953877e400488d92500160405180910390a250505050505050565b60005460ff16156107a15760405162461bcd60e51b815260040161068890611a1a565b6001600160a01b03841660009081526002602052604090205460ff1615806107c7575033155b156107e55760405163b4fa3fb360e01b815260040160405180910390fd5b604080516080810182526000808252602082018190529181018290526060810182905233600090815260016020819052604082205460ff1615151461082a573361082c565b835b905060005b85811015610a7257600087878381811061085b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03808d16600090815260036020908152604080832094820296909601358083529381529085902085516080810187529054928316815260ff600160a01b8404811615159282018390526001600160401b03600160a81b85041696820196909652600160e81b90920490941615156060820152965092506109af9050576040516331a9108f60e11b8152600481018290526001600160a01b0380851691908b1690636352211e9060240160206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095b919061175c565b6001600160a01b0316146109825760405163130213c560e21b815260040160405180910390fd5b61099e898260065460065460036109999190611a7c565b61141d565b6109a89086611a44565b9450610a1b565b826001600160a01b031684600001516001600160a01b0316146109e55760405163130213c560e21b815260040160405180910390fd5b6109f48982600554600061141d565b6109fe9086611a44565b945083606001511515600115151415610a1b57610a1b89826114b7565b6001600160a01b038916600090815260036020908152604080832093835292905220805467ffffffffffffffff60a81b1916600160a81b426001600160401b03160217905580610a6a81611ab2565b915050610831565b508215610a8357610a838184611580565b50505050505050565b3360009081526001602081905260409091205460ff16151514610ac257604051637bfa4b9f60e01b815260040160405180910390fd5b6106636115e4565b3360009081526001602081905260409091205460ff16151514610b0057604051637bfa4b9f60e01b815260040160405180910390fd5b600780546001600160a01b039092166001600160a01b0319928316811790915560048054909216179055565b60005460ff1615610b4f5760405162461bcd60e51b815260040161068890611a1a565b604080516080810182526000808252602082018190529181018290526060810182905290805b83811015610df1576000858583818110610b9f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03808b16600090815260036020908152604080832094820296909601358083529381529085902085516080810187529054928316815260ff600160a01b8404811615159282018390526001600160401b03600160a81b85041696820196909652600160e81b9092049094161515606082015296509250610c3b90505760405163b4fa3fb360e01b815260040160405180910390fd5b83516001600160a01b03163314610c655760405163130213c560e21b815260040160405180910390fd5b610c748782600554600061141d565b610c7e9084611a44565b92506040518060800160405280336001600160a01b03168152602001600015158152602001426001600160401b031681526020016000151581525060036000896001600160a01b03166001600160a01b03168152602001908152602001600020600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160000160156101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600001601d6101000a81548160ff021916908315150217905550905050610d9c873086600001518461163c565b6040513380825282916001600160a01b038a1691907f0d4dc35be5fe5ad2ab4068e230049233a0db1b0aaff2a555a8998ada4b1e53f69060200160405180910390a45080610de981611ab2565b915050610b75565b508015610e0257610e023382611580565b5050505050565b3360009081526001602081905260409091205460ff16151514610e3f57604051637bfa4b9f60e01b815260040160405180910390fd5b60005b838110156110315733600090815260016020819052604082205460ff16151514610e6c5733610e6e565b835b604080516080810182526001600160a01b038087168252600060208084018290526001600160401b0342168486015260608401829052918c16815260039091529182209293509190888886818110610ed657634e487b7160e01b600052603260045260246000fd5b602090810292909201358352508181019290925260409081016000208351815493850151928501516060909501511515600160e81b0260ff60e81b196001600160401b03909616600160a81b029590951668ffffffffffffffffff60a81b19931515600160a01b026001600160a81b03199095166001600160a01b0390921691909117939093179190911691909117919091179055610f9d873085898987818110610f9157634e487b7160e01b600052603260045260246000fd5b9050602002013561163c565b858583818110610fbd57634e487b7160e01b600052603260045260246000fd5b90506020020135876001600160a01b0316826001600160a01b03167f0d4dc35be5fe5ad2ab4068e230049233a0db1b0aaff2a555a8998ada4b1e53f68660405161101691906001600160a01b0391909116815260200190565b60405180910390a4508061102981611ab2565b915050610e42565b505050505050565b3360009081526001602081905260409091205460ff1615151461106f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b03166000908152600160205260409020805460ff19811660ff90911615179055565b60005460ff16156110bb5760405162461bcd60e51b815260040161068890611a1a565b6001600160a01b03831660009081526002602052604090205460ff166110f45760405163b4fa3fb360e01b815260040160405180910390fd5b604080516080810182526000808252602082018190529181018290526060810182905260005b8381101561137957600085858381811061114457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03808b16600090815260036020908152604080832094820296909601358083529381529085902085516080810187529054928316815260ff600160a01b840481161515928201929092526001600160401b03600160a81b84041695810195909552600160e81b9091041615156060840181905292955092506111f19050576111e0878260065460065460036109999190611a7c565b6111ea9085611a44565b9350611216565b6112008782600554600061141d565b61120a9085611a44565b935061121687826114b7565b6040518060800160405280336001600160a01b03168152602001600115158152602001426001600160401b031681526020016000151581525060036000896001600160a01b03166001600160a01b03168152602001908152602001600020600083815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160000160156101000a8154816001600160401b0302191690836001600160401b03160217905550606082015181600001601d6101000a81548160ff02191690831515021790555090505061132e8733308461163c565b60405181906001600160a01b0389169033907f25b173d9e82ea1a8609bb3fae1ed3fad6b1d41eba1ac0d7b9d5e2697d0082a3590600090a4508061137181611ab2565b91505061111a565b508115610e0257610e023383611580565b60005460ff166113d35760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610688565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0384166000908152600360209081526040808320868452909152812054819061145e90600160a81b90046001600160401b031685856116a2565b905084866001600160a01b0316336001600160a01b03167f2f6844b46ab717fd5c35cb9274efc74c4348d73109e15891c9de7c3e7b16daf1846040516114a691815260200190565b60405180910390a495945050505050565b6007546040516331a9108f60e11b8152600481018390526001600160a01b0391821691841690636352211e9060240160206040518083038186803b1580156114fe57600080fd5b505afa158015611512573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611536919061175c565b6001600160a01b03161461157c576001600160a01b03821660009081526003602090815260408083208484529091529020805469ff0000000000000000ff60a01b191690555b5050565b600480546040516340c10f1960e01b81526001600160a01b0385811693820193909352602481018490529116906340c10f1990604401600060405180830381600087803b1580156115d057600080fd5b505af1158015611031573d6000803e3d6000fd5b60005460ff16156116075760405162461bcd60e51b815260040161068890611a1a565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114003390565b6040516323b872dd60e01b81526001600160a01b0384811660048301528381166024830152604482018390528516906323b872dd90606401600060405180830381600087803b15801561168e57600080fd5b505af115801561061b573d6000803e3d6000fd5b60008084116116b157816116d3565b62093a806116bf8542611a9b565b6116c99190611a5c565b6116d39084611a7c565b949350505050565b60008083601f8401126116ec578182fd5b5081356001600160401b03811115611702578182fd5b6020830191508360208260051b850101111561171d57600080fd5b9250929050565b8035801515811461173457600080fd5b919050565b60006020828403121561174a578081fd5b813561175581611ae3565b9392505050565b60006020828403121561176d578081fd5b815161175581611ae3565b6000806040838503121561178a578081fd5b823561179581611ae3565b946020939093013593505050565b6000806000604084860312156117b7578081fd5b83356117c281611ae3565b925060208401356001600160401b038111156117dc578182fd5b6117e8868287016116db565b9497909650939450505050565b6000806000806060858703121561180a578081fd5b843561181581611ae3565b935060208501356001600160401b0381111561182f578182fd5b61183b878288016116db565b909450925050604085013561184f81611ae3565b939692955090935050565b600080600080600060808688031215611871578081fd5b853561187c81611ae3565b945060208601356001600160401b03811115611896578182fd5b6118a2888289016116db565b90955093505060408601356118b681611ae3565b915060608601356118c681611ae3565b809150509295509295909350565b600080600080600080600060c0888a0312156118ee578182fd5b87356118f981611ae3565b965060208801356001600160401b03811115611913578283fd5b61191f8a828b016116db565b909750955050604088013561193381611ae3565b935061194160608901611724565b92506080880135915061195660a08901611724565b905092959891949750929550565b6000806040838503121561178a578182fd5b60008060408385031215611988578182fd5b8235915061199860208401611724565b90509250929050565b60008060008060008060a087890312156119b9578182fd5b863595506020870135945060408701356119d281611ae3565b935060608701356001600160401b038111156119ec578283fd5b6119f889828a016116db565b9094509250506080870135611a0c81611ae3565b809150509295509295509295565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60008219821115611a5757611a57611acd565b500190565b600082611a7757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a9657611a96611acd565b500290565b600082821015611aad57611aad611acd565b500390565b6000600019821415611ac657611ac6611acd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611af857600080fd5b5056fea264697066735822122041a2069c48f0944dcea36d94c5ce4fcabf7eb578f7b641d4860d969fa92f821a64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004095547f958593b5431c0306e81df4293991d5b3
-----Decoded View---------------
Arg [0] : oddworxAddress (address): 0x4095547F958593B5431C0306e81df4293991d5B3
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004095547f958593b5431c0306e81df4293991d5b3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.