Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multi Chain
Multichain Addresses
0 address found via
Loading...
Loading
Contract Name:
CheckerExchange
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // ENVELOP(NIFTSY) protocol V1 for NFT. Wrapper - Checker pragma solidity 0.8.19; import "Ownable.sol"; import "IWrapper.sol"; import "IChecker.sol"; import "IAdvancedWhiteList.sol"; import "LibEnvelopTypes.sol"; /// @title CheckerExchange contract in Envelop PrtocolV1 /// @author Envelop Team /// @notice You can use this contract for control operations /// @notice in `WrapperRemovableAdvanced` /// @dev Use with `WrapperRemovableAdvanced` Only /// @custom:please see Envelop Docs Portal 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 = false; break; } else { 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'); // 2. Check whitelist flag isOk = false; isOk = IAdvancedWhiteList( IWrapper(msg.sender).protocolWhiteList() ).enabledRemoveFromCollateral(_collateralAddress); require(isOk, 'Collateral not available for remove'); 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.19; //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.8.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: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * 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.19; /// @title Flibrary ETypes in Envelop PrtocolV1 /// @author Envelop Team /// @notice This contract implement main protocol's data types 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.19; //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); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; //import "IERC721Enumerable.sol"; import "LibEnvelopTypes.sol"; interface IAdvancedWhiteList { event WhiteListItemChanged( address indexed asset, bool enabledForFee, bool enabledForCollateral, bool enabledRemoveFromCollateral, address transferFeeModel ); event BlackListItemChanged( address indexed asset, bool isBlackListed ); function getWLItem(address _asset) external view returns (ETypes.WhiteListItem memory); function getWLItemCount() external view returns (uint256); function getBLItem(address _asset) external view returns (bool); function getBLItemCount() external view returns (uint256); function enabledForCollateral(address _asset) external view returns (bool); function enabledForFee(address _asset) external view returns (bool); function enabledRemoveFromCollateral(address _asset) external view returns (bool); function rulesEnabled(address _asset, bytes2 _rules) external view returns (bool); function validateRules(address _asset, bytes2 _rules) external view returns (bytes2); }
{ "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
608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610f358061007e6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100c75780639a1c1a20146100e2578063def82ac2146100f5578063f2fde38b1461011857600080fd5b8063384d0b4d14610082578063715018a6146100aa578063806c3ca9146100b4575b600080fd5b610095610090366004610791565b61012b565b60405190151581526020015b60405180910390f35b6100b261039d565b005b6100b26100c23660046107fa565b6103b1565b6000546040516001600160a01b0390911681526020016100a1565b6100956100f0366004610833565b6103e4565b6100956101033660046108fa565b60016020526000908152604090205460ff1681565b6100b26101263660046108fa565b610649565b60405163c424d4f760e01b81526001600160a01b0385166004820152602481018490526000908190339063c424d4f790604401600060405180830381865afa15801561017b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101a39190810190610ced565b90506000805b8260a001515181101561020557886001600160a01b03168360a0015182815181106101d6576101d6610dfd565b6020026020010151600001516001600160a01b0316036101f557600191505b6101fe81610e13565b90506101a9565b50806102625760405162461bcd60e51b815260206004820152602160248201527f53656e646572206973206e6f7420696e2062656e6566696369617279206c69736044820152601d60fa1b60648201526084015b60405180910390fd5b60009050336001600160a01b03166310118ebb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c89190610e3a565b60405163c31934e160e01b81526001600160a01b038781166004830152919091169063c31934e190602401602060405180830381865afa158015610310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103349190610e57565b90508061038f5760405162461bcd60e51b815260206004820152602360248201527f436f6c6c61746572616c206e6f7420617661696c61626c6520666f722072656d6044820152626f766560e81b6064820152608401610259565b506001979650505050505050565b6103a56106c2565b6103af600061071c565b565b6103b96106c2565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b60008060005b6103f760c0880188610e74565b905081101561048e5761040d60c0880188610e74565b8281811061041d5761041d610dfd565b6104339260206040909202019081019150610ec5565b6001600160f81b0319161580156104705750600061045460c0890189610e74565b8381811061046457610464610dfd565b90506040020160200135115b1561047e576001915061048e565b61048781610e13565b90506103ea565b50806104d15760405162461bcd60e51b8152602060048201526012602482015271139bc8151a5b5948131bd8dac8199bdd5b9960721b6044820152606401610259565b506000600160f21b6104eb61016088016101408901610ee2565b166001600160f01b031916600460f01b6001600160f01b031916146105525760405162461bcd60e51b815260206004820152601760248201527f4e6f5472616e736665722072756c65206e6f74207365740000000000000000006044820152606401610259565b60005b61056260e0880188610e74565b90508110156105e0576001600061057c60e08a018a610e74565b8481811061058c5761058c610dfd565b6105a292602060409092020190810191506108fa565b6001600160a01b0316815260208101919091526040016000205460ff166105cc57600091506105e0565b600191506105d981610e13565b9050610555565b508061063c5760405162461bcd60e51b815260206004820152602560248201527f54727573746564206d756c7469736967206e6f7420666f756e6420696e20726f60448201526479616c747960d81b6064820152608401610259565b5060019695505050505050565b6106516106c2565b6001600160a01b0381166106b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610259565b6106bf8161071c565b50565b6000546001600160a01b031633146103af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610259565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146106bf57600080fd5b803561078c8161076c565b919050565b600080600080600060a086880312156107a957600080fd5b85356107b48161076c565b945060208601356107c48161076c565b93506040860135925060608601356107db8161076c565b949793965091946080013592915050565b80151581146106bf57600080fd5b6000806040838503121561080d57600080fd5b82356108188161076c565b91506020830135610828816107ec565b809150509250929050565b60008060008060006080868803121561084b57600080fd5b85356108568161076c565b9450602086013567ffffffffffffffff8082111561087357600080fd5b90870190610160828a03121561088857600080fd5b9094506040870135908082111561089e57600080fd5b818801915088601f8301126108b257600080fd5b8135818111156108c157600080fd5b8960208260071b85010111156108d657600080fd5b6020830195508094505050506108ee60608701610781565b90509295509295909350565b60006020828403121561090c57600080fd5b81356109178161076c565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156109575761095761091e565b60405290565b6040805190810167ffffffffffffffff811182821017156109575761095761091e565b60405160e0810167ffffffffffffffff811182821017156109575761095761091e565b604051601f8201601f1916810167ffffffffffffffff811182821017156109cc576109cc61091e565b604052919050565b805161078c8161076c565b600081830360808112156109f257600080fd5b6109fa610934565b91506040811215610a0a57600080fd5b50610a1361095d565b825160088110610a2257600080fd5b81526020830151610a328161076c565b8060208301525080825250604082015160208201526060820151604082015292915050565b600067ffffffffffffffff821115610a7157610a7161091e565b5060051b60200190565b600082601f830112610a8c57600080fd5b81516020610aa1610a9c83610a57565b6109a3565b82815260079290921b84018101918181019086841115610ac057600080fd5b8286015b84811015610ae457610ad688826109df565b835291830191608001610ac4565b509695505050505050565b6001600160f81b0319811681146106bf57600080fd5b600082601f830112610b1657600080fd5b81516020610b26610a9c83610a57565b82815260609283028501820192828201919087851115610b4557600080fd5b8387015b85811015610b9e5781818a031215610b615760008081fd5b610b69610934565b8151610b7481610aef565b81528186015186820152604080830151610b8d8161076c565b908201528452928401928101610b49565b5090979650505050505050565b600082601f830112610bbc57600080fd5b81516020610bcc610a9c83610a57565b82815260069290921b84018101918181019086841115610beb57600080fd5b8286015b84811015610ae45760408189031215610c085760008081fd5b610c1061095d565b8151610c1b81610aef565b81528185015185820152835291830191604001610bef565b600082601f830112610c4457600080fd5b81516020610c54610a9c83610a57565b82815260069290921b84018101918181019086841115610c7357600080fd5b8286015b84811015610ae45760408189031215610c905760008081fd5b610c9861095d565b8151610ca38161076c565b81528185015161ffff81168114610cba5760008081fd5b81860152835291830191604001610c77565b6001600160f01b0319811681146106bf57600080fd5b805161078c81610ccc565b600060208284031215610cff57600080fd5b815167ffffffffffffffff80821115610d1757600080fd5b908301906101408286031215610d2c57600080fd5b610d34610980565b610d3e86846109df565b8152608083015182811115610d5257600080fd5b610d5e87828601610a7b565b602083015250610d7060a084016109d4565b604082015260c083015182811115610d8757600080fd5b610d9387828601610b05565b60608301525060e083015182811115610dab57600080fd5b610db787828601610bab565b60808301525061010083015182811115610dd057600080fd5b610ddc87828601610c33565b60a083015250610def6101208401610ce2565b60c082015295945050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201610e3357634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610e4c57600080fd5b81516109178161076c565b600060208284031215610e6957600080fd5b8151610917816107ec565b6000808335601e19843603018112610e8b57600080fd5b83018035915067ffffffffffffffff821115610ea657600080fd5b6020019150600681901b3603821315610ebe57600080fd5b9250929050565b600060208284031215610ed757600080fd5b813561091781610aef565b600060208284031215610ef457600080fd5b813561091781610ccc56fea264697066735822122049ffe3ad12d5543ba20711a3e4e9653e66bfbedc5c0134e934801936cd5e87bd64736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100c75780639a1c1a20146100e2578063def82ac2146100f5578063f2fde38b1461011857600080fd5b8063384d0b4d14610082578063715018a6146100aa578063806c3ca9146100b4575b600080fd5b610095610090366004610791565b61012b565b60405190151581526020015b60405180910390f35b6100b261039d565b005b6100b26100c23660046107fa565b6103b1565b6000546040516001600160a01b0390911681526020016100a1565b6100956100f0366004610833565b6103e4565b6100956101033660046108fa565b60016020526000908152604090205460ff1681565b6100b26101263660046108fa565b610649565b60405163c424d4f760e01b81526001600160a01b0385166004820152602481018490526000908190339063c424d4f790604401600060405180830381865afa15801561017b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101a39190810190610ced565b90506000805b8260a001515181101561020557886001600160a01b03168360a0015182815181106101d6576101d6610dfd565b6020026020010151600001516001600160a01b0316036101f557600191505b6101fe81610e13565b90506101a9565b50806102625760405162461bcd60e51b815260206004820152602160248201527f53656e646572206973206e6f7420696e2062656e6566696369617279206c69736044820152601d60fa1b60648201526084015b60405180910390fd5b60009050336001600160a01b03166310118ebb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c89190610e3a565b60405163c31934e160e01b81526001600160a01b038781166004830152919091169063c31934e190602401602060405180830381865afa158015610310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103349190610e57565b90508061038f5760405162461bcd60e51b815260206004820152602360248201527f436f6c6c61746572616c206e6f7420617661696c61626c6520666f722072656d6044820152626f766560e81b6064820152608401610259565b506001979650505050505050565b6103a56106c2565b6103af600061071c565b565b6103b96106c2565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b60008060005b6103f760c0880188610e74565b905081101561048e5761040d60c0880188610e74565b8281811061041d5761041d610dfd565b6104339260206040909202019081019150610ec5565b6001600160f81b0319161580156104705750600061045460c0890189610e74565b8381811061046457610464610dfd565b90506040020160200135115b1561047e576001915061048e565b61048781610e13565b90506103ea565b50806104d15760405162461bcd60e51b8152602060048201526012602482015271139bc8151a5b5948131bd8dac8199bdd5b9960721b6044820152606401610259565b506000600160f21b6104eb61016088016101408901610ee2565b166001600160f01b031916600460f01b6001600160f01b031916146105525760405162461bcd60e51b815260206004820152601760248201527f4e6f5472616e736665722072756c65206e6f74207365740000000000000000006044820152606401610259565b60005b61056260e0880188610e74565b90508110156105e0576001600061057c60e08a018a610e74565b8481811061058c5761058c610dfd565b6105a292602060409092020190810191506108fa565b6001600160a01b0316815260208101919091526040016000205460ff166105cc57600091506105e0565b600191506105d981610e13565b9050610555565b508061063c5760405162461bcd60e51b815260206004820152602560248201527f54727573746564206d756c7469736967206e6f7420666f756e6420696e20726f60448201526479616c747960d81b6064820152608401610259565b5060019695505050505050565b6106516106c2565b6001600160a01b0381166106b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610259565b6106bf8161071c565b50565b6000546001600160a01b031633146103af5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610259565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146106bf57600080fd5b803561078c8161076c565b919050565b600080600080600060a086880312156107a957600080fd5b85356107b48161076c565b945060208601356107c48161076c565b93506040860135925060608601356107db8161076c565b949793965091946080013592915050565b80151581146106bf57600080fd5b6000806040838503121561080d57600080fd5b82356108188161076c565b91506020830135610828816107ec565b809150509250929050565b60008060008060006080868803121561084b57600080fd5b85356108568161076c565b9450602086013567ffffffffffffffff8082111561087357600080fd5b90870190610160828a03121561088857600080fd5b9094506040870135908082111561089e57600080fd5b818801915088601f8301126108b257600080fd5b8135818111156108c157600080fd5b8960208260071b85010111156108d657600080fd5b6020830195508094505050506108ee60608701610781565b90509295509295909350565b60006020828403121561090c57600080fd5b81356109178161076c565b9392505050565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156109575761095761091e565b60405290565b6040805190810167ffffffffffffffff811182821017156109575761095761091e565b60405160e0810167ffffffffffffffff811182821017156109575761095761091e565b604051601f8201601f1916810167ffffffffffffffff811182821017156109cc576109cc61091e565b604052919050565b805161078c8161076c565b600081830360808112156109f257600080fd5b6109fa610934565b91506040811215610a0a57600080fd5b50610a1361095d565b825160088110610a2257600080fd5b81526020830151610a328161076c565b8060208301525080825250604082015160208201526060820151604082015292915050565b600067ffffffffffffffff821115610a7157610a7161091e565b5060051b60200190565b600082601f830112610a8c57600080fd5b81516020610aa1610a9c83610a57565b6109a3565b82815260079290921b84018101918181019086841115610ac057600080fd5b8286015b84811015610ae457610ad688826109df565b835291830191608001610ac4565b509695505050505050565b6001600160f81b0319811681146106bf57600080fd5b600082601f830112610b1657600080fd5b81516020610b26610a9c83610a57565b82815260609283028501820192828201919087851115610b4557600080fd5b8387015b85811015610b9e5781818a031215610b615760008081fd5b610b69610934565b8151610b7481610aef565b81528186015186820152604080830151610b8d8161076c565b908201528452928401928101610b49565b5090979650505050505050565b600082601f830112610bbc57600080fd5b81516020610bcc610a9c83610a57565b82815260069290921b84018101918181019086841115610beb57600080fd5b8286015b84811015610ae45760408189031215610c085760008081fd5b610c1061095d565b8151610c1b81610aef565b81528185015185820152835291830191604001610bef565b600082601f830112610c4457600080fd5b81516020610c54610a9c83610a57565b82815260069290921b84018101918181019086841115610c7357600080fd5b8286015b84811015610ae45760408189031215610c905760008081fd5b610c9861095d565b8151610ca38161076c565b81528185015161ffff81168114610cba5760008081fd5b81860152835291830191604001610c77565b6001600160f01b0319811681146106bf57600080fd5b805161078c81610ccc565b600060208284031215610cff57600080fd5b815167ffffffffffffffff80821115610d1757600080fd5b908301906101408286031215610d2c57600080fd5b610d34610980565b610d3e86846109df565b8152608083015182811115610d5257600080fd5b610d5e87828601610a7b565b602083015250610d7060a084016109d4565b604082015260c083015182811115610d8757600080fd5b610d9387828601610b05565b60608301525060e083015182811115610dab57600080fd5b610db787828601610bab565b60808301525061010083015182811115610dd057600080fd5b610ddc87828601610c33565b60a083015250610def6101208401610ce2565b60c082015295945050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201610e3357634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610e4c57600080fd5b81516109178161076c565b600060208284031215610e6957600080fd5b8151610917816107ec565b6000808335601e19843603018112610e8b57600080fd5b83018035915067ffffffffffffffff821115610ea657600080fd5b6020019150600681901b3603821315610ebe57600080fd5b9250929050565b600060208284031215610ed757600080fd5b813561091781610aef565b600060208284031215610ef457600080fd5b813561091781610ccc56fea264697066735822122049ffe3ad12d5543ba20711a3e4e9653e66bfbedc5c0134e934801936cd5e87bd64736f6c63430008130033
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.