More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,076 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Batch Stake Unst... | 21565084 | 5 days ago | IN | 0 ETH | 0.0013426 | ||||
Batch Stake Unst... | 21153410 | 62 days ago | IN | 0 ETH | 0.00157544 | ||||
Batch Stake Unst... | 21153404 | 62 days ago | IN | 0 ETH | 0.00158928 | ||||
Batch Stake Unst... | 21153390 | 62 days ago | IN | 0 ETH | 0.00104281 | ||||
Batch Stake Unst... | 20857609 | 103 days ago | IN | 0 ETH | 0.00125476 | ||||
Batch Stake Unst... | 20857423 | 104 days ago | IN | 0 ETH | 0.0022612 | ||||
Batch Stake Unst... | 20605664 | 139 days ago | IN | 0 ETH | 0.00042539 | ||||
Batch Stake Unst... | 20579475 | 142 days ago | IN | 0 ETH | 0.001664 | ||||
Batch Stake Unst... | 20550698 | 146 days ago | IN | 0 ETH | 0.00299106 | ||||
Batch Stake Unst... | 20549679 | 146 days ago | IN | 0 ETH | 0.00032401 | ||||
Batch Stake Unst... | 20547651 | 147 days ago | IN | 0 ETH | 0.00043943 | ||||
Batch Stake Unst... | 20546948 | 147 days ago | IN | 0 ETH | 0.0008093 | ||||
Batch Stake Unst... | 20542434 | 148 days ago | IN | 0 ETH | 0.00075283 | ||||
Batch Stake Unst... | 20515563 | 151 days ago | IN | 0 ETH | 0.00029248 | ||||
Batch Stake Unst... | 20506095 | 153 days ago | IN | 0 ETH | 0.00084682 | ||||
Batch Stake Unst... | 20493470 | 154 days ago | IN | 0 ETH | 0.00232072 | ||||
Batch Stake Unst... | 20493128 | 154 days ago | IN | 0 ETH | 0.00059146 | ||||
Batch Stake Unst... | 20493114 | 154 days ago | IN | 0 ETH | 0.00051546 | ||||
Batch Stake Unst... | 20492969 | 154 days ago | IN | 0 ETH | 0.00062326 | ||||
Batch Stake Unst... | 20492959 | 154 days ago | IN | 0 ETH | 0.00050989 | ||||
Batch Stake Unst... | 20492954 | 154 days ago | IN | 0 ETH | 0.00061546 | ||||
Batch Stake Unst... | 20492948 | 154 days ago | IN | 0 ETH | 0.00062384 | ||||
Batch Stake Unst... | 20492936 | 154 days ago | IN | 0 ETH | 0.00052659 | ||||
Batch Stake Unst... | 20492913 | 154 days ago | IN | 0 ETH | 0.00069545 | ||||
Batch Stake Unst... | 20492768 | 154 days ago | IN | 0 ETH | 0.00102044 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CloneforceStakingManager
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 600 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // Creator: twitter.com/0xNox_ETH // .;::::::::::::::::::::::::::::::;. // ;XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN: // ;XWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMX; // ;KNNNWMMWMMMMMMWWNNNNNNNNNWMMMMMN: // .',oXMMMMMMMNk:''''''''';OMMMMMN: // ,xNMMMMMMNk; l00000k, // .lNMMMMMMNk; ..... // 'dXMMWNO; ....... // 'd0k;. .dXXXXX0; // .,;;:lc;;;;;;;;;;;;;;;;;;c0MMMMMN: // ;XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMX: // ;XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN: // ;XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWX: // .,;,;;;;;;;;;;;;;;;;;;;;;;;,;;,;,. // 'dkxkkxxkkkkkkkkkkkkkkkkkkxxxkxkd' // ;XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN: // ;XMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN: // 'xkkkOOkkkkkkkkkkkkkkkkkkkkkkkkkx' // .,,,,,,,,,,,,,,,,,,,,,. // .lKNWWWWWWWWWWWWWWWWWWWX; // .lKWMMMMMMMMMMMMMMMMMMMMMX; // .lKWMMMMMMMMMMMMMMMMMMMMMMMN: // .lKWMMMMMWKo:::::::::::::::::;. // .lKWMMMMMWKl. // .lNMMMMMWKl. // ;kNMWKl. // ;dl. // // We vow to Protect // Against the powers of Darkness // To rain down Justice // Against all who seek to cause Harm // To heed the call of those in Need // To offer up our Arms // In body and name we give our Code // // FOR THE BLOCKCHAIN ⚔️ pragma solidity ^0.8.17; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/interfaces/IERC721Receiver.sol"; import "@openzeppelin/contracts/interfaces/IERC1155Receiver.sol"; contract CloneforceStakingManager is Ownable, IERC721Receiver, IERC1155Receiver { address private _admin; bool public contractPaused; // Struct for staked tokens struct StakedToken { address token; // address of token contract uint8 tokenType; // 1 = ERC-721, 2 = ERC-1155 uint32 id; // token id uint8 amount; // amount of tokens staked uint256 timestamp; // timestamp of staking } // Holds all staked tokens by users mapping(address => StakedToken[]) public stakedTokensByUser; // Emitted when a user stakes a token event TokenStaked( address indexed user, address indexed token, uint32 indexed id, uint8 tokenType, uint8 amount, uint256 timestamp ); // Emitted when a user unstakes a token event TokenUnstaked( address indexed user, address indexed token, uint32 indexed id, uint8 tokenType, uint8 amount, uint256 timestamp ); // Holds whether a user can stake a specific token type mapping(address => bool) public isAllowedForStaking; mapping(address => bool) private _signatureRequiredToUnstake; address private _signatureKey; mapping(string => bool) private _usedNonces; constructor(address admin, address signatureKey) { _admin = admin; _signatureKey = signatureKey; } modifier callerIsUser() { require(tx.origin == msg.sender, "Caller is another contract"); _; } modifier onlyOwnerOrAdmin() { require(msg.sender == owner() || msg.sender == _admin, "Not owner or admin"); _; } function setAdmin(address admin) external onlyOwner { _admin = admin; } function pauseContract(bool paused) external onlyOwnerOrAdmin { contractPaused = paused; } function setAllowedForStaking( address token, bool allowed, bool requireSigToUnstake ) external onlyOwnerOrAdmin { isAllowedForStaking[token] = allowed; _signatureRequiredToUnstake[token] = requireSigToUnstake; } function depositERC721Token(address token, uint32 id) private { // check if token is owned by user require(IERC721(token).ownerOf(id) == msg.sender, "Token not owned by user"); // transfer token to contract IERC721(token).safeTransferFrom(msg.sender, address(this), id); } function depositERC1155Token(address token, uint32 id, uint8 amount) private { // check if token is owned by user require( IERC1155(token).balanceOf(msg.sender, id) >= amount, "Not enough tokens owned by user" ); // transfer token to contract IERC1155(token).safeTransferFrom(msg.sender, address(this), id, amount, ""); } function stakeToken( address token, uint8 tokenType, uint32 id, uint8 amount ) public callerIsUser { require(!contractPaused, "Contract paused"); require(isAllowedForStaking[token], "Token not allowed for staking"); require(tokenType == 1 || tokenType == 2, "Invalid token type"); require(amount > 0, "Amount must be greater than 0"); if (tokenType == 1) { require(amount == 1, "Amount must be 1 for ERC-721"); depositERC721Token(token, id); } else { depositERC1155Token(token, id, amount); } // add token to user's staked tokens stakedTokensByUser[msg.sender].push( StakedToken(token, tokenType, id, amount, block.timestamp) ); emit TokenStaked(msg.sender, token, id, tokenType, amount, block.timestamp); } function withdrawERC721Token(address token, uint32 id) private { // transfer token to user IERC721(token).safeTransferFrom(address(this), msg.sender, id); } function withdrawERC1155Token(address token, uint32 id, uint8 amount) private { // transfer token to user IERC1155(token).safeTransferFrom(address(this), msg.sender, id, amount, ""); } function unstakeToken( address token, uint8 tokenType, uint32 id, uint8 amount, string calldata nonce, bytes memory signature ) public callerIsUser { require(!contractPaused, "Contract paused"); require(tokenType == 1 || tokenType == 2, "Invalid token type"); require(amount > 0, "Amount must be greater than 0"); // if signature required, check signature if (_signatureRequiredToUnstake[token]) { require(!_usedNonces[nonce], "Nonce already used"); bytes32 r; bytes32 s; uint8 v; assembly { r := mload(add(signature, 32)) s := mload(add(signature, 64)) v := byte(0, mload(add(signature, 96))) } bytes32 _hash = keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n32", keccak256(abi.encodePacked(token, tokenType, id, amount, nonce)) ) ); require(ecrecover(_hash, v, r, s) == _signatureKey, "Invalid signature"); _usedNonces[nonce] = true; } // get user's staked tokens StakedToken[] storage stakedTokens = stakedTokensByUser[msg.sender]; // find token in user's staked tokens uint256 index = stakedTokens.length; for (uint256 i = 0; i < stakedTokens.length; i++) { if ( stakedTokens[i].token == token && stakedTokens[i].tokenType == tokenType && stakedTokens[i].id == id ) { index = i; break; } } // check if token was found require(index < stakedTokens.length, "Token not found"); uint stakedAmount = stakedTokens[index].amount; require(stakedAmount >= amount, "Not enough tokens staked"); if (tokenType == 1) { require(amount == 1, "Amount must be 1 for ERC-721"); withdrawERC721Token(token, id); } else { withdrawERC1155Token(token, id, amount); } // remove `amount` of tokens from user's staked tokens if (stakedAmount > amount) { stakedTokens[index].amount -= amount; } else { stakedTokens[index] = stakedTokens[stakedTokens.length - 1]; stakedTokens.pop(); } emit TokenUnstaked(msg.sender, token, id, tokenType, amount, block.timestamp); } struct StakeUnstakeTokenParams { address token; uint8 tokenType; uint32 id; uint8 amount; string nonce; bytes signature; } struct BatchOperationParam { StakeUnstakeTokenParams params; bool stake; } function batchStakeUnstakeTokens(BatchOperationParam[] calldata params) external callerIsUser { for (uint256 i = 0; i < params.length; i++) { if (params[i].stake) { stakeToken( params[i].params.token, params[i].params.tokenType, params[i].params.id, params[i].params.amount ); } else { unstakeToken( params[i].params.token, params[i].params.tokenType, params[i].params.id, params[i].params.amount, params[i].params.nonce, params[i].params.signature ); } } } function getStakedTokens(address user) external view returns (StakedToken[] memory) { return stakedTokensByUser[user]; } function areNoncesUsed(string[] calldata nonces) external view returns (bool[] memory) { bool[] memory isUsed = new bool[](nonces.length); for (uint256 i = 0; i < nonces.length; i++) { isUsed[i] = _usedNonces[nonces[i]]; } return isUsed; } function setSignatureKey(address signatureKey) external onlyOwner { _signatureKey = signatureKey; } // Emergency withdraw token from contract. Only owner or admin can call this function. // Will be used in case someone sends tokens to contract by mistake. function emergencyWithdrawToken( uint8 tokenType, address token, uint32 id, uint8 amount, address receiver ) external onlyOwnerOrAdmin { require(tokenType == 1 || tokenType == 2, "Invalid token type"); // if token is staked, find it and unstake it bool staked = false; for (uint256 idx = 0; idx < stakedTokensByUser[receiver].length; idx++) { if ( stakedTokensByUser[receiver][idx].token == token && stakedTokensByUser[receiver][idx].tokenType == tokenType && stakedTokensByUser[receiver][idx].id == id ) { uint stakedAmount = stakedTokensByUser[receiver][idx].amount; require(stakedAmount >= amount, "Not enough tokens staked"); if (stakedAmount > amount) { stakedTokensByUser[receiver][idx].amount -= amount; } else { stakedTokensByUser[receiver][idx] = stakedTokensByUser[receiver][ stakedTokensByUser[receiver].length - 1 ]; stakedTokensByUser[receiver].pop(); } staked = true; break; } } if (tokenType == 1) { require(amount == 1, "Amount must be 1 for ERC-721"); IERC721(token).safeTransferFrom(address(this), receiver, id); } else { IERC1155(token).safeTransferFrom(address(this), receiver, id, amount, ""); } if (staked) { emit TokenUnstaked(receiver, token, id, tokenType, amount, block.timestamp); } } // IERC721Receiver and IERC1155Receiver functions function onERC721Received( address, address, uint256, bytes calldata ) external pure returns (bytes4) { return this.onERC721Received.selector; } function onERC1155Received( address, address, uint256, uint256, bytes calldata ) external pure returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] calldata, uint256[] calldata, bytes calldata ) external pure returns (bytes4) { return this.onERC1155BatchReceived.selector; } function supportsInterface(bytes4 interfaceId) public pure override returns (bool) { return interfaceId == type(IERC721Receiver).interfaceId || interfaceId == type(IERC1155Receiver).interfaceId || interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../token/ERC1155/IERC1155Receiver.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Receiver.sol) pragma solidity ^0.8.0; import "../token/ERC721/IERC721Receiver.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (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`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: 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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.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/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 (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts 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": 600 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"signatureKey","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint32","name":"id","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"amount","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint32","name":"id","type":"uint32"},{"indexed":false,"internalType":"uint8","name":"tokenType","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"amount","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokenUnstaked","type":"event"},{"inputs":[{"internalType":"string[]","name":"nonces","type":"string[]"}],"name":"areNoncesUsed","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint8","name":"tokenType","type":"uint8"},{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"string","name":"nonce","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct CloneforceStakingManager.StakeUnstakeTokenParams","name":"params","type":"tuple"},{"internalType":"bool","name":"stake","type":"bool"}],"internalType":"struct CloneforceStakingManager.BatchOperationParam[]","name":"params","type":"tuple[]"}],"name":"batchStakeUnstakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"tokenType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"address","name":"receiver","type":"address"}],"name":"emergencyWithdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStakedTokens","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint8","name":"tokenType","type":"uint8"},{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct CloneforceStakingManager.StakedToken[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAllowedForStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"bool","name":"requireSigToUnstake","type":"bool"}],"name":"setAllowedForStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signatureKey","type":"address"}],"name":"setSignatureKey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint8","name":"tokenType","type":"uint8"},{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint8","name":"amount","type":"uint8"}],"name":"stakeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakedTokensByUser","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint8","name":"tokenType","type":"uint8"},{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint8","name":"tokenType","type":"uint8"},{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint8","name":"amount","type":"uint8"},{"internalType":"string","name":"nonce","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"unstakeToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002a9f38038062002a9f8339810160408190526200003491620000de565b6200003f3362000071565b600180546001600160a01b039384166001600160a01b0319918216179091556005805492909316911617905562000116565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000d957600080fd5b919050565b60008060408385031215620000f257600080fd5b620000fd83620000c1565b91506200010d60208401620000c1565b90509250929050565b61297980620001266000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063881cf4f4116100cd578063dc5b804a11610081578063e7b0e96a11610066578063e7b0e96a14610367578063f23a6e611461037a578063f2fde38b1461039a57600080fd5b8063dc5b804a14610334578063e272b8921461035457600080fd5b80638da5cb5b116100b25780638da5cb5b146102e45780638f0b81ab146102ff578063bc197c811461031257600080fd5b8063881cf4f41461027d5780638a67456a146102d057600080fd5b806363c28db1116101245780636aac241e116101095780636aac241e1461024f578063704b6c0214610262578063715018a61461027557600080fd5b806363c28db11461021c578063686456fa1461023c57600080fd5b806311c6c74c1161015557806311c6c74c146101ae578063150b7a02146101d1578063401c2bb81461020957600080fd5b806301c203fd1461017157806301ffc9a714610186575b600080fd5b61018461017f36600461217b565b6103ad565b005b61019961019436600461229b565b610b4d565b60405190151581526020015b60405180910390f35b6101996101bc3660046122cc565b60036020526000908152604090205460ff1681565b6101f06101df3660046122e9565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101a5565b6101846102173660046122cc565b610b9f565b61022f61022a3660046122cc565b610bc9565b6040516101a5919061235c565b61018461024a366004612426565b610c88565b61018461025d366004612468565b610fe2565b6101846102703660046122cc565b61162d565b610184611657565b61029061028b3660046124d3565b61166b565b604080516001600160a01b03909616865260ff948516602087015263ffffffff90931692850192909252919091166060830152608082015260a0016101a5565b60015461019990600160a01b900460ff1681565b6000546040516001600160a01b0390911681526020016101a5565b61018461030d36600461250f565b6116d2565b6101f0610320366004612554565b63bc197c8160e01b98975050505050505050565b610347610342366004612426565b611778565b6040516101a59190612613565b610184610362366004612659565b611854565b610184610375366004612674565b6118e7565b6101f06103883660046126ca565b63f23a6e6160e01b9695505050505050565b6101846103a83660046122cc565b611cac565b3233146104015760405162461bcd60e51b815260206004820152601a60248201527f43616c6c657220697320616e6f7468657220636f6e747261637400000000000060448201526064015b60405180910390fd5b600154600160a01b900460ff161561044d5760405162461bcd60e51b815260206004820152600f60248201526e10dbdb9d1c9858dd081c185d5cd959608a1b60448201526064016103f8565b8560ff166001148061046257508560ff166002145b6104a35760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420746f6b656e207479706560701b60448201526064016103f8565b60008460ff16116104f65760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016103f8565b6001600160a01b03871660009081526004602052604090205460ff16156107155760068383604051610529929190612746565b9081526040519081900360200190205460ff16156105895760405162461bcd60e51b815260206004820152601260248201527f4e6f6e636520616c72656164792075736564000000000000000000000000000060448201526064016103f8565b6020818101516040808401516060850151915192939092600092831a92916105bd918d918d918d918d918d918d9101612756565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c0160408051808303601f1901815282825280516020918201206005546000855291840180845281905260ff86169284019290925260608301879052608083018690529092506001600160a01b03169060019060a0016020604051602081039080840390855afa15801561067c573d6000803e3d6000fd5b505050602060405103516001600160a01b0316146106dc5760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e617475726500000000000000000000000000000060448201526064016103f8565b6001600688886040516106f0929190612746565b908152604051908190036020019020805491151560ff19909216919091179055505050505b336000908152600260205260408120805490915b825481101561080257896001600160a01b031683828154811061074e5761074e6127d3565b60009182526020909120600290910201546001600160a01b03161480156107a357508860ff16838281548110610786576107866127d3565b6000918252602090912060029091020154600160a01b900460ff16145b80156107e357508763ffffffff168382815481106107c3576107c36127d3565b6000918252602090912060029091020154600160a81b900463ffffffff16145b156107f057809150610802565b806107fa816127ff565b915050610729565b50815481106108535760405162461bcd60e51b815260206004820152600f60248201527f546f6b656e206e6f7420666f756e64000000000000000000000000000000000060448201526064016103f8565b6000828281548110610867576108676127d3565b600091825260209091206002909102015460ff600160c81b9091048116915087168110156108d75760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f75676820746f6b656e73207374616b6564000000000000000060448201526064016103f8565b8860ff16600103610944578660ff166001146109355760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e74206d757374206265203120666f72204552432d3732310000000060448201526064016103f8565b61093f8a89611d25565b61094f565b61094f8a8989611d8d565b8660ff168111156109b4578683838154811061096d5761096d6127d3565b600091825260209091206002909102018054601990610997908490600160c81b900460ff16612818565b92506101000a81548160ff021916908360ff160217905550610ae8565b825483906109c490600190612831565b815481106109d4576109d46127d3565b90600052602060002090600202018383815481106109f4576109f46127d3565b60009182526020909120825460029092020180546001600160a01b039092166001600160a01b0319831681178255835474ffffffffffffffffffffffffffffffffffffffffff1990931617600160a01b9283900460ff90811690930217808255835463ffffffff60a81b198216600160a81b9182900463ffffffff169091029081178355845464ffffffffff60a81b1990921660ff60c81b1990911617600160c81b91829004909316029190911781556001918201549101558254839080610abe57610abe612844565b60008281526020812060026000199093019283020180546001600160d01b03191681556001015590555b6040805160ff8b81168252891660208201524281830152905163ffffffff8a16916001600160a01b038d169133917fa46b1ba015d9ade929e123d1e2fe9daac52c1b5fefd707a36ec4f79ab2e978eb919081900360600190a450505050505050505050565b60006001600160e01b03198216630a85bd0160e11b1480610b7e57506001600160e01b03198216630271189760e51b145b80610b9957506001600160e01b031982166301ffc9a760e01b145b92915050565b610ba7611e15565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610c7d5760008481526020908190206040805160a0810182526002860290920180546001600160a01b038116845260ff600160a01b820481168587015263ffffffff600160a81b83041693850193909352600160c81b9004909116606083015260019081015460808301529083529092019101610c01565b505050509050919050565b323314610cd75760405162461bcd60e51b815260206004820152601a60248201527f43616c6c657220697320616e6f7468657220636f6e747261637400000000000060448201526064016103f8565b60005b81811015610fdd57828282818110610cf457610cf46127d3565b9050602002810190610d06919061285a565b610d17906040810190602001612659565b15610e1d57610e18838383818110610d3157610d316127d3565b9050602002810190610d43919061285a565b610d4d908061287a565b610d5b9060208101906122cc565b848484818110610d6d57610d6d6127d3565b9050602002810190610d7f919061285a565b610d89908061287a565b610d9a906040810190602001612890565b858585818110610dac57610dac6127d3565b9050602002810190610dbe919061285a565b610dc8908061287a565b610dd99060608101906040016128ab565b868686818110610deb57610deb6127d3565b9050602002810190610dfd919061285a565b610e07908061287a565b610375906080810190606001612890565b610fcb565b610fcb838383818110610e3257610e326127d3565b9050602002810190610e44919061285a565b610e4e908061287a565b610e5c9060208101906122cc565b848484818110610e6e57610e6e6127d3565b9050602002810190610e80919061285a565b610e8a908061287a565b610e9b906040810190602001612890565b858585818110610ead57610ead6127d3565b9050602002810190610ebf919061285a565b610ec9908061287a565b610eda9060608101906040016128ab565b868686818110610eec57610eec6127d3565b9050602002810190610efe919061285a565b610f08908061287a565b610f19906080810190606001612890565b878787818110610f2b57610f2b6127d3565b9050602002810190610f3d919061285a565b610f47908061287a565b610f559060808101906128c6565b898989818110610f6757610f676127d3565b9050602002810190610f79919061285a565b610f83908061287a565b610f919060a08101906128c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103ad92505050565b80610fd5816127ff565b915050610cda565b505050565b6000546001600160a01b031633148061100557506001546001600160a01b031633145b6110465760405162461bcd60e51b81526020600482015260126024820152712737ba1037bbb732b91037b91030b236b4b760711b60448201526064016103f8565b8460ff166001148061105b57508460ff166002145b61109c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420746f6b656e207479706560701b60448201526064016103f8565b6000805b6001600160a01b03831660009081526002602052604090205481101561146c576001600160a01b038381166000908152600260205260409020805491881691839081106110ef576110ef6127d3565b60009182526020909120600290910201546001600160a01b031614801561115e57506001600160a01b0383166000908152600260205260409020805460ff8916919083908110611141576111416127d3565b6000918252602090912060029091020154600160a01b900460ff16145b80156111b857506001600160a01b0383166000908152600260205260409020805463ffffffff8716919083908110611198576111986127d3565b6000918252602090912060029091020154600160a81b900463ffffffff16145b1561145a576001600160a01b03831660009081526002602052604081208054839081106111e7576111e76127d3565b600091825260209091206002909102015460ff600160c81b9091048116915085168110156112575760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f75676820746f6b656e73207374616b6564000000000000000060448201526064016103f8565b8460ff168111156112d6576001600160a01b038416600090815260026020526040902080548691908490811061128f5761128f6127d3565b6000918252602090912060029091020180546019906112b9908490600160c81b900460ff16612818565b92506101000a81548160ff021916908360ff160217905550611450565b6001600160a01b038416600090815260026020526040902080546112fc90600190612831565b8154811061130c5761130c6127d3565b906000526020600020906002020160026000866001600160a01b03166001600160a01b031681526020019081526020016000208381548110611350576113506127d3565b600091825260208083208454600293840290910180546001600160a01b039283166001600160a01b0319821681178355875474ffffffffffffffffffffffffffffffffffffffffff1990921617600160a01b9182900460ff90811690920217808355875463ffffffff60a81b198216600160a81b9182900463ffffffff169091029081178455885464ffffffffff60a81b1990921660ff60c81b1990911617600160c81b918290049092160217815560019586015495019490945592871682529091526040902080548061142657611426612844565b60008281526020812060026000199093019283020180546001600160d01b03191681556001015590555b600192505061146c565b80611464816127ff565b9150506110a0565b508560ff1660010361153d578260ff166001146114cb5760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e74206d757374206265203120666f72204552432d3732310000000060448201526064016103f8565b604051632142170760e11b81523060048201526001600160a01b03838116602483015263ffffffff861660448301528616906342842e0e90606401600060405180830381600087803b15801561152057600080fd5b505af1158015611534573d6000803e3d6000fd5b505050506115c2565b604051637921219560e11b81523060048201526001600160a01b03838116602483015263ffffffff8616604483015260ff8516606483015260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156115a957600080fd5b505af11580156115bd573d6000803e3d6000fd5b505050505b8015611625576040805160ff8881168252851660208201524281830152905163ffffffff8616916001600160a01b0388811692908616917fa46b1ba015d9ade929e123d1e2fe9daac52c1b5fefd707a36ec4f79ab2e978eb919081900360600190a45b505050505050565b611635611e15565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61165f611e15565b6116696000611e6f565b565b6002602052816000526040600020818154811061168757600080fd5b6000918252602090912060029091020180546001909101546001600160a01b038216935060ff600160a01b83048116935063ffffffff600160a81b84041692600160c81b9004169085565b6000546001600160a01b03163314806116f557506001546001600160a01b031633145b6117365760405162461bcd60e51b81526020600482015260126024820152712737ba1037bbb732b91037b91030b236b4b760711b60448201526064016103f8565b6001600160a01b039092166000908152600360209081526040808320805494151560ff1995861617905560049091529020805492151592909116919091179055565b606060008267ffffffffffffffff81111561179557611795612165565b6040519080825280602002602001820160405280156117be578160200160208202803683370190505b50905060005b8381101561184c5760068585838181106117e0576117e06127d3565b90506020028101906117f291906128c6565b604051611800929190612746565b90815260405190819003602001902054825160ff9091169083908390811061182a5761182a6127d3565b9115156020928302919091019091015280611844816127ff565b9150506117c4565b509392505050565b6000546001600160a01b031633148061187757506001546001600160a01b031633145b6118b85760405162461bcd60e51b81526020600482015260126024820152712737ba1037bbb732b91037b91030b236b4b760711b60448201526064016103f8565b60018054911515600160a01b0274ff000000000000000000000000000000000000000019909216919091179055565b3233146119365760405162461bcd60e51b815260206004820152601a60248201527f43616c6c657220697320616e6f7468657220636f6e747261637400000000000060448201526064016103f8565b600154600160a01b900460ff16156119825760405162461bcd60e51b815260206004820152600f60248201526e10dbdb9d1c9858dd081c185d5cd959608a1b60448201526064016103f8565b6001600160a01b03841660009081526003602052604090205460ff166119ea5760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e206e6f7420616c6c6f77656420666f72207374616b696e6700000060448201526064016103f8565b8260ff16600114806119ff57508260ff166002145b611a405760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420746f6b656e207479706560701b60448201526064016103f8565b60008160ff1611611a935760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016103f8565b8260ff16600103611b00578060ff16600114611af15760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e74206d757374206265203120666f72204552432d3732310000000060448201526064016103f8565b611afb8483611ebf565b611b0b565b611b0b848383611fc3565b60026000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060a00160405280866001600160a01b031681526020018560ff1681526020018463ffffffff1681526020018360ff16815260200142815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548160ff021916908360ff16021790555060408201518160000160156101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160196101000a81548160ff021916908360ff1602179055506080820151816001015550508163ffffffff16846001600160a01b0316336001600160a01b03167f16de172a9e3702b4a73cba61fd470c48c88d0907c2d60db87086a68fa1dc6f35868542604051611c9e9392919060ff9384168152919092166020820152604081019190915260600190565b60405180910390a450505050565b611cb4611e15565b6001600160a01b038116611d195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103f8565b611d2281611e6f565b50565b604051632142170760e11b815230600482015233602482015263ffffffff821660448201526001600160a01b038316906342842e0e906064015b600060405180830381600087803b158015611d7957600080fd5b505af1158015611625573d6000803e3d6000fd5b604051637921219560e11b815230600482015233602482015263ffffffff8316604482015260ff8216606482015260a06084820152600060a48201526001600160a01b0384169063f242432a9060c4015b600060405180830381600087803b158015611df857600080fd5b505af1158015611e0c573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146116695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103f8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516331a9108f60e11b815263ffffffff8216600482015233906001600160a01b03841690636352211e90602401602060405180830381865afa158015611f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2f919061290d565b6001600160a01b031614611f855760405162461bcd60e51b815260206004820152601760248201527f546f6b656e206e6f74206f776e6564206279207573657200000000000000000060448201526064016103f8565b604051632142170760e11b815233600482015230602482015263ffffffff821660448201526001600160a01b038316906342842e0e90606401611d5f565b604051627eeac760e11b815233600482015263ffffffff8316602482015260ff8216906001600160a01b0385169062fdd58e90604401602060405180830381865afa158015612016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203a919061292a565b10156120885760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f75676820746f6b656e73206f776e656420627920757365720060448201526064016103f8565b604051637921219560e11b815233600482015230602482015263ffffffff8316604482015260ff8216606482015260a06084820152600060a48201526001600160a01b0384169063f242432a9060c401611dde565b6001600160a01b0381168114611d2257600080fd5b803560ff8116811461210357600080fd5b919050565b803563ffffffff8116811461210357600080fd5b60008083601f84011261212e57600080fd5b50813567ffffffffffffffff81111561214657600080fd5b60208301915083602082850101111561215e57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060c0888a03121561219657600080fd5b87356121a1816120dd565b96506121af602089016120f2565b95506121bd60408901612108565b94506121cb606089016120f2565b9350608088013567ffffffffffffffff808211156121e857600080fd5b6121f48b838c0161211c565b909550935060a08a013591508082111561220d57600080fd5b818a0191508a601f83011261222157600080fd5b81358181111561223357612233612165565b604051601f8201601f19908116603f0116810190838211818310171561225b5761225b612165565b816040528281528d602084870101111561227457600080fd5b82602086016020830137600060208483010152809550505050505092959891949750929550565b6000602082840312156122ad57600080fd5b81356001600160e01b0319811681146122c557600080fd5b9392505050565b6000602082840312156122de57600080fd5b81356122c5816120dd565b60008060008060006080868803121561230157600080fd5b853561230c816120dd565b9450602086013561231c816120dd565b935060408601359250606086013567ffffffffffffffff81111561233f57600080fd5b61234b8882890161211c565b969995985093965092949392505050565b602080825282518282018190526000919060409081850190868401855b828110156123d457815180516001600160a01b031685528681015160ff908116888701528682015163ffffffff1687870152606080830151909116908601526080908101519085015260a09093019290850190600101612379565b5091979650505050505050565b60008083601f8401126123f357600080fd5b50813567ffffffffffffffff81111561240b57600080fd5b6020830191508360208260051b850101111561215e57600080fd5b6000806020838503121561243957600080fd5b823567ffffffffffffffff81111561245057600080fd5b61245c858286016123e1565b90969095509350505050565b600080600080600060a0868803121561248057600080fd5b612489866120f2565b94506020860135612499816120dd565b93506124a760408701612108565b92506124b5606087016120f2565b915060808601356124c5816120dd565b809150509295509295909350565b600080604083850312156124e657600080fd5b82356124f1816120dd565b946020939093013593505050565b8035801515811461210357600080fd5b60008060006060848603121561252457600080fd5b833561252f816120dd565b925061253d602085016124ff565b915061254b604085016124ff565b90509250925092565b60008060008060008060008060a0898b03121561257057600080fd5b883561257b816120dd565b9750602089013561258b816120dd565b9650604089013567ffffffffffffffff808211156125a857600080fd5b6125b48c838d016123e1565b909850965060608b01359150808211156125cd57600080fd5b6125d98c838d016123e1565b909650945060808b01359150808211156125f257600080fd5b506125ff8b828c0161211c565b999c989b5096995094979396929594505050565b6020808252825182820181905260009190848201906040850190845b8181101561264d57835115158352928401929184019160010161262f565b50909695505050505050565b60006020828403121561266b57600080fd5b6122c5826124ff565b6000806000806080858703121561268a57600080fd5b8435612695816120dd565b93506126a3602086016120f2565b92506126b160408601612108565b91506126bf606086016120f2565b905092959194509250565b60008060008060008060a087890312156126e357600080fd5b86356126ee816120dd565b955060208701356126fe816120dd565b94506040870135935060608701359250608087013567ffffffffffffffff81111561272857600080fd5b61273489828a0161211c565b979a9699509497509295939492505050565b8183823760009101908152919050565b6bffffffffffffffffffffffff19606088901b1681527fff0000000000000000000000000000000000000000000000000000000000000060f887811b821660148401526001600160e01b031960e088901b16601584015285901b16601982015260008284601a8401375060009101601a0190815295945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612811576128116127e9565b5060010190565b60ff8281168282160390811115610b9957610b996127e9565b81810381811115610b9957610b996127e9565b634e487b7160e01b600052603160045260246000fd5b60008235603e1983360301811261287057600080fd5b9190910192915050565b6000823560be1983360301811261287057600080fd5b6000602082840312156128a257600080fd5b6122c5826120f2565b6000602082840312156128bd57600080fd5b6122c582612108565b6000808335601e198436030181126128dd57600080fd5b83018035915067ffffffffffffffff8211156128f857600080fd5b60200191503681900382131561215e57600080fd5b60006020828403121561291f57600080fd5b81516122c5816120dd565b60006020828403121561293c57600080fd5b505191905056fea26469706673582212204277311a375a1ad6e6f056abd3dddc8685f227df61f9e7856dbf1dc6f80652a264736f6c634300081100330000000000000000000000003be3a8613dc18554a73773a5bfb8e9819d360dc00000000000000000000000001aaf6d89cfd593f8d2b937e3b3383d8f3a84cf73
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061016c5760003560e01c8063881cf4f4116100cd578063dc5b804a11610081578063e7b0e96a11610066578063e7b0e96a14610367578063f23a6e611461037a578063f2fde38b1461039a57600080fd5b8063dc5b804a14610334578063e272b8921461035457600080fd5b80638da5cb5b116100b25780638da5cb5b146102e45780638f0b81ab146102ff578063bc197c811461031257600080fd5b8063881cf4f41461027d5780638a67456a146102d057600080fd5b806363c28db1116101245780636aac241e116101095780636aac241e1461024f578063704b6c0214610262578063715018a61461027557600080fd5b806363c28db11461021c578063686456fa1461023c57600080fd5b806311c6c74c1161015557806311c6c74c146101ae578063150b7a02146101d1578063401c2bb81461020957600080fd5b806301c203fd1461017157806301ffc9a714610186575b600080fd5b61018461017f36600461217b565b6103ad565b005b61019961019436600461229b565b610b4d565b60405190151581526020015b60405180910390f35b6101996101bc3660046122cc565b60036020526000908152604090205460ff1681565b6101f06101df3660046122e9565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101a5565b6101846102173660046122cc565b610b9f565b61022f61022a3660046122cc565b610bc9565b6040516101a5919061235c565b61018461024a366004612426565b610c88565b61018461025d366004612468565b610fe2565b6101846102703660046122cc565b61162d565b610184611657565b61029061028b3660046124d3565b61166b565b604080516001600160a01b03909616865260ff948516602087015263ffffffff90931692850192909252919091166060830152608082015260a0016101a5565b60015461019990600160a01b900460ff1681565b6000546040516001600160a01b0390911681526020016101a5565b61018461030d36600461250f565b6116d2565b6101f0610320366004612554565b63bc197c8160e01b98975050505050505050565b610347610342366004612426565b611778565b6040516101a59190612613565b610184610362366004612659565b611854565b610184610375366004612674565b6118e7565b6101f06103883660046126ca565b63f23a6e6160e01b9695505050505050565b6101846103a83660046122cc565b611cac565b3233146104015760405162461bcd60e51b815260206004820152601a60248201527f43616c6c657220697320616e6f7468657220636f6e747261637400000000000060448201526064015b60405180910390fd5b600154600160a01b900460ff161561044d5760405162461bcd60e51b815260206004820152600f60248201526e10dbdb9d1c9858dd081c185d5cd959608a1b60448201526064016103f8565b8560ff166001148061046257508560ff166002145b6104a35760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420746f6b656e207479706560701b60448201526064016103f8565b60008460ff16116104f65760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016103f8565b6001600160a01b03871660009081526004602052604090205460ff16156107155760068383604051610529929190612746565b9081526040519081900360200190205460ff16156105895760405162461bcd60e51b815260206004820152601260248201527f4e6f6e636520616c72656164792075736564000000000000000000000000000060448201526064016103f8565b6020818101516040808401516060850151915192939092600092831a92916105bd918d918d918d918d918d918d9101612756565b60408051601f198184030181529082905280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000091830191909152603c820152605c0160408051808303601f1901815282825280516020918201206005546000855291840180845281905260ff86169284019290925260608301879052608083018690529092506001600160a01b03169060019060a0016020604051602081039080840390855afa15801561067c573d6000803e3d6000fd5b505050602060405103516001600160a01b0316146106dc5760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e617475726500000000000000000000000000000060448201526064016103f8565b6001600688886040516106f0929190612746565b908152604051908190036020019020805491151560ff19909216919091179055505050505b336000908152600260205260408120805490915b825481101561080257896001600160a01b031683828154811061074e5761074e6127d3565b60009182526020909120600290910201546001600160a01b03161480156107a357508860ff16838281548110610786576107866127d3565b6000918252602090912060029091020154600160a01b900460ff16145b80156107e357508763ffffffff168382815481106107c3576107c36127d3565b6000918252602090912060029091020154600160a81b900463ffffffff16145b156107f057809150610802565b806107fa816127ff565b915050610729565b50815481106108535760405162461bcd60e51b815260206004820152600f60248201527f546f6b656e206e6f7420666f756e64000000000000000000000000000000000060448201526064016103f8565b6000828281548110610867576108676127d3565b600091825260209091206002909102015460ff600160c81b9091048116915087168110156108d75760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f75676820746f6b656e73207374616b6564000000000000000060448201526064016103f8565b8860ff16600103610944578660ff166001146109355760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e74206d757374206265203120666f72204552432d3732310000000060448201526064016103f8565b61093f8a89611d25565b61094f565b61094f8a8989611d8d565b8660ff168111156109b4578683838154811061096d5761096d6127d3565b600091825260209091206002909102018054601990610997908490600160c81b900460ff16612818565b92506101000a81548160ff021916908360ff160217905550610ae8565b825483906109c490600190612831565b815481106109d4576109d46127d3565b90600052602060002090600202018383815481106109f4576109f46127d3565b60009182526020909120825460029092020180546001600160a01b039092166001600160a01b0319831681178255835474ffffffffffffffffffffffffffffffffffffffffff1990931617600160a01b9283900460ff90811690930217808255835463ffffffff60a81b198216600160a81b9182900463ffffffff169091029081178355845464ffffffffff60a81b1990921660ff60c81b1990911617600160c81b91829004909316029190911781556001918201549101558254839080610abe57610abe612844565b60008281526020812060026000199093019283020180546001600160d01b03191681556001015590555b6040805160ff8b81168252891660208201524281830152905163ffffffff8a16916001600160a01b038d169133917fa46b1ba015d9ade929e123d1e2fe9daac52c1b5fefd707a36ec4f79ab2e978eb919081900360600190a450505050505050505050565b60006001600160e01b03198216630a85bd0160e11b1480610b7e57506001600160e01b03198216630271189760e51b145b80610b9957506001600160e01b031982166301ffc9a760e01b145b92915050565b610ba7611e15565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600260209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610c7d5760008481526020908190206040805160a0810182526002860290920180546001600160a01b038116845260ff600160a01b820481168587015263ffffffff600160a81b83041693850193909352600160c81b9004909116606083015260019081015460808301529083529092019101610c01565b505050509050919050565b323314610cd75760405162461bcd60e51b815260206004820152601a60248201527f43616c6c657220697320616e6f7468657220636f6e747261637400000000000060448201526064016103f8565b60005b81811015610fdd57828282818110610cf457610cf46127d3565b9050602002810190610d06919061285a565b610d17906040810190602001612659565b15610e1d57610e18838383818110610d3157610d316127d3565b9050602002810190610d43919061285a565b610d4d908061287a565b610d5b9060208101906122cc565b848484818110610d6d57610d6d6127d3565b9050602002810190610d7f919061285a565b610d89908061287a565b610d9a906040810190602001612890565b858585818110610dac57610dac6127d3565b9050602002810190610dbe919061285a565b610dc8908061287a565b610dd99060608101906040016128ab565b868686818110610deb57610deb6127d3565b9050602002810190610dfd919061285a565b610e07908061287a565b610375906080810190606001612890565b610fcb565b610fcb838383818110610e3257610e326127d3565b9050602002810190610e44919061285a565b610e4e908061287a565b610e5c9060208101906122cc565b848484818110610e6e57610e6e6127d3565b9050602002810190610e80919061285a565b610e8a908061287a565b610e9b906040810190602001612890565b858585818110610ead57610ead6127d3565b9050602002810190610ebf919061285a565b610ec9908061287a565b610eda9060608101906040016128ab565b868686818110610eec57610eec6127d3565b9050602002810190610efe919061285a565b610f08908061287a565b610f19906080810190606001612890565b878787818110610f2b57610f2b6127d3565b9050602002810190610f3d919061285a565b610f47908061287a565b610f559060808101906128c6565b898989818110610f6757610f676127d3565b9050602002810190610f79919061285a565b610f83908061287a565b610f919060a08101906128c6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103ad92505050565b80610fd5816127ff565b915050610cda565b505050565b6000546001600160a01b031633148061100557506001546001600160a01b031633145b6110465760405162461bcd60e51b81526020600482015260126024820152712737ba1037bbb732b91037b91030b236b4b760711b60448201526064016103f8565b8460ff166001148061105b57508460ff166002145b61109c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420746f6b656e207479706560701b60448201526064016103f8565b6000805b6001600160a01b03831660009081526002602052604090205481101561146c576001600160a01b038381166000908152600260205260409020805491881691839081106110ef576110ef6127d3565b60009182526020909120600290910201546001600160a01b031614801561115e57506001600160a01b0383166000908152600260205260409020805460ff8916919083908110611141576111416127d3565b6000918252602090912060029091020154600160a01b900460ff16145b80156111b857506001600160a01b0383166000908152600260205260409020805463ffffffff8716919083908110611198576111986127d3565b6000918252602090912060029091020154600160a81b900463ffffffff16145b1561145a576001600160a01b03831660009081526002602052604081208054839081106111e7576111e76127d3565b600091825260209091206002909102015460ff600160c81b9091048116915085168110156112575760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f75676820746f6b656e73207374616b6564000000000000000060448201526064016103f8565b8460ff168111156112d6576001600160a01b038416600090815260026020526040902080548691908490811061128f5761128f6127d3565b6000918252602090912060029091020180546019906112b9908490600160c81b900460ff16612818565b92506101000a81548160ff021916908360ff160217905550611450565b6001600160a01b038416600090815260026020526040902080546112fc90600190612831565b8154811061130c5761130c6127d3565b906000526020600020906002020160026000866001600160a01b03166001600160a01b031681526020019081526020016000208381548110611350576113506127d3565b600091825260208083208454600293840290910180546001600160a01b039283166001600160a01b0319821681178355875474ffffffffffffffffffffffffffffffffffffffffff1990921617600160a01b9182900460ff90811690920217808355875463ffffffff60a81b198216600160a81b9182900463ffffffff169091029081178455885464ffffffffff60a81b1990921660ff60c81b1990911617600160c81b918290049092160217815560019586015495019490945592871682529091526040902080548061142657611426612844565b60008281526020812060026000199093019283020180546001600160d01b03191681556001015590555b600192505061146c565b80611464816127ff565b9150506110a0565b508560ff1660010361153d578260ff166001146114cb5760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e74206d757374206265203120666f72204552432d3732310000000060448201526064016103f8565b604051632142170760e11b81523060048201526001600160a01b03838116602483015263ffffffff861660448301528616906342842e0e90606401600060405180830381600087803b15801561152057600080fd5b505af1158015611534573d6000803e3d6000fd5b505050506115c2565b604051637921219560e11b81523060048201526001600160a01b03838116602483015263ffffffff8616604483015260ff8516606483015260a06084830152600060a483015286169063f242432a9060c401600060405180830381600087803b1580156115a957600080fd5b505af11580156115bd573d6000803e3d6000fd5b505050505b8015611625576040805160ff8881168252851660208201524281830152905163ffffffff8616916001600160a01b0388811692908616917fa46b1ba015d9ade929e123d1e2fe9daac52c1b5fefd707a36ec4f79ab2e978eb919081900360600190a45b505050505050565b611635611e15565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61165f611e15565b6116696000611e6f565b565b6002602052816000526040600020818154811061168757600080fd5b6000918252602090912060029091020180546001909101546001600160a01b038216935060ff600160a01b83048116935063ffffffff600160a81b84041692600160c81b9004169085565b6000546001600160a01b03163314806116f557506001546001600160a01b031633145b6117365760405162461bcd60e51b81526020600482015260126024820152712737ba1037bbb732b91037b91030b236b4b760711b60448201526064016103f8565b6001600160a01b039092166000908152600360209081526040808320805494151560ff1995861617905560049091529020805492151592909116919091179055565b606060008267ffffffffffffffff81111561179557611795612165565b6040519080825280602002602001820160405280156117be578160200160208202803683370190505b50905060005b8381101561184c5760068585838181106117e0576117e06127d3565b90506020028101906117f291906128c6565b604051611800929190612746565b90815260405190819003602001902054825160ff9091169083908390811061182a5761182a6127d3565b9115156020928302919091019091015280611844816127ff565b9150506117c4565b509392505050565b6000546001600160a01b031633148061187757506001546001600160a01b031633145b6118b85760405162461bcd60e51b81526020600482015260126024820152712737ba1037bbb732b91037b91030b236b4b760711b60448201526064016103f8565b60018054911515600160a01b0274ff000000000000000000000000000000000000000019909216919091179055565b3233146119365760405162461bcd60e51b815260206004820152601a60248201527f43616c6c657220697320616e6f7468657220636f6e747261637400000000000060448201526064016103f8565b600154600160a01b900460ff16156119825760405162461bcd60e51b815260206004820152600f60248201526e10dbdb9d1c9858dd081c185d5cd959608a1b60448201526064016103f8565b6001600160a01b03841660009081526003602052604090205460ff166119ea5760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e206e6f7420616c6c6f77656420666f72207374616b696e6700000060448201526064016103f8565b8260ff16600114806119ff57508260ff166002145b611a405760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420746f6b656e207479706560701b60448201526064016103f8565b60008160ff1611611a935760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016103f8565b8260ff16600103611b00578060ff16600114611af15760405162461bcd60e51b815260206004820152601c60248201527f416d6f756e74206d757374206265203120666f72204552432d3732310000000060448201526064016103f8565b611afb8483611ebf565b611b0b565b611b0b848383611fc3565b60026000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060a00160405280866001600160a01b031681526020018560ff1681526020018463ffffffff1681526020018360ff16815260200142815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548160ff021916908360ff16021790555060408201518160000160156101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160196101000a81548160ff021916908360ff1602179055506080820151816001015550508163ffffffff16846001600160a01b0316336001600160a01b03167f16de172a9e3702b4a73cba61fd470c48c88d0907c2d60db87086a68fa1dc6f35868542604051611c9e9392919060ff9384168152919092166020820152604081019190915260600190565b60405180910390a450505050565b611cb4611e15565b6001600160a01b038116611d195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103f8565b611d2281611e6f565b50565b604051632142170760e11b815230600482015233602482015263ffffffff821660448201526001600160a01b038316906342842e0e906064015b600060405180830381600087803b158015611d7957600080fd5b505af1158015611625573d6000803e3d6000fd5b604051637921219560e11b815230600482015233602482015263ffffffff8316604482015260ff8216606482015260a06084820152600060a48201526001600160a01b0384169063f242432a9060c4015b600060405180830381600087803b158015611df857600080fd5b505af1158015611e0c573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146116695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103f8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516331a9108f60e11b815263ffffffff8216600482015233906001600160a01b03841690636352211e90602401602060405180830381865afa158015611f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2f919061290d565b6001600160a01b031614611f855760405162461bcd60e51b815260206004820152601760248201527f546f6b656e206e6f74206f776e6564206279207573657200000000000000000060448201526064016103f8565b604051632142170760e11b815233600482015230602482015263ffffffff821660448201526001600160a01b038316906342842e0e90606401611d5f565b604051627eeac760e11b815233600482015263ffffffff8316602482015260ff8216906001600160a01b0385169062fdd58e90604401602060405180830381865afa158015612016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203a919061292a565b10156120885760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f75676820746f6b656e73206f776e656420627920757365720060448201526064016103f8565b604051637921219560e11b815233600482015230602482015263ffffffff8316604482015260ff8216606482015260a06084820152600060a48201526001600160a01b0384169063f242432a9060c401611dde565b6001600160a01b0381168114611d2257600080fd5b803560ff8116811461210357600080fd5b919050565b803563ffffffff8116811461210357600080fd5b60008083601f84011261212e57600080fd5b50813567ffffffffffffffff81111561214657600080fd5b60208301915083602082850101111561215e57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060c0888a03121561219657600080fd5b87356121a1816120dd565b96506121af602089016120f2565b95506121bd60408901612108565b94506121cb606089016120f2565b9350608088013567ffffffffffffffff808211156121e857600080fd5b6121f48b838c0161211c565b909550935060a08a013591508082111561220d57600080fd5b818a0191508a601f83011261222157600080fd5b81358181111561223357612233612165565b604051601f8201601f19908116603f0116810190838211818310171561225b5761225b612165565b816040528281528d602084870101111561227457600080fd5b82602086016020830137600060208483010152809550505050505092959891949750929550565b6000602082840312156122ad57600080fd5b81356001600160e01b0319811681146122c557600080fd5b9392505050565b6000602082840312156122de57600080fd5b81356122c5816120dd565b60008060008060006080868803121561230157600080fd5b853561230c816120dd565b9450602086013561231c816120dd565b935060408601359250606086013567ffffffffffffffff81111561233f57600080fd5b61234b8882890161211c565b969995985093965092949392505050565b602080825282518282018190526000919060409081850190868401855b828110156123d457815180516001600160a01b031685528681015160ff908116888701528682015163ffffffff1687870152606080830151909116908601526080908101519085015260a09093019290850190600101612379565b5091979650505050505050565b60008083601f8401126123f357600080fd5b50813567ffffffffffffffff81111561240b57600080fd5b6020830191508360208260051b850101111561215e57600080fd5b6000806020838503121561243957600080fd5b823567ffffffffffffffff81111561245057600080fd5b61245c858286016123e1565b90969095509350505050565b600080600080600060a0868803121561248057600080fd5b612489866120f2565b94506020860135612499816120dd565b93506124a760408701612108565b92506124b5606087016120f2565b915060808601356124c5816120dd565b809150509295509295909350565b600080604083850312156124e657600080fd5b82356124f1816120dd565b946020939093013593505050565b8035801515811461210357600080fd5b60008060006060848603121561252457600080fd5b833561252f816120dd565b925061253d602085016124ff565b915061254b604085016124ff565b90509250925092565b60008060008060008060008060a0898b03121561257057600080fd5b883561257b816120dd565b9750602089013561258b816120dd565b9650604089013567ffffffffffffffff808211156125a857600080fd5b6125b48c838d016123e1565b909850965060608b01359150808211156125cd57600080fd5b6125d98c838d016123e1565b909650945060808b01359150808211156125f257600080fd5b506125ff8b828c0161211c565b999c989b5096995094979396929594505050565b6020808252825182820181905260009190848201906040850190845b8181101561264d57835115158352928401929184019160010161262f565b50909695505050505050565b60006020828403121561266b57600080fd5b6122c5826124ff565b6000806000806080858703121561268a57600080fd5b8435612695816120dd565b93506126a3602086016120f2565b92506126b160408601612108565b91506126bf606086016120f2565b905092959194509250565b60008060008060008060a087890312156126e357600080fd5b86356126ee816120dd565b955060208701356126fe816120dd565b94506040870135935060608701359250608087013567ffffffffffffffff81111561272857600080fd5b61273489828a0161211c565b979a9699509497509295939492505050565b8183823760009101908152919050565b6bffffffffffffffffffffffff19606088901b1681527fff0000000000000000000000000000000000000000000000000000000000000060f887811b821660148401526001600160e01b031960e088901b16601584015285901b16601982015260008284601a8401375060009101601a0190815295945050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612811576128116127e9565b5060010190565b60ff8281168282160390811115610b9957610b996127e9565b81810381811115610b9957610b996127e9565b634e487b7160e01b600052603160045260246000fd5b60008235603e1983360301811261287057600080fd5b9190910192915050565b6000823560be1983360301811261287057600080fd5b6000602082840312156128a257600080fd5b6122c5826120f2565b6000602082840312156128bd57600080fd5b6122c582612108565b6000808335601e198436030181126128dd57600080fd5b83018035915067ffffffffffffffff8211156128f857600080fd5b60200191503681900382131561215e57600080fd5b60006020828403121561291f57600080fd5b81516122c5816120dd565b60006020828403121561293c57600080fd5b505191905056fea26469706673582212204277311a375a1ad6e6f056abd3dddc8685f227df61f9e7856dbf1dc6f80652a264736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003be3a8613dc18554a73773a5bfb8e9819d360dc00000000000000000000000001aaf6d89cfd593f8d2b937e3b3383d8f3a84cf73
-----Decoded View---------------
Arg [0] : admin (address): 0x3be3A8613dC18554a73773a5Bfb8E9819d360Dc0
Arg [1] : signatureKey (address): 0x1aaf6D89Cfd593f8d2b937e3b3383d8f3a84Cf73
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003be3a8613dc18554a73773a5bfb8e9819d360dc0
Arg [1] : 0000000000000000000000001aaf6d89cfd593f8d2b937e3b3383d8f3a84cf73
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.