Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 520 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Accept Swap | 15662145 | 830 days ago | IN | 0 ETH | 0.00063022 | ||||
Initiate Swap | 15662140 | 830 days ago | IN | 0 ETH | 0.00111637 | ||||
Cancel Swap | 15662115 | 830 days ago | IN | 0 ETH | 0.00042605 | ||||
Propose Swap | 15662101 | 830 days ago | IN | 0 ETH | 0.00122496 | ||||
Propose Swap | 15662096 | 830 days ago | IN | 0 ETH | 0.00126345 | ||||
Cancel Swap | 15618289 | 836 days ago | IN | 0 ETH | 0.00444349 | ||||
Propose Swap | 15617967 | 836 days ago | IN | 0 ETH | 0.00529309 | ||||
Accept Swap | 15606786 | 838 days ago | IN | 0 ETH | 0.00103123 | ||||
Initiate Swap | 15606777 | 838 days ago | IN | 0 ETH | 0.00114548 | ||||
Propose Swap | 15606763 | 838 days ago | IN | 23.5 ETH | 0.00145695 | ||||
Cancel Swap | 15584196 | 841 days ago | IN | 0 ETH | 0.00161001 | ||||
Propose Swap | 15584108 | 841 days ago | IN | 0 ETH | 0.00567311 | ||||
Cancel Swap | 15583652 | 841 days ago | IN | 0 ETH | 0.00413604 | ||||
Propose Swap | 15583516 | 841 days ago | IN | 0 ETH | 0.00815776 | ||||
Accept Swap | 15578599 | 841 days ago | IN | 0 ETH | 0.00138853 | ||||
Initiate Swap | 15578594 | 841 days ago | IN | 101 ETH | 0.00171523 | ||||
Propose Swap | 15578483 | 842 days ago | IN | 0 ETH | 0.0029754 | ||||
Cancel Swap | 15578478 | 842 days ago | IN | 0 ETH | 0.00130871 | ||||
Propose Swap | 15578447 | 842 days ago | IN | 0 ETH | 0.00322725 | ||||
Cancel Swap | 15558373 | 844 days ago | IN | 0 ETH | 0.00047488 | ||||
Cancel Swap | 15516304 | 851 days ago | IN | 0 ETH | 0.00185602 | ||||
Propose Swap | 15516161 | 851 days ago | IN | 0 ETH | 0.00770539 | ||||
Cancel Swap | 15509261 | 852 days ago | IN | 0 ETH | 0.00370485 | ||||
Propose Swap | 15508795 | 852 days ago | IN | 0 ETH | 0.00527327 | ||||
Cancel Swap | 15502103 | 853 days ago | IN | 0 ETH | 0.00204049 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15606786 | 838 days ago | 23.5 ETH | ||||
15578599 | 841 days ago | 101 ETH | ||||
15457895 | 860 days ago | 0.65 ETH | ||||
15425398 | 865 days ago | 0.32 ETH | ||||
15401487 | 869 days ago | 0.695 ETH | ||||
15393305 | 871 days ago | 20 ETH | ||||
15378239 | 873 days ago | 0.01 ETH | ||||
15344134 | 878 days ago | 2 ETH | ||||
15239612 | 895 days ago | 19 ETH | ||||
15183946 | 903 days ago | 0.75 ETH | ||||
15141064 | 910 days ago | 0.75 ETH | ||||
15131453 | 911 days ago | 35 ETH | ||||
15009064 | 932 days ago | 13 ETH | ||||
14958095 | 941 days ago | 27 ETH | ||||
14946720 | 943 days ago | 0.03 ETH | ||||
14934530 | 945 days ago | 2.7 ETH | ||||
14873863 | 955 days ago | 2.45 ETH | ||||
14842156 | 960 days ago | 0.4 ETH | ||||
14841990 | 960 days ago | 1.05 ETH | ||||
14806471 | 966 days ago | 0.37 ETH | ||||
14805621 | 966 days ago | 0.355 ETH | ||||
14790648 | 968 days ago | 0.5 ETH | ||||
14789921 | 968 days ago | 2.5 ETH | ||||
14748764 | 975 days ago | 2 ETH | ||||
14731183 | 978 days ago | 0.05 ETH |
Loading...
Loading
Contract Name:
SwapKiwi
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.1; import "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol"; import "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; /** * @title This is the contract which added erc1155 into the previous swap contract. */ contract SwapKiwi is Ownable, ERC721Holder, ERC1155Holder { uint64 private _swapsCounter; uint128 private _etherLocked; uint128 public fee; mapping (uint64 => Swap) private _swaps; struct Swap { address payable initiator; address[] initiatorNftAddresses; uint256[] initiatorNftIds; uint256[] initiatorNftAmounts; address payable secondUser; address[] secondUserNftAddresses; uint256[] secondUserNftIds; uint256[] secondUserNftAmounts; uint128 initiatorEtherValue; uint128 secondUserEtherValue; } event SwapExecuted(address indexed from, address indexed to, uint64 indexed swapId); event SwapCanceled(address indexed canceledBy, uint64 indexed swapId); event SwapProposed( address indexed from, address indexed to, uint64 indexed swapId, uint128 etherValue, address[] nftAddresses, uint256[] nftIds, uint256[] nftAmounts ); event SwapInitiated( address indexed from, address indexed to, uint64 indexed swapId, uint128 etherValue, address[] nftAddresses, uint256[] nftIds, uint256[] nftAmounts ); event AppFeeChanged( uint128 fee ); modifier onlyInitiator(uint64 swapId) { require(msg.sender == _swaps[swapId].initiator, "SwapKiwi: caller is not swap initiator"); _; } modifier requireSameLength(address[] memory nftAddresses, uint256[] memory nftIds, uint256[] memory nftAmounts) { require(nftAddresses.length == nftIds.length, "SwapKiwi: NFT and ID arrays have to be same length"); require(nftAddresses.length == nftAmounts.length, "SwapKiwi: NFT and AMOUNT arrays have to be same length"); _; } modifier chargeAppFee() { require(msg.value >= fee, "SwapKiwi: Sent ETH amount needs to be more or equal application fee"); _; } constructor(uint128 initalAppFee, address contractOwnerAddress) { fee = initalAppFee; super.transferOwnership(contractOwnerAddress); } function setAppFee(uint128 newFee) external onlyOwner { fee = newFee; emit AppFeeChanged(newFee); } /** * @dev First user proposes a swap to the second user with the NFTs that he deposits and wants to trade. * Proposed NFTs are transfered to the SwapKiwi contract and * kept there until the swap is accepted or canceled/rejected. * * @param secondUser address of the user that the first user wants to trade NFTs with * @param nftAddresses array of NFT addressed that want to be traded * @param nftIds array of IDs belonging to NFTs that want to be traded * @param nftAmounts array of NFT amounts that want to be traded. If the amount is zero, that means * the token is ERC721 token. Otherwise the token is ERC1155 token. */ function proposeSwap( address secondUser, address[] memory nftAddresses, uint256[] memory nftIds, uint256[] memory nftAmounts ) external payable chargeAppFee requireSameLength(nftAddresses, nftIds, nftAmounts) { _swapsCounter += 1; safeMultipleTransfersFrom( msg.sender, address(this), nftAddresses, nftIds, nftAmounts ); Swap storage swap = _swaps[_swapsCounter]; swap.initiator = payable(msg.sender); swap.initiatorNftAddresses = nftAddresses; swap.initiatorNftIds = nftIds; swap.initiatorNftAmounts = nftAmounts; uint128 _fee = fee; if (msg.value > _fee) { swap.initiatorEtherValue = uint128(msg.value) - _fee; _etherLocked += swap.initiatorEtherValue; } swap.secondUser = payable(secondUser); emit SwapProposed( msg.sender, secondUser, _swapsCounter, swap.initiatorEtherValue, nftAddresses, nftIds, nftAmounts ); } /** * @dev Second user accepts the swap (with proposed NFTs) from swap initiator and * deposits his NFTs into the SwapKiwi contract. * Callable only by second user that is invited by swap initiator. * * @param swapId ID of the swap that the second user is invited to participate in * @param nftAddresses array of NFT addressed that want to be traded * @param nftIds array of IDs belonging to NFTs that want to be traded * @param nftAmounts array of NFT amounts that want to be traded. If the amount is zero, that means * the token is ERC721 token. Otherwise the token is ERC1155 token. */ function initiateSwap( uint64 swapId, address[] memory nftAddresses, uint256[] memory nftIds, uint256[] memory nftAmounts ) external payable chargeAppFee requireSameLength(nftAddresses, nftIds, nftAmounts) { require(_swaps[swapId].secondUser == msg.sender, "SwapKiwi: caller is not swap participator"); require( _swaps[swapId].secondUserEtherValue == 0 && ( _swaps[swapId].secondUserNftAddresses.length == 0 && _swaps[swapId].secondUserNftIds.length == 0 && _swaps[swapId].secondUserNftAmounts.length == 0 ), "SwapKiwi: swap already initiated" ); safeMultipleTransfersFrom( msg.sender, address(this), nftAddresses, nftIds, nftAmounts ); _swaps[swapId].secondUserNftAddresses = nftAddresses; _swaps[swapId].secondUserNftIds = nftIds; _swaps[swapId].secondUserNftAmounts = nftAmounts; uint128 _fee = fee; if (msg.value > _fee) { _swaps[swapId].secondUserEtherValue = uint128(msg.value) - _fee; _etherLocked += _swaps[swapId].secondUserEtherValue; } emit SwapInitiated( msg.sender, _swaps[swapId].initiator, swapId, _swaps[swapId].secondUserEtherValue, nftAddresses, nftIds, nftAmounts ); } /** * @dev Swap initiator accepts the swap (NFTs proposed by the second user). * Executeds the swap - transfers NFTs from SwapKiwi to the participating users. * Callable only by swap initiator. * * @param swapId ID of the swap that the initator wants to execute */ function acceptSwap(uint64 swapId) external onlyInitiator(swapId) { require( (_swaps[swapId].secondUserNftAddresses.length != 0 || _swaps[swapId].secondUserEtherValue > 0) && (_swaps[swapId].initiatorNftAddresses.length != 0 || _swaps[swapId].initiatorEtherValue > 0), "SwapKiwi: Can't accept swap, both participants didn't add NFTs" ); // transfer NFTs from escrow to initiator safeMultipleTransfersFrom( address(this), _swaps[swapId].initiator, _swaps[swapId].secondUserNftAddresses, _swaps[swapId].secondUserNftIds, _swaps[swapId].secondUserNftAmounts ); // transfer NFTs from escrow to second user safeMultipleTransfersFrom( address(this), _swaps[swapId].secondUser, _swaps[swapId].initiatorNftAddresses, _swaps[swapId].initiatorNftIds, _swaps[swapId].initiatorNftAmounts ); if (_swaps[swapId].initiatorEtherValue != 0) { _etherLocked -= _swaps[swapId].initiatorEtherValue; uint128 amountToTransfer = _swaps[swapId].initiatorEtherValue; _swaps[swapId].initiatorEtherValue = 0; _swaps[swapId].secondUser.transfer(amountToTransfer); } if (_swaps[swapId].secondUserEtherValue != 0) { _etherLocked -= _swaps[swapId].secondUserEtherValue; uint128 amountToTransfer = _swaps[swapId].secondUserEtherValue; _swaps[swapId].secondUserEtherValue = 0; _swaps[swapId].initiator.transfer(amountToTransfer); } emit SwapExecuted(_swaps[swapId].initiator, _swaps[swapId].secondUser, swapId); delete _swaps[swapId]; } /** * @dev Returns NFTs from SwapKiwi to swap initator. * Callable only if second user hasn't yet added NFTs. * * @param swapId ID of the swap that the swap participants want to cancel */ function cancelSwap(uint64 swapId) external { require( _swaps[swapId].initiator == msg.sender || _swaps[swapId].secondUser == msg.sender, "SwapKiwi: Can't cancel swap, must be swap participant" ); // return initiator NFTs safeMultipleTransfersFrom( address(this), _swaps[swapId].initiator, _swaps[swapId].initiatorNftAddresses, _swaps[swapId].initiatorNftIds, _swaps[swapId].initiatorNftAmounts ); if(_swaps[swapId].secondUserNftAddresses.length != 0) { // return second user NFTs safeMultipleTransfersFrom( address(this), _swaps[swapId].secondUser, _swaps[swapId].secondUserNftAddresses, _swaps[swapId].secondUserNftIds, _swaps[swapId].secondUserNftAmounts ); } if (_swaps[swapId].initiatorEtherValue != 0) { _etherLocked -= _swaps[swapId].initiatorEtherValue; uint128 amountToTransfer = _swaps[swapId].initiatorEtherValue; _swaps[swapId].initiatorEtherValue = 0; _swaps[swapId].initiator.transfer(amountToTransfer); } if (_swaps[swapId].secondUserEtherValue != 0) { _etherLocked -= _swaps[swapId].secondUserEtherValue; uint128 amountToTransfer = _swaps[swapId].secondUserEtherValue; _swaps[swapId].secondUserEtherValue = 0; _swaps[swapId].secondUser.transfer(amountToTransfer); } emit SwapCanceled(msg.sender, swapId); delete _swaps[swapId]; } function safeMultipleTransfersFrom( address from, address to, address[] memory nftAddresses, uint256[] memory nftIds, uint256[] memory nftAmounts ) internal virtual { for (uint256 i=0; i < nftIds.length; i++){ safeTransferFrom(from, to, nftAddresses[i], nftIds[i], nftAmounts[i], ""); } } function safeTransferFrom( address from, address to, address tokenAddress, uint256 tokenId, uint256 tokenAmount, bytes memory _data ) internal virtual { if (tokenAmount == 0) { IERC721(tokenAddress).safeTransferFrom(from, to, tokenId, _data); } else { IERC1155(tokenAddress).safeTransferFrom(from, to, tokenId, tokenAmount, _data); } } function withdrawEther(address payable recipient) external onlyOwner { require(recipient != address(0), "SwapKiwi: transfer to the zero address"); recipient.transfer((address(this).balance - _etherLocked)); } }
// SPDX-License-Identifier: MIT 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT 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 pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns(bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns(bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC1155Receiver.sol"; /** * @dev _Available since v3.1._ */ contract ERC1155Holder is ERC1155Receiver { function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC1155Receiver.sol"; import "../../../utils/introspection/ERC165.sol"; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT 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 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 pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC721Receiver.sol"; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) { return this.onERC721Received.selector; } }
// SPDX-License-Identifier: MIT 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT 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); }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint128","name":"initalAppFee","type":"uint128"},{"internalType":"address","name":"contractOwnerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint128","name":"fee","type":"uint128"}],"name":"AppFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"canceledBy","type":"address"},{"indexed":true,"internalType":"uint64","name":"swapId","type":"uint64"}],"name":"SwapCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint64","name":"swapId","type":"uint64"}],"name":"SwapExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint64","name":"swapId","type":"uint64"},{"indexed":false,"internalType":"uint128","name":"etherValue","type":"uint128"},{"indexed":false,"internalType":"address[]","name":"nftAddresses","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"nftAmounts","type":"uint256[]"}],"name":"SwapInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint64","name":"swapId","type":"uint64"},{"indexed":false,"internalType":"uint128","name":"etherValue","type":"uint128"},{"indexed":false,"internalType":"address[]","name":"nftAddresses","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"nftAmounts","type":"uint256[]"}],"name":"SwapProposed","type":"event"},{"inputs":[{"internalType":"uint64","name":"swapId","type":"uint64"}],"name":"acceptSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"swapId","type":"uint64"}],"name":"cancelSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"swapId","type":"uint64"},{"internalType":"address[]","name":"nftAddresses","type":"address[]"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"internalType":"uint256[]","name":"nftAmounts","type":"uint256[]"}],"name":"initiateSwap","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":"","type":"bytes"}],"name":"onERC1155BatchReceived","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":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","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":"","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":[{"internalType":"address","name":"secondUser","type":"address"},{"internalType":"address[]","name":"nftAddresses","type":"address[]"},{"internalType":"uint256[]","name":"nftIds","type":"uint256[]"},{"internalType":"uint256[]","name":"nftAmounts","type":"uint256[]"}],"name":"proposeSwap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"newFee","type":"uint128"}],"name":"setAppFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200278a3803806200278a83398101604081905262000034916200018a565b600062000040620000b5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350916000805160206200276a833981519152908290a350600180546001600160801b03808516600160801b029116179055620000ad8162001721620000b9602090811b91909117901c565b505062000257565b3390565b620000c3620000b5565b6001600160a01b0316620000d66200017b565b6001600160a01b031614620001085760405162461bcd60e51b8152600401620000ff9062000222565b60405180910390fd5b6001600160a01b038116620001315760405162461bcd60e51b8152600401620000ff90620001dc565b600080546040516001600160a01b03808516939216916000805160206200276a83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b600080604083850312156200019d578182fd5b82516001600160801b0381168114620001b4578283fd5b60208401519092506001600160a01b0381168114620001d1578182fd5b809150509250929050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b61250380620002676000396000f3fe6080604052600436106100dd5760003560e01c8063b7719a9c1161007f578063bcc68faf11610059578063bcc68faf14610231578063ddca3f4314610244578063f23a6e6114610266578063f2fde38b14610286576100dd565b8063b7719a9c146101de578063ba792c96146101fe578063bc197c8114610211576100dd565b8063715018a6116100bb578063715018a6146101675780637500f85c1461017c5780638da5cb5b1461019c578063af933b57146101be576100dd565b806301ffc9a7146100e25780630cce448d14610118578063150b7a021461013a575b600080fd5b3480156100ee57600080fd5b506101026100fd366004611ddd565b6102a6565b60405161010f9190611f9a565b60405180910390f35b34801561012457600080fd5b50610138610133366004611e2c565b6102d3565b005b34801561014657600080fd5b5061015a610155366004611c84565b6108de565b60405161010f9190611fa5565b34801561017357600080fd5b506101386108ee565b34801561018857600080fd5b50610138610197366004611e2c565b610977565b3480156101a857600080fd5b506101b161100d565b60405161010f9190611f04565b3480156101ca57600080fd5b506101386101d9366004611bb8565b61101c565b3480156101ea57600080fd5b506101386101f9366004611e05565b6110d2565b61013861020c366004611d53565b611166565b34801561021d57600080fd5b5061015a61022c366004611bdb565b6113b9565b61013861023f366004611e46565b6113ca565b34801561025057600080fd5b506102596116fa565b60405161010f9190612302565b34801561027257600080fd5b5061015a610281366004611ced565b611710565b34801561029257600080fd5b506101386102a1366004611bb8565b611721565b60006001600160e01b03198216630271189760e51b14806102cb57506102cb826117e1565b90505b919050565b6001600160401b0381166000908152600260205260409020546001600160a01b031633148061032557506001600160401b0381166000908152600260205260409020600401546001600160a01b031633145b61034a5760405162461bcd60e51b8152600401610341906122ad565b60405180910390fd5b6001600160401b0381166000908152600260209081526040918290208054600190910180548451818502810185019095528085526104a59430946001600160a01b0390941693909291908301828280156103cd57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103af575b5050506001600160401b0387166000908152600260208181526040928390209091018054835181840281018401909452808452929450925083018282801561043457602002820191906000526020600020905b815481526020019060010190808311610420575b5050506001600160401b0388166000908152600260209081526040918290206003018054835181840281018401909452808452929450925083018282801561049b57602002820191906000526020600020905b815481526020019060010190808311610487575b50505050506117fa565b6001600160401b03811660009081526002602052604090206005015415610622576001600160401b0381166000908152600260209081526040918290206004810154600590910180548451818502810185019095528085526106229430946001600160a01b03909416939092919083018282801561054c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161052e575b5050506001600160401b038716600090815260026020908152604091829020600601805483518184028101840190945280845292945092508301828280156105b357602002820191906000526020600020905b81548152602001906001019080831161059f575b5050506001600160401b0388166000908152600260209081526040918290206007018054835181840281018401909452808452929450925083018282801561049b57602002820191906000526020600020908154815260200190600101908083116104875750505050506117fa565b6001600160401b0381166000908152600260205260409020600801546001600160801b03161561070f576001600160401b038116600090815260026020526040812060080154600180546001600160801b0392831693919261068691859116612432565b82546101009290920a6001600160801b038181021990931691831602179091556001600160401b0383166000908152600260205260408082206008810180546001600160801b0319811690915590549151931693506001600160a01b0316916108fc84150291849190818181858888f1935050505015801561070c573d6000803e3d6000fd5b50505b6001600160401b038116600090815260026020526040902060080154600160801b90046001600160801b03161561080f576001600160401b038116600090815260026020526040812060080154600180546001600160801b03600160801b909304831693919261078191859116612432565b82546101009290920a6001600160801b038181021990931691831602179091556001600160401b0383166000908152600260205260408082206008810180548086169091556004909101549151600160801b90910490931693506001600160a01b0316916108fc84150291849190818181858888f1935050505015801561080c573d6000803e3d6000fd5b50505b6040516001600160401b0382169033907f54b9c72d790ad613d26b317d2d24e28dd1608f07ff121cb2d42ace3cbcd4eb0f90600090a36001600160401b038116600090815260026020526040812080546001600160a01b0319168155906108796001830182611992565b610887600283016000611992565b610895600383016000611992565b6004820180546001600160a01b03191690556108b5600583016000611992565b6108c3600683016000611992565b6108d1600783016000611992565b5060006008919091015550565b630a85bd0160e11b949350505050565b6108f66118b2565b6001600160a01b031661090761100d565b6001600160a01b03161461092d5760405162461bcd60e51b81526004016103419061213d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001600160401b03811660009081526002602052604090205481906001600160a01b031633146109b95760405162461bcd60e51b815260040161034190612172565b6001600160401b038216600090815260026020526040902060050154151580610a0c57506001600160401b038216600090815260026020526040902060080154600160801b90046001600160801b031615155b8015610a5f57506001600160401b038216600090815260026020526040902060010154151580610a5f57506001600160401b0382166000908152600260205260409020600801546001600160801b031615155b610a7b5760405162461bcd60e51b81526004016103419061220a565b6001600160401b038216600090815260026020908152604091829020805460059091018054845181850281018501909552808552610bd49430946001600160a01b039094169390929190830182828015610afe57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ae0575b5050506001600160401b03881660009081526002602090815260409182902060060180548351818402810184019094528084529294509250830182828015610b6557602002820191906000526020600020905b815481526020019060010190808311610b51575b5050506001600160401b0389166000908152600260209081526040918290206007018054835181840281018401909452808452929450925083018282801561049b57602002820191906000526020600020908154815260200190600101908083116104875750505050506117fa565b6001600160401b038216600090815260026020908152604091829020600481015460019091018054845181850281018501909552808552610d309430946001600160a01b039094169390929190830182828015610c5a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c3c575b5050506001600160401b03881660009081526002602081815260409283902090910180548351818402810184019094528084529294509250830182828015610cc157602002820191906000526020600020905b815481526020019060010190808311610cad575b5050506001600160401b0389166000908152600260209081526040918290206003018054835181840281018401909452808452929450925083018282801561049b57602002820191906000526020600020908154815260200190600101908083116104875750505050506117fa565b6001600160401b0382166000908152600260205260409020600801546001600160801b031615610e21576001600160401b038216600090815260026020526040812060080154600180546001600160801b03928316939192610d9491859116612432565b82546101009290920a6001600160801b038181021990931691831602179091556001600160401b0384166000908152600260205260408082206008810180546001600160801b031981169091556004909101549151931693506001600160a01b0316916108fc84150291849190818181858888f19350505050158015610e1e573d6000803e3d6000fd5b50505b6001600160401b038216600090815260026020526040902060080154600160801b90046001600160801b031615610f1d576001600160401b038216600090815260026020526040812060080154600180546001600160801b03600160801b9093048316939192610e9391859116612432565b82546101009290920a6001600160801b038181021990931691831602179091556001600160401b03841660009081526002602052604080822060088101805480861690915590549151600160801b90910490931693506001600160a01b0316916108fc84150291849190818181858888f19350505050158015610f1a573d6000803e3d6000fd5b50505b6001600160401b0382166000818152600260205260408082206004810154905491516001600160a01b039182169392909116917f8d1ef4e0ccd0f016857c236780af12f7aa46cb23459b4962f46e649e6a9c24f291a46001600160401b038216600090815260026020526040812080546001600160a01b031916815590610fa76001830182611992565b610fb5600283016000611992565b610fc3600383016000611992565b6004820180546001600160a01b0319169055610fe3600583016000611992565b610ff1600683016000611992565b610fff600783016000611992565b506000600891909101555050565b6000546001600160a01b031690565b6110246118b2565b6001600160a01b031661103561100d565b6001600160a01b03161461105b5760405162461bcd60e51b81526004016103419061213d565b6001600160a01b0381166110815760405162461bcd60e51b815260040161034190612267565b6001546001600160a01b038216906108fc906110a6906001600160801b03164761245a565b6040518115909202916000818181858888f193505050501580156110ce573d6000803e3d6000fd5b5050565b6110da6118b2565b6001600160a01b03166110eb61100d565b6001600160a01b0316146111115760405162461bcd60e51b81526004016103419061213d565b600180546001600160801b03808416600160801b0291161790556040517f220ace5bd7df3a0637bc16073257c1c74f8a207436c0c1a8cf098ff268d4078a9061115b908390612302565b60405180910390a150565b600154600160801b90046001600160801b03163410156111985760405162461bcd60e51b8152600401610341906120d4565b82828281518351146111bc5760405162461bcd60e51b8152600401610341906121b8565b80518351146111dd5760405162461bcd60e51b815260040161034190612003565b6001600060148282829054906101000a90046001600160401b03166112029190612410565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061123333308888886117fa565b600080546001600160401b03600160a01b90910416815260026020908152604090912080546001600160a01b031916331781558751909161127b9160018401918a01906119b3565b5085516112919060028301906020890190611a18565b5084516112a79060038301906020880190611a18565b50600154600160801b90046001600160801b03163481101561132b576112cd8134612432565b6008830180546001600160801b0319166001600160801b03928316179081905560018054918316929091600091611306918591166123e5565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b6004820180546001600160a01b0319166001600160a01b038b169081179091556000546008840154604051600160a01b9092046001600160401b0316929133917f061b0f674853978c67ced987aa7f15144cea27971234dd0d38435fa99067161b916113a6916001600160801b0316908e908e908e90612316565b60405180910390a4505050505050505050565b63bc197c8160e01b95945050505050565b600154600160801b90046001600160801b03163410156113fc5760405162461bcd60e51b8152600401610341906120d4565b82828281518351146114205760405162461bcd60e51b8152600401610341906121b8565b80518351146114415760405162461bcd60e51b815260040161034190612003565b6001600160401b0387166000908152600260205260409020600401546001600160a01b031633146114845760405162461bcd60e51b815260040161034190611fba565b6001600160401b038716600090815260026020526040902060080154600160801b90046001600160801b031615801561151f57506001600160401b0387166000908152600260205260409020600501541580156114fa57506001600160401b038716600090815260026020526040902060060154155b801561151f57506001600160401b038716600090815260026020526040902060070154155b61153b5760405162461bcd60e51b815260040161034190612059565b61154833308888886117fa565b6001600160401b03871660009081526002602090815260409091208751611577926005909201918901906119b3565b506001600160401b038716600090815260026020908152604090912086516115a792600690920191880190611a18565b506001600160401b038716600090815260026020908152604090912085516115d792600790920191870190611a18565b50600154600160801b90046001600160801b031634811015611673576115fd8134612432565b6001600160401b038916600090815260026020526040812060080180546001600160801b03908116600160801b94821685021791829055600180549490920481169391929161164e918591166123e5565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b6001600160401b03881660008181526002602052604090819020805460089091015491516001600160a01b039091169133917f8c3a2ada90a52e2dbc9b383a4589f666e5b71d5cdf7721c7ec32925dffa116b5916116e891600160801b9091046001600160801b0316908d908d908d90612316565b60405180910390a45050505050505050565b600154600160801b90046001600160801b031681565b63f23a6e6160e01b95945050505050565b6117296118b2565b6001600160a01b031661173a61100d565b6001600160a01b0316146117605760405162461bcd60e51b81526004016103419061213d565b6001600160a01b0381166117865760405162461bcd60e51b81526004016103419061208e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160e01b031981166301ffc9a760e01b14919050565b60005b82518110156118aa57611898868686848151811061182b57634e487b7160e01b600052603260045260246000fd5b602002602001015186858151811061185357634e487b7160e01b600052603260045260246000fd5b602002602001015186868151811061187b57634e487b7160e01b600052603260045260246000fd5b6020026020010151604051806020016040528060008152506118b6565b806118a281612471565b9150506117fd565b505050505050565b3390565b8161192457604051635c46a7ef60e11b81526001600160a01b0385169063b88d4fde906118ed908990899088908790600401611f18565b600060405180830381600087803b15801561190757600080fd5b505af115801561191b573d6000803e3d6000fd5b505050506118aa565b604051637921219560e11b81526001600160a01b0385169063f242432a906119589089908990889088908890600401611f55565b600060405180830381600087803b15801561197257600080fd5b505af1158015611986573d6000803e3d6000fd5b50505050505050505050565b50805460008255906000526020600020908101906119b09190611a53565b50565b828054828255906000526020600020908101928215611a08579160200282015b82811115611a0857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906119d3565b50611a14929150611a53565b5090565b828054828255906000526020600020908101928215611a08579160200282015b82811115611a08578251825591602001919060010190611a38565b5b80821115611a145760008155600101611a54565b600082601f830112611a78578081fd5b81356020611a8d611a88836123c2565b612392565b8281528181019085830183850287018401881015611aa9578586fd5b855b85811015611ad0578135611abe816124b8565b84529284019290840190600101611aab565b5090979650505050505050565b600082601f830112611aed578081fd5b81356020611afd611a88836123c2565b8281528181019085830183850287018401881015611b19578586fd5b855b85811015611ad057813584529284019290840190600101611b1b565b600082601f830112611b47578081fd5b81356001600160401b03811115611b6057611b606124a2565b611b73601f8201601f1916602001612392565b818152846020838601011115611b87578283fd5b816020850160208301379081016020019190915292915050565b80356001600160401b03811681146102ce57600080fd5b600060208284031215611bc9578081fd5b8135611bd4816124b8565b9392505050565b600080600080600060a08688031215611bf2578081fd5b8535611bfd816124b8565b94506020860135611c0d816124b8565b935060408601356001600160401b0380821115611c28578283fd5b611c3489838a01611add565b94506060880135915080821115611c49578283fd5b611c5589838a01611add565b93506080880135915080821115611c6a578283fd5b50611c7788828901611b37565b9150509295509295909350565b60008060008060808587031215611c99578384fd5b8435611ca4816124b8565b93506020850135611cb4816124b8565b92506040850135915060608501356001600160401b03811115611cd5578182fd5b611ce187828801611b37565b91505092959194509250565b600080600080600060a08688031215611d04578081fd5b8535611d0f816124b8565b94506020860135611d1f816124b8565b9350604086013592506060860135915060808601356001600160401b03811115611d47578182fd5b611c7788828901611b37565b60008060008060808587031215611d68578384fd5b8435611d73816124b8565b935060208501356001600160401b0380821115611d8e578485fd5b611d9a88838901611a68565b94506040870135915080821115611daf578384fd5b611dbb88838901611add565b93506060870135915080821115611dd0578283fd5b50611ce187828801611add565b600060208284031215611dee578081fd5b81356001600160e01b031981168114611bd4578182fd5b600060208284031215611e16578081fd5b81356001600160801b0381168114611bd4578182fd5b600060208284031215611e3d578081fd5b611bd482611ba1565b60008060008060808587031215611e5b578182fd5b611e6485611ba1565b935060208501356001600160401b0380821115611d8e578384fd5b6000815180845260208085019450808401835b83811015611eae57815187529582019590820190600101611e92565b509495945050505050565b60008151808452815b81811015611ede57602081850181015186830182015201611ec2565b81811115611eef5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611f4b90830184611eb9565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611f8f90830184611eb9565b979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60208082526029908201527f537761704b6977693a2063616c6c6572206973206e6f742073776170207061726040820152683a34b1b4b830ba37b960b91b606082015260800190565b60208082526036908201527f537761704b6977693a204e465420616e6420414d4f554e5420617272617973206040820152750d0c2ecca40e8de40c4ca40e6c2daca40d8cadccee8d60531b606082015260800190565b6020808252818101527f537761704b6977693a207377617020616c726561647920696e69746961746564604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526043908201527f537761704b6977693a2053656e742045544820616d6f756e74206e656564732060408201527f746f206265206d6f7265206f7220657175616c206170706c69636174696f6e2060608201526266656560e81b608082015260a00190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f537761704b6977693a2063616c6c6572206973206e6f74207377617020696e696040820152653a34b0ba37b960d11b606082015260800190565b60208082526032908201527f537761704b6977693a204e465420616e64204944206172726179732068617665604082015271040e8de40c4ca40e6c2daca40d8cadccee8d60731b606082015260800190565b6020808252603e908201527f537761704b6977693a2043616e27742061636365707420737761702c20626f7460408201527f68207061727469636970616e7473206469646e277420616464204e4654730000606082015260800190565b60208082526026908201527f537761704b6977693a207472616e7366657220746f20746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526035908201527f537761704b6977693a2043616e27742063616e63656c20737761702c206d75736040820152741d081899481cddd85c081c185c9d1a58da5c185b9d605a1b606082015260800190565b6001600160801b0391909116815260200190565b6000608082016001600160801b0387168352602060808185015281875180845260a0860191508289019350845b818110156123685784516001600160a01b031683529383019391830191600101612343565b5050848103604086015261237c8188611e7f565b925050508281036060840152611f8f8185611e7f565b604051601f8201601f191681016001600160401b03811182821017156123ba576123ba6124a2565b604052919050565b60006001600160401b038211156123db576123db6124a2565b5060209081020190565b60006001600160801b038083168185168083038211156124075761240761248c565b01949350505050565b60006001600160401b038083168185168083038211156124075761240761248c565b60006001600160801b03838116908316818110156124525761245261248c565b039392505050565b60008282101561246c5761246c61248c565b500390565b60006000198214156124855761248561248c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146119b057600080fdfea2646970667358221220d4a90748bdb83f31871c82bea1f1a3adfb1eb997957e93d3fb4c4ea2522febec64736f6c634300080100338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000f37dcdef718eb72b542933b27427f39a3af09ad7
Deployed Bytecode
0x6080604052600436106100dd5760003560e01c8063b7719a9c1161007f578063bcc68faf11610059578063bcc68faf14610231578063ddca3f4314610244578063f23a6e6114610266578063f2fde38b14610286576100dd565b8063b7719a9c146101de578063ba792c96146101fe578063bc197c8114610211576100dd565b8063715018a6116100bb578063715018a6146101675780637500f85c1461017c5780638da5cb5b1461019c578063af933b57146101be576100dd565b806301ffc9a7146100e25780630cce448d14610118578063150b7a021461013a575b600080fd5b3480156100ee57600080fd5b506101026100fd366004611ddd565b6102a6565b60405161010f9190611f9a565b60405180910390f35b34801561012457600080fd5b50610138610133366004611e2c565b6102d3565b005b34801561014657600080fd5b5061015a610155366004611c84565b6108de565b60405161010f9190611fa5565b34801561017357600080fd5b506101386108ee565b34801561018857600080fd5b50610138610197366004611e2c565b610977565b3480156101a857600080fd5b506101b161100d565b60405161010f9190611f04565b3480156101ca57600080fd5b506101386101d9366004611bb8565b61101c565b3480156101ea57600080fd5b506101386101f9366004611e05565b6110d2565b61013861020c366004611d53565b611166565b34801561021d57600080fd5b5061015a61022c366004611bdb565b6113b9565b61013861023f366004611e46565b6113ca565b34801561025057600080fd5b506102596116fa565b60405161010f9190612302565b34801561027257600080fd5b5061015a610281366004611ced565b611710565b34801561029257600080fd5b506101386102a1366004611bb8565b611721565b60006001600160e01b03198216630271189760e51b14806102cb57506102cb826117e1565b90505b919050565b6001600160401b0381166000908152600260205260409020546001600160a01b031633148061032557506001600160401b0381166000908152600260205260409020600401546001600160a01b031633145b61034a5760405162461bcd60e51b8152600401610341906122ad565b60405180910390fd5b6001600160401b0381166000908152600260209081526040918290208054600190910180548451818502810185019095528085526104a59430946001600160a01b0390941693909291908301828280156103cd57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116103af575b5050506001600160401b0387166000908152600260208181526040928390209091018054835181840281018401909452808452929450925083018282801561043457602002820191906000526020600020905b815481526020019060010190808311610420575b5050506001600160401b0388166000908152600260209081526040918290206003018054835181840281018401909452808452929450925083018282801561049b57602002820191906000526020600020905b815481526020019060010190808311610487575b50505050506117fa565b6001600160401b03811660009081526002602052604090206005015415610622576001600160401b0381166000908152600260209081526040918290206004810154600590910180548451818502810185019095528085526106229430946001600160a01b03909416939092919083018282801561054c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161052e575b5050506001600160401b038716600090815260026020908152604091829020600601805483518184028101840190945280845292945092508301828280156105b357602002820191906000526020600020905b81548152602001906001019080831161059f575b5050506001600160401b0388166000908152600260209081526040918290206007018054835181840281018401909452808452929450925083018282801561049b57602002820191906000526020600020908154815260200190600101908083116104875750505050506117fa565b6001600160401b0381166000908152600260205260409020600801546001600160801b03161561070f576001600160401b038116600090815260026020526040812060080154600180546001600160801b0392831693919261068691859116612432565b82546101009290920a6001600160801b038181021990931691831602179091556001600160401b0383166000908152600260205260408082206008810180546001600160801b0319811690915590549151931693506001600160a01b0316916108fc84150291849190818181858888f1935050505015801561070c573d6000803e3d6000fd5b50505b6001600160401b038116600090815260026020526040902060080154600160801b90046001600160801b03161561080f576001600160401b038116600090815260026020526040812060080154600180546001600160801b03600160801b909304831693919261078191859116612432565b82546101009290920a6001600160801b038181021990931691831602179091556001600160401b0383166000908152600260205260408082206008810180548086169091556004909101549151600160801b90910490931693506001600160a01b0316916108fc84150291849190818181858888f1935050505015801561080c573d6000803e3d6000fd5b50505b6040516001600160401b0382169033907f54b9c72d790ad613d26b317d2d24e28dd1608f07ff121cb2d42ace3cbcd4eb0f90600090a36001600160401b038116600090815260026020526040812080546001600160a01b0319168155906108796001830182611992565b610887600283016000611992565b610895600383016000611992565b6004820180546001600160a01b03191690556108b5600583016000611992565b6108c3600683016000611992565b6108d1600783016000611992565b5060006008919091015550565b630a85bd0160e11b949350505050565b6108f66118b2565b6001600160a01b031661090761100d565b6001600160a01b03161461092d5760405162461bcd60e51b81526004016103419061213d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6001600160401b03811660009081526002602052604090205481906001600160a01b031633146109b95760405162461bcd60e51b815260040161034190612172565b6001600160401b038216600090815260026020526040902060050154151580610a0c57506001600160401b038216600090815260026020526040902060080154600160801b90046001600160801b031615155b8015610a5f57506001600160401b038216600090815260026020526040902060010154151580610a5f57506001600160401b0382166000908152600260205260409020600801546001600160801b031615155b610a7b5760405162461bcd60e51b81526004016103419061220a565b6001600160401b038216600090815260026020908152604091829020805460059091018054845181850281018501909552808552610bd49430946001600160a01b039094169390929190830182828015610afe57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ae0575b5050506001600160401b03881660009081526002602090815260409182902060060180548351818402810184019094528084529294509250830182828015610b6557602002820191906000526020600020905b815481526020019060010190808311610b51575b5050506001600160401b0389166000908152600260209081526040918290206007018054835181840281018401909452808452929450925083018282801561049b57602002820191906000526020600020908154815260200190600101908083116104875750505050506117fa565b6001600160401b038216600090815260026020908152604091829020600481015460019091018054845181850281018501909552808552610d309430946001600160a01b039094169390929190830182828015610c5a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c3c575b5050506001600160401b03881660009081526002602081815260409283902090910180548351818402810184019094528084529294509250830182828015610cc157602002820191906000526020600020905b815481526020019060010190808311610cad575b5050506001600160401b0389166000908152600260209081526040918290206003018054835181840281018401909452808452929450925083018282801561049b57602002820191906000526020600020908154815260200190600101908083116104875750505050506117fa565b6001600160401b0382166000908152600260205260409020600801546001600160801b031615610e21576001600160401b038216600090815260026020526040812060080154600180546001600160801b03928316939192610d9491859116612432565b82546101009290920a6001600160801b038181021990931691831602179091556001600160401b0384166000908152600260205260408082206008810180546001600160801b031981169091556004909101549151931693506001600160a01b0316916108fc84150291849190818181858888f19350505050158015610e1e573d6000803e3d6000fd5b50505b6001600160401b038216600090815260026020526040902060080154600160801b90046001600160801b031615610f1d576001600160401b038216600090815260026020526040812060080154600180546001600160801b03600160801b9093048316939192610e9391859116612432565b82546101009290920a6001600160801b038181021990931691831602179091556001600160401b03841660009081526002602052604080822060088101805480861690915590549151600160801b90910490931693506001600160a01b0316916108fc84150291849190818181858888f19350505050158015610f1a573d6000803e3d6000fd5b50505b6001600160401b0382166000818152600260205260408082206004810154905491516001600160a01b039182169392909116917f8d1ef4e0ccd0f016857c236780af12f7aa46cb23459b4962f46e649e6a9c24f291a46001600160401b038216600090815260026020526040812080546001600160a01b031916815590610fa76001830182611992565b610fb5600283016000611992565b610fc3600383016000611992565b6004820180546001600160a01b0319169055610fe3600583016000611992565b610ff1600683016000611992565b610fff600783016000611992565b506000600891909101555050565b6000546001600160a01b031690565b6110246118b2565b6001600160a01b031661103561100d565b6001600160a01b03161461105b5760405162461bcd60e51b81526004016103419061213d565b6001600160a01b0381166110815760405162461bcd60e51b815260040161034190612267565b6001546001600160a01b038216906108fc906110a6906001600160801b03164761245a565b6040518115909202916000818181858888f193505050501580156110ce573d6000803e3d6000fd5b5050565b6110da6118b2565b6001600160a01b03166110eb61100d565b6001600160a01b0316146111115760405162461bcd60e51b81526004016103419061213d565b600180546001600160801b03808416600160801b0291161790556040517f220ace5bd7df3a0637bc16073257c1c74f8a207436c0c1a8cf098ff268d4078a9061115b908390612302565b60405180910390a150565b600154600160801b90046001600160801b03163410156111985760405162461bcd60e51b8152600401610341906120d4565b82828281518351146111bc5760405162461bcd60e51b8152600401610341906121b8565b80518351146111dd5760405162461bcd60e51b815260040161034190612003565b6001600060148282829054906101000a90046001600160401b03166112029190612410565b92506101000a8154816001600160401b0302191690836001600160401b0316021790555061123333308888886117fa565b600080546001600160401b03600160a01b90910416815260026020908152604090912080546001600160a01b031916331781558751909161127b9160018401918a01906119b3565b5085516112919060028301906020890190611a18565b5084516112a79060038301906020880190611a18565b50600154600160801b90046001600160801b03163481101561132b576112cd8134612432565b6008830180546001600160801b0319166001600160801b03928316179081905560018054918316929091600091611306918591166123e5565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b6004820180546001600160a01b0319166001600160a01b038b169081179091556000546008840154604051600160a01b9092046001600160401b0316929133917f061b0f674853978c67ced987aa7f15144cea27971234dd0d38435fa99067161b916113a6916001600160801b0316908e908e908e90612316565b60405180910390a4505050505050505050565b63bc197c8160e01b95945050505050565b600154600160801b90046001600160801b03163410156113fc5760405162461bcd60e51b8152600401610341906120d4565b82828281518351146114205760405162461bcd60e51b8152600401610341906121b8565b80518351146114415760405162461bcd60e51b815260040161034190612003565b6001600160401b0387166000908152600260205260409020600401546001600160a01b031633146114845760405162461bcd60e51b815260040161034190611fba565b6001600160401b038716600090815260026020526040902060080154600160801b90046001600160801b031615801561151f57506001600160401b0387166000908152600260205260409020600501541580156114fa57506001600160401b038716600090815260026020526040902060060154155b801561151f57506001600160401b038716600090815260026020526040902060070154155b61153b5760405162461bcd60e51b815260040161034190612059565b61154833308888886117fa565b6001600160401b03871660009081526002602090815260409091208751611577926005909201918901906119b3565b506001600160401b038716600090815260026020908152604090912086516115a792600690920191880190611a18565b506001600160401b038716600090815260026020908152604090912085516115d792600790920191870190611a18565b50600154600160801b90046001600160801b031634811015611673576115fd8134612432565b6001600160401b038916600090815260026020526040812060080180546001600160801b03908116600160801b94821685021791829055600180549490920481169391929161164e918591166123e5565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b6001600160401b03881660008181526002602052604090819020805460089091015491516001600160a01b039091169133917f8c3a2ada90a52e2dbc9b383a4589f666e5b71d5cdf7721c7ec32925dffa116b5916116e891600160801b9091046001600160801b0316908d908d908d90612316565b60405180910390a45050505050505050565b600154600160801b90046001600160801b031681565b63f23a6e6160e01b95945050505050565b6117296118b2565b6001600160a01b031661173a61100d565b6001600160a01b0316146117605760405162461bcd60e51b81526004016103419061213d565b6001600160a01b0381166117865760405162461bcd60e51b81526004016103419061208e565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160e01b031981166301ffc9a760e01b14919050565b60005b82518110156118aa57611898868686848151811061182b57634e487b7160e01b600052603260045260246000fd5b602002602001015186858151811061185357634e487b7160e01b600052603260045260246000fd5b602002602001015186868151811061187b57634e487b7160e01b600052603260045260246000fd5b6020026020010151604051806020016040528060008152506118b6565b806118a281612471565b9150506117fd565b505050505050565b3390565b8161192457604051635c46a7ef60e11b81526001600160a01b0385169063b88d4fde906118ed908990899088908790600401611f18565b600060405180830381600087803b15801561190757600080fd5b505af115801561191b573d6000803e3d6000fd5b505050506118aa565b604051637921219560e11b81526001600160a01b0385169063f242432a906119589089908990889088908890600401611f55565b600060405180830381600087803b15801561197257600080fd5b505af1158015611986573d6000803e3d6000fd5b50505050505050505050565b50805460008255906000526020600020908101906119b09190611a53565b50565b828054828255906000526020600020908101928215611a08579160200282015b82811115611a0857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906119d3565b50611a14929150611a53565b5090565b828054828255906000526020600020908101928215611a08579160200282015b82811115611a08578251825591602001919060010190611a38565b5b80821115611a145760008155600101611a54565b600082601f830112611a78578081fd5b81356020611a8d611a88836123c2565b612392565b8281528181019085830183850287018401881015611aa9578586fd5b855b85811015611ad0578135611abe816124b8565b84529284019290840190600101611aab565b5090979650505050505050565b600082601f830112611aed578081fd5b81356020611afd611a88836123c2565b8281528181019085830183850287018401881015611b19578586fd5b855b85811015611ad057813584529284019290840190600101611b1b565b600082601f830112611b47578081fd5b81356001600160401b03811115611b6057611b606124a2565b611b73601f8201601f1916602001612392565b818152846020838601011115611b87578283fd5b816020850160208301379081016020019190915292915050565b80356001600160401b03811681146102ce57600080fd5b600060208284031215611bc9578081fd5b8135611bd4816124b8565b9392505050565b600080600080600060a08688031215611bf2578081fd5b8535611bfd816124b8565b94506020860135611c0d816124b8565b935060408601356001600160401b0380821115611c28578283fd5b611c3489838a01611add565b94506060880135915080821115611c49578283fd5b611c5589838a01611add565b93506080880135915080821115611c6a578283fd5b50611c7788828901611b37565b9150509295509295909350565b60008060008060808587031215611c99578384fd5b8435611ca4816124b8565b93506020850135611cb4816124b8565b92506040850135915060608501356001600160401b03811115611cd5578182fd5b611ce187828801611b37565b91505092959194509250565b600080600080600060a08688031215611d04578081fd5b8535611d0f816124b8565b94506020860135611d1f816124b8565b9350604086013592506060860135915060808601356001600160401b03811115611d47578182fd5b611c7788828901611b37565b60008060008060808587031215611d68578384fd5b8435611d73816124b8565b935060208501356001600160401b0380821115611d8e578485fd5b611d9a88838901611a68565b94506040870135915080821115611daf578384fd5b611dbb88838901611add565b93506060870135915080821115611dd0578283fd5b50611ce187828801611add565b600060208284031215611dee578081fd5b81356001600160e01b031981168114611bd4578182fd5b600060208284031215611e16578081fd5b81356001600160801b0381168114611bd4578182fd5b600060208284031215611e3d578081fd5b611bd482611ba1565b60008060008060808587031215611e5b578182fd5b611e6485611ba1565b935060208501356001600160401b0380821115611d8e578384fd5b6000815180845260208085019450808401835b83811015611eae57815187529582019590820190600101611e92565b509495945050505050565b60008151808452815b81811015611ede57602081850181015186830182015201611ec2565b81811115611eef5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611f4b90830184611eb9565b9695505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611f8f90830184611eb9565b979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60208082526029908201527f537761704b6977693a2063616c6c6572206973206e6f742073776170207061726040820152683a34b1b4b830ba37b960b91b606082015260800190565b60208082526036908201527f537761704b6977693a204e465420616e6420414d4f554e5420617272617973206040820152750d0c2ecca40e8de40c4ca40e6c2daca40d8cadccee8d60531b606082015260800190565b6020808252818101527f537761704b6977693a207377617020616c726561647920696e69746961746564604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526043908201527f537761704b6977693a2053656e742045544820616d6f756e74206e656564732060408201527f746f206265206d6f7265206f7220657175616c206170706c69636174696f6e2060608201526266656560e81b608082015260a00190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f537761704b6977693a2063616c6c6572206973206e6f74207377617020696e696040820152653a34b0ba37b960d11b606082015260800190565b60208082526032908201527f537761704b6977693a204e465420616e64204944206172726179732068617665604082015271040e8de40c4ca40e6c2daca40d8cadccee8d60731b606082015260800190565b6020808252603e908201527f537761704b6977693a2043616e27742061636365707420737761702c20626f7460408201527f68207061727469636970616e7473206469646e277420616464204e4654730000606082015260800190565b60208082526026908201527f537761704b6977693a207472616e7366657220746f20746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526035908201527f537761704b6977693a2043616e27742063616e63656c20737761702c206d75736040820152741d081899481cddd85c081c185c9d1a58da5c185b9d605a1b606082015260800190565b6001600160801b0391909116815260200190565b6000608082016001600160801b0387168352602060808185015281875180845260a0860191508289019350845b818110156123685784516001600160a01b031683529383019391830191600101612343565b5050848103604086015261237c8188611e7f565b925050508281036060840152611f8f8185611e7f565b604051601f8201601f191681016001600160401b03811182821017156123ba576123ba6124a2565b604052919050565b60006001600160401b038211156123db576123db6124a2565b5060209081020190565b60006001600160801b038083168185168083038211156124075761240761248c565b01949350505050565b60006001600160401b038083168185168083038211156124075761240761248c565b60006001600160801b03838116908316818110156124525761245261248c565b039392505050565b60008282101561246c5761246c61248c565b500390565b60006000198214156124855761248561248c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146119b057600080fdfea2646970667358221220d4a90748bdb83f31871c82bea1f1a3adfb1eb997957e93d3fb4c4ea2522febec64736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000008e1bc9bf04000000000000000000000000000f37dcdef718eb72b542933b27427f39a3af09ad7
-----Decoded View---------------
Arg [0] : initalAppFee (uint128): 2500000000000000
Arg [1] : contractOwnerAddress (address): 0xF37DcdeF718eB72b542933b27427F39a3Af09AD7
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000008e1bc9bf04000
Arg [1] : 000000000000000000000000f37dcdef718eb72b542933b27427f39a3af09ad7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,224.96 | 0.0085 | $27.41 |
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.