ERC-721
Overview
Max Total Supply
0 OG
Holders
2,053
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 OGLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
arteQCollectionV2
Compiler Version
v0.8.1+commit.df193b15
Optimization Enabled:
Yes with 2000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/* * This file is part of the contracts written for artèQ Investment Fund (https://github.com/arteq-io/contracts). * Copyright (c) 2022 artèQ (https://arteq.io) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "../../arteq-tech/contracts/vaults/VaultsConfig.sol"; import "../../arteq-tech/contracts/diamond/DiamondV1.sol"; import "./arteQCollectionV2Config.sol"; /// @author Kam Amini <[email protected]> <[email protected]> /// /// @notice Use at your own risk /* solhint-disable contract-name-camelcase */ contract arteQCollectionV2 is DiamondV1 { string private _detailsURI; modifier onlyAdmin { RoleManagerLib._checkRole(arteQCollectionV2Config.ROLE_ADMIN); _; } constructor( address taskManager, string memory detailsURI, address[] memory admins, address[] memory tokenManagers, address[] memory vaultAdmins, address[] memory diamondAdmins ) DiamondV1(taskManager, diamondAdmins) { // Admin role for (uint i = 0; i < admins.length; i++) { RoleManagerLib._grantRole(admins[i], arteQCollectionV2Config.ROLE_ADMIN); } // Token Manager role for (uint i = 0; i < tokenManagers.length; i++) { RoleManagerLib._grantRole(tokenManagers[i],arteQCollectionV2Config.ROLE_TOKEN_MANAGER); } // Vault Admin role for (uint i = 0; i < vaultAdmins.length; i++) { RoleManagerLib._grantRole(vaultAdmins[i], VaultsConfig.ROLE_VAULT_ADMIN); } _detailsURI = detailsURI; } function supportsInterface(bytes4 interfaceId) public view override returns (bool) { // We have to return true for OpenSea contract detection and caching mechanism if (interfaceId == type(IERC721).interfaceId) { return true; } return super.supportsInterface(interfaceId); } function getDetailsURI() external view returns (string memory) { return _detailsURI; } function setDetailsURI(string memory newValue) external onlyAdmin { _detailsURI = newValue; } /* solhint-disable no-complex-fallback */ fallback() external payable { address facet = _findFacet(msg.sig); /* solhint-disable no-inline-assembly */ assembly { calldatacopy(0, 0, calldatasize()) let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } /* solhint-enable no-inline-assembly */ } /* solhint-disable no-empty-blocks */ receive() external payable { } }
// 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; }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk library VaultsConfig { uint256 public constant ROLE_VAULT_ADMIN = uint256(keccak256(bytes("ROLE_VAULT_ADMIN"))); }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; import "@openzeppelin/contracts/interfaces/IERC165.sol"; import "../security/task-executor/TaskExecutorFacet.sol"; import "../security/task-executor/TaskExecutorLib.sol"; import "../security/role-manager/RoleManagerFacet.sol"; import "../security/role-manager/RoleManagerLib.sol"; import "./IDiamondFacet.sol"; import "./DiamondV1Config.sol"; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk abstract contract DiamondV1 is IERC165, TaskExecutorFacet, RoleManagerFacet { address[] private _facets; mapping(address => uint256) private _facetArrayIndex; mapping(bytes4 => address) private _selectorToFacetMap; mapping(address => string[]) private _facetToFuncSigsMap; mapping(address => mapping(bytes4 => bool)) private _removedFuncs; mapping(bytes4 => bool) private _suppressedInterfaceIds; modifier onlyDiamondAdmin() { RoleManagerLib._checkRole(DiamondV1Config.ROLE_DIAMOND_ADMIN); _; } constructor( address taskManager, address[] memory diamondAdmins ) { TaskExecutorLib._setTaskManager(taskManager); for(uint i = 0; i < diamondAdmins.length; i++) { RoleManagerLib._grantRole(diamondAdmins[i], DiamondV1Config.ROLE_DIAMOND_ADMIN); } } function supportsInterface(bytes4 interfaceId) public view override virtual returns (bool) { // Querying for IDiamondFacet must always return false if (interfaceId == type(IDiamondFacet).interfaceId) { return false; } if (_suppressedInterfaceIds[interfaceId]) { return false; } // Always return true if (interfaceId == type(IERC165).interfaceId) { return true; } for (uint256 i = 0; i < _facets.length; i++) { address facet = _facets[i]; if (IDiamondFacet(facet).supportsInterface(interfaceId)) { return true; } } return false; } function isInterfaceIdSuppressed(bytes4 interfaceId) external view onlyDiamondAdmin returns (bool) { return _suppressedInterfaceIds[interfaceId]; } function suppressInterfaceId(bytes4 interfaceId, bool suppress) external onlyDiamondAdmin { _suppressedInterfaceIds[interfaceId] = suppress; } function getFuncs() external view onlyDiamondAdmin returns (string[] memory, address[] memory) { return _getFuncs(); } function getFacetFuncs(address facet) external view onlyDiamondAdmin returns (string[] memory) { return _getFacetFuncs(facet); } function addFuncs( string[] memory funcSigs, address[] memory facets ) external onlyDiamondAdmin { require(funcSigs.length > 0, "DV1:ZL"); require(funcSigs.length == facets.length, "DV1:NEQL"); for (uint256 i = 0; i < funcSigs.length; i++) { string memory funcSig = funcSigs[i]; address facet = facets[i]; _addFunc(funcSig, facet); } } function removeFuncs( string[] memory funcSigs ) external onlyDiamondAdmin { require(funcSigs.length > 0, "DV1:ZL"); for (uint256 i = 0; i < funcSigs.length; i++) { string memory funcSig = funcSigs[i]; _removeFunc(funcSig); } } function _getFuncs() internal view returns (string[] memory, address[] memory) { uint256 length = 0; for (uint256 i = 0; i < _facets.length; i++) { address facet = _facets[i]; string[] memory facetFuncs = _getFacetFuncs(facet); for (uint256 j = 0; j < facetFuncs.length; j++) { length += 1; } } string[] memory funcSigs = new string[](length); address[] memory facets = new address[](length); uint256 index = 0; for (uint256 i = 0; i < _facets.length; i++) { address facet = _facets[i]; string[] memory facetFuncs = _getFacetFuncs(facet); for (uint256 j = 0; j < facetFuncs.length; j++) { funcSigs[index] = facetFuncs[j]; facets[index] = facet; index += 1; } } return (funcSigs, facets); } function _getFacetFuncs(address facet) internal view returns (string[] memory) { uint256 length = 0; for (uint256 j = 0; j < _facetToFuncSigsMap[facet].length; j++) { string memory funcSig = _facetToFuncSigsMap[facet][j]; bytes4 selector = __getSelector(funcSig); if (!_removedFuncs[facet][selector]) { length += 1; } } string[] memory funcSigs = new string[](length); uint256 index = 0; for (uint256 j = 0; j < _facetToFuncSigsMap[facet].length; j++) { string memory funcSig = _facetToFuncSigsMap[facet][j]; bytes4 selector = __getSelector(funcSig); if (!_removedFuncs[facet][selector]) { funcSigs[index] = funcSig; index += 1; } } return funcSigs; } function _addFunc( string memory funcSig, address facet ) internal { require(facet != address(0), "DV1:ZF"); require( IDiamondFacet(facet).supportsInterface(type(IDiamondFacet).interfaceId), "DV1:IF" ); bytes4 selector = __getSelector(funcSig); address oldFacet = _selectorToFacetMap[selector]; // overrides the previously set selector _selectorToFacetMap[selector] = facet; bool found = false; for (uint256 i = 0; i < _facetToFuncSigsMap[facet].length; i++) { bytes32 s = __getSelector(_facetToFuncSigsMap[facet][i]); if (s == selector) { found = true; break; } } if (!found) { _facetToFuncSigsMap[facet].push(funcSig); // add the func-sig to facet's map } _removedFuncs[facet][selector] = false; // revive the selector if already removed if (oldFacet != address(0) && oldFacet != facet) { _removedFuncs[oldFacet][selector] = true; // remove from the old facet } // update facets array if (_facetArrayIndex[facet] == 0) { _facets.push(facet); _facetArrayIndex[facet] = _facets.length; } } function _removeFunc( string memory funcSig ) internal { bytes4 selector = __getSelector(funcSig); address facet = _selectorToFacetMap[selector]; if (facet != address(0)) { _removedFuncs[facet][selector] = true; } } function _findFacet(bytes4 selector) internal view returns (address) { address facet = _selectorToFacetMap[selector]; require(facet != address(0), "DV1:FNF"); require(!_removedFuncs[facet][selector], "DV1:FR"); return facet; } function __getSelector(string memory funcSig) private pure returns (bytes4) { bytes memory funcSigBytes = bytes(funcSig); for (uint256 i = 0; i < funcSigBytes.length; i++) { bytes1 b = funcSigBytes[i]; if ( !(b >= 0x30 && b <= 0x39) && // [0-9] !(b >= 0x41 && b <= 0x5a) && // [A-Z] !(b >= 0x61 && b <= 0x7a) && // [a-z] b != 0x24 && // $ b != 0x5f && // _ b != 0x2c && // , b != 0x28 && // ( b != 0x29 && // ) b != 0x5b && // [ b != 0x5d // ] ) { revert("DV1:IFS"); } } return bytes4(keccak256(bytes(funcSig))); } }
/* * This file is part of the contracts written for artèQ Investment Fund (https://github.com/arteq-io/contracts). * Copyright (c) 2022 artèQ (https://arteq.io) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk /* solhint-disable contract-name-camelcase */ library arteQCollectionV2Config { uint256 constant public ROLE_ADMIN = uint256(keccak256(bytes("ROLE_ADMIN"))); uint256 constant public ROLE_TOKEN_MANAGER = uint256(keccak256(bytes("ROLE_TOKEN_MANAGER"))); }
// 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 (interfaces/IERC165.sol) pragma solidity ^0.8.0; import "../utils/introspection/IERC165.sol";
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; import "./TaskExecutorInternal.sol"; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk contract TaskExecutorFacet { function getTaskManager() external view returns (address) { return TaskExecutorInternal._getTaskManager(); } function setTaskManager( uint256 adminTaskId, address newTaskManager ) external { address oldTaskManager = TaskExecutorInternal._getTaskManager(); TaskExecutorInternal._setTaskManager(newTaskManager); if (oldTaskManager != address(0)) { ITaskExecutor(oldTaskManager).executeAdminTask(msg.sender, adminTaskId); } } }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; import "./TaskExecutorInternal.sol"; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk library TaskExecutorLib { function _setTaskManager(address newTaskManager) internal { TaskExecutorInternal._setTaskManager(newTaskManager); } function _executeTask(uint256 taskId) internal { TaskExecutorInternal._executeTask(taskId); } }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; import "../task-executor/TaskExecutorLib.sol"; import "./RoleManagerInternal.sol"; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk contract RoleManagerFacet { function hasRole( address account, uint256 role ) external view returns (bool) { return RoleManagerInternal._hasRole2(account, role); } function grantRole( uint256 taskId, address account, uint256 role ) external { RoleManagerInternal._grantRole(account, role); TaskExecutorLib._executeTask(taskId); } function revokeRole( uint256 taskId, address account, uint256 role ) external { RoleManagerInternal._revokeRole(account, role); TaskExecutorLib._executeTask(taskId); } }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; import "./RoleManagerInternal.sol"; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk library RoleManagerLib { function _checkRole(uint256 role) internal view { RoleManagerInternal._checkRole(role); } function _hasRole(uint256 role) internal view returns (bool) { return RoleManagerInternal._hasRole(role); } function _grantRole( address account, uint256 role ) internal { RoleManagerInternal._grantRole(account, role); } }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk interface IDiamondFacet { function getVersion() external view returns (string memory); function supportsInterface(bytes4 interfaceId) external view returns (bool); }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk library DiamondV1Config { uint256 public constant ROLE_DIAMOND_ADMIN = uint256(keccak256(bytes("ROLE_DIAMOND_ADMIN"))); }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; import "@openzeppelin/contracts/interfaces/IERC165.sol"; import "../../interfaces/ITaskExecutor.sol"; import "./TaskExecutorStorage.sol"; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk library TaskExecutorInternal { event TaskManagerChanged(address newTaskManager); function _getTaskManager() internal view returns (address) { return __s().taskManager; } function _setTaskManager(address newTaskManager) internal { require(newTaskManager != address(0), "TE:ZA"); require(IERC165(newTaskManager).supportsInterface(type(ITaskExecutor).interfaceId), "TE:IC"); __s().taskManager = newTaskManager; emit TaskManagerChanged(__s().taskManager); } function _executeTask(uint256 taskId) internal { require(__s().taskManager != address(0), "TE:NTM"); ITaskExecutor(__s().taskManager).executeTask(msg.sender, taskId); } function __s() private pure returns (TaskExecutorStorage.Layout storage) { return TaskExecutorStorage.layout(); } }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk interface ITaskExecutor { event TaskExecuted(address finalizer, address executor, uint256 taskId); function executeTask(address executor, uint256 taskId) external; function executeAdminTask(address executor, uint256 taskId) external; }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk. Just got the basic /// idea from: https://github.com/solidstate-network/solidstate-solidity library TaskExecutorStorage { struct Layout { address taskManager; mapping(uint256 => uint256) extra; } // Storage Slot: de1b6f91cd9572e4381a8b8d203bdc268664230f56599f11d2ca9df8d397fb6f bytes32 internal constant STORAGE_SLOT = keccak256("arteq-tech.contracts.security.task-executor.storage"); function layout() internal pure returns (Layout storage s) { bytes32 slot = STORAGE_SLOT; /* solhint-disable no-inline-assembly */ assembly { s.slot := slot } /* solhint-enable no-inline-assembly */ } }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; import "./RoleManagerStorage.sol"; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk library RoleManagerInternal { event RoleGrant(uint256 role, address account); event RoleRevoke(uint256 role, address account); function _checkRole(uint256 role) internal view { require(__s().roles[role][msg.sender], "RM:MR"); } function _hasRole(uint256 role) internal view returns (bool) { return __s().roles[role][msg.sender]; } function _hasRole2( address account, uint256 role ) internal view returns (bool) { return __s().roles[role][account]; } function _grantRole( address account, uint256 role ) internal { require(!__s().roles[role][account], "RM:AHR"); __s().roles[role][account] = true; emit RoleGrant(role, account); } function _revokeRole( address account, uint256 role ) internal { require(__s().roles[role][account], "RM:DNHR"); __s().roles[role][account] = false; emit RoleRevoke(role, account); } function __s() private pure returns (RoleManagerStorage.Layout storage) { return RoleManagerStorage.layout(); } }
/* * This file is part of the artèQ Technologies contracts (https://github.com/arteq-tech/contracts). * Copyright (c) 2022 artèQ Technologies (https://arteq.tech) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 3. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ // SPDX-License-Identifier: GNU General Public License v3.0 pragma solidity 0.8.1; /// @author Kam Amini <[email protected]> /// /// @notice Use at your own risk. Just got the basic /// idea from: https://github.com/solidstate-network/solidstate-solidity library RoleManagerStorage { struct Layout { mapping (uint256 => mapping(address => bool)) roles; mapping(uint256 => uint256) extra; } // Storage Slot: d6cfccebecf684bbc10a5019ad1aed91fbc4f7461f5cd03e8c71240be4ca6bea bytes32 internal constant STORAGE_SLOT = keccak256("arteq-tech.contracts.security.role-manager.storage"); function layout() internal pure returns (Layout storage s) { bytes32 slot = STORAGE_SLOT; /* solhint-disable no-inline-assembly */ assembly { s.slot := slot } /* solhint-enable no-inline-assembly */ } }
{ "optimizer": { "enabled": true, "runs": 2000 }, "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":"taskManager","type":"address"},{"internalType":"string","name":"detailsURI","type":"string"},{"internalType":"address[]","name":"admins","type":"address[]"},{"internalType":"address[]","name":"tokenManagers","type":"address[]"},{"internalType":"address[]","name":"vaultAdmins","type":"address[]"},{"internalType":"address[]","name":"diamondAdmins","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"string[]","name":"funcSigs","type":"string[]"},{"internalType":"address[]","name":"facets","type":"address[]"}],"name":"addFuncs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDetailsURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"facet","type":"address"}],"name":"getFacetFuncs","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFuncs","outputs":[{"internalType":"string[]","name":"","type":"string[]"},{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaskManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"taskId","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"role","type":"uint256"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"role","type":"uint256"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"isInterfaceIdSuppressed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"funcSigs","type":"string[]"}],"name":"removeFuncs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taskId","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"role","type":"uint256"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newValue","type":"string"}],"name":"setDetailsURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"adminTaskId","type":"uint256"},{"internalType":"address","name":"newTaskManager","type":"address"}],"name":"setTaskManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"},{"internalType":"bool","name":"suppress","type":"bool"}],"name":"suppressInterfaceId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002fe438038062002fe483398101604081905262000034916200076e565b85816200004c82620002be60201b6200097a1760201c565b60005b8151811015620000e157620000cc8282815181106200007e57634e487b7160e01b600052603260045260246000fd5b6020026020010151604051806040016040528060128152602001712927a622afa224a0a6a7a7222fa0a226a4a760711b8152508051906020012060001c620002d760201b620009861760201c565b80620000d88162000992565b9150506200004f565b50505060005b845181101562000171576200015c8582815181106200011657634e487b7160e01b600052603260045260246000fd5b60200260200101516040518060400160405280600a8152602001692927a622afa0a226a4a760b11b8152508051906020012060001c620002d760201b620009861760201c565b80620001688162000992565b915050620000e7565b5060005b83518110156200020757620001f2848281518110620001a457634e487b7160e01b600052603260045260246000fd5b6020026020010151604051806040016040528060128152602001712927a622afaa27a5a2a72fa6a0a720a3a2a960711b8152508051906020012060001c620002d760201b620009861760201c565b80620001fe8162000992565b91505062000175565b5060005b82518110156200029b57620002868382815181106200023a57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518060400160405280601081526020016f2927a622afab20aaa62a2fa0a226a4a760811b8152508051906020012060001c620002d760201b620009861760201c565b80620002928162000992565b9150506200020b565b508451620002b190600690602088019062000587565b50505050505050620009d0565b620002d481620002f260201b620009901760201c565b50565b620002ee82826200044460201b62000aed1760201c565b5050565b6001600160a01b038116620003245760405162461bcd60e51b81526004016200031b90620008ec565b60405180910390fd5b6040516301ffc9a760e01b81526001600160a01b038216906301ffc9a79062000359906304d657b360e51b9060040162000898565b60206040518083038186803b1580156200037257600080fd5b505afa15801562000387573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ad91906200085b565b620003cc5760405162461bcd60e51b81526004016200031b90620008ad565b80620003d76200050c565b80546001600160a01b0319166001600160a01b03929092169190911790557fd9944277d62f69cc63c9bc5bd2158fef907119ed7f90fd406f1cdfada1097d50620004206200050c565b5460405162000439916001600160a01b03169062000884565b60405180910390a150565b6200044e62000528565b6000828152602091825260408082206001600160a01b0386168352909252205460ff1615620004915760405162461bcd60e51b81526004016200031b90620008cc565b60016200049d62000528565b6000838152602091825260408082206001600160a01b0387168352909252819020805460ff191692151592909217909155517ffcb6b45ef5424ef7d19598014fef2f5f5af10c504287d60504ca515e17a472dc906200050090839085906200090b565b60405180910390a15050565b6000620005236200053f60201b62000bac1760201c565b905090565b6000620005236200056360201b62000bd01760201c565b7fde1b6f91cd9572e4381a8b8d203bdc268664230f56599f11d2ca9df8d397fb6f90565b7fd6cfccebecf684bbc10a5019ad1aed91fbc4f7461f5cd03e8c71240be4ca6bea90565b828054620005959062000955565b90600052602060002090601f016020900481019282620005b9576000855562000604565b82601f10620005d457805160ff191683800117855562000604565b8280016001018555821562000604579182015b8281111562000604578251825591602001919060010190620005e7565b506200061292915062000616565b5090565b5b8082111562000612576000815560010162000617565b80516001600160a01b03811681146200064557600080fd5b919050565b600082601f8301126200065b578081fd5b815160206001600160401b03821115620006795762000679620009ba565b8082026200068982820162000922565b838152828101908684018388018501891015620006a4578687fd5b8693505b85841015620006d157620006bc816200062d565b835260019390930192918401918401620006a8565b50979650505050505050565b600082601f830112620006ee578081fd5b81516001600160401b038111156200070a576200070a620009ba565b602062000720601f8301601f1916820162000922565b828152858284870101111562000734578384fd5b835b838110156200075357858101830151828201840152820162000736565b838111156200076457848385840101525b5095945050505050565b60008060008060008060c0878903121562000787578182fd5b62000792876200062d565b60208801519096506001600160401b0380821115620007af578384fd5b620007bd8a838b01620006dd565b96506040890151915080821115620007d3578384fd5b620007e18a838b016200064a565b95506060890151915080821115620007f7578384fd5b620008058a838b016200064a565b945060808901519150808211156200081b578384fd5b620008298a838b016200064a565b935060a08901519150808211156200083f578283fd5b506200084e89828a016200064a565b9150509295509295509295565b6000602082840312156200086d578081fd5b815180151581146200087d578182fd5b9392505050565b6001600160a01b0391909116815260200190565b6001600160e01b031991909116815260200190565b60208082526005908201526454453a494360d81b604082015260600190565b60208082526006908201526529269d20a42960d11b604082015260600190565b60208082526005908201526454453a5a4160d81b604082015260600190565b9182526001600160a01b0316602082015260400190565b604051601f8201601f191681016001600160401b03811182821017156200094d576200094d620009ba565b604052919050565b6002810460018216806200096a57607f821691505b602082108114156200098c57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620009b357634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fd5b61260480620009e06000396000f3fe6080604052600436106100e15760003560e01c8063884a8f001161007f578063abc2876211610059578063abc2876214610284578063efc5f532146102a4578063fb2153c2146102d1578063fdf7c916146102f1576100e8565b8063884a8f00146102225780639553f75c14610244578063a48929d114610264576100e8565b80633c47b163116100bb5780633c47b1631461019d5780635c97f4a2146101bd57806367788084146101dd57806374e3d94914610200576100e8565b806301ffc9a7146101255780632856481c1461015b578063378b4b001461017d576100e8565b366100e857005b60006100ff6000356001600160e01b031916610311565b90503660008037600080366000845af43d6000803e808015610120573d6000f35b3d6000fd5b34801561013157600080fd5b50610145610140366004611f8c565b6103b0565b604051610152919061219e565b60405180910390f35b34801561016757600080fd5b5061017b61017636600461203a565b6103f5565b005b34801561018957600080fd5b5061017b610198366004611eb0565b61040d565b3480156101a957600080fd5b5061017b6101b836600461200f565b610525565b3480156101c957600080fd5b506101456101d8366004611e4c565b6105c7565b3480156101e957600080fd5b506101f26105da565b60405161015292919061214c565b34801561020c57600080fd5b50610215610640565b604051610152919061210c565b34801561022e57600080fd5b5061023761064f565b60405161015291906121be565b34801561025057600080fd5b5061014561025f366004611f8c565b6106e1565b34801561027057600080fd5b5061017b61027f366004611fdc565b610756565b34801561029057600080fd5b5061017b61029f366004611e75565b6107cb565b3480156102b057600080fd5b506102c46102bf366004611e32565b610893565b6040516101529190612139565b3480156102dd57600080fd5b5061017b6102ec366004611fa6565b6108f1565b3480156102fd57600080fd5b5061017b61030c36600461203a565b610970565b6001600160e01b031981166000908152600260205260408120546001600160a01b03168061035a5760405162461bcd60e51b8152600401610351906122e4565b60405180910390fd5b6001600160a01b03811660009081526004602090815260408083206001600160e01b03198716845290915290205460ff16156103a85760405162461bcd60e51b815260040161035190612389565b90505b919050565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014156103ec575060016103ab565b6103a882610bf4565b6103ff8282610d62565b61040883610e14565b505050565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b6020909101526104607f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b60008251116104815760405162461bcd60e51b81526004016103519061242e565b80518251146104a25760405162461bcd60e51b81526004016103519061231b565b60005b82518110156104085760008382815181106104d057634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008383815181106104fc57634e487b7160e01b600052603260045260246000fd5b602002602001015190506105108282610e26565b5050808061051d9061255b565b9150506104a5565b600061052f6111eb565b905061053a82610990565b6001600160a01b03811615610408576040517f6a83f1090000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636a83f109906105909033908790600401612120565b600060405180830381600087803b1580156105aa57600080fd5b505af11580156105be573d6000803e3d6000fd5b50505050505050565b60006105d38383611204565b9392505050565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b6020909101526060806106307f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b610638611237565b915091509091565b600061064a6111eb565b905090565b60606006805461065e90612520565b80601f016020809104026020016040519081016040528092919081815260200182805461068a90612520565b80156106d75780601f106106ac576101008083540402835291602001916106d7565b820191906000526020600020905b8154815290600101906020018083116106ba57829003601f168201915b5050505050905090565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b60209091015260006107367f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b506001600160e01b03191660009081526005602052604090205460ff1690565b60408051808201909152600a81527f524f4c455f41444d494e000000000000000000000000000000000000000000006020909101526107b47f2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096610e1d565b80516107c7906006906020840190611c98565b5050565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b60209091015261081e7f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b600081511161083f5760405162461bcd60e51b81526004016103519061242e565b60005b81518110156107c757600082828151811061086d57634e487b7160e01b600052603260045260246000fd5b60200260200101519050610880816114ab565b508061088b8161255b565b915050610842565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b60209091015260606108e87f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b6103a88261151f565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b6020909101526109447f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b6001600160e01b0319919091166000908152600560205260409020805460ff1916911515919091179055565b6103ff8282610aed565b61098381610990565b50565b6107c78282610aed565b6001600160a01b0381166109b65760405162461bcd60e51b815260040161035190612465565b6040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790610a02907f9acaf66000000000000000000000000000000000000000000000000000000000906004016121a9565b60206040518083038186803b158015610a1a57600080fd5b505afa158015610a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a529190611f70565b610a6e5760405162461bcd60e51b815260040161035190612208565b80610a77611865565b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790557fd9944277d62f69cc63c9bc5bd2158fef907119ed7f90fd406f1cdfada1097d50610acb611865565b54604051610ae2916001600160a01b03169061210c565b60405180910390a150565b610af561186f565b6000828152602091825260408082206001600160a01b0386168352909252205460ff1615610b355760405162461bcd60e51b8152600401610351906123f7565b6001610b3f61186f565b6000838152602091825260408082206001600160a01b0387168352909252819020805460ff191692151592909217909155517ffcb6b45ef5424ef7d19598014fef2f5f5af10c504287d60504ca515e17a472dc90610ba0908390859061249c565b60405180910390a15050565b7fde1b6f91cd9572e4381a8b8d203bdc268664230f56599f11d2ca9df8d397fb6f90565b7fd6cfccebecf684bbc10a5019ad1aed91fbc4f7461f5cd03e8c71240be4ca6bea90565b60006001600160e01b031982167f0c71a78b000000000000000000000000000000000000000000000000000000001415610c30575060006103ab565b6001600160e01b0319821660009081526005602052604090205460ff1615610c5a575060006103ab565b6001600160e01b031982166301ffc9a760e01b1415610c7b575060016103ab565b60005b600054811015610d59576000808281548110610caa57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516301ffc9a760e01b81526001600160a01b03909116915081906301ffc9a790610ce69087906004016121a9565b60206040518083038186803b158015610cfe57600080fd5b505afa158015610d12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d369190611f70565b15610d46576001925050506103ab565b5080610d518161255b565b915050610c7e565b50600092915050565b610d6a61186f565b6000828152602091825260408082206001600160a01b0386168352909252205460ff16610da95760405162461bcd60e51b815260040161035190612352565b6000610db361186f565b6000838152602091825260408082206001600160a01b0387168352909252819020805460ff191692151592909217909155517f3992d8cf6249af1b2bb6e542550b9bf348992deec040c06d2ed5c46de50eef7f90610ba0908390859061249c565b61098381611879565b6109838161192a565b6001600160a01b038116610e4c5760405162461bcd60e51b8152600401610351906123c0565b6040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790610e98907f0c71a78b00000000000000000000000000000000000000000000000000000000906004016121a9565b60206040518083038186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee89190611f70565b610f045760405162461bcd60e51b815260040161035190612276565b6000610f0f83611968565b6001600160e01b03198116600090815260026020526040812080546001600160a01b0386811673ffffffffffffffffffffffffffffffffffffffff1983161790925592935090911690805b6001600160a01b038516600090815260036020526040902054811015611083576001600160a01b0385166000908152600360205260408120805461104f919084908110610fb757634e487b7160e01b600052603260045260246000fd5b906000526020600020018054610fcc90612520565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff890612520565b80156110455780601f1061101a57610100808354040283529160200191611045565b820191906000526020600020905b81548152906001019060200180831161102857829003601f168201915b5050505050611968565b6001600160e01b031990811691508516811415611070576001925050611083565b508061107b8161255b565b915050610f5a565b50806110c7576001600160a01b0384166000908152600360209081526040822080546001810182559083529181902087516110c5939190910191880190611c98565b505b6001600160a01b0380851660009081526004602090815260408083206001600160e01b0319881684529091529020805460ff1916905582161580159061111f5750836001600160a01b0316826001600160a01b031614155b1561115d576001600160a01b03821660009081526004602090815260408083206001600160e01b0319871684529091529020805460ff191660011790555b6001600160a01b0384166000908152600160205260409020546111e45760008054600180820183557f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881690811790915582549083526020919091526040909120555b5050505050565b60006111f5611865565b546001600160a01b0316905090565b600061120e61186f565b6000928352602090815260408084206001600160a01b0395909516845293905250205460ff1690565b6060806000805b6000548110156112cc57600080828154811061126a57634e487b7160e01b600052603260045260246000fd5b60009182526020822001546001600160a01b031691506112898261151f565b905060005b81518110156112b6576112a2600186612508565b9450806112ae8161255b565b91505061128e565b50505080806112c49061255b565b91505061123e565b5060008167ffffffffffffffff8111156112f657634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561132957816020015b60608152602001906001900390816113145790505b50905060008267ffffffffffffffff81111561135557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561137e578160200160208202803683370190505b5090506000805b60005481101561149f5760008082815481106113b157634e487b7160e01b600052603260045260246000fd5b60009182526020822001546001600160a01b031691506113d08261151f565b905060005b8151811015611489578181815181106113fe57634e487b7160e01b600052603260045260246000fd5b602002602001015187868151811061142657634e487b7160e01b600052603260045260246000fd5b60200260200101819052508286868151811061145257634e487b7160e01b600052603260045260246000fd5b6001600160a01b0390921660209283029190910190910152611475600186612508565b9450806114818161255b565b9150506113d5565b50505080806114979061255b565b915050611385565b50919450925050509091565b60006114b682611968565b6001600160e01b031981166000908152600260205260409020549091506001600160a01b03168015610408576001600160a01b03811660009081526004602090815260408083206001600160e01b0319861684529091529020805460ff19166001179055505050565b60606000805b6001600160a01b038416600090815260036020526040902054811015611678576001600160a01b038416600090815260036020526040812080548390811061157d57634e487b7160e01b600052603260045260246000fd5b90600052602060002001805461159290612520565b80601f01602080910402602001604051908101604052809291908181526020018280546115be90612520565b801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b50505050509050600061161d82611968565b6001600160a01b03871660009081526004602090815260408083206001600160e01b03198516845290915290205490915060ff1661166357611660600185612508565b93505b505080806116709061255b565b915050611525565b5060008167ffffffffffffffff8111156116a257634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156116d557816020015b60608152602001906001900390816116c05790505b5090506000805b6001600160a01b03861660009081526003602052604090205481101561185b576001600160a01b038616600090815260036020526040812080548390811061173457634e487b7160e01b600052603260045260246000fd5b90600052602060002001805461174990612520565b80601f016020809104026020016040519081016040528092919081815260200182805461177590612520565b80156117c25780601f10611797576101008083540402835291602001916117c2565b820191906000526020600020905b8154815290600101906020018083116117a557829003601f168201915b5050505050905060006117d482611968565b6001600160a01b03891660009081526004602090815260408083206001600160e01b03198516845290915290205490915060ff16611846578185858151811061182d57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152611843600185612508565b93505b505080806118539061255b565b9150506116dc565b5090949350505050565b600061064a610bac565b600061064a610bd0565b6000611883611865565b546001600160a01b031614156118ab5760405162461bcd60e51b8152600401610351906121d1565b6118b3611865565b546040517ff04907690000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063f0490769906118fc9033908590600401612120565b600060405180830381600087803b15801561191657600080fd5b505af11580156111e4573d6000803e3d6000fd5b61193261186f565b600082815260209182526040808220338352909252205460ff166109835760405162461bcd60e51b81526004016103519061223f565b600081815b8151811015611c8857600082828151811061199857634e487b7160e01b600052603260045260246000fd5b01602001516001600160f81b03191690507f30000000000000000000000000000000000000000000000000000000000000008110801590611a0357507f39000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b158015611a7157507f41000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821610801590611a6f57507f5a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b8015611ade57507f61000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821610801590611adc57507f7a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b8015611b1457507f24000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611b4a57507f5f000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611b8057507f2c000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611bb657507f28000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611bec57507f29000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611c2257507f5b000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611c5857507f5d000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b15611c755760405162461bcd60e51b8152600401610351906122ad565b5080611c808161255b565b91505061196d565b5050815160208301209050919050565b828054611ca490612520565b90600052602060002090601f016020900481019282611cc65760008555611d0c565b82601f10611cdf57805160ff1916838001178555611d0c565b82800160010185558215611d0c579182015b82811115611d0c578251825591602001919060010190611cf1565b50611d18929150611d1c565b5090565b5b80821115611d185760008155600101611d1d565b80356001600160a01b03811681146103ab57600080fd5b600082601f830112611d58578081fd5b81356020611d6d611d68836124e4565b6124b3565b82815281810190858301855b85811015611da257611d90898684358b0101611dc7565b84529284019290840190600101611d79565b5090979650505050505050565b80356001600160e01b0319811681146103ab57600080fd5b600082601f830112611dd7578081fd5b813567ffffffffffffffff811115611df157611df16125aa565b611e046020601f19601f840116016124b3565b818152846020838601011115611e18578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611e43578081fd5b6105d382611d31565b60008060408385031215611e5e578081fd5b611e6783611d31565b946020939093013593505050565b600060208284031215611e86578081fd5b813567ffffffffffffffff811115611e9c578182fd5b611ea884828501611d48565b949350505050565b60008060408385031215611ec2578182fd5b823567ffffffffffffffff80821115611ed9578384fd5b611ee586838701611d48565b9350602091508185013581811115611efb578384fd5b85019050601f81018613611f0d578283fd5b8035611f1b611d68826124e4565b81815283810190838501858402850186018a1015611f37578687fd5b8694505b83851015611f6057611f4c81611d31565b835260019490940193918501918501611f3b565b5080955050505050509250929050565b600060208284031215611f81578081fd5b81516105d3816125c0565b600060208284031215611f9d578081fd5b6105d382611daf565b60008060408385031215611fb8578182fd5b611fc183611daf565b91506020830135611fd1816125c0565b809150509250929050565b600060208284031215611fed578081fd5b813567ffffffffffffffff811115612003578182fd5b611ea884828501611dc7565b60008060408385031215612021578182fd5b8235915061203160208401611d31565b90509250929050565b60008060006060848603121561204e578081fd5b8335925061205e60208501611d31565b9150604084013590509250925092565b6000815180845260208085018081965082840281019150828601855b858110156120b45782840389526120a28483516120c1565b9885019893509084019060010161208a565b5091979650505050505050565b60008151808452815b818110156120e6576020818501810151868301820152016120ca565b818111156120f75782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6000602082526105d3602083018461206e565b60006040825261215f604083018561206e565b828103602084810191909152845180835285820192820190845b81811015611da25784516001600160a01b031683529383019391830191600101612179565b901515815260200190565b6001600160e01b031991909116815260200190565b6000602082526105d360208301846120c1565b60208082526006908201527f54453a4e544d0000000000000000000000000000000000000000000000000000604082015260600190565b60208082526005908201527f54453a4943000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526005908201527f524d3a4d52000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526006908201527f4456313a49460000000000000000000000000000000000000000000000000000604082015260600190565b60208082526007908201527f4456313a49465300000000000000000000000000000000000000000000000000604082015260600190565b60208082526007908201527f4456313a464e4600000000000000000000000000000000000000000000000000604082015260600190565b60208082526008908201527f4456313a4e45514c000000000000000000000000000000000000000000000000604082015260600190565b60208082526007908201527f524d3a444e485200000000000000000000000000000000000000000000000000604082015260600190565b60208082526006908201527f4456313a46520000000000000000000000000000000000000000000000000000604082015260600190565b60208082526006908201527f4456313a5a460000000000000000000000000000000000000000000000000000604082015260600190565b60208082526006908201527f524d3a4148520000000000000000000000000000000000000000000000000000604082015260600190565b60208082526006908201527f4456313a5a4c0000000000000000000000000000000000000000000000000000604082015260600190565b60208082526005908201527f54453a5a41000000000000000000000000000000000000000000000000000000604082015260600190565b9182526001600160a01b0316602082015260400190565b604051601f8201601f1916810167ffffffffffffffff811182821017156124dc576124dc6125aa565b604052919050565b600067ffffffffffffffff8211156124fe576124fe6125aa565b5060209081020190565b6000821982111561251b5761251b612594565b500190565b60028104600182168061253457607f821691505b6020821081141561255557634e487b7160e01b600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561258d5761258d612594565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461098357600080fdfea2646970667358221220ccd78fb4769ff687bb1f1e8bd628e9a4cbad29b985d00f643c03643020d9cc7f64736f6c634300080100330000000000000000000000006790cb9f31901a2af8de860918b684c245efabf000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000001768747470733a2f2f6f72736574746f67616e672e636f6d0000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a
Deployed Bytecode
0x6080604052600436106100e15760003560e01c8063884a8f001161007f578063abc2876211610059578063abc2876214610284578063efc5f532146102a4578063fb2153c2146102d1578063fdf7c916146102f1576100e8565b8063884a8f00146102225780639553f75c14610244578063a48929d114610264576100e8565b80633c47b163116100bb5780633c47b1631461019d5780635c97f4a2146101bd57806367788084146101dd57806374e3d94914610200576100e8565b806301ffc9a7146101255780632856481c1461015b578063378b4b001461017d576100e8565b366100e857005b60006100ff6000356001600160e01b031916610311565b90503660008037600080366000845af43d6000803e808015610120573d6000f35b3d6000fd5b34801561013157600080fd5b50610145610140366004611f8c565b6103b0565b604051610152919061219e565b60405180910390f35b34801561016757600080fd5b5061017b61017636600461203a565b6103f5565b005b34801561018957600080fd5b5061017b610198366004611eb0565b61040d565b3480156101a957600080fd5b5061017b6101b836600461200f565b610525565b3480156101c957600080fd5b506101456101d8366004611e4c565b6105c7565b3480156101e957600080fd5b506101f26105da565b60405161015292919061214c565b34801561020c57600080fd5b50610215610640565b604051610152919061210c565b34801561022e57600080fd5b5061023761064f565b60405161015291906121be565b34801561025057600080fd5b5061014561025f366004611f8c565b6106e1565b34801561027057600080fd5b5061017b61027f366004611fdc565b610756565b34801561029057600080fd5b5061017b61029f366004611e75565b6107cb565b3480156102b057600080fd5b506102c46102bf366004611e32565b610893565b6040516101529190612139565b3480156102dd57600080fd5b5061017b6102ec366004611fa6565b6108f1565b3480156102fd57600080fd5b5061017b61030c36600461203a565b610970565b6001600160e01b031981166000908152600260205260408120546001600160a01b03168061035a5760405162461bcd60e51b8152600401610351906122e4565b60405180910390fd5b6001600160a01b03811660009081526004602090815260408083206001600160e01b03198716845290915290205460ff16156103a85760405162461bcd60e51b815260040161035190612389565b90505b919050565b60006001600160e01b031982167f80ac58cd0000000000000000000000000000000000000000000000000000000014156103ec575060016103ab565b6103a882610bf4565b6103ff8282610d62565b61040883610e14565b505050565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b6020909101526104607f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b60008251116104815760405162461bcd60e51b81526004016103519061242e565b80518251146104a25760405162461bcd60e51b81526004016103519061231b565b60005b82518110156104085760008382815181106104d057634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008383815181106104fc57634e487b7160e01b600052603260045260246000fd5b602002602001015190506105108282610e26565b5050808061051d9061255b565b9150506104a5565b600061052f6111eb565b905061053a82610990565b6001600160a01b03811615610408576040517f6a83f1090000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636a83f109906105909033908790600401612120565b600060405180830381600087803b1580156105aa57600080fd5b505af11580156105be573d6000803e3d6000fd5b50505050505050565b60006105d38383611204565b9392505050565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b6020909101526060806106307f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b610638611237565b915091509091565b600061064a6111eb565b905090565b60606006805461065e90612520565b80601f016020809104026020016040519081016040528092919081815260200182805461068a90612520565b80156106d75780601f106106ac576101008083540402835291602001916106d7565b820191906000526020600020905b8154815290600101906020018083116106ba57829003601f168201915b5050505050905090565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b60209091015260006107367f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b506001600160e01b03191660009081526005602052604090205460ff1690565b60408051808201909152600a81527f524f4c455f41444d494e000000000000000000000000000000000000000000006020909101526107b47f2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096610e1d565b80516107c7906006906020840190611c98565b5050565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b60209091015261081e7f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b600081511161083f5760405162461bcd60e51b81526004016103519061242e565b60005b81518110156107c757600082828151811061086d57634e487b7160e01b600052603260045260246000fd5b60200260200101519050610880816114ab565b508061088b8161255b565b915050610842565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b60209091015260606108e87f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b6103a88261151f565b6040805180820190915260128152712927a622afa224a0a6a7a7222fa0a226a4a760711b6020909101526109447f7d41cc998da5115908d5f060569efddde4c3bacf9b9002b4a70c2c7764f673f5610e1d565b6001600160e01b0319919091166000908152600560205260409020805460ff1916911515919091179055565b6103ff8282610aed565b61098381610990565b50565b6107c78282610aed565b6001600160a01b0381166109b65760405162461bcd60e51b815260040161035190612465565b6040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790610a02907f9acaf66000000000000000000000000000000000000000000000000000000000906004016121a9565b60206040518083038186803b158015610a1a57600080fd5b505afa158015610a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a529190611f70565b610a6e5760405162461bcd60e51b815260040161035190612208565b80610a77611865565b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03929092169190911790557fd9944277d62f69cc63c9bc5bd2158fef907119ed7f90fd406f1cdfada1097d50610acb611865565b54604051610ae2916001600160a01b03169061210c565b60405180910390a150565b610af561186f565b6000828152602091825260408082206001600160a01b0386168352909252205460ff1615610b355760405162461bcd60e51b8152600401610351906123f7565b6001610b3f61186f565b6000838152602091825260408082206001600160a01b0387168352909252819020805460ff191692151592909217909155517ffcb6b45ef5424ef7d19598014fef2f5f5af10c504287d60504ca515e17a472dc90610ba0908390859061249c565b60405180910390a15050565b7fde1b6f91cd9572e4381a8b8d203bdc268664230f56599f11d2ca9df8d397fb6f90565b7fd6cfccebecf684bbc10a5019ad1aed91fbc4f7461f5cd03e8c71240be4ca6bea90565b60006001600160e01b031982167f0c71a78b000000000000000000000000000000000000000000000000000000001415610c30575060006103ab565b6001600160e01b0319821660009081526005602052604090205460ff1615610c5a575060006103ab565b6001600160e01b031982166301ffc9a760e01b1415610c7b575060016103ab565b60005b600054811015610d59576000808281548110610caa57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516301ffc9a760e01b81526001600160a01b03909116915081906301ffc9a790610ce69087906004016121a9565b60206040518083038186803b158015610cfe57600080fd5b505afa158015610d12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d369190611f70565b15610d46576001925050506103ab565b5080610d518161255b565b915050610c7e565b50600092915050565b610d6a61186f565b6000828152602091825260408082206001600160a01b0386168352909252205460ff16610da95760405162461bcd60e51b815260040161035190612352565b6000610db361186f565b6000838152602091825260408082206001600160a01b0387168352909252819020805460ff191692151592909217909155517f3992d8cf6249af1b2bb6e542550b9bf348992deec040c06d2ed5c46de50eef7f90610ba0908390859061249c565b61098381611879565b6109838161192a565b6001600160a01b038116610e4c5760405162461bcd60e51b8152600401610351906123c0565b6040516301ffc9a760e01b81526001600160a01b038216906301ffc9a790610e98907f0c71a78b00000000000000000000000000000000000000000000000000000000906004016121a9565b60206040518083038186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee89190611f70565b610f045760405162461bcd60e51b815260040161035190612276565b6000610f0f83611968565b6001600160e01b03198116600090815260026020526040812080546001600160a01b0386811673ffffffffffffffffffffffffffffffffffffffff1983161790925592935090911690805b6001600160a01b038516600090815260036020526040902054811015611083576001600160a01b0385166000908152600360205260408120805461104f919084908110610fb757634e487b7160e01b600052603260045260246000fd5b906000526020600020018054610fcc90612520565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff890612520565b80156110455780601f1061101a57610100808354040283529160200191611045565b820191906000526020600020905b81548152906001019060200180831161102857829003601f168201915b5050505050611968565b6001600160e01b031990811691508516811415611070576001925050611083565b508061107b8161255b565b915050610f5a565b50806110c7576001600160a01b0384166000908152600360209081526040822080546001810182559083529181902087516110c5939190910191880190611c98565b505b6001600160a01b0380851660009081526004602090815260408083206001600160e01b0319881684529091529020805460ff1916905582161580159061111f5750836001600160a01b0316826001600160a01b031614155b1561115d576001600160a01b03821660009081526004602090815260408083206001600160e01b0319871684529091529020805460ff191660011790555b6001600160a01b0384166000908152600160205260409020546111e45760008054600180820183557f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881690811790915582549083526020919091526040909120555b5050505050565b60006111f5611865565b546001600160a01b0316905090565b600061120e61186f565b6000928352602090815260408084206001600160a01b0395909516845293905250205460ff1690565b6060806000805b6000548110156112cc57600080828154811061126a57634e487b7160e01b600052603260045260246000fd5b60009182526020822001546001600160a01b031691506112898261151f565b905060005b81518110156112b6576112a2600186612508565b9450806112ae8161255b565b91505061128e565b50505080806112c49061255b565b91505061123e565b5060008167ffffffffffffffff8111156112f657634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561132957816020015b60608152602001906001900390816113145790505b50905060008267ffffffffffffffff81111561135557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561137e578160200160208202803683370190505b5090506000805b60005481101561149f5760008082815481106113b157634e487b7160e01b600052603260045260246000fd5b60009182526020822001546001600160a01b031691506113d08261151f565b905060005b8151811015611489578181815181106113fe57634e487b7160e01b600052603260045260246000fd5b602002602001015187868151811061142657634e487b7160e01b600052603260045260246000fd5b60200260200101819052508286868151811061145257634e487b7160e01b600052603260045260246000fd5b6001600160a01b0390921660209283029190910190910152611475600186612508565b9450806114818161255b565b9150506113d5565b50505080806114979061255b565b915050611385565b50919450925050509091565b60006114b682611968565b6001600160e01b031981166000908152600260205260409020549091506001600160a01b03168015610408576001600160a01b03811660009081526004602090815260408083206001600160e01b0319861684529091529020805460ff19166001179055505050565b60606000805b6001600160a01b038416600090815260036020526040902054811015611678576001600160a01b038416600090815260036020526040812080548390811061157d57634e487b7160e01b600052603260045260246000fd5b90600052602060002001805461159290612520565b80601f01602080910402602001604051908101604052809291908181526020018280546115be90612520565b801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b50505050509050600061161d82611968565b6001600160a01b03871660009081526004602090815260408083206001600160e01b03198516845290915290205490915060ff1661166357611660600185612508565b93505b505080806116709061255b565b915050611525565b5060008167ffffffffffffffff8111156116a257634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156116d557816020015b60608152602001906001900390816116c05790505b5090506000805b6001600160a01b03861660009081526003602052604090205481101561185b576001600160a01b038616600090815260036020526040812080548390811061173457634e487b7160e01b600052603260045260246000fd5b90600052602060002001805461174990612520565b80601f016020809104026020016040519081016040528092919081815260200182805461177590612520565b80156117c25780601f10611797576101008083540402835291602001916117c2565b820191906000526020600020905b8154815290600101906020018083116117a557829003601f168201915b5050505050905060006117d482611968565b6001600160a01b03891660009081526004602090815260408083206001600160e01b03198516845290915290205490915060ff16611846578185858151811061182d57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152611843600185612508565b93505b505080806118539061255b565b9150506116dc565b5090949350505050565b600061064a610bac565b600061064a610bd0565b6000611883611865565b546001600160a01b031614156118ab5760405162461bcd60e51b8152600401610351906121d1565b6118b3611865565b546040517ff04907690000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063f0490769906118fc9033908590600401612120565b600060405180830381600087803b15801561191657600080fd5b505af11580156111e4573d6000803e3d6000fd5b61193261186f565b600082815260209182526040808220338352909252205460ff166109835760405162461bcd60e51b81526004016103519061223f565b600081815b8151811015611c8857600082828151811061199857634e487b7160e01b600052603260045260246000fd5b01602001516001600160f81b03191690507f30000000000000000000000000000000000000000000000000000000000000008110801590611a0357507f39000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b158015611a7157507f41000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821610801590611a6f57507f5a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b8015611ade57507f61000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821610801590611adc57507f7a000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821611155b155b8015611b1457507f24000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611b4a57507f5f000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611b8057507f2c000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611bb657507f28000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611bec57507f29000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611c2257507f5b000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b8015611c5857507f5d000000000000000000000000000000000000000000000000000000000000006001600160f81b0319821614155b15611c755760405162461bcd60e51b8152600401610351906122ad565b5080611c808161255b565b91505061196d565b5050815160208301209050919050565b828054611ca490612520565b90600052602060002090601f016020900481019282611cc65760008555611d0c565b82601f10611cdf57805160ff1916838001178555611d0c565b82800160010185558215611d0c579182015b82811115611d0c578251825591602001919060010190611cf1565b50611d18929150611d1c565b5090565b5b80821115611d185760008155600101611d1d565b80356001600160a01b03811681146103ab57600080fd5b600082601f830112611d58578081fd5b81356020611d6d611d68836124e4565b6124b3565b82815281810190858301855b85811015611da257611d90898684358b0101611dc7565b84529284019290840190600101611d79565b5090979650505050505050565b80356001600160e01b0319811681146103ab57600080fd5b600082601f830112611dd7578081fd5b813567ffffffffffffffff811115611df157611df16125aa565b611e046020601f19601f840116016124b3565b818152846020838601011115611e18578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611e43578081fd5b6105d382611d31565b60008060408385031215611e5e578081fd5b611e6783611d31565b946020939093013593505050565b600060208284031215611e86578081fd5b813567ffffffffffffffff811115611e9c578182fd5b611ea884828501611d48565b949350505050565b60008060408385031215611ec2578182fd5b823567ffffffffffffffff80821115611ed9578384fd5b611ee586838701611d48565b9350602091508185013581811115611efb578384fd5b85019050601f81018613611f0d578283fd5b8035611f1b611d68826124e4565b81815283810190838501858402850186018a1015611f37578687fd5b8694505b83851015611f6057611f4c81611d31565b835260019490940193918501918501611f3b565b5080955050505050509250929050565b600060208284031215611f81578081fd5b81516105d3816125c0565b600060208284031215611f9d578081fd5b6105d382611daf565b60008060408385031215611fb8578182fd5b611fc183611daf565b91506020830135611fd1816125c0565b809150509250929050565b600060208284031215611fed578081fd5b813567ffffffffffffffff811115612003578182fd5b611ea884828501611dc7565b60008060408385031215612021578182fd5b8235915061203160208401611d31565b90509250929050565b60008060006060848603121561204e578081fd5b8335925061205e60208501611d31565b9150604084013590509250925092565b6000815180845260208085018081965082840281019150828601855b858110156120b45782840389526120a28483516120c1565b9885019893509084019060010161208a565b5091979650505050505050565b60008151808452815b818110156120e6576020818501810151868301820152016120ca565b818111156120f75782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6000602082526105d3602083018461206e565b60006040825261215f604083018561206e565b828103602084810191909152845180835285820192820190845b81811015611da25784516001600160a01b031683529383019391830191600101612179565b901515815260200190565b6001600160e01b031991909116815260200190565b6000602082526105d360208301846120c1565b60208082526006908201527f54453a4e544d0000000000000000000000000000000000000000000000000000604082015260600190565b60208082526005908201527f54453a4943000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526005908201527f524d3a4d52000000000000000000000000000000000000000000000000000000604082015260600190565b60208082526006908201527f4456313a49460000000000000000000000000000000000000000000000000000604082015260600190565b60208082526007908201527f4456313a49465300000000000000000000000000000000000000000000000000604082015260600190565b60208082526007908201527f4456313a464e4600000000000000000000000000000000000000000000000000604082015260600190565b60208082526008908201527f4456313a4e45514c000000000000000000000000000000000000000000000000604082015260600190565b60208082526007908201527f524d3a444e485200000000000000000000000000000000000000000000000000604082015260600190565b60208082526006908201527f4456313a46520000000000000000000000000000000000000000000000000000604082015260600190565b60208082526006908201527f4456313a5a460000000000000000000000000000000000000000000000000000604082015260600190565b60208082526006908201527f524d3a4148520000000000000000000000000000000000000000000000000000604082015260600190565b60208082526006908201527f4456313a5a4c0000000000000000000000000000000000000000000000000000604082015260600190565b60208082526005908201527f54453a5a41000000000000000000000000000000000000000000000000000000604082015260600190565b9182526001600160a01b0316602082015260400190565b604051601f8201601f1916810167ffffffffffffffff811182821017156124dc576124dc6125aa565b604052919050565b600067ffffffffffffffff8211156124fe576124fe6125aa565b5060209081020190565b6000821982111561251b5761251b612594565b500190565b60028104600182168061253457607f821691505b6020821081141561255557634e487b7160e01b600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561258d5761258d612594565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461098357600080fdfea2646970667358221220ccd78fb4769ff687bb1f1e8bd628e9a4cbad29b985d00f643c03643020d9cc7f64736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006790cb9f31901a2af8de860918b684c245efabf000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000001768747470733a2f2f6f72736574746f67616e672e636f6d0000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a
-----Decoded View---------------
Arg [0] : taskManager (address): 0x6790cb9f31901a2Af8de860918b684c245EfAbf0
Arg [1] : detailsURI (string): https://orsettogang.com
Arg [2] : admins (address[]): 0x442F94EfBDDcFb4d7dF4d8E3B03B2bD4eC42A0d0,0xEd337A1599E63eA9C0A042A674a021fE90c4791a
Arg [3] : tokenManagers (address[]): 0x442F94EfBDDcFb4d7dF4d8E3B03B2bD4eC42A0d0,0xEd337A1599E63eA9C0A042A674a021fE90c4791a
Arg [4] : vaultAdmins (address[]): 0x442F94EfBDDcFb4d7dF4d8E3B03B2bD4eC42A0d0,0xEd337A1599E63eA9C0A042A674a021fE90c4791a
Arg [5] : diamondAdmins (address[]): 0x442F94EfBDDcFb4d7dF4d8E3B03B2bD4eC42A0d0,0xEd337A1599E63eA9C0A042A674a021fE90c4791a
-----Encoded View---------------
20 Constructor Arguments found :
Arg [0] : 0000000000000000000000006790cb9f31901a2af8de860918b684c245efabf0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [7] : 68747470733a2f2f6f72736574746f67616e672e636f6d000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0
Arg [10] : 000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [12] : 000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0
Arg [13] : 000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [15] : 000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0
Arg [16] : 000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [18] : 000000000000000000000000442f94efbddcfb4d7df4d8e3b03b2bd4ec42a0d0
Arg [19] : 000000000000000000000000ed337a1599e63ea9c0a042a674a021fe90c4791a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.