Source Code
Overview
ETH Balance
0 ETH
Token Holdings
More Info
ContractCreator
Multi Chain
Multichain Addresses
N/ALatest 25 internal transactions (View All)
Advanced mode:
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
9901613 | 46 days 9 hrs ago | 0 ETH | ||||
9877769 | 50 days 11 hrs ago | 0 ETH | ||||
9664838 | 87 days 14 hrs ago | 0 ETH | ||||
9664832 | 87 days 14 hrs ago | 0 ETH | ||||
9664832 | 87 days 14 hrs ago | 0 ETH | ||||
9664829 | 87 days 14 hrs ago | 0 ETH | ||||
9377137 | 138 days 15 hrs ago | 0 ETH | ||||
9370335 | 139 days 20 hrs ago | 0 ETH | ||||
9370329 | 139 days 20 hrs ago | 0 ETH | ||||
9159930 | 177 days 19 hrs ago | 0 ETH | ||||
9159915 | 177 days 19 hrs ago | 0 ETH | ||||
8327396 | 322 days 14 hrs ago | 0 ETH | ||||
8224272 | 341 days 3 hrs ago | 0 ETH | ||||
8224212 | 341 days 3 hrs ago | 0 ETH | ||||
8179743 | 348 days 20 hrs ago | 0 ETH | ||||
8168364 | 350 days 19 hrs ago | 0 ETH | ||||
8091696 | 363 days 16 hrs ago | 0 ETH | ||||
8031429 | 373 days 10 hrs ago | 0 ETH | ||||
8031392 | 373 days 10 hrs ago | 0 ETH | ||||
8019029 | 375 days 10 hrs ago | 0 ETH | ||||
7939539 | 388 days 18 hrs ago | 0 ETH | ||||
7921350 | 391 days 17 hrs ago | 0 ETH | ||||
7921332 | 391 days 17 hrs ago | 0 ETH | ||||
7896290 | 395 days 17 hrs ago | 0 ETH | ||||
7896243 | 395 days 17 hrs ago | 0 ETH |
Loading...
Loading
Contract Name:
CheckerExchange
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // ENVELOP(NIFTSY) protocol V1 for NFT. Wrapper - Checker pragma solidity 0.8.16; import "Ownable.sol"; import "IWrapper.sol"; import "IChecker.sol"; import "LibEnvelopTypes.sol"; contract CheckerExchange is Ownable, IChecker { mapping(address => bool) public trustedMultisigs; function isWrapEnabled( address caller, ETypes.INData calldata _inData, ETypes.AssetItem[] calldata _collateral, address _wrappFor ) external view returns (bool) { bool isOk; // 1. Time Lock must have for (uint256 i = 0; i < _inData.locks.length; ++i ){ if (_inData.locks[i].lockType == 0x00 && _inData.locks[i].param > 0) { isOk = true; break; } } require(isOk, 'No Time Lock found'); isOk = false; // 2. Rules: no transfer require( bytes2(0x0004) ==_inData.rules & bytes2(0x0004) ,'NoTransfer rule not set' ); // 3. Check that trusted multisig exist in royalty address for (uint256 i = 0; i < _inData.royalties.length; ++ i){ if (trustedMultisigs[_inData.royalties[i].beneficiary]){ isOk = true; } } require(isOk, 'Trusted multisig not found in royalty'); isOk = false; return true; } function isRemoveEnabled( address caller, address _wNFTAddress, uint256 _wNFTTokenId, address _collateralAddress, uint256 _removeAmount ) external view returns (bool) { ETypes.WNFT memory wnft = IWrapper(msg.sender).getWrappedToken(_wNFTAddress, _wNFTTokenId); bool isOk; // 1. Lets check original msg sender for (uint256 i = 0; i < wnft.royalties.length; ++ i){ if (wnft.royalties[i].beneficiary == caller){ isOk = true; } } require(isOk, 'Sender is not in beneficiary list'); return true; } ///////////////////////////////////////////////////////////////////// // Admin functions // ///////////////////////////////////////////////////////////////////// function setTrustedAddress(address _operator, bool _status) public onlyOwner { trustedMultisigs[_operator] = _status; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.16; //import "IERC721Enumerable.sol"; import "LibEnvelopTypes.sol"; interface IWrapper { event WrappedV1( address indexed inAssetAddress, address indexed outAssetAddress, uint256 indexed inAssetTokenId, uint256 outTokenId, address wnftFirstOwner, uint256 nativeCollateralAmount, bytes2 rules ); event UnWrappedV1( address indexed wrappedAddress, address indexed originalAddress, uint256 indexed wrappedId, uint256 originalTokenId, address beneficiary, uint256 nativeCollateralAmount, bytes2 rules ); event CollateralAdded( address indexed wrappedAddress, uint256 indexed wrappedId, uint8 assetType, address collateralAddress, uint256 collateralTokenId, uint256 collateralBalance ); event PartialUnWrapp( address indexed wrappedAddress, uint256 indexed wrappedId, uint256 lastCollateralIndex ); event SuspiciousFail( address indexed wrappedAddress, uint256 indexed wrappedId, address indexed failedContractAddress ); event EnvelopFee( address indexed receiver, address indexed wNFTConatract, uint256 indexed wNFTTokenId, uint256 amount ); function wrap( ETypes.INData calldata _inData, ETypes.AssetItem[] calldata _collateral, address _wrappFor ) external payable returns (ETypes.AssetItem memory); // function wrapUnsafe( // ETypes.INData calldata _inData, // ETypes.AssetItem[] calldata _collateral, // address _wrappFor // ) // external // payable // returns (ETypes.AssetItem memory); function addCollateral( address _wNFTAddress, uint256 _wNFTTokenId, ETypes.AssetItem[] calldata _collateral ) external payable; // function addCollateralUnsafe( // address _wNFTAddress, // uint256 _wNFTTokenId, // ETypes.AssetItem[] calldata _collateral // ) // external // payable; function unWrap( address _wNFTAddress, uint256 _wNFTTokenId ) external; function unWrap( ETypes.AssetType _wNFTType, address _wNFTAddress, uint256 _wNFTTokenId ) external; function unWrap( ETypes.AssetType _wNFTType, address _wNFTAddress, uint256 _wNFTTokenId, bool _isEmergency ) external; function chargeFees( address _wNFTAddress, uint256 _wNFTTokenId, address _from, address _to, bytes1 _feeType ) external returns (bool); ////////////////////////////////////////////////////////////////////// function MAX_COLLATERAL_SLOTS() external view returns (uint256); function protocolTechToken() external view returns (address); function protocolWhiteList() external view returns (address); //function trustedOperators(address _operator) external view returns (bool); //function lastWNFTId(ETypes.AssetType _assetType) external view returns (ETypes.NFTItem); function getWrappedToken(address _wNFTAddress, uint256 _wNFTTokenId) external view returns (ETypes.WNFT memory); function getOriginalURI(address _wNFTAddress, uint256 _wNFTTokenId) external view returns(string memory); function getCollateralBalanceAndIndex( address _wNFTAddress, uint256 _wNFTTokenId, ETypes.AssetType _collateralType, address _erc, uint256 _tokenId ) external view returns (uint256, uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts 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 // ENVELOP(NIFTSY) protocol V1 for NFT. pragma solidity 0.8.16; library ETypes { enum AssetType {EMPTY, NATIVE, ERC20, ERC721, ERC1155, FUTURE1, FUTURE2, FUTURE3} struct Asset { AssetType assetType; address contractAddress; } struct AssetItem { Asset asset; uint256 tokenId; uint256 amount; } struct NFTItem { address contractAddress; uint256 tokenId; } struct Fee { bytes1 feeType; uint256 param; address token; } struct Lock { bytes1 lockType; uint256 param; } struct Royalty { address beneficiary; uint16 percent; } struct WNFT { AssetItem inAsset; AssetItem[] collateral; address unWrapDestination; Fee[] fees; Lock[] locks; Royalty[] royalties; bytes2 rules; } struct INData { AssetItem inAsset; address unWrapDestination; Fee[] fees; Lock[] locks; Royalty[] royalties; AssetType outType; uint256 outBalance; //0- for 721 and any amount for 1155 bytes2 rules; } struct WhiteListItem { bool enabledForFee; bool enabledForCollateral; bool enabledRemoveFromCollateral; address transferFeeModel; } struct Rules { bytes2 onlythis; bytes2 disabled; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.16; //import "IERC721Enumerable.sol"; import "LibEnvelopTypes.sol"; interface IChecker { function isWrapEnabled( address caller, ETypes.INData calldata _inData, ETypes.AssetItem[] calldata _collateral, address _wrappFor ) external view returns (bool); function isRemoveEnabled( address caller, address _wNFTAddress, uint256 _wNFTTokenId, address _collateralAddress, uint256 _removeAmount ) external view returns (bool); }
{ "evmVersion": "istanbul", "optimizer": { "enabled": true, "runs": 200 }, "libraries": { "CheckerExchange.sol": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
[{"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":"caller","type":"address"},{"internalType":"address","name":"_wNFTAddress","type":"address"},{"internalType":"uint256","name":"_wNFTTokenId","type":"uint256"},{"internalType":"address","name":"_collateralAddress","type":"address"},{"internalType":"uint256","name":"_removeAmount","type":"uint256"}],"name":"isRemoveEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"components":[{"components":[{"components":[{"internalType":"enum ETypes.AssetType","name":"assetType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"internalType":"struct ETypes.Asset","name":"asset","type":"tuple"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ETypes.AssetItem","name":"inAsset","type":"tuple"},{"internalType":"address","name":"unWrapDestination","type":"address"},{"components":[{"internalType":"bytes1","name":"feeType","type":"bytes1"},{"internalType":"uint256","name":"param","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"internalType":"struct ETypes.Fee[]","name":"fees","type":"tuple[]"},{"components":[{"internalType":"bytes1","name":"lockType","type":"bytes1"},{"internalType":"uint256","name":"param","type":"uint256"}],"internalType":"struct ETypes.Lock[]","name":"locks","type":"tuple[]"},{"components":[{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint16","name":"percent","type":"uint16"}],"internalType":"struct ETypes.Royalty[]","name":"royalties","type":"tuple[]"},{"internalType":"enum ETypes.AssetType","name":"outType","type":"uint8"},{"internalType":"uint256","name":"outBalance","type":"uint256"},{"internalType":"bytes2","name":"rules","type":"bytes2"}],"internalType":"struct ETypes.INData","name":"_inData","type":"tuple"},{"components":[{"components":[{"internalType":"enum ETypes.AssetType","name":"assetType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"}],"internalType":"struct ETypes.Asset","name":"asset","type":"tuple"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ETypes.AssetItem[]","name":"_collateral","type":"tuple[]"},{"internalType":"address","name":"_wrappFor","type":"address"}],"name":"isWrapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setTrustedAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedMultisigs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610dbe8061007e6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100c75780639a1c1a20146100e2578063def82ac2146100f5578063f2fde38b1461011857600080fd5b8063384d0b4d14610082578063715018a6146100aa578063806c3ca9146100b4575b600080fd5b61009561009036600461065d565b61012b565b60405190151581526020015b60405180910390f35b6100b2610270565b005b6100b26100c23660046106b8565b610284565b6000546040516001600160a01b0390911681526020016100a1565b6100956100f03660046106f6565b6102b7565b6100956101033660046107bd565b60016020526000908152604090205460ff1681565b6100b26101263660046107bd565b610515565b60405163c424d4f760e01b81526001600160a01b0385166004820152602481018490526000908190339063c424d4f790604401600060405180830381865afa15801561017b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101a39190810190610bb0565b90506000805b8260a001515181101561020557886001600160a01b03168360a0015182815181106101d6576101d6610cc0565b6020026020010151600001516001600160a01b0316036101f557600191505b6101fe81610cd6565b90506101a9565b50806102625760405162461bcd60e51b815260206004820152602160248201527f53656e646572206973206e6f7420696e2062656e6566696369617279206c69736044820152601d60fa1b60648201526084015b60405180910390fd5b506001979650505050505050565b61027861058e565b61028260006105e8565b565b61028c61058e565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b60008060005b6102ca60c0880188610cfd565b9050811015610361576102e060c0880188610cfd565b828181106102f0576102f0610cc0565b6103069260206040909202019081019150610d4e565b6001600160f81b0319161580156103435750600061032760c0890189610cfd565b8381811061033757610337610cc0565b90506040020160200135115b156103515760019150610361565b61035a81610cd6565b90506102bd565b50806103a45760405162461bcd60e51b8152602060048201526012602482015271139bc8151a5b5948131bd8dac8199bdd5b9960721b6044820152606401610259565b506000600160f21b6103be61016088016101408901610d6b565b166001600160f01b031916600460f01b6001600160f01b031916146104255760405162461bcd60e51b815260206004820152601760248201527f4e6f5472616e736665722072756c65206e6f74207365740000000000000000006044820152606401610259565b60005b61043560e0880188610cfd565b90508110156104ac576001600061044f60e08a018a610cfd565b8481811061045f5761045f610cc0565b61047592602060409092020190810191506107bd565b6001600160a01b0316815260208101919091526040016000205460ff161561049c57600191505b6104a581610cd6565b9050610428565b50806105085760405162461bcd60e51b815260206004820152602560248201527f54727573746564206d756c7469736967206e6f7420666f756e6420696e20726f60448201526479616c747960d81b6064820152608401610259565b5060019695505050505050565b61051d61058e565b6001600160a01b0381166105825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610259565b61058b816105e8565b50565b6000546001600160a01b031633146102825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610259565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461058b57600080fd5b803561065881610638565b919050565b600080600080600060a0868803121561067557600080fd5b853561068081610638565b9450602086013561069081610638565b93506040860135925060608601356106a781610638565b949793965091946080013592915050565b600080604083850312156106cb57600080fd5b82356106d681610638565b9150602083013580151581146106eb57600080fd5b809150509250929050565b60008060008060006080868803121561070e57600080fd5b853561071981610638565b9450602086013567ffffffffffffffff8082111561073657600080fd5b90870190610160828a03121561074b57600080fd5b9094506040870135908082111561076157600080fd5b818801915088601f83011261077557600080fd5b81358181111561078457600080fd5b8960208260071b850101111561079957600080fd5b6020830195508094505050506107b16060870161064d565b90509295509295909350565b6000602082840312156107cf57600080fd5b81356107da81610638565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561081a5761081a6107e1565b60405290565b6040805190810167ffffffffffffffff8111828210171561081a5761081a6107e1565b60405160e0810167ffffffffffffffff8111828210171561081a5761081a6107e1565b604051601f8201601f1916810167ffffffffffffffff8111828210171561088f5761088f6107e1565b604052919050565b805161065881610638565b600081830360808112156108b557600080fd5b6108bd6107f7565b915060408112156108cd57600080fd5b506108d6610820565b8251600881106108e557600080fd5b815260208301516108f581610638565b8060208301525080825250604082015160208201526060820151604082015292915050565b600067ffffffffffffffff821115610934576109346107e1565b5060051b60200190565b600082601f83011261094f57600080fd5b8151602061096461095f8361091a565b610866565b82815260079290921b8401810191818101908684111561098357600080fd5b8286015b848110156109a75761099988826108a2565b835291830191608001610987565b509695505050505050565b6001600160f81b03198116811461058b57600080fd5b600082601f8301126109d957600080fd5b815160206109e961095f8361091a565b82815260609283028501820192828201919087851115610a0857600080fd5b8387015b85811015610a615781818a031215610a245760008081fd5b610a2c6107f7565b8151610a37816109b2565b81528186015186820152604080830151610a5081610638565b908201528452928401928101610a0c565b5090979650505050505050565b600082601f830112610a7f57600080fd5b81516020610a8f61095f8361091a565b82815260069290921b84018101918181019086841115610aae57600080fd5b8286015b848110156109a75760408189031215610acb5760008081fd5b610ad3610820565b8151610ade816109b2565b81528185015185820152835291830191604001610ab2565b600082601f830112610b0757600080fd5b81516020610b1761095f8361091a565b82815260069290921b84018101918181019086841115610b3657600080fd5b8286015b848110156109a75760408189031215610b535760008081fd5b610b5b610820565b8151610b6681610638565b81528185015161ffff81168114610b7d5760008081fd5b81860152835291830191604001610b3a565b6001600160f01b03198116811461058b57600080fd5b805161065881610b8f565b600060208284031215610bc257600080fd5b815167ffffffffffffffff80821115610bda57600080fd5b908301906101408286031215610bef57600080fd5b610bf7610843565b610c0186846108a2565b8152608083015182811115610c1557600080fd5b610c218782860161093e565b602083015250610c3360a08401610897565b604082015260c083015182811115610c4a57600080fd5b610c56878286016109c8565b60608301525060e083015182811115610c6e57600080fd5b610c7a87828601610a6e565b60808301525061010083015182811115610c9357600080fd5b610c9f87828601610af6565b60a083015250610cb26101208401610ba5565b60c082015295945050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201610cf657634e487b7160e01b600052601160045260246000fd5b5060010190565b6000808335601e19843603018112610d1457600080fd5b83018035915067ffffffffffffffff821115610d2f57600080fd5b6020019150600681901b3603821315610d4757600080fd5b9250929050565b600060208284031215610d6057600080fd5b81356107da816109b2565b600060208284031215610d7d57600080fd5b81356107da81610b8f56fea264697066735822122061d9db7068d588e27205686a12b1e3df090ecc5724c07f1946e91d784b611a9864736f6c63430008100033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100c75780639a1c1a20146100e2578063def82ac2146100f5578063f2fde38b1461011857600080fd5b8063384d0b4d14610082578063715018a6146100aa578063806c3ca9146100b4575b600080fd5b61009561009036600461065d565b61012b565b60405190151581526020015b60405180910390f35b6100b2610270565b005b6100b26100c23660046106b8565b610284565b6000546040516001600160a01b0390911681526020016100a1565b6100956100f03660046106f6565b6102b7565b6100956101033660046107bd565b60016020526000908152604090205460ff1681565b6100b26101263660046107bd565b610515565b60405163c424d4f760e01b81526001600160a01b0385166004820152602481018490526000908190339063c424d4f790604401600060405180830381865afa15801561017b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101a39190810190610bb0565b90506000805b8260a001515181101561020557886001600160a01b03168360a0015182815181106101d6576101d6610cc0565b6020026020010151600001516001600160a01b0316036101f557600191505b6101fe81610cd6565b90506101a9565b50806102625760405162461bcd60e51b815260206004820152602160248201527f53656e646572206973206e6f7420696e2062656e6566696369617279206c69736044820152601d60fa1b60648201526084015b60405180910390fd5b506001979650505050505050565b61027861058e565b61028260006105e8565b565b61028c61058e565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b60008060005b6102ca60c0880188610cfd565b9050811015610361576102e060c0880188610cfd565b828181106102f0576102f0610cc0565b6103069260206040909202019081019150610d4e565b6001600160f81b0319161580156103435750600061032760c0890189610cfd565b8381811061033757610337610cc0565b90506040020160200135115b156103515760019150610361565b61035a81610cd6565b90506102bd565b50806103a45760405162461bcd60e51b8152602060048201526012602482015271139bc8151a5b5948131bd8dac8199bdd5b9960721b6044820152606401610259565b506000600160f21b6103be61016088016101408901610d6b565b166001600160f01b031916600460f01b6001600160f01b031916146104255760405162461bcd60e51b815260206004820152601760248201527f4e6f5472616e736665722072756c65206e6f74207365740000000000000000006044820152606401610259565b60005b61043560e0880188610cfd565b90508110156104ac576001600061044f60e08a018a610cfd565b8481811061045f5761045f610cc0565b61047592602060409092020190810191506107bd565b6001600160a01b0316815260208101919091526040016000205460ff161561049c57600191505b6104a581610cd6565b9050610428565b50806105085760405162461bcd60e51b815260206004820152602560248201527f54727573746564206d756c7469736967206e6f7420666f756e6420696e20726f60448201526479616c747960d81b6064820152608401610259565b5060019695505050505050565b61051d61058e565b6001600160a01b0381166105825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610259565b61058b816105e8565b50565b6000546001600160a01b031633146102825760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610259565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461058b57600080fd5b803561065881610638565b919050565b600080600080600060a0868803121561067557600080fd5b853561068081610638565b9450602086013561069081610638565b93506040860135925060608601356106a781610638565b949793965091946080013592915050565b600080604083850312156106cb57600080fd5b82356106d681610638565b9150602083013580151581146106eb57600080fd5b809150509250929050565b60008060008060006080868803121561070e57600080fd5b853561071981610638565b9450602086013567ffffffffffffffff8082111561073657600080fd5b90870190610160828a03121561074b57600080fd5b9094506040870135908082111561076157600080fd5b818801915088601f83011261077557600080fd5b81358181111561078457600080fd5b8960208260071b850101111561079957600080fd5b6020830195508094505050506107b16060870161064d565b90509295509295909350565b6000602082840312156107cf57600080fd5b81356107da81610638565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561081a5761081a6107e1565b60405290565b6040805190810167ffffffffffffffff8111828210171561081a5761081a6107e1565b60405160e0810167ffffffffffffffff8111828210171561081a5761081a6107e1565b604051601f8201601f1916810167ffffffffffffffff8111828210171561088f5761088f6107e1565b604052919050565b805161065881610638565b600081830360808112156108b557600080fd5b6108bd6107f7565b915060408112156108cd57600080fd5b506108d6610820565b8251600881106108e557600080fd5b815260208301516108f581610638565b8060208301525080825250604082015160208201526060820151604082015292915050565b600067ffffffffffffffff821115610934576109346107e1565b5060051b60200190565b600082601f83011261094f57600080fd5b8151602061096461095f8361091a565b610866565b82815260079290921b8401810191818101908684111561098357600080fd5b8286015b848110156109a75761099988826108a2565b835291830191608001610987565b509695505050505050565b6001600160f81b03198116811461058b57600080fd5b600082601f8301126109d957600080fd5b815160206109e961095f8361091a565b82815260609283028501820192828201919087851115610a0857600080fd5b8387015b85811015610a615781818a031215610a245760008081fd5b610a2c6107f7565b8151610a37816109b2565b81528186015186820152604080830151610a5081610638565b908201528452928401928101610a0c565b5090979650505050505050565b600082601f830112610a7f57600080fd5b81516020610a8f61095f8361091a565b82815260069290921b84018101918181019086841115610aae57600080fd5b8286015b848110156109a75760408189031215610acb5760008081fd5b610ad3610820565b8151610ade816109b2565b81528185015185820152835291830191604001610ab2565b600082601f830112610b0757600080fd5b81516020610b1761095f8361091a565b82815260069290921b84018101918181019086841115610b3657600080fd5b8286015b848110156109a75760408189031215610b535760008081fd5b610b5b610820565b8151610b6681610638565b81528185015161ffff81168114610b7d5760008081fd5b81860152835291830191604001610b3a565b6001600160f01b03198116811461058b57600080fd5b805161065881610b8f565b600060208284031215610bc257600080fd5b815167ffffffffffffffff80821115610bda57600080fd5b908301906101408286031215610bef57600080fd5b610bf7610843565b610c0186846108a2565b8152608083015182811115610c1557600080fd5b610c218782860161093e565b602083015250610c3360a08401610897565b604082015260c083015182811115610c4a57600080fd5b610c56878286016109c8565b60608301525060e083015182811115610c6e57600080fd5b610c7a87828601610a6e565b60808301525061010083015182811115610c9357600080fd5b610c9f87828601610af6565b60a083015250610cb26101208401610ba5565b60c082015295945050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201610cf657634e487b7160e01b600052601160045260246000fd5b5060010190565b6000808335601e19843603018112610d1457600080fd5b83018035915067ffffffffffffffff821115610d2f57600080fd5b6020019150600681901b3603821315610d4757600080fd5b9250929050565b600060208284031215610d6057600080fd5b81356107da816109b2565b600060208284031215610d7d57600080fd5b81356107da81610b8f56fea264697066735822122061d9db7068d588e27205686a12b1e3df090ecc5724c07f1946e91d784b611a9864736f6c63430008100033
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.