Overview
ETH Balance
0.000005782084788492 ETH
Eth Value
$0.02 (@ $3,943.05/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 457 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Single ERC721Lis... | 14963893 | 915 days ago | IN | 0.018 ETH | 0.00843951 | ||||
Single ERC721Lis... | 14963812 | 915 days ago | IN | 0.021 ETH | 0.02132699 | ||||
Single ERC721Lis... | 14963597 | 915 days ago | IN | 0.018 ETH | 0.00285323 | ||||
Single ERC721Lis... | 14963170 | 915 days ago | IN | 0.688 ETH | 0.00750149 | ||||
Single ERC721Lis... | 14963147 | 915 days ago | IN | 0.64 ETH | 0.00217642 | ||||
Single ERC721Lis... | 14963098 | 915 days ago | IN | 2.22 ETH | 0.00879608 | ||||
Single ERC721Lis... | 14962947 | 915 days ago | IN | 1.19 ETH | 0.01310657 | ||||
Single ERC721Lis... | 14962924 | 915 days ago | IN | 0.06919305 ETH | 0.0108434 | ||||
Single ERC721Lis... | 14962727 | 915 days ago | IN | 1.2 ETH | 0.01410317 | ||||
Single ERC721Lis... | 14962655 | 915 days ago | IN | 0.35 ETH | 0.01353671 | ||||
Single ERC721Lis... | 14962124 | 915 days ago | IN | 1.49 ETH | 0.01535769 | ||||
Single ERC721Lis... | 14961749 | 915 days ago | IN | 2.2 ETH | 0.00942982 | ||||
Multi Listing Fi... | 14961552 | 915 days ago | IN | 0.041 ETH | 0.01043198 | ||||
Single ERC721Lis... | 14961452 | 915 days ago | IN | 0.27 ETH | 0.00608197 | ||||
Single ERC721Lis... | 14960662 | 915 days ago | IN | 0.14 ETH | 0.00840732 | ||||
Single ERC721Lis... | 14960340 | 915 days ago | IN | 2.12 ETH | 0.00730991 | ||||
Single ERC721Lis... | 14959640 | 915 days ago | IN | 0.965 ETH | 0.01538965 | ||||
Single ERC721Lis... | 14959179 | 915 days ago | IN | 0.025 ETH | 0.01595836 | ||||
Single ERC721Lis... | 14959137 | 915 days ago | IN | 0.0118 ETH | 0.02555317 | ||||
Single ERC721Lis... | 14959099 | 915 days ago | IN | 0.142 ETH | 0.02385824 | ||||
Single ERC1155Li... | 14958700 | 915 days ago | IN | 2.69 ETH | 0.01111878 | ||||
Single ERC721Lis... | 14958492 | 916 days ago | IN | 0.5 ETH | 0.0093414 | ||||
Single ERC721Lis... | 14958337 | 916 days ago | IN | 0.174 ETH | 0.00791925 | ||||
Single ERC721Lis... | 14958320 | 916 days ago | IN | 0.189 ETH | 0.01124678 | ||||
Single ERC721Lis... | 14957697 | 916 days ago | IN | 0.17 ETH | 0.01145385 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14963893 | 915 days ago | 0.018 ETH | ||||
14963812 | 915 days ago | 0.021 ETH | ||||
14963170 | 915 days ago | 0.688 ETH | ||||
14963098 | 915 days ago | 2.22 ETH | ||||
14962947 | 915 days ago | 1.19 ETH | ||||
14962924 | 915 days ago | 0.00000578 ETH | ||||
14962924 | 915 days ago | 0.06919305 ETH | ||||
14962727 | 915 days ago | 1.2 ETH | ||||
14962655 | 915 days ago | 0.35 ETH | ||||
14962124 | 915 days ago | 1.49 ETH | ||||
14961749 | 915 days ago | 2.2 ETH | ||||
14961552 | 915 days ago | 0.021 ETH | ||||
14961552 | 915 days ago | 0.021 ETH | ||||
14961552 | 915 days ago | 0.02 ETH | ||||
14961552 | 915 days ago | 0.02 ETH | ||||
14961452 | 915 days ago | 0.27 ETH | ||||
14960662 | 915 days ago | 0.14 ETH | ||||
14960340 | 915 days ago | 2.12 ETH | ||||
14959640 | 915 days ago | 0.965 ETH | ||||
14959179 | 915 days ago | 0.025 ETH | ||||
14959137 | 915 days ago | 0.0118 ETH | ||||
14959099 | 915 days ago | 0.142 ETH | ||||
14958700 | 915 days ago | 2.69 ETH | ||||
14958492 | 916 days ago | 0.5 ETH | ||||
14958337 | 916 days ago | 0.174 ETH |
Loading...
Loading
Contract Name:
ReservoirV2
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {ExchangeKind} from "./interfaces/IExchangeKind.sol"; import {IWETH} from "./interfaces/IWETH.sol"; import {ILooksRare, ILooksRareTransferSelectorNFT} from "./interfaces/ILooksRare.sol"; import {IWyvernV23, IWyvernV23ProxyRegistry} from "./interfaces/IWyvernV23.sol"; contract ReservoirV2 is Ownable { address public weth; address public looksRare; address public looksRareTransferManagerERC721; address public looksRareTransferManagerERC1155; address public wyvernV23; address public wyvernV23Proxy; address public zeroExV4; address public foundation; address public x2y2; address public x2y2ERC721Delegate; constructor( address wethAddress, address looksRareAddress, address wyvernV23Address, address zeroExV4Address, address foundationAddress, address x2y2Address, address x2y2ERC721DelegateAddress ) { weth = wethAddress; // --- LooksRare setup --- looksRare = looksRareAddress; // Cache the transfer manager contracts address transferSelectorNFT = ILooksRare(looksRare) .transferSelectorNFT(); looksRareTransferManagerERC721 = ILooksRareTransferSelectorNFT( transferSelectorNFT ).TRANSFER_MANAGER_ERC721(); looksRareTransferManagerERC1155 = ILooksRareTransferSelectorNFT( transferSelectorNFT ).TRANSFER_MANAGER_ERC1155(); // --- WyvernV23 setup --- wyvernV23 = wyvernV23Address; // Create a user proxy address proxyRegistry = IWyvernV23(wyvernV23).registry(); IWyvernV23ProxyRegistry(proxyRegistry).registerProxy(); wyvernV23Proxy = IWyvernV23ProxyRegistry(proxyRegistry).proxies( address(this) ); // Approve the token transfer proxy IERC20(weth).approve( IWyvernV23(wyvernV23).tokenTransferProxy(), type(uint256).max ); // --- ZeroExV4 setup --- zeroExV4 = zeroExV4Address; // --- Foundation setup --- foundation = foundationAddress; // --- X2Y2 setup --- x2y2 = x2y2Address; x2y2ERC721Delegate = x2y2ERC721DelegateAddress; } receive() external payable { // For unwrapping WETH } function makeCalls( address[] calldata targets, bytes[] calldata data, uint256[] calldata values ) external payable onlyOwner { bool success; for (uint256 i = 0; i < targets.length; i++) { (success, ) = payable(targets[i]).call{value: values[i]}(data[i]); require(success, "Unsuccessfull call"); } } // Terminology: // - "single" -> buy single token // - "batch" -> buy multiple tokens (natively, only 0xv4 supports this) // - "multi" -> buy multiple tokens (via the router) function singleERC721ListingFill( address referrer, bytes memory data, ExchangeKind exchangeKind, address collection, uint256 tokenId, address receiver, uint16 feeBps ) external payable { address target; if (exchangeKind == ExchangeKind.WYVERN_V23) { target = wyvernV23; } else if (exchangeKind == ExchangeKind.LOOKS_RARE) { target = looksRare; } else if (exchangeKind == ExchangeKind.ZEROEX_V4) { target = zeroExV4; } else if (exchangeKind == ExchangeKind.X2Y2) { target = x2y2; } else if (exchangeKind == ExchangeKind.FOUNDATION) { target = foundation; } else { revert("Unsupported exchange"); } uint256 payment = (10000 * msg.value) / (10000 + feeBps); (bool success, ) = target.call{value: payment}(data); require(success, "Unsuccessfull fill"); if (exchangeKind != ExchangeKind.WYVERN_V23) { // When filling LooksRare or ZeroExV4 listings we need to send // the NFT to the taker's wallet after the fill (since they do // not allow specifying a different recipient than the taker). IERC721(collection).transferFrom(address(this), receiver, tokenId); } uint256 fee = msg.value - payment; if (fee > 0) { (success, ) = payable(referrer).call{value: fee}(""); require(success, "Could not send payment"); } } function singleERC721ListingFillWithPrecheck( address referrer, bytes memory data, ExchangeKind exchangeKind, address collection, uint256 tokenId, address receiver, address expectedOwner, uint16 feeBps ) external payable { if (expectedOwner != address(0)) { require( IERC721(collection).ownerOf(tokenId) == expectedOwner, "Unexpected owner" ); } address target; if (exchangeKind == ExchangeKind.WYVERN_V23) { target = wyvernV23; } else if (exchangeKind == ExchangeKind.LOOKS_RARE) { target = looksRare; } else if (exchangeKind == ExchangeKind.ZEROEX_V4) { target = zeroExV4; } else if (exchangeKind == ExchangeKind.X2Y2) { target = x2y2; } else if (exchangeKind == ExchangeKind.FOUNDATION) { target = foundation; } else { revert("Unsupported exchange"); } uint256 payment = (10000 * msg.value) / (10000 + feeBps); (bool success, ) = target.call{value: payment}(data); require(success, "Unsuccessfull fill"); if (exchangeKind != ExchangeKind.WYVERN_V23) { // When filling LooksRare or ZeroExV4 listings we need to send // the NFT to the taker's wallet after the fill (since they do // not allow specifying a different recipient than the taker). IERC721(collection).transferFrom(address(this), receiver, tokenId); } uint256 fee = msg.value - payment; if (fee > 0) { (success, ) = payable(referrer).call{value: fee}(""); require(success, "Could not send payment"); } } function singleERC721BidFill( address, // referrer bytes calldata data, ExchangeKind exchangeKind, address collection, address receiver, bool unwrapWeth ) external payable { address target; address operator; if (exchangeKind == ExchangeKind.WYVERN_V23) { target = wyvernV23; operator = wyvernV23Proxy; } else if (exchangeKind == ExchangeKind.LOOKS_RARE) { target = looksRare; operator = looksRareTransferManagerERC721; } else if (exchangeKind == ExchangeKind.ZEROEX_V4) { target = zeroExV4; operator = zeroExV4; } else if (exchangeKind == ExchangeKind.X2Y2) { target = x2y2; operator = x2y2ERC721Delegate; } else { revert("Unsupported exchange"); } // Approve the exchange to transfer the NFT out of the router. bool isApproved = IERC721(collection).isApprovedForAll( address(this), operator ); if (!isApproved) { IERC721(collection).setApprovalForAll(operator, true); } (bool success, ) = target.call{value: msg.value}(data); require(success, "Unsuccessfull fill"); // Send the payment to the actual taker. uint256 balance = IERC20(weth).balanceOf(address(this)); if (unwrapWeth) { IWETH(weth).withdraw(balance); (success, ) = payable(receiver).call{value: balance}(""); require(success, "Could not send payment"); } else { IERC20(weth).transfer(receiver, balance); } } function singleERC1155ListingFill( address referrer, bytes memory data, ExchangeKind exchangeKind, address collection, uint256 tokenId, uint256 amount, address receiver, uint256 feeBps ) external payable { address target; if (exchangeKind == ExchangeKind.WYVERN_V23) { target = wyvernV23; } else if (exchangeKind == ExchangeKind.LOOKS_RARE) { target = looksRare; } else if (exchangeKind == ExchangeKind.ZEROEX_V4) { target = zeroExV4; } else { revert("Unsupported exchange"); } uint256 payment = (10000 * msg.value) / (10000 + feeBps); (bool success, ) = target.call{value: payment}(data); require(success, "Unsuccessfull fill"); if (exchangeKind != ExchangeKind.WYVERN_V23) { // When filling LooksRare or ZeroExV4 listings we need to send // the NFT to the taker's wallet after the fill (since they do // not allow specifying a different recipient than the taker). IERC1155(collection).safeTransferFrom( address(this), receiver, tokenId, amount, "" ); } uint256 fee = msg.value - payment; if (fee > 0) { (success, ) = payable(referrer).call{value: fee}(""); require(success, "Could not send payment"); } } function singleERC1155ListingFillWithPrecheck( address referrer, bytes memory data, ExchangeKind exchangeKind, address collection, uint256 tokenId, uint256 amount, address receiver, address expectedOwner, uint256 feeBps ) external payable { if (expectedOwner != address(0)) { require( IERC1155(collection).balanceOf(expectedOwner, tokenId) >= amount, "Unexpected owner/balance" ); } address target; if (exchangeKind == ExchangeKind.WYVERN_V23) { target = wyvernV23; } else if (exchangeKind == ExchangeKind.LOOKS_RARE) { target = looksRare; } else if (exchangeKind == ExchangeKind.ZEROEX_V4) { target = zeroExV4; } else { revert("Unsupported exchange"); } uint256 payment = (10000 * msg.value) / (10000 + feeBps); (bool success, ) = target.call{value: payment}(data); require(success, "Unsuccessfull fill"); if (exchangeKind != ExchangeKind.WYVERN_V23) { // When filling LooksRare or ZeroExV4 listings we need to send // the NFT to the taker's wallet after the fill (since they do // not allow specifying a different recipient than the taker). IERC1155(collection).safeTransferFrom( address(this), receiver, tokenId, amount, "" ); } uint256 fee = msg.value - payment; if (fee > 0) { (success, ) = payable(referrer).call{value: fee}(""); require(success, "Could not send payment"); } } function batchERC1155ListingFill( address referrer, bytes memory data, ExchangeKind exchangeKind, address[] memory collections, uint256[] memory tokenIds, uint256[] memory amounts, address receiver, uint256 feeBps ) external payable { address target; if (exchangeKind == ExchangeKind.ZEROEX_V4) { target = zeroExV4; } else { revert("Unsupported exchange"); } uint256 payment = (10000 * msg.value) / (10000 + feeBps); (bool success, ) = target.call{value: payment}(data); require(success, "Unsuccessfull fill"); for (uint256 i = 0; i < collections.length; i++) { // When filling LooksRare or ZeroExV4 listings we need to send // the NFT to the taker's wallet after the fill (since they do // not allow specifying a different recipient than the taker). IERC1155(collections[i]).safeTransferFrom( address(this), receiver, tokenIds[i], amounts[i], "" ); } uint256 fee = msg.value - payment; if (fee > 0) { (success, ) = payable(referrer).call{value: fee}(""); require(success, "Could not send payment"); } } function singleERC1155BidFill( address, // referrer bytes memory data, ExchangeKind exchangeKind, address collection, address receiver, bool unwrapWeth ) external payable { address target; address operator; if (exchangeKind == ExchangeKind.WYVERN_V23) { target = wyvernV23; operator = wyvernV23Proxy; } else if (exchangeKind == ExchangeKind.LOOKS_RARE) { target = looksRare; operator = looksRareTransferManagerERC1155; } else if (exchangeKind == ExchangeKind.ZEROEX_V4) { target = zeroExV4; operator = zeroExV4; } else { revert("Unsupported exchange"); } // Approve the exchange to transfer the NFT out of the router. bool isApproved = IERC1155(collection).isApprovedForAll( address(this), operator ); if (!isApproved) { IERC1155(collection).setApprovalForAll(operator, true); } (bool success, ) = target.call{value: msg.value}(data); require(success, "Unsuccessfull fill"); // Send the payment to the actual taker. uint256 balance = IERC20(weth).balanceOf(address(this)); if (unwrapWeth) { IWETH(weth).withdraw(balance); (success, ) = payable(receiver).call{value: balance}(""); require(success, "Could not send payment"); } else { IERC20(weth).transfer(receiver, balance); } } function multiListingFill( bytes[] calldata data, uint256[] calldata values, bool revertIfIncomplete ) external payable { bool success; for (uint256 i = 0; i < data.length; i++) { (success, ) = address(this).call{value: values[i]}(data[i]); if (revertIfIncomplete) { require(success, "Atomic fill failed"); } } (success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Could not send payment"); } // ERC721 / ERC1155 overrides function onERC721Received( address, // operator, address, // from uint256, // tokenId, bytes calldata data ) external returns (bytes4) { if (data.length == 0) { return this.onERC721Received.selector; } bytes4 selector = bytes4(data[:4]); require( selector == this.singleERC721BidFill.selector, "Wrong selector" ); (bool success, ) = address(this).call(data); require(success, "Unsuccessfull fill"); return this.onERC721Received.selector; } function onERC1155Received( address, // operator address, // from uint256, // tokenId uint256, // amount bytes calldata data ) external returns (bytes4) { if (data.length == 0) { return this.onERC1155Received.selector; } bytes4 selector = bytes4(data[:4]); require( selector == this.singleERC1155BidFill.selector, "Wrong selector" ); (bool success, ) = address(this).call(data); require(success, "Unsuccessfull fill"); return this.onERC1155Received.selector; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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 { _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 pragma solidity ^0.8.9; enum ExchangeKind { WYVERN_V23, LOOKS_RARE, ZEROEX_V4, FOUNDATION, X2Y2, SEAPORT }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; interface IWETH { function deposit() external payable; function withdraw(uint256 amount) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; interface ILooksRare { function transferSelectorNFT() external view returns (address); } interface ILooksRareTransferSelectorNFT { function TRANSFER_MANAGER_ERC721() external view returns (address); function TRANSFER_MANAGER_ERC1155() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; interface IWyvernV23 { function registry() external view returns (address); function tokenTransferProxy() external view returns (address); } interface IWyvernV23ProxyRegistry { function registerProxy() external; function proxies(address user) external view returns (address); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"wethAddress","type":"address"},{"internalType":"address","name":"looksRareAddress","type":"address"},{"internalType":"address","name":"wyvernV23Address","type":"address"},{"internalType":"address","name":"zeroExV4Address","type":"address"},{"internalType":"address","name":"foundationAddress","type":"address"},{"internalType":"address","name":"x2y2Address","type":"address"},{"internalType":"address","name":"x2y2ERC721DelegateAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum ExchangeKind","name":"exchangeKind","type":"uint8"},{"internalType":"address[]","name":"collections","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"feeBps","type":"uint256"}],"name":"batchERC1155ListingFill","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"foundation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"looksRare","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"looksRareTransferManagerERC1155","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"looksRareTransferManagerERC721","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"makeCalls","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bool","name":"revertIfIncomplete","type":"bool"}],"name":"multiListingFill","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","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":"","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum ExchangeKind","name":"exchangeKind","type":"uint8"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bool","name":"unwrapWeth","type":"bool"}],"name":"singleERC1155BidFill","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum ExchangeKind","name":"exchangeKind","type":"uint8"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"feeBps","type":"uint256"}],"name":"singleERC1155ListingFill","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum ExchangeKind","name":"exchangeKind","type":"uint8"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"expectedOwner","type":"address"},{"internalType":"uint256","name":"feeBps","type":"uint256"}],"name":"singleERC1155ListingFillWithPrecheck","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum ExchangeKind","name":"exchangeKind","type":"uint8"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"bool","name":"unwrapWeth","type":"bool"}],"name":"singleERC721BidFill","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum ExchangeKind","name":"exchangeKind","type":"uint8"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint16","name":"feeBps","type":"uint16"}],"name":"singleERC721ListingFill","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum ExchangeKind","name":"exchangeKind","type":"uint8"},{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"expectedOwner","type":"address"},{"internalType":"uint16","name":"feeBps","type":"uint16"}],"name":"singleERC721ListingFillWithPrecheck","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wyvernV23","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wyvernV23Proxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x2y2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x2y2ERC721Delegate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zeroExV4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200316838038062003168833981016040819052620000349162000554565b6200003f33620004e7565b600180546001600160a01b03808a166001600160a01b03199283161790925560028054928916929091168217905560408051632f0a7b4760e11b8152905160009291635e14f68e916004808301926020929190829003018186803b158015620000a757600080fd5b505afa158015620000bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e29190620005e9565b9050806001600160a01b031663b1357ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200011e57600080fd5b505afa15801562000133573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001599190620005e9565b600360006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001600160a01b031663389289566040518163ffffffff1660e01b815260040160206040518083038186803b158015620001b957600080fd5b505afa158015620001ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f49190620005e9565b600480546001600160a01b039283166001600160a01b031991821617825560058054938a16939091168317905560408051637b10399960e01b8152905160009392637b10399992808201926020929091829003018186803b1580156200025957600080fd5b505afa1580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002949190620005e9565b9050806001600160a01b031663ddd81f826040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002d257600080fd5b505af1158015620002e7573d6000803e3d6000fd5b505060405163c455279160e01b81523060048201526001600160a01b038416925063c4552791915060240160206040518083038186803b1580156200032b57600080fd5b505afa15801562000340573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003669190620005e9565b600680546001600160a01b0319166001600160a01b0392831617905560015460055460408051630eefdbad60e01b815290519284169363095ea7b393921691630eefdbad91600480820192602092909190829003018186803b158015620003cc57600080fd5b505afa158015620003e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004079190620005e9565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526000196024820152604401602060405180830381600087803b1580156200045157600080fd5b505af115801562000466573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048c91906200060e565b5050600780546001600160a01b039687166001600160a01b0319918216179091556008805495871695821695909517909455506009805492851692841692909217909155600a80549190931691161790555062000632915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200054f57600080fd5b919050565b600080600080600080600060e0888a0312156200057057600080fd5b6200057b8862000537565b96506200058b6020890162000537565b95506200059b6040890162000537565b9450620005ab6060890162000537565b9350620005bb6080890162000537565b9250620005cb60a0890162000537565b9150620005db60c0890162000537565b905092959891949750929550565b600060208284031215620005fc57600080fd5b620006078262000537565b9392505050565b6000602082840312156200062157600080fd5b815180151581146200060757600080fd5b612b2680620006426000396000f3fe60806040526004361061014f5760003560e01c80638da5cb5b116100b6578063a9a943cf1161006f578063a9a943cf1461036b578063d0d00a4b1461038b578063d5cc0d971461039e578063f23a6e61146103b1578063f2fde38b146103d1578063fc40c9c7146103f157600080fd5b80638da5cb5b146102c75780639110c777146102e5578063930a5d6c1461030557806393de968b146103185780639a3adc0814610338578063a57da8d81461034b57600080fd5b80633fc8cef3116101085780633fc8cef31461022c57806341fbb0501461024c5780634d2c29691461026c578063715018a61461027f5780637637905e1461029457806379e18827146102b457600080fd5b80630150e4241461015b57806312f3a43f14610170578063150b7a021461018357806319d5643f146101c15780631d495a66146101f9578063270ad3891461020c57600080fd5b3661015657005b600080fd5b61016e610169366004611f71565b610411565b005b61016e61017e366004612060565b61068f565b34801561018f57600080fd5b506101a361019e36600461213a565b6107e6565b6040516001600160e01b031990911681526020015b60405180910390f35b3480156101cd57600080fd5b506007546101e1906001600160a01b031681565b6040516001600160a01b0390911681526020016101b8565b61016e6102073660046121ba565b6108fb565b34801561021857600080fd5b506004546101e1906001600160a01b031681565b34801561023857600080fd5b506001546101e1906001600160a01b031681565b34801561025857600080fd5b506008546101e1906001600160a01b031681565b61016e61027a366004612264565b610ce5565b34801561028b57600080fd5b5061016e610f6d565b3480156102a057600080fd5b506005546101e1906001600160a01b031681565b61016e6102c2366004612303565b610fa3565b3480156102d357600080fd5b506000546001600160a01b03166101e1565b3480156102f157600080fd5b506002546101e1906001600160a01b031681565b61016e6103133660046123a3565b6113c5565b34801561032457600080fd5b50600a546101e1906001600160a01b031681565b61016e61034636600461245a565b6116cb565b34801561035757600080fd5b506003546101e1906001600160a01b031681565b34801561037757600080fd5b506006546101e1906001600160a01b031681565b61016e6103993660046125fe565b611975565b61016e6103ac3660046126e6565b611b1d565b3480156103bd57600080fd5b506101a36103cc366004612769565b611c87565b3480156103dd57600080fd5b5061016e6103ec3660046127d2565b611d9d565b3480156103fd57600080fd5b506009546101e1906001600160a01b031681565b600080876005811115610426576104266127f6565b141561043e57506005546001600160a01b03166104da565b6001876005811115610452576104526127f6565b141561046a57506002546001600160a01b03166104da565b600287600581111561047e5761047e6127f6565b141561049657506007546001600160a01b03166104da565b60405162461bcd60e51b8152602060048201526014602482015273556e737570706f727465642065786368616e676560601b60448201526064015b60405180910390fd5b60006104e883612710612822565b6104f43461271061283a565b6104fe9190612859565b90506000826001600160a01b0316828b60405161051b919061287b565b60006040518083038185875af1925050503d8060008114610558576040519150601f19603f3d011682016040523d82523d6000602084013e61055d565b606091505b505090508061057e5760405162461bcd60e51b81526004016104d1906128b6565b6000896005811115610592576105926127f6565b146105fc57604051637921219560e11b81526001600160a01b0389169063f242432a906105c990309089908c908c906004016128e2565b600060405180830381600087803b1580156105e357600080fd5b505af11580156105f7573d6000803e3d6000fd5b505050505b6000610608833461291a565b90508015610681576040516001600160a01b038d16908290600081818185875af1925050503d8060008114610659576040519150601f19603f3d011682016040523d82523d6000602084013e61065e565b606091505b505080925050816106815760405162461bcd60e51b81526004016104d190612931565b505050505050505050505050565b6000546001600160a01b031633146106b95760405162461bcd60e51b81526004016104d190612961565b6000805b868110156107dc578787828181106106d7576106d7612996565b90506020020160208101906106ec91906127d2565b6001600160a01b031684848381811061070757610707612996565b9050602002013587878481811061072057610720612996565b905060200281019061073291906129ac565b6040516107409291906129f2565b60006040518083038185875af1925050503d806000811461077d576040519150601f19603f3d011682016040523d82523d6000602084013e610782565b606091505b505080925050816107ca5760405162461bcd60e51b8152602060048201526012602482015271155b9cdd58d8d95cdcd99d5b1b0818d85b1b60721b60448201526064016104d1565b806107d481612a02565b9150506106bd565b5050505050505050565b6000816107fb5750630a85bd0160e11b6108f2565b600061080a6004828587612a1d565b61081391612a47565b90506001600160e01b031981166379e1882760e01b146108665760405162461bcd60e51b815260206004820152600e60248201526d2bb937b7339039b2b632b1ba37b960911b60448201526064016104d1565b6000306001600160a01b031685856040516108829291906129f2565b6000604051808303816000865af19150503d80600081146108bf576040519150601f19603f3d011682016040523d82523d6000602084013e6108c4565b606091505b50509050806108e55760405162461bcd60e51b81526004016104d1906128b6565b50630a85bd0160e11b9150505b95945050505050565b60008080866005811115610911576109116127f6565b14156109315750506005546006546001600160a01b03918216911661098f565b6001866005811115610945576109456127f6565b14156109655750506002546004546001600160a01b03918216911661098f565b6002866005811115610979576109796127f6565b14156104965750506007546001600160a01b0316805b60405163e985e9c560e01b81523060048201526001600160a01b0382811660248301526000919087169063e985e9c59060440160206040518083038186803b1580156109da57600080fd5b505afa1580156109ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a129190612a77565b905080610a7c5760405163a22cb46560e01b81526001600160a01b0383811660048301526001602483015287169063a22cb46590604401600060405180830381600087803b158015610a6357600080fd5b505af1158015610a77573d6000803e3d6000fd5b505050505b6000836001600160a01b0316348a604051610a97919061287b565b60006040518083038185875af1925050503d8060008114610ad4576040519150601f19603f3d011682016040523d82523d6000602084013e610ad9565b606091505b5050905080610afa5760405162461bcd60e51b81526004016104d1906128b6565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b3e57600080fd5b505afa158015610b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b769190612a94565b90508515610c5257600154604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015610bc457600080fd5b505af1158015610bd8573d6000803e3d6000fd5b50506040516001600160a01b038a169250839150600081818185875af1925050503d8060008114610c25576040519150601f19603f3d011682016040523d82523d6000602084013e610c2a565b606091505b50508092505081610c4d5760405162461bcd60e51b81526004016104d190612931565b610cd8565b60015460405163a9059cbb60e01b81526001600160a01b038981166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b158015610ca057600080fd5b505af1158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106819190612a77565b5050505050505050505050565b600080866005811115610cfa57610cfa6127f6565b1415610d1257506005546001600160a01b0316610dbe565b6001866005811115610d2657610d266127f6565b1415610d3e57506002546001600160a01b0316610dbe565b6002866005811115610d5257610d526127f6565b1415610d6a57506007546001600160a01b0316610dbe565b6004866005811115610d7e57610d7e6127f6565b1415610d9657506009546001600160a01b0316610dbe565b6003866005811115610daa57610daa6127f6565b141561049657506008546001600160a01b03165b6000610dcc83612710612aad565b61ffff16610ddc3461271061283a565b610de69190612859565b90506000826001600160a01b0316828a604051610e03919061287b565b60006040518083038185875af1925050503d8060008114610e40576040519150601f19603f3d011682016040523d82523d6000602084013e610e45565b606091505b5050905080610e665760405162461bcd60e51b81526004016104d1906128b6565b6000886005811115610e7a57610e7a6127f6565b14610ee8576040516323b872dd60e01b81523060048201526001600160a01b038681166024830152604482018890528816906323b872dd90606401600060405180830381600087803b158015610ecf57600080fd5b505af1158015610ee3573d6000803e3d6000fd5b505050505b6000610ef4833461291a565b90508015610cd8576040516001600160a01b038c16908290600081818185875af1925050503d8060008114610f45576040519150601f19603f3d011682016040523d82523d6000602084013e610f4a565b606091505b50508092505081610cd85760405162461bcd60e51b81526004016104d190612931565b6000546001600160a01b03163314610f975760405162461bcd60e51b81526004016104d190612961565b610fa16000611e38565b565b60008080866005811115610fb957610fb96127f6565b1415610fd95750506005546006546001600160a01b03918216911661106b565b6001866005811115610fed57610fed6127f6565b141561100d5750506002546003546001600160a01b03918216911661106b565b6002866005811115611021576110216127f6565b141561103b5750506007546001600160a01b03168061106b565b600486600581111561104f5761104f6127f6565b1415610496575050600954600a546001600160a01b0391821691165b60405163e985e9c560e01b81523060048201526001600160a01b0382811660248301526000919087169063e985e9c59060440160206040518083038186803b1580156110b657600080fd5b505afa1580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee9190612a77565b9050806111585760405163a22cb46560e01b81526001600160a01b0383811660048301526001602483015287169063a22cb46590604401600060405180830381600087803b15801561113f57600080fd5b505af1158015611153573d6000803e3d6000fd5b505050505b6000836001600160a01b0316348b8b6040516111759291906129f2565b60006040518083038185875af1925050503d80600081146111b2576040519150601f19603f3d011682016040523d82523d6000602084013e6111b7565b606091505b50509050806111d85760405162461bcd60e51b81526004016104d1906128b6565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561121c57600080fd5b505afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112549190612a94565b9050851561133057600154604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b50506040516001600160a01b038a169250839150600081818185875af1925050503d8060008114611303576040519150601f19603f3d011682016040523d82523d6000602084013e611308565b606091505b5050809250508161132b5760405162461bcd60e51b81526004016104d190612931565b610681565b60015460405163a9059cbb60e01b81526001600160a01b038981166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b69190612a77565b50505050505050505050505050565b6001600160a01b038216156114a357604051627eeac760e11b81526001600160a01b0383811660048301526024820187905285919088169062fdd58e9060440160206040518083038186803b15801561141d57600080fd5b505afa158015611431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114559190612a94565b10156114a35760405162461bcd60e51b815260206004820152601860248201527f556e6578706563746564206f776e65722f62616c616e6365000000000000000060448201526064016104d1565b6000808860058111156114b8576114b86127f6565b14156114d057506005546001600160a01b0316611524565b60018860058111156114e4576114e46127f6565b14156114fc57506002546001600160a01b0316611524565b6002886005811115611510576115106127f6565b141561049657506007546001600160a01b03165b600061153283612710612822565b61153e3461271061283a565b6115489190612859565b90506000826001600160a01b0316828c604051611565919061287b565b60006040518083038185875af1925050503d80600081146115a2576040519150601f19603f3d011682016040523d82523d6000602084013e6115a7565b606091505b50509050806115c85760405162461bcd60e51b81526004016104d1906128b6565b60008a60058111156115dc576115dc6127f6565b1461164657604051637921219560e11b81526001600160a01b038a169063f242432a906116139030908a908d908d906004016128e2565b600060405180830381600087803b15801561162d57600080fd5b505af1158015611641573d6000803e3d6000fd5b505050505b6000611652833461291a565b905080156113b6576040516001600160a01b038e16908290600081818185875af1925050503d80600081146116a3576040519150601f19603f3d011682016040523d82523d6000602084013e6116a8565b606091505b505080925050816113b65760405162461bcd60e51b81526004016104d190612931565b6001600160a01b038216156117a0576040516331a9108f60e11b8152600481018590526001600160a01b038084169190871690636352211e9060240160206040518083038186803b15801561171f57600080fd5b505afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190612ad3565b6001600160a01b0316146117a05760405162461bcd60e51b815260206004820152601060248201526f2ab732bc3832b1ba32b21037bbb732b960811b60448201526064016104d1565b6000808760058111156117b5576117b56127f6565b14156117cd57506005546001600160a01b0316611879565b60018760058111156117e1576117e16127f6565b14156117f957506002546001600160a01b0316611879565b600287600581111561180d5761180d6127f6565b141561182557506007546001600160a01b0316611879565b6004876005811115611839576118396127f6565b141561185157506009546001600160a01b0316611879565b6003876005811115611865576118656127f6565b141561049657506008546001600160a01b03165b600061188783612710612aad565b61ffff166118973461271061283a565b6118a19190612859565b90506000826001600160a01b0316828b6040516118be919061287b565b60006040518083038185875af1925050503d80600081146118fb576040519150601f19603f3d011682016040523d82523d6000602084013e611900565b606091505b50509050806119215760405162461bcd60e51b81526004016104d1906128b6565b6000896005811115611935576119356127f6565b146105fc576040516323b872dd60e01b81523060048201526001600160a01b038781166024830152604482018990528916906323b872dd906064016105c9565b6000600287600581111561198b5761198b6127f6565b141561049657506007546001600160a01b031660006119ac83612710612822565b6119b83461271061283a565b6119c29190612859565b90506000826001600160a01b0316828b6040516119df919061287b565b60006040518083038185875af1925050503d8060008114611a1c576040519150601f19603f3d011682016040523d82523d6000602084013e611a21565b606091505b5050905080611a425760405162461bcd60e51b81526004016104d1906128b6565b60005b8851811015611b1057888181518110611a6057611a60612996565b60200260200101516001600160a01b031663f242432a30888b8581518110611a8a57611a8a612996565b60200260200101518b8681518110611aa457611aa4612996565b60200260200101516040518563ffffffff1660e01b8152600401611acb94939291906128e2565b600060405180830381600087803b158015611ae557600080fd5b505af1158015611af9573d6000803e3d6000fd5b505050508080611b0890612a02565b915050611a45565b506000610608833461291a565b6000805b85811015611c165730858583818110611b3c57611b3c612996565b90506020020135888884818110611b5557611b55612996565b9050602002810190611b6791906129ac565b604051611b759291906129f2565b60006040518083038185875af1925050503d8060008114611bb2576040519150601f19603f3d011682016040523d82523d6000602084013e611bb7565b606091505b50909250508215611c045781611c045760405162461bcd60e51b8152602060048201526012602482015271105d1bdb5a58c8199a5b1b0819985a5b195960721b60448201526064016104d1565b80611c0e81612a02565b915050611b21565b5060405133904790600081818185875af1925050503d8060008114611c57576040519150601f19603f3d011682016040523d82523d6000602084013e611c5c565b606091505b50508091505080611c7f5760405162461bcd60e51b81526004016104d190612931565b505050505050565b600081611c9c575063f23a6e6160e01b611d93565b6000611cab6004828587612a1d565b611cb491612a47565b90506001600160e01b03198116630ea4ad3360e11b14611d075760405162461bcd60e51b815260206004820152600e60248201526d2bb937b7339039b2b632b1ba37b960911b60448201526064016104d1565b6000306001600160a01b03168585604051611d239291906129f2565b6000604051808303816000865af19150503d8060008114611d60576040519150601f19603f3d011682016040523d82523d6000602084013e611d65565b606091505b5050905080611d865760405162461bcd60e51b81526004016104d1906128b6565b5063f23a6e6160e01b9150505b9695505050505050565b6000546001600160a01b03163314611dc75760405162461bcd60e51b81526004016104d190612961565b6001600160a01b038116611e2c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d1565b611e3581611e38565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114611e3557600080fd5b8035611ea881611e88565b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611eeb57611eeb611ead565b604052919050565b600082601f830112611f0457600080fd5b81356001600160401b03811115611f1d57611f1d611ead565b611f30601f8201601f1916602001611ec3565b818152846020838601011115611f4557600080fd5b816020850160208301376000918101602001919091529392505050565b803560068110611ea857600080fd5b600080600080600080600080610100898b031215611f8e57600080fd5b8835611f9981611e88565b975060208901356001600160401b03811115611fb457600080fd5b611fc08b828c01611ef3565b975050611fcf60408a01611f62565b95506060890135611fdf81611e88565b94506080890135935060a0890135925060c0890135611ffd81611e88565b8092505060e089013590509295985092959890939650565b60008083601f84011261202757600080fd5b5081356001600160401b0381111561203e57600080fd5b6020830191508360208260051b850101111561205957600080fd5b9250929050565b6000806000806000806060878903121561207957600080fd5b86356001600160401b038082111561209057600080fd5b61209c8a838b01612015565b909850965060208901359150808211156120b557600080fd5b6120c18a838b01612015565b909650945060408901359150808211156120da57600080fd5b506120e789828a01612015565b979a9699509497509295939492505050565b60008083601f84011261210b57600080fd5b5081356001600160401b0381111561212257600080fd5b60208301915083602082850101111561205957600080fd5b60008060008060006080868803121561215257600080fd5b853561215d81611e88565b9450602086013561216d81611e88565b93506040860135925060608601356001600160401b0381111561218f57600080fd5b61219b888289016120f9565b969995985093965092949392505050565b8015158114611e3557600080fd5b60008060008060008060c087890312156121d357600080fd5b86356121de81611e88565b955060208701356001600160401b038111156121f957600080fd5b61220589828a01611ef3565b95505061221460408801611f62565b9350606087013561222481611e88565b9250608087013561223481611e88565b915060a0870135612244816121ac565b809150509295509295509295565b803561ffff81168114611ea857600080fd5b600080600080600080600060e0888a03121561227f57600080fd5b873561228a81611e88565b965060208801356001600160401b038111156122a557600080fd5b6122b18a828b01611ef3565b9650506122c060408901611f62565b945060608801356122d081611e88565b93506080880135925060a08801356122e781611e88565b91506122f560c08901612252565b905092959891949750929550565b600080600080600080600060c0888a03121561231e57600080fd5b873561232981611e88565b965060208801356001600160401b0381111561234457600080fd5b6123508a828b016120f9565b9097509550612363905060408901611f62565b9350606088013561237381611e88565b9250608088013561238381611e88565b915060a0880135612393816121ac565b8091505092959891949750929550565b60008060008060008060008060006101208a8c0312156123c257600080fd5b89356123cd81611e88565b985060208a01356001600160401b038111156123e857600080fd5b6123f48c828d01611ef3565b98505061240360408b01611f62565b965060608a013561241381611e88565b955060808a0135945060a08a0135935060c08a013561243181611e88565b925060e08a013561244181611e88565b809250506101008a013590509295985092959850929598565b600080600080600080600080610100898b03121561247757600080fd5b883561248281611e88565b975060208901356001600160401b0381111561249d57600080fd5b6124a98b828c01611ef3565b9750506124b860408a01611f62565b955060608901356124c881611e88565b94506080890135935060a08901356124df81611e88565b925060c08901356124ef81611e88565b91506124fd60e08a01612252565b90509295985092959890939650565b60006001600160401b0382111561252557612525611ead565b5060051b60200190565b600082601f83011261254057600080fd5b813560206125556125508361250c565b611ec3565b82815260059290921b8401810191818101908684111561257457600080fd5b8286015b8481101561259857803561258b81611e88565b8352918301918301612578565b509695505050505050565b600082601f8301126125b457600080fd5b813560206125c46125508361250c565b82815260059290921b840181019181810190868411156125e357600080fd5b8286015b8481101561259857803583529183019183016125e7565b600080600080600080600080610100898b03121561261b57600080fd5b61262489611e9d565b975060208901356001600160401b038082111561264057600080fd5b61264c8c838d01611ef3565b985061265a60408c01611f62565b975060608b013591508082111561267057600080fd5b61267c8c838d0161252f565b965060808b013591508082111561269257600080fd5b61269e8c838d016125a3565b955060a08b01359150808211156126b457600080fd5b506126c18b828c016125a3565b9350506126d060c08a01611e9d565b915060e089013590509295985092959890939650565b6000806000806000606086880312156126fe57600080fd5b85356001600160401b038082111561271557600080fd5b61272189838a01612015565b9097509550602088013591508082111561273a57600080fd5b5061274788828901612015565b909450925050604086013561275b816121ac565b809150509295509295909350565b60008060008060008060a0878903121561278257600080fd5b863561278d81611e88565b9550602087013561279d81611e88565b9450604087013593506060870135925060808701356001600160401b038111156127c657600080fd5b6120e789828a016120f9565b6000602082840312156127e457600080fd5b81356127ef81611e88565b9392505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156128355761283561280c565b500190565b60008160001904831182151516156128545761285461280c565b500290565b60008261287657634e487b7160e01b600052601260045260246000fd5b500490565b6000825160005b8181101561289c5760208186018101518583015201612882565b818111156128ab576000828501525b509190910192915050565b602080825260129082015271155b9cdd58d8d95cdcd99d5b1b08199a5b1b60721b604082015260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b60008282101561292c5761292c61280c565b500390565b60208082526016908201527510dbdd5b19081b9bdd081cd95b99081c185e5b595b9d60521b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126129c357600080fd5b8301803591506001600160401b038211156129dd57600080fd5b60200191503681900382131561205957600080fd5b8183823760009101908152919050565b6000600019821415612a1657612a1661280c565b5060010190565b60008085851115612a2d57600080fd5b83861115612a3a57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015612a6f5780818660040360031b1b83161692505b505092915050565b600060208284031215612a8957600080fd5b81516127ef816121ac565b600060208284031215612aa657600080fd5b5051919050565b600061ffff808316818516808303821115612aca57612aca61280c565b01949350505050565b600060208284031215612ae557600080fd5b81516127ef81611e8856fea26469706673582212200ab2ad56140370fc1d60572f5a5ec270f5ae4a8f38bd9b031dde350f2243436a64736f6c63430008090033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000059728544b08ab483533076417fbbb2fd0b17ce3a0000000000000000000000007f268357a8c2552623316e2562d90e642bb538e5000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff000000000000000000000000cda72070e455bb31c7690a170224ce43623d0b6f00000000000000000000000074312363e45dcaba76c59ec49a7aa8a65a67eed3000000000000000000000000f849de01b080adc3a814fabe1e2087475cf2e354
Deployed Bytecode
0x60806040526004361061014f5760003560e01c80638da5cb5b116100b6578063a9a943cf1161006f578063a9a943cf1461036b578063d0d00a4b1461038b578063d5cc0d971461039e578063f23a6e61146103b1578063f2fde38b146103d1578063fc40c9c7146103f157600080fd5b80638da5cb5b146102c75780639110c777146102e5578063930a5d6c1461030557806393de968b146103185780639a3adc0814610338578063a57da8d81461034b57600080fd5b80633fc8cef3116101085780633fc8cef31461022c57806341fbb0501461024c5780634d2c29691461026c578063715018a61461027f5780637637905e1461029457806379e18827146102b457600080fd5b80630150e4241461015b57806312f3a43f14610170578063150b7a021461018357806319d5643f146101c15780631d495a66146101f9578063270ad3891461020c57600080fd5b3661015657005b600080fd5b61016e610169366004611f71565b610411565b005b61016e61017e366004612060565b61068f565b34801561018f57600080fd5b506101a361019e36600461213a565b6107e6565b6040516001600160e01b031990911681526020015b60405180910390f35b3480156101cd57600080fd5b506007546101e1906001600160a01b031681565b6040516001600160a01b0390911681526020016101b8565b61016e6102073660046121ba565b6108fb565b34801561021857600080fd5b506004546101e1906001600160a01b031681565b34801561023857600080fd5b506001546101e1906001600160a01b031681565b34801561025857600080fd5b506008546101e1906001600160a01b031681565b61016e61027a366004612264565b610ce5565b34801561028b57600080fd5b5061016e610f6d565b3480156102a057600080fd5b506005546101e1906001600160a01b031681565b61016e6102c2366004612303565b610fa3565b3480156102d357600080fd5b506000546001600160a01b03166101e1565b3480156102f157600080fd5b506002546101e1906001600160a01b031681565b61016e6103133660046123a3565b6113c5565b34801561032457600080fd5b50600a546101e1906001600160a01b031681565b61016e61034636600461245a565b6116cb565b34801561035757600080fd5b506003546101e1906001600160a01b031681565b34801561037757600080fd5b506006546101e1906001600160a01b031681565b61016e6103993660046125fe565b611975565b61016e6103ac3660046126e6565b611b1d565b3480156103bd57600080fd5b506101a36103cc366004612769565b611c87565b3480156103dd57600080fd5b5061016e6103ec3660046127d2565b611d9d565b3480156103fd57600080fd5b506009546101e1906001600160a01b031681565b600080876005811115610426576104266127f6565b141561043e57506005546001600160a01b03166104da565b6001876005811115610452576104526127f6565b141561046a57506002546001600160a01b03166104da565b600287600581111561047e5761047e6127f6565b141561049657506007546001600160a01b03166104da565b60405162461bcd60e51b8152602060048201526014602482015273556e737570706f727465642065786368616e676560601b60448201526064015b60405180910390fd5b60006104e883612710612822565b6104f43461271061283a565b6104fe9190612859565b90506000826001600160a01b0316828b60405161051b919061287b565b60006040518083038185875af1925050503d8060008114610558576040519150601f19603f3d011682016040523d82523d6000602084013e61055d565b606091505b505090508061057e5760405162461bcd60e51b81526004016104d1906128b6565b6000896005811115610592576105926127f6565b146105fc57604051637921219560e11b81526001600160a01b0389169063f242432a906105c990309089908c908c906004016128e2565b600060405180830381600087803b1580156105e357600080fd5b505af11580156105f7573d6000803e3d6000fd5b505050505b6000610608833461291a565b90508015610681576040516001600160a01b038d16908290600081818185875af1925050503d8060008114610659576040519150601f19603f3d011682016040523d82523d6000602084013e61065e565b606091505b505080925050816106815760405162461bcd60e51b81526004016104d190612931565b505050505050505050505050565b6000546001600160a01b031633146106b95760405162461bcd60e51b81526004016104d190612961565b6000805b868110156107dc578787828181106106d7576106d7612996565b90506020020160208101906106ec91906127d2565b6001600160a01b031684848381811061070757610707612996565b9050602002013587878481811061072057610720612996565b905060200281019061073291906129ac565b6040516107409291906129f2565b60006040518083038185875af1925050503d806000811461077d576040519150601f19603f3d011682016040523d82523d6000602084013e610782565b606091505b505080925050816107ca5760405162461bcd60e51b8152602060048201526012602482015271155b9cdd58d8d95cdcd99d5b1b0818d85b1b60721b60448201526064016104d1565b806107d481612a02565b9150506106bd565b5050505050505050565b6000816107fb5750630a85bd0160e11b6108f2565b600061080a6004828587612a1d565b61081391612a47565b90506001600160e01b031981166379e1882760e01b146108665760405162461bcd60e51b815260206004820152600e60248201526d2bb937b7339039b2b632b1ba37b960911b60448201526064016104d1565b6000306001600160a01b031685856040516108829291906129f2565b6000604051808303816000865af19150503d80600081146108bf576040519150601f19603f3d011682016040523d82523d6000602084013e6108c4565b606091505b50509050806108e55760405162461bcd60e51b81526004016104d1906128b6565b50630a85bd0160e11b9150505b95945050505050565b60008080866005811115610911576109116127f6565b14156109315750506005546006546001600160a01b03918216911661098f565b6001866005811115610945576109456127f6565b14156109655750506002546004546001600160a01b03918216911661098f565b6002866005811115610979576109796127f6565b14156104965750506007546001600160a01b0316805b60405163e985e9c560e01b81523060048201526001600160a01b0382811660248301526000919087169063e985e9c59060440160206040518083038186803b1580156109da57600080fd5b505afa1580156109ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a129190612a77565b905080610a7c5760405163a22cb46560e01b81526001600160a01b0383811660048301526001602483015287169063a22cb46590604401600060405180830381600087803b158015610a6357600080fd5b505af1158015610a77573d6000803e3d6000fd5b505050505b6000836001600160a01b0316348a604051610a97919061287b565b60006040518083038185875af1925050503d8060008114610ad4576040519150601f19603f3d011682016040523d82523d6000602084013e610ad9565b606091505b5050905080610afa5760405162461bcd60e51b81526004016104d1906128b6565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b158015610b3e57600080fd5b505afa158015610b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b769190612a94565b90508515610c5257600154604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b158015610bc457600080fd5b505af1158015610bd8573d6000803e3d6000fd5b50506040516001600160a01b038a169250839150600081818185875af1925050503d8060008114610c25576040519150601f19603f3d011682016040523d82523d6000602084013e610c2a565b606091505b50508092505081610c4d5760405162461bcd60e51b81526004016104d190612931565b610cd8565b60015460405163a9059cbb60e01b81526001600160a01b038981166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b158015610ca057600080fd5b505af1158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106819190612a77565b5050505050505050505050565b600080866005811115610cfa57610cfa6127f6565b1415610d1257506005546001600160a01b0316610dbe565b6001866005811115610d2657610d266127f6565b1415610d3e57506002546001600160a01b0316610dbe565b6002866005811115610d5257610d526127f6565b1415610d6a57506007546001600160a01b0316610dbe565b6004866005811115610d7e57610d7e6127f6565b1415610d9657506009546001600160a01b0316610dbe565b6003866005811115610daa57610daa6127f6565b141561049657506008546001600160a01b03165b6000610dcc83612710612aad565b61ffff16610ddc3461271061283a565b610de69190612859565b90506000826001600160a01b0316828a604051610e03919061287b565b60006040518083038185875af1925050503d8060008114610e40576040519150601f19603f3d011682016040523d82523d6000602084013e610e45565b606091505b5050905080610e665760405162461bcd60e51b81526004016104d1906128b6565b6000886005811115610e7a57610e7a6127f6565b14610ee8576040516323b872dd60e01b81523060048201526001600160a01b038681166024830152604482018890528816906323b872dd90606401600060405180830381600087803b158015610ecf57600080fd5b505af1158015610ee3573d6000803e3d6000fd5b505050505b6000610ef4833461291a565b90508015610cd8576040516001600160a01b038c16908290600081818185875af1925050503d8060008114610f45576040519150601f19603f3d011682016040523d82523d6000602084013e610f4a565b606091505b50508092505081610cd85760405162461bcd60e51b81526004016104d190612931565b6000546001600160a01b03163314610f975760405162461bcd60e51b81526004016104d190612961565b610fa16000611e38565b565b60008080866005811115610fb957610fb96127f6565b1415610fd95750506005546006546001600160a01b03918216911661106b565b6001866005811115610fed57610fed6127f6565b141561100d5750506002546003546001600160a01b03918216911661106b565b6002866005811115611021576110216127f6565b141561103b5750506007546001600160a01b03168061106b565b600486600581111561104f5761104f6127f6565b1415610496575050600954600a546001600160a01b0391821691165b60405163e985e9c560e01b81523060048201526001600160a01b0382811660248301526000919087169063e985e9c59060440160206040518083038186803b1580156110b657600080fd5b505afa1580156110ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ee9190612a77565b9050806111585760405163a22cb46560e01b81526001600160a01b0383811660048301526001602483015287169063a22cb46590604401600060405180830381600087803b15801561113f57600080fd5b505af1158015611153573d6000803e3d6000fd5b505050505b6000836001600160a01b0316348b8b6040516111759291906129f2565b60006040518083038185875af1925050503d80600081146111b2576040519150601f19603f3d011682016040523d82523d6000602084013e6111b7565b606091505b50509050806111d85760405162461bcd60e51b81526004016104d1906128b6565b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561121c57600080fd5b505afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112549190612a94565b9050851561133057600154604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156112a257600080fd5b505af11580156112b6573d6000803e3d6000fd5b50506040516001600160a01b038a169250839150600081818185875af1925050503d8060008114611303576040519150601f19603f3d011682016040523d82523d6000602084013e611308565b606091505b5050809250508161132b5760405162461bcd60e51b81526004016104d190612931565b610681565b60015460405163a9059cbb60e01b81526001600160a01b038981166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b69190612a77565b50505050505050505050505050565b6001600160a01b038216156114a357604051627eeac760e11b81526001600160a01b0383811660048301526024820187905285919088169062fdd58e9060440160206040518083038186803b15801561141d57600080fd5b505afa158015611431573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114559190612a94565b10156114a35760405162461bcd60e51b815260206004820152601860248201527f556e6578706563746564206f776e65722f62616c616e6365000000000000000060448201526064016104d1565b6000808860058111156114b8576114b86127f6565b14156114d057506005546001600160a01b0316611524565b60018860058111156114e4576114e46127f6565b14156114fc57506002546001600160a01b0316611524565b6002886005811115611510576115106127f6565b141561049657506007546001600160a01b03165b600061153283612710612822565b61153e3461271061283a565b6115489190612859565b90506000826001600160a01b0316828c604051611565919061287b565b60006040518083038185875af1925050503d80600081146115a2576040519150601f19603f3d011682016040523d82523d6000602084013e6115a7565b606091505b50509050806115c85760405162461bcd60e51b81526004016104d1906128b6565b60008a60058111156115dc576115dc6127f6565b1461164657604051637921219560e11b81526001600160a01b038a169063f242432a906116139030908a908d908d906004016128e2565b600060405180830381600087803b15801561162d57600080fd5b505af1158015611641573d6000803e3d6000fd5b505050505b6000611652833461291a565b905080156113b6576040516001600160a01b038e16908290600081818185875af1925050503d80600081146116a3576040519150601f19603f3d011682016040523d82523d6000602084013e6116a8565b606091505b505080925050816113b65760405162461bcd60e51b81526004016104d190612931565b6001600160a01b038216156117a0576040516331a9108f60e11b8152600481018590526001600160a01b038084169190871690636352211e9060240160206040518083038186803b15801561171f57600080fd5b505afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117579190612ad3565b6001600160a01b0316146117a05760405162461bcd60e51b815260206004820152601060248201526f2ab732bc3832b1ba32b21037bbb732b960811b60448201526064016104d1565b6000808760058111156117b5576117b56127f6565b14156117cd57506005546001600160a01b0316611879565b60018760058111156117e1576117e16127f6565b14156117f957506002546001600160a01b0316611879565b600287600581111561180d5761180d6127f6565b141561182557506007546001600160a01b0316611879565b6004876005811115611839576118396127f6565b141561185157506009546001600160a01b0316611879565b6003876005811115611865576118656127f6565b141561049657506008546001600160a01b03165b600061188783612710612aad565b61ffff166118973461271061283a565b6118a19190612859565b90506000826001600160a01b0316828b6040516118be919061287b565b60006040518083038185875af1925050503d80600081146118fb576040519150601f19603f3d011682016040523d82523d6000602084013e611900565b606091505b50509050806119215760405162461bcd60e51b81526004016104d1906128b6565b6000896005811115611935576119356127f6565b146105fc576040516323b872dd60e01b81523060048201526001600160a01b038781166024830152604482018990528916906323b872dd906064016105c9565b6000600287600581111561198b5761198b6127f6565b141561049657506007546001600160a01b031660006119ac83612710612822565b6119b83461271061283a565b6119c29190612859565b90506000826001600160a01b0316828b6040516119df919061287b565b60006040518083038185875af1925050503d8060008114611a1c576040519150601f19603f3d011682016040523d82523d6000602084013e611a21565b606091505b5050905080611a425760405162461bcd60e51b81526004016104d1906128b6565b60005b8851811015611b1057888181518110611a6057611a60612996565b60200260200101516001600160a01b031663f242432a30888b8581518110611a8a57611a8a612996565b60200260200101518b8681518110611aa457611aa4612996565b60200260200101516040518563ffffffff1660e01b8152600401611acb94939291906128e2565b600060405180830381600087803b158015611ae557600080fd5b505af1158015611af9573d6000803e3d6000fd5b505050508080611b0890612a02565b915050611a45565b506000610608833461291a565b6000805b85811015611c165730858583818110611b3c57611b3c612996565b90506020020135888884818110611b5557611b55612996565b9050602002810190611b6791906129ac565b604051611b759291906129f2565b60006040518083038185875af1925050503d8060008114611bb2576040519150601f19603f3d011682016040523d82523d6000602084013e611bb7565b606091505b50909250508215611c045781611c045760405162461bcd60e51b8152602060048201526012602482015271105d1bdb5a58c8199a5b1b0819985a5b195960721b60448201526064016104d1565b80611c0e81612a02565b915050611b21565b5060405133904790600081818185875af1925050503d8060008114611c57576040519150601f19603f3d011682016040523d82523d6000602084013e611c5c565b606091505b50508091505080611c7f5760405162461bcd60e51b81526004016104d190612931565b505050505050565b600081611c9c575063f23a6e6160e01b611d93565b6000611cab6004828587612a1d565b611cb491612a47565b90506001600160e01b03198116630ea4ad3360e11b14611d075760405162461bcd60e51b815260206004820152600e60248201526d2bb937b7339039b2b632b1ba37b960911b60448201526064016104d1565b6000306001600160a01b03168585604051611d239291906129f2565b6000604051808303816000865af19150503d8060008114611d60576040519150601f19603f3d011682016040523d82523d6000602084013e611d65565b606091505b5050905080611d865760405162461bcd60e51b81526004016104d1906128b6565b5063f23a6e6160e01b9150505b9695505050505050565b6000546001600160a01b03163314611dc75760405162461bcd60e51b81526004016104d190612961565b6001600160a01b038116611e2c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d1565b611e3581611e38565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114611e3557600080fd5b8035611ea881611e88565b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611eeb57611eeb611ead565b604052919050565b600082601f830112611f0457600080fd5b81356001600160401b03811115611f1d57611f1d611ead565b611f30601f8201601f1916602001611ec3565b818152846020838601011115611f4557600080fd5b816020850160208301376000918101602001919091529392505050565b803560068110611ea857600080fd5b600080600080600080600080610100898b031215611f8e57600080fd5b8835611f9981611e88565b975060208901356001600160401b03811115611fb457600080fd5b611fc08b828c01611ef3565b975050611fcf60408a01611f62565b95506060890135611fdf81611e88565b94506080890135935060a0890135925060c0890135611ffd81611e88565b8092505060e089013590509295985092959890939650565b60008083601f84011261202757600080fd5b5081356001600160401b0381111561203e57600080fd5b6020830191508360208260051b850101111561205957600080fd5b9250929050565b6000806000806000806060878903121561207957600080fd5b86356001600160401b038082111561209057600080fd5b61209c8a838b01612015565b909850965060208901359150808211156120b557600080fd5b6120c18a838b01612015565b909650945060408901359150808211156120da57600080fd5b506120e789828a01612015565b979a9699509497509295939492505050565b60008083601f84011261210b57600080fd5b5081356001600160401b0381111561212257600080fd5b60208301915083602082850101111561205957600080fd5b60008060008060006080868803121561215257600080fd5b853561215d81611e88565b9450602086013561216d81611e88565b93506040860135925060608601356001600160401b0381111561218f57600080fd5b61219b888289016120f9565b969995985093965092949392505050565b8015158114611e3557600080fd5b60008060008060008060c087890312156121d357600080fd5b86356121de81611e88565b955060208701356001600160401b038111156121f957600080fd5b61220589828a01611ef3565b95505061221460408801611f62565b9350606087013561222481611e88565b9250608087013561223481611e88565b915060a0870135612244816121ac565b809150509295509295509295565b803561ffff81168114611ea857600080fd5b600080600080600080600060e0888a03121561227f57600080fd5b873561228a81611e88565b965060208801356001600160401b038111156122a557600080fd5b6122b18a828b01611ef3565b9650506122c060408901611f62565b945060608801356122d081611e88565b93506080880135925060a08801356122e781611e88565b91506122f560c08901612252565b905092959891949750929550565b600080600080600080600060c0888a03121561231e57600080fd5b873561232981611e88565b965060208801356001600160401b0381111561234457600080fd5b6123508a828b016120f9565b9097509550612363905060408901611f62565b9350606088013561237381611e88565b9250608088013561238381611e88565b915060a0880135612393816121ac565b8091505092959891949750929550565b60008060008060008060008060006101208a8c0312156123c257600080fd5b89356123cd81611e88565b985060208a01356001600160401b038111156123e857600080fd5b6123f48c828d01611ef3565b98505061240360408b01611f62565b965060608a013561241381611e88565b955060808a0135945060a08a0135935060c08a013561243181611e88565b925060e08a013561244181611e88565b809250506101008a013590509295985092959850929598565b600080600080600080600080610100898b03121561247757600080fd5b883561248281611e88565b975060208901356001600160401b0381111561249d57600080fd5b6124a98b828c01611ef3565b9750506124b860408a01611f62565b955060608901356124c881611e88565b94506080890135935060a08901356124df81611e88565b925060c08901356124ef81611e88565b91506124fd60e08a01612252565b90509295985092959890939650565b60006001600160401b0382111561252557612525611ead565b5060051b60200190565b600082601f83011261254057600080fd5b813560206125556125508361250c565b611ec3565b82815260059290921b8401810191818101908684111561257457600080fd5b8286015b8481101561259857803561258b81611e88565b8352918301918301612578565b509695505050505050565b600082601f8301126125b457600080fd5b813560206125c46125508361250c565b82815260059290921b840181019181810190868411156125e357600080fd5b8286015b8481101561259857803583529183019183016125e7565b600080600080600080600080610100898b03121561261b57600080fd5b61262489611e9d565b975060208901356001600160401b038082111561264057600080fd5b61264c8c838d01611ef3565b985061265a60408c01611f62565b975060608b013591508082111561267057600080fd5b61267c8c838d0161252f565b965060808b013591508082111561269257600080fd5b61269e8c838d016125a3565b955060a08b01359150808211156126b457600080fd5b506126c18b828c016125a3565b9350506126d060c08a01611e9d565b915060e089013590509295985092959890939650565b6000806000806000606086880312156126fe57600080fd5b85356001600160401b038082111561271557600080fd5b61272189838a01612015565b9097509550602088013591508082111561273a57600080fd5b5061274788828901612015565b909450925050604086013561275b816121ac565b809150509295509295909350565b60008060008060008060a0878903121561278257600080fd5b863561278d81611e88565b9550602087013561279d81611e88565b9450604087013593506060870135925060808701356001600160401b038111156127c657600080fd5b6120e789828a016120f9565b6000602082840312156127e457600080fd5b81356127ef81611e88565b9392505050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082198211156128355761283561280c565b500190565b60008160001904831182151516156128545761285461280c565b500290565b60008261287657634e487b7160e01b600052601260045260246000fd5b500490565b6000825160005b8181101561289c5760208186018101518583015201612882565b818111156128ab576000828501525b509190910192915050565b602080825260129082015271155b9cdd58d8d95cdcd99d5b1b08199a5b1b60721b604082015260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b60008282101561292c5761292c61280c565b500390565b60208082526016908201527510dbdd5b19081b9bdd081cd95b99081c185e5b595b9d60521b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126129c357600080fd5b8301803591506001600160401b038211156129dd57600080fd5b60200191503681900382131561205957600080fd5b8183823760009101908152919050565b6000600019821415612a1657612a1661280c565b5060010190565b60008085851115612a2d57600080fd5b83861115612a3a57600080fd5b5050820193919092039150565b6001600160e01b03198135818116916004851015612a6f5780818660040360031b1b83161692505b505092915050565b600060208284031215612a8957600080fd5b81516127ef816121ac565b600060208284031215612aa657600080fd5b5051919050565b600061ffff808316818516808303821115612aca57612aca61280c565b01949350505050565b600060208284031215612ae557600080fd5b81516127ef81611e8856fea26469706673582212200ab2ad56140370fc1d60572f5a5ec270f5ae4a8f38bd9b031dde350f2243436a64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000059728544b08ab483533076417fbbb2fd0b17ce3a0000000000000000000000007f268357a8c2552623316e2562d90e642bb538e5000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff000000000000000000000000cda72070e455bb31c7690a170224ce43623d0b6f00000000000000000000000074312363e45dcaba76c59ec49a7aa8a65a67eed3000000000000000000000000f849de01b080adc3a814fabe1e2087475cf2e354
-----Decoded View---------------
Arg [0] : wethAddress (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : looksRareAddress (address): 0x59728544B08AB483533076417FbBB2fD0B17CE3a
Arg [2] : wyvernV23Address (address): 0x7f268357A8c2552623316e2562D90e642bB538E5
Arg [3] : zeroExV4Address (address): 0xDef1C0ded9bec7F1a1670819833240f027b25EfF
Arg [4] : foundationAddress (address): 0xcDA72070E455bb31C7690a170224Ce43623d0B6f
Arg [5] : x2y2Address (address): 0x74312363e45DCaBA76c59ec49a7Aa8A65a67EeD3
Arg [6] : x2y2ERC721DelegateAddress (address): 0xF849de01B080aDC3A814FaBE1E2087475cF2E354
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 00000000000000000000000059728544b08ab483533076417fbbb2fd0b17ce3a
Arg [2] : 0000000000000000000000007f268357a8c2552623316e2562d90e642bb538e5
Arg [3] : 000000000000000000000000def1c0ded9bec7f1a1670819833240f027b25eff
Arg [4] : 000000000000000000000000cda72070e455bb31c7690a170224ce43623d0b6f
Arg [5] : 00000000000000000000000074312363e45dcaba76c59ec49a7aa8a65a67eed3
Arg [6] : 000000000000000000000000f849de01b080adc3a814fabe1e2087475cf2e354
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,942.81 | 0.00000578 | $0.022798 |
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.