Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Sponsored
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
107510550 | 444 days ago | 0 ETH | ||||
107357093 | 448 days ago | 0 ETH | ||||
107357093 | 448 days ago | 0 ETH | ||||
107317810 | 449 days ago | 0 ETH | ||||
107317810 | 449 days ago | 0 ETH | ||||
107317810 | 449 days ago | 0 ETH | ||||
107317810 | 449 days ago | 0 ETH | ||||
107317810 | 449 days ago | 0 ETH | ||||
107317722 | 449 days ago | 0 ETH | ||||
107312783 | 449 days ago | 0 ETH | ||||
107312249 | 449 days ago | 0 ETH | ||||
107311337 | 449 days ago | 0 ETH | ||||
107281896 | 450 days ago | 0 ETH | ||||
107271364 | 450 days ago | 0 ETH | ||||
107271364 | 450 days ago | 0 ETH | ||||
107189115 | 452 days ago | 0 ETH | ||||
107189115 | 452 days ago | 0 ETH | ||||
107189115 | 452 days ago | 0 ETH | ||||
107185728 | 452 days ago | 0 ETH | ||||
107185728 | 452 days ago | 0 ETH | ||||
107185728 | 452 days ago | 0 ETH | ||||
107006498 | 456 days ago | 0 ETH | ||||
107006498 | 456 days ago | 0 ETH | ||||
106972602 | 457 days ago | 0 ETH | ||||
106946029 | 458 days ago | 0 ETH |
Loading...
Loading
Contract Name:
DhedgeNftTrackerStorage
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 20 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; pragma experimental ABIEncoderV2; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "../../interfaces/IHasGuardInfo.sol"; contract DhedgeNftTrackerStorage is OwnableUpgradeable { address public poolFactory; // dhedge pool factory mapping(bytes32 => mapping(address => bytes[])) internal _nftTrackData; // keccak of NFT_TYPE -> poolAddress -> data[] // solhint-disable-next-line no-empty-blocks function initialize(address _poolFactory) external initializer { __Ownable_init(); poolFactory = _poolFactory; } /// @notice implementations should not be left unintialized // solhint-disable-next-line no-empty-blocks function implInitializer() external initializer {} modifier checkContractGuard(address _guardedContract) { require(IHasGuardInfo(poolFactory).getContractGuard(_guardedContract) == msg.sender, "not correct contract guard"); _; } /** * @notice record new NFT data * @dev only called by authorized guard * @param _guardedContract the address of contract using nftStorage * @param _nftType keccak of NFT_TYPE * @param _pool the poolLogic address * @param _data the nft track data to be recorded in storage */ function addData( address _guardedContract, bytes32 _nftType, address _pool, bytes memory _data ) external checkContractGuard(_guardedContract) { _addData(_nftType, _pool, _data); } /** * @notice record new NFT data * @dev only called by authorized guard * @param _nftType keccak of NFT_TYPE * @param _pool the poolLogic address * @param _data the nft track data to be recorded in storage */ function _addData( bytes32 _nftType, address _pool, bytes memory _data ) private { _nftTrackData[_nftType][_pool].push(_data); } /** * @notice delete NFT data * @dev only called by authorized guard * @param _guardedContract the address of contract using nftStorage * @param _nftType keccak of NFT_TYPE * @param _pool the poolLogic address * @param _index the nft track data index to be removed from storage */ function removeData( address _guardedContract, bytes32 _nftType, address _pool, uint256 _index ) external checkContractGuard(_guardedContract) { _removeData(_nftType, _pool, _index); } /** * @notice delete NFT data * @dev only called by authorized guard * @param _nftType keccak of NFT_TYPE * @param _pool the poolLogic address * @param _index the nft track data index to be removed from storage */ function _removeData( bytes32 _nftType, address _pool, uint256 _index ) private { uint256 length = _nftTrackData[_nftType][_pool].length; require(_index < length, "invalid index"); _nftTrackData[_nftType][_pool][_index] = _nftTrackData[_nftType][_pool][length - 1]; _nftTrackData[_nftType][_pool].pop(); } /** * @notice returns tracked nft by index * @param _nftType keccak of NFT_TYPE * @param _pool the poolLogic address * @param _index the index of nft track data * @return data the nft track data of given NFT_TYPE & poolLogic & index */ function getData( bytes32 _nftType, address _pool, uint256 _index ) external view returns (bytes memory) { return _nftTrackData[_nftType][_pool][_index]; } /** * @notice returns all tracked nfts by NFT_TYPE & poolLogic * @param _nftType keccak of NFT_TYPE * @param _pool the poolLogic address * @return data all tracked nfts of given NFT_TYPE & poolLogic */ function getAllData(bytes32 _nftType, address _pool) public view returns (bytes[] memory) { return _nftTrackData[_nftType][_pool]; } /** * @notice returns all tracked nfts by NFT_TYPE & poolLogic * @param _nftType keccak of NFT_TYPE * @param _pool the poolLogic address * @return count all tracked nfts count of given NFT_TYPE & poolLogic */ function getDataCount(bytes32 _nftType, address _pool) public view returns (uint256) { return _nftTrackData[_nftType][_pool].length; } /** * @notice returns all tracked nft ids by NFT_TYPE & poolLogic if stored as uint256 * @param _nftType keccak of NFT_TYPE * @param _pool the poolLogic address * @return tokenIds all tracked nfts of given NFT_TYPE & poolLogic */ function getAllUintIds(bytes32 _nftType, address _pool) public view returns (uint256[] memory tokenIds) { bytes[] memory data = getAllData(_nftType, _pool); tokenIds = new uint256[](data.length); for (uint256 i = 0; i < data.length; i++) { tokenIds[i] = abi.decode(data[i], (uint256)); } } /** * @notice record new NFT uint256 id * @dev only called by authorized guard * @param _guardedContract the address of contract using nftStorage * @param _nftType keccak of NFT_TYPE * @param _pool the poolLogic address * @param _nftID the nft id recorded in storage */ function addUintId( address _guardedContract, bytes32 _nftType, address _pool, uint256 _nftID, uint256 _maxPositions ) external checkContractGuard(_guardedContract) { _addData(_nftType, _pool, abi.encode(_nftID)); require(getDataCount(_nftType, _pool) <= _maxPositions, "max position reached"); } /** * @notice record new NFT uint256 id * @dev only called by authorized guard * @param _guardedContract the address of contract using nftStorage * @param _nftType keccak of NFT_TYPE * @param _pool the poolLogic address * @param _nftID the nft id recorded in storage */ function removeUintId( address _guardedContract, bytes32 _nftType, address _pool, uint256 _nftID ) external checkContractGuard(_guardedContract) { bytes[] memory data = getAllData(_nftType, _pool); for (uint256 i = 0; i < data.length; i++) { if (abi.decode(data[i], (uint256)) == _nftID) { _removeData(_nftType, _pool, i); return; } } revert("not found"); } function removeDataByUintId( bytes32 _nftType, address _pool, uint256 _nftID ) external onlyOwner { bytes[] memory data = getAllData(_nftType, _pool); for (uint256 i = 0; i < data.length; i++) { if (abi.decode(data[i], (uint256)) == _nftID) { _removeData(_nftType, _pool, i); return; } } revert("not found"); } function removeDataByIndex( bytes32 _nftType, address _pool, uint256 _index ) external onlyOwner { _removeData(_nftType, _pool, _index); } function addDataByUintId( bytes32 _nftType, address _pool, uint256 _nftID ) external onlyOwner { _addData(_nftType, _pool, abi.encode(_nftID)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; import "../utils/ContextUpgradeable.sol"; import "../proxy/Initializable.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 OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; }
// SPDX-License-Identifier: MIT // solhint-disable-next-line compiler-version pragma solidity >=0.4.24 <0.8.0; import "../utils/AddressUpgradeable.sol"; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || _isConstructor() || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function _isConstructor() private view returns (bool) { return !AddressUpgradeable.isContract(address(this)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "../proxy/Initializable.sol"; /* * @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 GSN 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 ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; }
// // __ __ __ ________ _______ ______ ________ // / |/ | / |/ |/ \ / \ / | // ____$$ |$$ | $$ |$$$$$$$$/ $$$$$$$ |/$$$$$$ |$$$$$$$$/ // / $$ |$$ |__$$ |$$ |__ $$ | $$ |$$ | _$$/ $$ |__ // /$$$$$$$ |$$ $$ |$$ | $$ | $$ |$$ |/ |$$ | // $$ | $$ |$$$$$$$$ |$$$$$/ $$ | $$ |$$ |$$$$ |$$$$$/ // $$ \__$$ |$$ | $$ |$$ |_____ $$ |__$$ |$$ \__$$ |$$ |_____ // $$ $$ |$$ | $$ |$$ |$$ $$/ $$ $$/ $$ | // $$$$$$$/ $$/ $$/ $$$$$$$$/ $$$$$$$/ $$$$$$/ $$$$$$$$/ // // dHEDGE DAO - https://dhedge.org // // Copyright (c) 2021 dHEDGE DAO // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // // SPDX-License-Identifier: MIT pragma solidity 0.7.6; interface IHasGuardInfo { // Get guard function getContractGuard(address extContract) external view returns (address); // Get asset guard function getAssetGuard(address extContract) external view returns (address); // Get mapped addresses from Governance function getAddress(bytes32 name) external view returns (address); }
{ "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "optimizer": { "enabled": true, "runs": 20 }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_guardedContract","type":"address"},{"internalType":"bytes32","name":"_nftType","type":"bytes32"},{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"addData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_nftType","type":"bytes32"},{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_nftID","type":"uint256"}],"name":"addDataByUintId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_guardedContract","type":"address"},{"internalType":"bytes32","name":"_nftType","type":"bytes32"},{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_nftID","type":"uint256"},{"internalType":"uint256","name":"_maxPositions","type":"uint256"}],"name":"addUintId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_nftType","type":"bytes32"},{"internalType":"address","name":"_pool","type":"address"}],"name":"getAllData","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_nftType","type":"bytes32"},{"internalType":"address","name":"_pool","type":"address"}],"name":"getAllUintIds","outputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_nftType","type":"bytes32"},{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_nftType","type":"bytes32"},{"internalType":"address","name":"_pool","type":"address"}],"name":"getDataCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implInitializer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_poolFactory","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_guardedContract","type":"address"},{"internalType":"bytes32","name":"_nftType","type":"bytes32"},{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"removeData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_nftType","type":"bytes32"},{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"removeDataByIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_nftType","type":"bytes32"},{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_nftID","type":"uint256"}],"name":"removeDataByUintId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_guardedContract","type":"address"},{"internalType":"bytes32","name":"_nftType","type":"bytes32"},{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_nftID","type":"uint256"}],"name":"removeUintId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50611677806100206000396000f3fe608060405234801561001057600080fd5b50600436106100db5760003560e01c806307120115146100e05780632df1384c146100ea5780633c9a87d8146101135780634219dc401461012657806354d8c4ba1461013b578063715018a61461014e57806376d1bdf6146101565780638ac31ac3146101695780638da5cb5b1461017c5780638f6bf27914610184578063ab05368414610197578063adee6197146101b7578063c4d66de8146101d7578063ca33b110146101ea578063cc622e72146101fd578063d6b6aa4914610210578063f2fde38b14610230575b600080fd5b6100e8610243565b005b6100fd6100f836600461137e565b6102e5565b60405161010a91906114d0565b60405180910390f35b6100e861012136600461137e565b6103b3565b61012e610425565b60405161010a9190611418565b6100e86101493660046111f4565b610434565b6100e86104f9565b6100e86101643660046112fe565b610593565b6100e86101773660046112b7565b610698565b61012e6107bd565b6100e861019236600461137e565b6107cc565b6101aa6101a536600461134f565b610890565b60405161010a919061158f565b6101ca6101c536600461134f565b6108b8565b60405161010a919061142c565b6100e86101e53660046111b5565b6109ae565b6100e86101f836600461137e565b610a74565b6100e861020b3660046112b7565b610aec565b61022361021e36600461134f565b610ba1565b60405161010a919061148c565b6100e861023e3660046111b5565b610c4f565b600054610100900460ff168061025c575061025c610d40565b8061026a575060005460ff16155b6102a55760405162461bcd60e51b815260040180806020018281038252602e8152602001806115d4602e913960400191505060405180910390fd5b600054610100900460ff161580156102d0576000805460ff1961ff0019909116610100171660011790555b80156102e2576000805461ff00191690555b50565b60008381526066602090815260408083206001600160a01b038616845290915290208054606091908390811061031757fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b820191906000526020600020905b81548152906001019060200180831161038857829003601f168201915b505050505090509392505050565b6103bb610d51565b6001600160a01b03166103cc6107bd565b6001600160a01b031614610415576040805162461bcd60e51b81526020600482018190526024820152600080516020611602833981519152604482015290519081900360640190fd5b610420838383610d55565b505050565b6065546001600160a01b031681565b606554604051634f8419b960e01b8152859133916001600160a01b0390911690634f8419b990610468908590600401611418565b60206040518083038186803b15801561048057600080fd5b505afa158015610494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b891906111d8565b6001600160a01b0316146104e75760405162461bcd60e51b81526004016104de906114e3565b60405180910390fd5b6104f2848484610e7a565b5050505050565b610501610d51565b6001600160a01b03166105126107bd565b6001600160a01b03161461055b576040805162461bcd60e51b81526020600482018190526024820152600080516020611602833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020611622833981519152908390a3603380546001600160a01b0319169055565b606554604051634f8419b960e01b8152869133916001600160a01b0390911690634f8419b9906105c7908590600401611418565b60206040518083038186803b1580156105df57600080fd5b505afa1580156105f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061791906111d8565b6001600160a01b03161461063d5760405162461bcd60e51b81526004016104de906114e3565b610667858585604051602001610653919061158f565b604051602081830303815290604052610e7a565b816106728686610890565b11156106905760405162461bcd60e51b81526004016104de9061153a565b505050505050565b606554604051634f8419b960e01b8152859133916001600160a01b0390911690634f8419b9906106cc908590600401611418565b60206040518083038186803b1580156106e457600080fd5b505afa1580156106f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071c91906111d8565b6001600160a01b0316146107425760405162461bcd60e51b81526004016104de906114e3565b600061074e85856108b8565b905060005b81518110156107a4578382828151811061076957fe5b602002602001015180602001905181019061078491906113b5565b141561079c57610795868683610d55565b50506104f2565b600101610753565b5060405162461bcd60e51b81526004016104de90611517565b6033546001600160a01b031690565b6107d4610d51565b6001600160a01b03166107e56107bd565b6001600160a01b03161461082e576040805162461bcd60e51b81526020600482018190526024820152600080516020611602833981519152604482015290519081900360640190fd5b600061083a84846108b8565b905060005b81518110156107a4578282828151811061085557fe5b602002602001015180602001905181019061087091906113b5565b141561088857610881858583610d55565b5050610420565b60010161083f565b60009182526066602090815260408084206001600160a01b0393909316845291905290205490565b60008281526066602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156109a25760008481526020908190208301805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561098e5780601f106109635761010080835404028352916020019161098e565b820191906000526020600020905b81548152906001019060200180831161097157829003601f168201915b5050505050815260200190600101906108f7565b50505050905092915050565b600054610100900460ff16806109c757506109c7610d40565b806109d5575060005460ff16155b610a105760405162461bcd60e51b815260040180806020018281038252602e8152602001806115d4602e913960400191505060405180910390fd5b600054610100900460ff16158015610a3b576000805460ff1961ff0019909116610100171660011790555b610a43610ec3565b606580546001600160a01b0319166001600160a01b0384161790558015610a70576000805461ff00191690555b5050565b610a7c610d51565b6001600160a01b0316610a8d6107bd565b6001600160a01b031614610ad6576040805162461bcd60e51b81526020600482018190526024820152600080516020611602833981519152604482015290519081900360640190fd5b610420838383604051602001610653919061158f565b606554604051634f8419b960e01b8152859133916001600160a01b0390911690634f8419b990610b20908590600401611418565b60206040518083038186803b158015610b3857600080fd5b505afa158015610b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7091906111d8565b6001600160a01b031614610b965760405162461bcd60e51b81526004016104de906114e3565b6104f2848484610d55565b60606000610baf84846108b8565b905080516001600160401b0381118015610bc857600080fd5b50604051908082528060200260200182016040528015610bf2578160200160208202803683370190505b50915060005b8151811015610c4757818181518110610c0d57fe5b6020026020010151806020019051810190610c2891906113b5565b838281518110610c3457fe5b6020908102919091010152600101610bf8565b505092915050565b610c57610d51565b6001600160a01b0316610c686107bd565b6001600160a01b031614610cb1576040805162461bcd60e51b81526020600482018190526024820152600080516020611602833981519152604482015290519081900360640190fd5b6001600160a01b038116610cf65760405162461bcd60e51b81526004018080602001828103825260268152602001806115ae6026913960400191505060405180910390fd5b6033546040516001600160a01b0380841692169060008051602061162283398151915290600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d4b30610f60565b15905090565b3390565b60008381526066602090815260408083206001600160a01b0386168452909152902054808210610d975760405162461bcd60e51b81526004016104de90611568565b60008481526066602090815260408083206001600160a01b0387168452909152902080546000198301908110610dc957fe5b600091825260208083208784526066825260408085206001600160a01b038916865290925292208054929091019184908110610e0157fe5b906000526020600020019080546001816001161561010002031660029004610e2a92919061104d565b5060008481526066602090815260408083206001600160a01b03871684529091529020805480610e5657fe5b600190038181906000526020600020016000610e7291906110e0565b905550505050565b60008381526066602090815260408083206001600160a01b0386168452825282208054600181018255908352918190208351610ebd939190910191840190611124565b50505050565b600054610100900460ff1680610edc5750610edc610d40565b80610eea575060005460ff16155b610f255760405162461bcd60e51b815260040180806020018281038252602e8152602001806115d4602e913960400191505060405180910390fd5b600054610100900460ff16158015610f50576000805460ff1961ff0019909116610100171660011790555b610f58610243565b6102d0610f66565b3b151590565b600054610100900460ff1680610f7f5750610f7f610d40565b80610f8d575060005460ff16155b610fc85760405162461bcd60e51b815260040180806020018281038252602e8152602001806115d4602e913960400191505060405180910390fd5b600054610100900460ff16158015610ff3576000805460ff1961ff0019909116610100171660011790555b6000610ffd610d51565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020611622833981519152908290a35080156102e2576000805461ff001916905550565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261108357600085556110d0565b82601f1061109457805485556110d0565b828001600101855582156110d057600052602060002091601f016020900482015b828111156110d05782548255916001019190600101906110b5565b506110dc9291506111a0565b5090565b50805460018160011615610100020316600290046000825580601f1061110657506102e2565b601f0160209004906000526020600020908101906102e291906111a0565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261115a57600085556110d0565b82601f1061117357805160ff19168380011785556110d0565b828001600101855582156110d0579182015b828111156110d0578251825591602001919060010190611185565b5b808211156110dc57600081556001016111a1565b6000602082840312156111c6578081fd5b81356111d181611598565b9392505050565b6000602082840312156111e9578081fd5b81516111d181611598565b60008060008060808587031215611209578283fd5b843561121481611598565b93506020858101359350604086013561122c81611598565b925060608601356001600160401b0380821115611247578384fd5b818801915088601f83011261125a578384fd5b81358181111561126657fe5b604051601f8201601f191681018501838111828210171561128357fe5b60405281815283820185018b1015611299578586fd5b81858501868301379081019093019390935250939692955090935050565b600080600080608085870312156112cc578384fd5b84356112d781611598565b93506020850135925060408501356112ee81611598565b9396929550929360600135925050565b600080600080600060a08688031215611315578081fd5b853561132081611598565b945060208601359350604086013561133781611598565b94979396509394606081013594506080013592915050565b60008060408385031215611361578182fd5b82359150602083013561137381611598565b809150509250929050565b600080600060608486031215611392578283fd5b8335925060208401356113a481611598565b929592945050506040919091013590565b6000602082840312156113c6578081fd5b5051919050565b60008151808452815b818110156113f2576020818501810151868301820152016113d6565b818111156114035782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561147f57603f1988860301845261146d8583516113cd565b94509285019290850190600101611451565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156114c4578351835292840192918401916001016114a8565b50909695505050505050565b6000602082526111d160208301846113cd565b6020808252601a90820152791b9bdd0818dbdc9c9958dd0818dbdb9d1c9858dd0819dd585c9960321b604082015260600190565b6020808252600990820152681b9bdd08199bdd5b9960ba1b604082015260600190565b6020808252601490820152731b585e081c1bdcda5d1a5bdb881c995858da195960621b604082015260600190565b6020808252600d908201526c0d2dcecc2d8d2c840d2dcc8caf609b1b604082015260600190565b90815260200190565b6001600160a01b03811681146102e257600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a264697066735822122040b37c34d7e3bab5000826aa960e1d2def07495a3a947dfddedb68f7820ff03664736f6c63430007060033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100db5760003560e01c806307120115146100e05780632df1384c146100ea5780633c9a87d8146101135780634219dc401461012657806354d8c4ba1461013b578063715018a61461014e57806376d1bdf6146101565780638ac31ac3146101695780638da5cb5b1461017c5780638f6bf27914610184578063ab05368414610197578063adee6197146101b7578063c4d66de8146101d7578063ca33b110146101ea578063cc622e72146101fd578063d6b6aa4914610210578063f2fde38b14610230575b600080fd5b6100e8610243565b005b6100fd6100f836600461137e565b6102e5565b60405161010a91906114d0565b60405180910390f35b6100e861012136600461137e565b6103b3565b61012e610425565b60405161010a9190611418565b6100e86101493660046111f4565b610434565b6100e86104f9565b6100e86101643660046112fe565b610593565b6100e86101773660046112b7565b610698565b61012e6107bd565b6100e861019236600461137e565b6107cc565b6101aa6101a536600461134f565b610890565b60405161010a919061158f565b6101ca6101c536600461134f565b6108b8565b60405161010a919061142c565b6100e86101e53660046111b5565b6109ae565b6100e86101f836600461137e565b610a74565b6100e861020b3660046112b7565b610aec565b61022361021e36600461134f565b610ba1565b60405161010a919061148c565b6100e861023e3660046111b5565b610c4f565b600054610100900460ff168061025c575061025c610d40565b8061026a575060005460ff16155b6102a55760405162461bcd60e51b815260040180806020018281038252602e8152602001806115d4602e913960400191505060405180910390fd5b600054610100900460ff161580156102d0576000805460ff1961ff0019909116610100171660011790555b80156102e2576000805461ff00191690555b50565b60008381526066602090815260408083206001600160a01b038616845290915290208054606091908390811061031757fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156103a55780601f1061037a576101008083540402835291602001916103a5565b820191906000526020600020905b81548152906001019060200180831161038857829003601f168201915b505050505090509392505050565b6103bb610d51565b6001600160a01b03166103cc6107bd565b6001600160a01b031614610415576040805162461bcd60e51b81526020600482018190526024820152600080516020611602833981519152604482015290519081900360640190fd5b610420838383610d55565b505050565b6065546001600160a01b031681565b606554604051634f8419b960e01b8152859133916001600160a01b0390911690634f8419b990610468908590600401611418565b60206040518083038186803b15801561048057600080fd5b505afa158015610494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b891906111d8565b6001600160a01b0316146104e75760405162461bcd60e51b81526004016104de906114e3565b60405180910390fd5b6104f2848484610e7a565b5050505050565b610501610d51565b6001600160a01b03166105126107bd565b6001600160a01b03161461055b576040805162461bcd60e51b81526020600482018190526024820152600080516020611602833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020611622833981519152908390a3603380546001600160a01b0319169055565b606554604051634f8419b960e01b8152869133916001600160a01b0390911690634f8419b9906105c7908590600401611418565b60206040518083038186803b1580156105df57600080fd5b505afa1580156105f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061791906111d8565b6001600160a01b03161461063d5760405162461bcd60e51b81526004016104de906114e3565b610667858585604051602001610653919061158f565b604051602081830303815290604052610e7a565b816106728686610890565b11156106905760405162461bcd60e51b81526004016104de9061153a565b505050505050565b606554604051634f8419b960e01b8152859133916001600160a01b0390911690634f8419b9906106cc908590600401611418565b60206040518083038186803b1580156106e457600080fd5b505afa1580156106f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071c91906111d8565b6001600160a01b0316146107425760405162461bcd60e51b81526004016104de906114e3565b600061074e85856108b8565b905060005b81518110156107a4578382828151811061076957fe5b602002602001015180602001905181019061078491906113b5565b141561079c57610795868683610d55565b50506104f2565b600101610753565b5060405162461bcd60e51b81526004016104de90611517565b6033546001600160a01b031690565b6107d4610d51565b6001600160a01b03166107e56107bd565b6001600160a01b03161461082e576040805162461bcd60e51b81526020600482018190526024820152600080516020611602833981519152604482015290519081900360640190fd5b600061083a84846108b8565b905060005b81518110156107a4578282828151811061085557fe5b602002602001015180602001905181019061087091906113b5565b141561088857610881858583610d55565b5050610420565b60010161083f565b60009182526066602090815260408084206001600160a01b0393909316845291905290205490565b60008281526066602090815260408083206001600160a01b03851684528252808320805482518185028101850190935280835260609492939192909184015b828210156109a25760008481526020908190208301805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561098e5780601f106109635761010080835404028352916020019161098e565b820191906000526020600020905b81548152906001019060200180831161097157829003601f168201915b5050505050815260200190600101906108f7565b50505050905092915050565b600054610100900460ff16806109c757506109c7610d40565b806109d5575060005460ff16155b610a105760405162461bcd60e51b815260040180806020018281038252602e8152602001806115d4602e913960400191505060405180910390fd5b600054610100900460ff16158015610a3b576000805460ff1961ff0019909116610100171660011790555b610a43610ec3565b606580546001600160a01b0319166001600160a01b0384161790558015610a70576000805461ff00191690555b5050565b610a7c610d51565b6001600160a01b0316610a8d6107bd565b6001600160a01b031614610ad6576040805162461bcd60e51b81526020600482018190526024820152600080516020611602833981519152604482015290519081900360640190fd5b610420838383604051602001610653919061158f565b606554604051634f8419b960e01b8152859133916001600160a01b0390911690634f8419b990610b20908590600401611418565b60206040518083038186803b158015610b3857600080fd5b505afa158015610b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7091906111d8565b6001600160a01b031614610b965760405162461bcd60e51b81526004016104de906114e3565b6104f2848484610d55565b60606000610baf84846108b8565b905080516001600160401b0381118015610bc857600080fd5b50604051908082528060200260200182016040528015610bf2578160200160208202803683370190505b50915060005b8151811015610c4757818181518110610c0d57fe5b6020026020010151806020019051810190610c2891906113b5565b838281518110610c3457fe5b6020908102919091010152600101610bf8565b505092915050565b610c57610d51565b6001600160a01b0316610c686107bd565b6001600160a01b031614610cb1576040805162461bcd60e51b81526020600482018190526024820152600080516020611602833981519152604482015290519081900360640190fd5b6001600160a01b038116610cf65760405162461bcd60e51b81526004018080602001828103825260268152602001806115ae6026913960400191505060405180910390fd5b6033546040516001600160a01b0380841692169060008051602061162283398151915290600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d4b30610f60565b15905090565b3390565b60008381526066602090815260408083206001600160a01b0386168452909152902054808210610d975760405162461bcd60e51b81526004016104de90611568565b60008481526066602090815260408083206001600160a01b0387168452909152902080546000198301908110610dc957fe5b600091825260208083208784526066825260408085206001600160a01b038916865290925292208054929091019184908110610e0157fe5b906000526020600020019080546001816001161561010002031660029004610e2a92919061104d565b5060008481526066602090815260408083206001600160a01b03871684529091529020805480610e5657fe5b600190038181906000526020600020016000610e7291906110e0565b905550505050565b60008381526066602090815260408083206001600160a01b0386168452825282208054600181018255908352918190208351610ebd939190910191840190611124565b50505050565b600054610100900460ff1680610edc5750610edc610d40565b80610eea575060005460ff16155b610f255760405162461bcd60e51b815260040180806020018281038252602e8152602001806115d4602e913960400191505060405180910390fd5b600054610100900460ff16158015610f50576000805460ff1961ff0019909116610100171660011790555b610f58610243565b6102d0610f66565b3b151590565b600054610100900460ff1680610f7f5750610f7f610d40565b80610f8d575060005460ff16155b610fc85760405162461bcd60e51b815260040180806020018281038252602e8152602001806115d4602e913960400191505060405180910390fd5b600054610100900460ff16158015610ff3576000805460ff1961ff0019909116610100171660011790555b6000610ffd610d51565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020611622833981519152908290a35080156102e2576000805461ff001916905550565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261108357600085556110d0565b82601f1061109457805485556110d0565b828001600101855582156110d057600052602060002091601f016020900482015b828111156110d05782548255916001019190600101906110b5565b506110dc9291506111a0565b5090565b50805460018160011615610100020316600290046000825580601f1061110657506102e2565b601f0160209004906000526020600020908101906102e291906111a0565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261115a57600085556110d0565b82601f1061117357805160ff19168380011785556110d0565b828001600101855582156110d0579182015b828111156110d0578251825591602001919060010190611185565b5b808211156110dc57600081556001016111a1565b6000602082840312156111c6578081fd5b81356111d181611598565b9392505050565b6000602082840312156111e9578081fd5b81516111d181611598565b60008060008060808587031215611209578283fd5b843561121481611598565b93506020858101359350604086013561122c81611598565b925060608601356001600160401b0380821115611247578384fd5b818801915088601f83011261125a578384fd5b81358181111561126657fe5b604051601f8201601f191681018501838111828210171561128357fe5b60405281815283820185018b1015611299578586fd5b81858501868301379081019093019390935250939692955090935050565b600080600080608085870312156112cc578384fd5b84356112d781611598565b93506020850135925060408501356112ee81611598565b9396929550929360600135925050565b600080600080600060a08688031215611315578081fd5b853561132081611598565b945060208601359350604086013561133781611598565b94979396509394606081013594506080013592915050565b60008060408385031215611361578182fd5b82359150602083013561137381611598565b809150509250929050565b600080600060608486031215611392578283fd5b8335925060208401356113a481611598565b929592945050506040919091013590565b6000602082840312156113c6578081fd5b5051919050565b60008151808452815b818110156113f2576020818501810151868301820152016113d6565b818111156114035782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561147f57603f1988860301845261146d8583516113cd565b94509285019290850190600101611451565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156114c4578351835292840192918401916001016114a8565b50909695505050505050565b6000602082526111d160208301846113cd565b6020808252601a90820152791b9bdd0818dbdc9c9958dd0818dbdb9d1c9858dd0819dd585c9960321b604082015260600190565b6020808252600990820152681b9bdd08199bdd5b9960ba1b604082015260600190565b6020808252601490820152731b585e081c1bdcda5d1a5bdb881c995858da195960621b604082015260600190565b6020808252600d908201526c0d2dcecc2d8d2c840d2dcc8caf609b1b604082015260600190565b90815260200190565b6001600160a01b03811681146102e257600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a264697066735822122040b37c34d7e3bab5000826aa960e1d2def07495a3a947dfddedb68f7820ff03664736f6c63430007060033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.