Source Code
More Info
Private Name Tags
ContractCreator
Latest 7 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Close | 18139696 | 910 days ago | 2.79070379 ETH | ||||
| Transfer | 18139696 | 910 days ago | 0.05 ETH | ||||
| Transfer | 17928370 | 940 days ago | 0.20248292 ETH | ||||
| Transfer | 17909877 | 942 days ago | 0.22572086 ETH | ||||
| Transfer | 15054200 | 1351 days ago | 2.3125 ETH | ||||
| - | 14692586 | 1412 days ago | 3.8 ETH | ||||
| - | 14692586 | 1412 days ago | 3.8 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SimplePool
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol";
import "@openzeppelin/contracts/interfaces/IERC1271.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
interface IWrappedEther {
function deposit() external payable;
function withdraw(uint wad) external;
function balanceOf(address account) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
}
interface IPoolManager {
function close(uint256 tokenId) external payable;
}
interface IOpenSeaProxy {
function registerProxy() external returns (address);
}
contract SimplePool is Ownable, ERC721Holder, IERC1271 {
using ECDSA for bytes32;
address immutable public tokenContract;
IWrappedEther immutable public wrappedEther;
IPoolManager immutable public poolManager;
IERC20 immutable public landDao;
uint256 public tokenId;
address public openSeaExchange;
address public openSeaProxyRegister;
address public openSeaTokenProxy;
address public updateManager;
mapping(address => mapping(uint256 => address)) public updateOperator;
event UpdateOperatorSet(address, uint256, address);
modifier onlyOwnerOrManager() {
require(owner() == msg.sender || address(poolManager) == msg.sender, "Pool: caller is not the owner or manager");
_;
}
modifier onlyUpdateManager() {
require(updateManager == msg.sender, "Pool: caller is not the update manager");
_;
}
constructor(
address poolManager_,
address tokenContract_,
address wrappedEther_,
address landDao_,
address openSeaExchange_,
address openSeaProxyRegister_,
address openSeaTokenProxy_
) {
poolManager = IPoolManager(poolManager_);
tokenContract = tokenContract_;
wrappedEther = IWrappedEther(wrappedEther_);
landDao = IERC20(landDao_);
openSeaExchange = openSeaExchange_;
openSeaProxyRegister = openSeaProxyRegister_;
openSeaTokenProxy = openSeaTokenProxy_;
}
function setUpdateManager(address updateManager_) external onlyOwner {
require(updateManager_ != address(0));
updateManager = updateManager_;
}
function setUpdateOperator(uint256 assetId, address operator) external onlyUpdateManager {
updateOperator[tokenContract][assetId] = operator;
emit UpdateOperatorSet(tokenContract, assetId, operator);
}
function updateOpenSeaData(address openSeaExchange_, address openSeaProxyRegister_, address openSeaTokenProxy_) external onlyOwner {
openSeaExchange = openSeaExchange_;
openSeaProxyRegister = openSeaProxyRegister_;
openSeaTokenProxy = openSeaTokenProxy_;
}
function prepareOpenSea() external onlyOwner {
address proxyAddress = IOpenSeaProxy(openSeaProxyRegister).registerProxy();
IERC721(tokenContract).setApprovalForAll(proxyAddress, true);
require(wrappedEther.approve(openSeaTokenProxy, type(uint).max), "Pool: error approving WETH");
}
function exchangeOpenSea(bytes calldata _calldata) external onlyOwner {
(bool _success,) = openSeaExchange.call(_calldata);
require(_success, "Pool: error sending data to exchange");
}
receive() external payable {
}
function start(uint256 tokenId_) external payable {
require(tokenId_ > 0, "Pool: tokenId can not be 0");
require(tokenId == 0, "Pool: tokenId is already set");
require(msg.value > 0, "Pool: pool can not be started without funds");
require(msg.sender == address(poolManager), "Pool: pool manager should start the pool");
tokenId = tokenId_;
wrap();
landDao.approve(address(poolManager), type(uint).max);
}
function wrap() public onlyOwnerOrManager {
wrappedEther.deposit{value : address(this).balance}();
}
function unWrap() public onlyOwnerOrManager {
uint256 balance = wrappedEther.balanceOf(address(this));
wrappedEther.withdraw(balance);
}
function finish() external onlyOwnerOrManager {
require(tokenId > 0, "Pool: tokenId not set");
require(IERC721(tokenContract).balanceOf(address(this)) == 0, "Pool: not all tokens sold");
unWrap();
poolManager.close{value : address(this).balance}(tokenId);
}
function isValidSignature(bytes32 _hash, bytes calldata _signature) external override view returns (bytes4) {
address signer = _hash.recover(_signature);
if (signer == owner()) {
return 0x1626ba7e;
}
return 0x00000000;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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
// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol)
pragma solidity ^0.8.0;
import "../Strings.sol";
/**
* @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
*
* These functions can be used to verify that a message was signed by the holder
* of the private keys of a given address.
*/
library ECDSA {
enum RecoverError {
NoError,
InvalidSignature,
InvalidSignatureLength,
InvalidSignatureS,
InvalidSignatureV
}
function _throwError(RecoverError error) private pure {
if (error == RecoverError.NoError) {
return; // no error: do nothing
} else if (error == RecoverError.InvalidSignature) {
revert("ECDSA: invalid signature");
} else if (error == RecoverError.InvalidSignatureLength) {
revert("ECDSA: invalid signature length");
} else if (error == RecoverError.InvalidSignatureS) {
revert("ECDSA: invalid signature 's' value");
} else if (error == RecoverError.InvalidSignatureV) {
revert("ECDSA: invalid signature 'v' value");
}
}
/**
* @dev Returns the address that signed a hashed message (`hash`) with
* `signature` or error string. This address can then be used for verification purposes.
*
* The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
* this function rejects them by requiring the `s` value to be in the lower
* half order, and the `v` value to be either 27 or 28.
*
* IMPORTANT: `hash` _must_ be the result of a hash operation for the
* verification to be secure: it is possible to craft signatures that
* recover to arbitrary addresses for non-hashed data. A safe way to ensure
* this is by receiving a hash of the original message (which may otherwise
* be too long), and then calling {toEthSignedMessageHash} on it.
*
* Documentation for signature generation:
* - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
* - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
*
* _Available since v4.3._
*/
function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
// Check the signature length
// - case 65: r,s,v signature (standard)
// - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
if (signature.length == 65) {
bytes32 r;
bytes32 s;
uint8 v;
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
assembly {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
return tryRecover(hash, v, r, s);
} else if (signature.length == 64) {
bytes32 r;
bytes32 vs;
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
assembly {
r := mload(add(signature, 0x20))
vs := mload(add(signature, 0x40))
}
return tryRecover(hash, r, vs);
} else {
return (address(0), RecoverError.InvalidSignatureLength);
}
}
/**
* @dev Returns the address that signed a hashed message (`hash`) with
* `signature`. This address can then be used for verification purposes.
*
* The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
* this function rejects them by requiring the `s` value to be in the lower
* half order, and the `v` value to be either 27 or 28.
*
* IMPORTANT: `hash` _must_ be the result of a hash operation for the
* verification to be secure: it is possible to craft signatures that
* recover to arbitrary addresses for non-hashed data. A safe way to ensure
* this is by receiving a hash of the original message (which may otherwise
* be too long), and then calling {toEthSignedMessageHash} on it.
*/
function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
(address recovered, RecoverError error) = tryRecover(hash, signature);
_throwError(error);
return recovered;
}
/**
* @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
*
* See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
*
* _Available since v4.3._
*/
function tryRecover(
bytes32 hash,
bytes32 r,
bytes32 vs
) internal pure returns (address, RecoverError) {
bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
uint8 v = uint8((uint256(vs) >> 255) + 27);
return tryRecover(hash, v, r, s);
}
/**
* @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
*
* _Available since v4.2._
*/
function recover(
bytes32 hash,
bytes32 r,
bytes32 vs
) internal pure returns (address) {
(address recovered, RecoverError error) = tryRecover(hash, r, vs);
_throwError(error);
return recovered;
}
/**
* @dev Overload of {ECDSA-tryRecover} that receives the `v`,
* `r` and `s` signature fields separately.
*
* _Available since v4.3._
*/
function tryRecover(
bytes32 hash,
uint8 v,
bytes32 r,
bytes32 s
) internal pure returns (address, RecoverError) {
// EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
// unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
// the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
// signatures from current libraries generate a unique signature with an s-value in the lower half order.
//
// If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
// with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
// vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
// these malleable signatures as well.
if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
return (address(0), RecoverError.InvalidSignatureS);
}
if (v != 27 && v != 28) {
return (address(0), RecoverError.InvalidSignatureV);
}
// If the signature is valid (and not malleable), return the signer address
address signer = ecrecover(hash, v, r, s);
if (signer == address(0)) {
return (address(0), RecoverError.InvalidSignature);
}
return (signer, RecoverError.NoError);
}
/**
* @dev Overload of {ECDSA-recover} that receives the `v`,
* `r` and `s` signature fields separately.
*/
function recover(
bytes32 hash,
uint8 v,
bytes32 r,
bytes32 s
) internal pure returns (address) {
(address recovered, RecoverError error) = tryRecover(hash, v, r, s);
_throwError(error);
return recovered;
}
/**
* @dev Returns an Ethereum Signed Message, created from a `hash`. This
* produces hash corresponding to the one signed with the
* https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
* JSON-RPC method as part of EIP-191.
*
* See {recover}.
*/
function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
// 32 is the length in bytes of hash,
// enforced by the type signature above
return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
}
/**
* @dev Returns an Ethereum Signed Message, created from `s`. This
* produces hash corresponding to the one signed with the
* https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
* JSON-RPC method as part of EIP-191.
*
* See {recover}.
*/
function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {
return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
}
/**
* @dev Returns an Ethereum Signed Typed Data, created from a
* `domainSeparator` and a `structHash`. This produces hash corresponding
* to the one signed with the
* https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
* JSON-RPC method as part of EIP-712.
*
* See {recover}.
*/
function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol)
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
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC1271.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC1271 standard signature validation method for
* contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].
*
* _Available since v4.1._
*/
interface IERC1271 {
/**
* @dev Should return whether the signature provided is valid for the provided data
* @param hash Hash of the data to be signed
* @param signature Signature byte array associated with _data
*/
function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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 (last updated v4.5.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 `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, 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 `from` to `to` 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 from,
address to,
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.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)
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
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"poolManager_","type":"address"},{"internalType":"address","name":"tokenContract_","type":"address"},{"internalType":"address","name":"wrappedEther_","type":"address"},{"internalType":"address","name":"landDao_","type":"address"},{"internalType":"address","name":"openSeaExchange_","type":"address"},{"internalType":"address","name":"openSeaProxyRegister_","type":"address"},{"internalType":"address","name":"openSeaTokenProxy_","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"UpdateOperatorSet","type":"event"},{"inputs":[{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"exchangeOpenSea","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finish","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landDao","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","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":"openSeaExchange","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openSeaProxyRegister","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openSeaTokenProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolManager","outputs":[{"internalType":"contract IPoolManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareOpenSea","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updateManager_","type":"address"}],"name":"setUpdateManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"address","name":"operator","type":"address"}],"name":"setUpdateOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"start","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"tokenContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unWrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"openSeaExchange_","type":"address"},{"internalType":"address","name":"openSeaProxyRegister_","type":"address"},{"internalType":"address","name":"openSeaTokenProxy_","type":"address"}],"name":"updateOpenSeaData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"updateOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wrappedEther","outputs":[{"internalType":"contract IWrappedEther","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6101006040523480156200001257600080fd5b5060405162003514380380620035148339818101604052810190620000389190620002e7565b620000586200004c6200020460201b60201c565b6200020c60201b60201c565b8673ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508573ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508473ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508373ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff1660601b8152505082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050620003e2565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620002e181620003c8565b92915050565b600080600080600080600060e0888a0312156200030357600080fd5b6000620003138a828b01620002d0565b9750506020620003268a828b01620002d0565b9650506040620003398a828b01620002d0565b95505060606200034c8a828b01620002d0565b94505060806200035f8a828b01620002d0565b93505060a0620003728a828b01620002d0565b92505060c0620003858a828b01620002d0565b91505092959891949750929550565b6000620003a182620003a8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620003d38162000394565b8114620003df57600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c6130836200049160003960008181610f5501526116bf015260008181610bcf01528181610eb801528181610f91015281816113310152818161147f0152818161162f01526116e30152600081816105440152818161080f01528181610c4901528181610cf401526113a901526000818161078101528181610aaa015281816110db015281816111a6015261153e01526130836000f3fe60806040526004361061014f5760003560e01c8063824d9f12116100b6578063d46eb1191161006f578063d46eb11914610446578063d56b28891461045d578063da67919b14610474578063dc4c90d31461049f578063f2fde38b146104ca578063fd159210146104f357610156565b8063824d9f12146103595780638da5cb5b14610370578063904fc26b1461039b57806395805dad146103d8578063b0b02c60146103f4578063c372ca151461041d57610156565b80631baa6b66116101085780631baa6b661461028157806323410a3c146102985780632cd8dba6146102c357806355a373d6146102ec578063715018a61461031757806375e2073f1461032e57610156565b806307a85e281461015b57806314671a2914610186578063150b7a02146101b1578063152049e2146101ee5780631626ba7e1461021957806317d70f7c1461025657610156565b3661015657005b600080fd5b34801561016757600080fd5b5061017061051c565b60405161017d9190612653565b60405180910390f35b34801561019257600080fd5b5061019b610542565b6040516101a8919061278d565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d39190612153565b610566565b6040516101e5919061273c565b60405180910390f35b3480156101fa57600080fd5b5061020361057a565b6040516102109190612653565b60405180910390f35b34801561022557600080fd5b50610240600480360381019061023b9190612233565b6105a0565b60405161024d919061273c565b60405180910390f35b34801561026257600080fd5b5061026b610657565b60405161027891906129a8565b60405180910390f35b34801561028d57600080fd5b5061029661065d565b005b3480156102a457600080fd5b506102ad61093e565b6040516102ba9190612653565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612104565b610964565b005b3480156102f857600080fd5b50610301610aa8565b60405161030e9190612653565b60405180910390f35b34801561032357600080fd5b5061032c610acc565b005b34801561033a57600080fd5b50610343610b54565b6040516103509190612653565b60405180910390f35b34801561036557600080fd5b5061036e610b7a565b005b34801561037c57600080fd5b50610385610d80565b6040516103929190612653565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd91906121ce565b610da9565b6040516103cf9190612653565b60405180910390f35b6103f260048036038101906103ed91906122d0565b610deb565b005b34801561040057600080fd5b5061041b60048036038101906104169190612322565b611044565b005b34801561042957600080fd5b50610444600480360381019061043f91906120b2565b6111e2565b005b34801561045257600080fd5b5061045b6112dc565b005b34801561046957600080fd5b5061047261142a565b005b34801561048057600080fd5b506104896116bd565b6040516104969190612757565b60405180910390f35b3480156104ab57600080fd5b506104b46116e1565b6040516104c19190612772565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec91906120b2565b611705565b005b3480156104ff57600080fd5b5061051a6004803603810190610515919061228b565b6117fd565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600063150b7a0260e01b9050949350505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806105fa84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508661194f90919063ffffffff16565b9050610604610d80565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561064757631626ba7e60e01b915050610650565b600060e01b9150505b9392505050565b60015481565b610665611976565b73ffffffffffffffffffffffffffffffffffffffff16610683610d80565b73ffffffffffffffffffffffffffffffffffffffff16146106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d0906128c8565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ddd81f826040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561074557600080fd5b505af1158015610759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077d91906120db565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a22cb4658260016040518363ffffffff1660e01b81526004016107db92919061266e565b600060405180830381600087803b1580156107f557600080fd5b505af1158015610809573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016108aa929190612697565b602060405180830381600087803b1580156108c457600080fd5b505af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc919061220a565b61093b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093290612828565b60405180910390fd5b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61096c611976565b73ffffffffffffffffffffffffffffffffffffffff1661098a610d80565b73ffffffffffffffffffffffffffffffffffffffff16146109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d7906128c8565b60405180910390fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610ad4611976565b73ffffffffffffffffffffffffffffffffffffffff16610af2610d80565b73ffffffffffffffffffffffffffffffffffffffff1614610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f906128c8565b60405180910390fd5b610b52600061197e565b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16610b99610d80565b73ffffffffffffffffffffffffffffffffffffffff161480610c0657503373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16145b610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90612868565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ca09190612653565b60206040518083038186803b158015610cb857600080fd5b505afa158015610ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf091906122f9565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610d4b91906129a8565b600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008111610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2590612968565b60405180910390fd5b600060015414610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90612908565b60405180910390fd5b60003411610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90612948565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b906127c8565b60405180910390fd5b80600181905550610f536112dc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610fee929190612697565b602060405180830381600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611040919061220a565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612928565b60405180910390fd5b80600660007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5e3069ee84fd99170274b240e48cb739b5760a5bce05ad222e822b235db1c7807f000000000000000000000000000000000000000000000000000000000000000083836040516111d6939291906126c0565b60405180910390a15050565b6111ea611976565b73ffffffffffffffffffffffffffffffffffffffff16611208610d80565b73ffffffffffffffffffffffffffffffffffffffff161461125e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611255906128c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561129857600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff166112fb610d80565b73ffffffffffffffffffffffffffffffffffffffff16148061136857503373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16145b6113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90612868565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff16611449610d80565b73ffffffffffffffffffffffffffffffffffffffff1614806114b657503373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16145b6114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec90612868565b60405180910390fd5b60006001541161153a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611531906128e8565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115959190612653565b60206040518083038186803b1580156115ad57600080fd5b505afa1580156115c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e591906122f9565b14611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90612888565b60405180910390fd5b61162d610b7a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630aebeb4e476001546040518363ffffffff1660e01b815260040161168991906129a8565b6000604051808303818588803b1580156116a257600080fd5b505af11580156116b6573d6000803e3d6000fd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61170d611976565b73ffffffffffffffffffffffffffffffffffffffff1661172b610d80565b73ffffffffffffffffffffffffffffffffffffffff1614611781576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611778906128c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e890612808565b60405180910390fd5b6117fa8161197e565b50565b611805611976565b73ffffffffffffffffffffffffffffffffffffffff16611823610d80565b73ffffffffffffffffffffffffffffffffffffffff1614611879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611870906128c8565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683836040516118c492919061263a565b6000604051808303816000865af19150503d8060008114611901576040519150601f19603f3d011682016040523d82523d6000602084013e611906565b606091505b505090508061194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190612988565b60405180910390fd5b505050565b600080600061195e8585611a42565b9150915061196b81611ac5565b819250505092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080604183511415611a845760008060006020860151925060408601519150606086015160001a9050611a7887828585611e16565b94509450505050611abe565b604083511415611ab5576000806020850151915060408501519050611aaa868383611f23565b935093505050611abe565b60006002915091505b9250929050565b60006004811115611aff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611b38577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611b4357611e13565b60016004811115611b7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611bb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee906127a8565b60405180910390fd5b60026004811115611c31577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611c6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca2906127e8565b60405180910390fd5b60036004811115611ce5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611d1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690612848565b60405180910390fd5b600480811115611d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611dd1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e09906128a8565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611e51576000600391509150611f1a565b601b8560ff1614158015611e695750601c8560ff1614155b15611e7b576000600491509150611f1a565b600060018787878760405160008152602001604052604051611ea094939291906126f7565b6020604051602081039080840390855afa158015611ec2573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f1157600060019250925050611f1a565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c611f669190612a35565b9050611f7487828885611e16565b935093505050935093915050565b6000611f95611f90846129e8565b6129c3565b905082815260208101848484011115611fad57600080fd5b611fb8848285612b82565b509392505050565b600081359050611fcf81612ff1565b92915050565b600081519050611fe481612ff1565b92915050565b600081519050611ff981613008565b92915050565b60008135905061200e8161301f565b92915050565b60008083601f84011261202657600080fd5b8235905067ffffffffffffffff81111561203f57600080fd5b60208301915083600182028301111561205757600080fd5b9250929050565b600082601f83011261206f57600080fd5b813561207f848260208601611f82565b91505092915050565b60008135905061209781613036565b92915050565b6000815190506120ac81613036565b92915050565b6000602082840312156120c457600080fd5b60006120d284828501611fc0565b91505092915050565b6000602082840312156120ed57600080fd5b60006120fb84828501611fd5565b91505092915050565b60008060006060848603121561211957600080fd5b600061212786828701611fc0565b935050602061213886828701611fc0565b925050604061214986828701611fc0565b9150509250925092565b6000806000806080858703121561216957600080fd5b600061217787828801611fc0565b945050602061218887828801611fc0565b935050604061219987828801612088565b925050606085013567ffffffffffffffff8111156121b657600080fd5b6121c28782880161205e565b91505092959194509250565b600080604083850312156121e157600080fd5b60006121ef85828601611fc0565b925050602061220085828601612088565b9150509250929050565b60006020828403121561221c57600080fd5b600061222a84828501611fea565b91505092915050565b60008060006040848603121561224857600080fd5b600061225686828701611fff565b935050602084013567ffffffffffffffff81111561227357600080fd5b61227f86828701612014565b92509250509250925092565b6000806020838503121561229e57600080fd5b600083013567ffffffffffffffff8111156122b857600080fd5b6122c485828601612014565b92509250509250929050565b6000602082840312156122e257600080fd5b60006122f084828501612088565b91505092915050565b60006020828403121561230b57600080fd5b60006123198482850161209d565b91505092915050565b6000806040838503121561233557600080fd5b600061234385828601612088565b925050602061235485828601611fc0565b9150509250929050565b61236781612a8b565b82525050565b61237681612a9d565b82525050565b61238581612aa9565b82525050565b61239481612ab3565b82525050565b60006123a68385612a19565b93506123b3838584612b82565b82840190509392505050565b6123c881612b16565b82525050565b6123d781612b3a565b82525050565b6123e681612b5e565b82525050565b60006123f9601883612a24565b915061240482612c31565b602082019050919050565b600061241c602883612a24565b915061242782612c5a565b604082019050919050565b600061243f601f83612a24565b915061244a82612ca9565b602082019050919050565b6000612462602683612a24565b915061246d82612cd2565b604082019050919050565b6000612485601a83612a24565b915061249082612d21565b602082019050919050565b60006124a8602283612a24565b91506124b382612d4a565b604082019050919050565b60006124cb602883612a24565b91506124d682612d99565b604082019050919050565b60006124ee601983612a24565b91506124f982612de8565b602082019050919050565b6000612511602283612a24565b915061251c82612e11565b604082019050919050565b6000612534602083612a24565b915061253f82612e60565b602082019050919050565b6000612557601583612a24565b915061256282612e89565b602082019050919050565b600061257a601c83612a24565b915061258582612eb2565b602082019050919050565b600061259d602683612a24565b91506125a882612edb565b604082019050919050565b60006125c0602b83612a24565b91506125cb82612f2a565b604082019050919050565b60006125e3601a83612a24565b91506125ee82612f79565b602082019050919050565b6000612606602483612a24565b915061261182612fa2565b604082019050919050565b61262581612aff565b82525050565b61263481612b09565b82525050565b600061264782848661239a565b91508190509392505050565b6000602082019050612668600083018461235e565b92915050565b6000604082019050612683600083018561235e565b612690602083018461236d565b9392505050565b60006040820190506126ac600083018561235e565b6126b9602083018461261c565b9392505050565b60006060820190506126d5600083018661235e565b6126e2602083018561261c565b6126ef604083018461235e565b949350505050565b600060808201905061270c600083018761237c565b612719602083018661262b565b612726604083018561237c565b612733606083018461237c565b95945050505050565b6000602082019050612751600083018461238b565b92915050565b600060208201905061276c60008301846123bf565b92915050565b600060208201905061278760008301846123ce565b92915050565b60006020820190506127a260008301846123dd565b92915050565b600060208201905081810360008301526127c1816123ec565b9050919050565b600060208201905081810360008301526127e18161240f565b9050919050565b6000602082019050818103600083015261280181612432565b9050919050565b6000602082019050818103600083015261282181612455565b9050919050565b6000602082019050818103600083015261284181612478565b9050919050565b600060208201905081810360008301526128618161249b565b9050919050565b60006020820190508181036000830152612881816124be565b9050919050565b600060208201905081810360008301526128a1816124e1565b9050919050565b600060208201905081810360008301526128c181612504565b9050919050565b600060208201905081810360008301526128e181612527565b9050919050565b600060208201905081810360008301526129018161254a565b9050919050565b600060208201905081810360008301526129218161256d565b9050919050565b6000602082019050818103600083015261294181612590565b9050919050565b60006020820190508181036000830152612961816125b3565b9050919050565b60006020820190508181036000830152612981816125d6565b9050919050565b600060208201905081810360008301526129a1816125f9565b9050919050565b60006020820190506129bd600083018461261c565b92915050565b60006129cd6129de565b90506129d98282612b91565b919050565b6000604051905090565b600067ffffffffffffffff821115612a0357612a02612bf1565b5b612a0c82612c20565b9050602081019050919050565b600081905092915050565b600082825260208201905092915050565b6000612a4082612aff565b9150612a4b83612aff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a8057612a7f612bc2565b5b828201905092915050565b6000612a9682612adf565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612b2182612b28565b9050919050565b6000612b3382612adf565b9050919050565b6000612b4582612b4c565b9050919050565b6000612b5782612adf565b9050919050565b6000612b6982612b70565b9050919050565b6000612b7b82612adf565b9050919050565b82818337600083830152505050565b612b9a82612c20565b810181811067ffffffffffffffff82111715612bb957612bb8612bf1565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f506f6f6c3a20706f6f6c206d616e616765722073686f756c642073746172742060008201527f74686520706f6f6c000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f506f6f6c3a206572726f7220617070726f76696e672057455448000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f506f6f6c3a2063616c6c6572206973206e6f7420746865206f776e6572206f7260008201527f206d616e61676572000000000000000000000000000000000000000000000000602082015250565b7f506f6f6c3a206e6f7420616c6c20746f6b656e7320736f6c6400000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f506f6f6c3a20746f6b656e4964206e6f74207365740000000000000000000000600082015250565b7f506f6f6c3a20746f6b656e496420697320616c72656164792073657400000000600082015250565b7f506f6f6c3a2063616c6c6572206973206e6f742074686520757064617465206d60008201527f616e616765720000000000000000000000000000000000000000000000000000602082015250565b7f506f6f6c3a20706f6f6c2063616e206e6f74206265207374617274656420776960008201527f74686f75742066756e6473000000000000000000000000000000000000000000602082015250565b7f506f6f6c3a20746f6b656e49642063616e206e6f742062652030000000000000600082015250565b7f506f6f6c3a206572726f722073656e64696e67206461746120746f206578636860008201527f616e676500000000000000000000000000000000000000000000000000000000602082015250565b612ffa81612a8b565b811461300557600080fd5b50565b61301181612a9d565b811461301c57600080fd5b50565b61302881612aa9565b811461303357600080fd5b50565b61303f81612aff565b811461304a57600080fd5b5056fea26469706673582212203fa0ea9589a5b9d2f91ec83b828296f8fa91b0222195c1b835061e144cd89f8164736f6c634300080400330000000000000000000000007bfc8b7c5a7f2dcc795c5eba02ed9eb9b5b7910c0000000000000000000000005cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c38000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000054aa569005332e4d6f91e27c55307aaef607c0e20000000000000000000000007f268357a8c2552623316e2562d90e642bb538e5000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000e5c783ee536cf5e63e792988335c4255169be4e1
Deployed Bytecode
0x60806040526004361061014f5760003560e01c8063824d9f12116100b6578063d46eb1191161006f578063d46eb11914610446578063d56b28891461045d578063da67919b14610474578063dc4c90d31461049f578063f2fde38b146104ca578063fd159210146104f357610156565b8063824d9f12146103595780638da5cb5b14610370578063904fc26b1461039b57806395805dad146103d8578063b0b02c60146103f4578063c372ca151461041d57610156565b80631baa6b66116101085780631baa6b661461028157806323410a3c146102985780632cd8dba6146102c357806355a373d6146102ec578063715018a61461031757806375e2073f1461032e57610156565b806307a85e281461015b57806314671a2914610186578063150b7a02146101b1578063152049e2146101ee5780631626ba7e1461021957806317d70f7c1461025657610156565b3661015657005b600080fd5b34801561016757600080fd5b5061017061051c565b60405161017d9190612653565b60405180910390f35b34801561019257600080fd5b5061019b610542565b6040516101a8919061278d565b60405180910390f35b3480156101bd57600080fd5b506101d860048036038101906101d39190612153565b610566565b6040516101e5919061273c565b60405180910390f35b3480156101fa57600080fd5b5061020361057a565b6040516102109190612653565b60405180910390f35b34801561022557600080fd5b50610240600480360381019061023b9190612233565b6105a0565b60405161024d919061273c565b60405180910390f35b34801561026257600080fd5b5061026b610657565b60405161027891906129a8565b60405180910390f35b34801561028d57600080fd5b5061029661065d565b005b3480156102a457600080fd5b506102ad61093e565b6040516102ba9190612653565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612104565b610964565b005b3480156102f857600080fd5b50610301610aa8565b60405161030e9190612653565b60405180910390f35b34801561032357600080fd5b5061032c610acc565b005b34801561033a57600080fd5b50610343610b54565b6040516103509190612653565b60405180910390f35b34801561036557600080fd5b5061036e610b7a565b005b34801561037c57600080fd5b50610385610d80565b6040516103929190612653565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd91906121ce565b610da9565b6040516103cf9190612653565b60405180910390f35b6103f260048036038101906103ed91906122d0565b610deb565b005b34801561040057600080fd5b5061041b60048036038101906104169190612322565b611044565b005b34801561042957600080fd5b50610444600480360381019061043f91906120b2565b6111e2565b005b34801561045257600080fd5b5061045b6112dc565b005b34801561046957600080fd5b5061047261142a565b005b34801561048057600080fd5b506104896116bd565b6040516104969190612757565b60405180910390f35b3480156104ab57600080fd5b506104b46116e1565b6040516104c19190612772565b60405180910390f35b3480156104d657600080fd5b506104f160048036038101906104ec91906120b2565b611705565b005b3480156104ff57600080fd5b5061051a6004803603810190610515919061228b565b6117fd565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b600063150b7a0260e01b9050949350505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806105fa84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508661194f90919063ffffffff16565b9050610604610d80565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561064757631626ba7e60e01b915050610650565b600060e01b9150505b9392505050565b60015481565b610665611976565b73ffffffffffffffffffffffffffffffffffffffff16610683610d80565b73ffffffffffffffffffffffffffffffffffffffff16146106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d0906128c8565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ddd81f826040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561074557600080fd5b505af1158015610759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077d91906120db565b90507f0000000000000000000000005cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c3873ffffffffffffffffffffffffffffffffffffffff1663a22cb4658260016040518363ffffffff1660e01b81526004016107db92919061266e565b600060405180830381600087803b1580156107f557600080fd5b505af1158015610809573d6000803e3d6000fd5b505050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016108aa929190612697565b602060405180830381600087803b1580156108c457600080fd5b505af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc919061220a565b61093b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093290612828565b60405180910390fd5b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61096c611976565b73ffffffffffffffffffffffffffffffffffffffff1661098a610d80565b73ffffffffffffffffffffffffffffffffffffffff16146109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d7906128c8565b60405180910390fd5b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b7f0000000000000000000000005cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c3881565b610ad4611976565b73ffffffffffffffffffffffffffffffffffffffff16610af2610d80565b73ffffffffffffffffffffffffffffffffffffffff1614610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f906128c8565b60405180910390fd5b610b52600061197e565b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16610b99610d80565b73ffffffffffffffffffffffffffffffffffffffff161480610c0657503373ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000007bfc8b7c5a7f2dcc795c5eba02ed9eb9b5b7910c73ffffffffffffffffffffffffffffffffffffffff16145b610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c90612868565b60405180910390fd5b60007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ca09190612653565b60206040518083038186803b158015610cb857600080fd5b505afa158015610ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf091906122f9565b90507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610d4b91906129a8565b600060405180830381600087803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008111610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2590612968565b60405180910390fd5b600060015414610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90612908565b60405180910390fd5b60003411610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead90612948565b60405180910390fd5b7f0000000000000000000000007bfc8b7c5a7f2dcc795c5eba02ed9eb9b5b7910c73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b906127c8565b60405180910390fd5b80600181905550610f536112dc565b7f00000000000000000000000054aa569005332e4d6f91e27c55307aaef607c0e273ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007bfc8b7c5a7f2dcc795c5eba02ed9eb9b5b7910c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610fee929190612697565b602060405180830381600087803b15801561100857600080fd5b505af115801561101c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611040919061220a565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612928565b60405180910390fd5b80600660007f0000000000000000000000005cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c3873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5e3069ee84fd99170274b240e48cb739b5760a5bce05ad222e822b235db1c7807f0000000000000000000000005cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c3883836040516111d6939291906126c0565b60405180910390a15050565b6111ea611976565b73ffffffffffffffffffffffffffffffffffffffff16611208610d80565b73ffffffffffffffffffffffffffffffffffffffff161461125e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611255906128c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561129857600080fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff166112fb610d80565b73ffffffffffffffffffffffffffffffffffffffff16148061136857503373ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000007bfc8b7c5a7f2dcc795c5eba02ed9eb9b5b7910c73ffffffffffffffffffffffffffffffffffffffff16145b6113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90612868565b60405180910390fd5b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561140f57600080fd5b505af1158015611423573d6000803e3d6000fd5b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff16611449610d80565b73ffffffffffffffffffffffffffffffffffffffff1614806114b657503373ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000007bfc8b7c5a7f2dcc795c5eba02ed9eb9b5b7910c73ffffffffffffffffffffffffffffffffffffffff16145b6114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec90612868565b60405180910390fd5b60006001541161153a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611531906128e8565b60405180910390fd5b60007f0000000000000000000000005cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c3873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115959190612653565b60206040518083038186803b1580156115ad57600080fd5b505afa1580156115c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e591906122f9565b14611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c90612888565b60405180910390fd5b61162d610b7a565b7f0000000000000000000000007bfc8b7c5a7f2dcc795c5eba02ed9eb9b5b7910c73ffffffffffffffffffffffffffffffffffffffff16630aebeb4e476001546040518363ffffffff1660e01b815260040161168991906129a8565b6000604051808303818588803b1580156116a257600080fd5b505af11580156116b6573d6000803e3d6000fd5b5050505050565b7f00000000000000000000000054aa569005332e4d6f91e27c55307aaef607c0e281565b7f0000000000000000000000007bfc8b7c5a7f2dcc795c5eba02ed9eb9b5b7910c81565b61170d611976565b73ffffffffffffffffffffffffffffffffffffffff1661172b610d80565b73ffffffffffffffffffffffffffffffffffffffff1614611781576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611778906128c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e890612808565b60405180910390fd5b6117fa8161197e565b50565b611805611976565b73ffffffffffffffffffffffffffffffffffffffff16611823610d80565b73ffffffffffffffffffffffffffffffffffffffff1614611879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611870906128c8565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683836040516118c492919061263a565b6000604051808303816000865af19150503d8060008114611901576040519150601f19603f3d011682016040523d82523d6000602084013e611906565b606091505b505090508061194a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194190612988565b60405180910390fd5b505050565b600080600061195e8585611a42565b9150915061196b81611ac5565b819250505092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080604183511415611a845760008060006020860151925060408601519150606086015160001a9050611a7887828585611e16565b94509450505050611abe565b604083511415611ab5576000806020850151915060408501519050611aaa868383611f23565b935093505050611abe565b60006002915091505b9250929050565b60006004811115611aff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611b38577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611b4357611e13565b60016004811115611b7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611bb6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bee906127a8565b60405180910390fd5b60026004811115611c31577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611c6a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca2906127e8565b60405180910390fd5b60036004811115611ce5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611d1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690612848565b60405180910390fd5b600480811115611d98577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115611dd1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e09906128a8565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611e51576000600391509150611f1a565b601b8560ff1614158015611e695750601c8560ff1614155b15611e7b576000600491509150611f1a565b600060018787878760405160008152602001604052604051611ea094939291906126f7565b6020604051602081039080840390855afa158015611ec2573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f1157600060019250925050611f1a565b80600092509250505b94509492505050565b60008060007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60001b841690506000601b60ff8660001c901c611f669190612a35565b9050611f7487828885611e16565b935093505050935093915050565b6000611f95611f90846129e8565b6129c3565b905082815260208101848484011115611fad57600080fd5b611fb8848285612b82565b509392505050565b600081359050611fcf81612ff1565b92915050565b600081519050611fe481612ff1565b92915050565b600081519050611ff981613008565b92915050565b60008135905061200e8161301f565b92915050565b60008083601f84011261202657600080fd5b8235905067ffffffffffffffff81111561203f57600080fd5b60208301915083600182028301111561205757600080fd5b9250929050565b600082601f83011261206f57600080fd5b813561207f848260208601611f82565b91505092915050565b60008135905061209781613036565b92915050565b6000815190506120ac81613036565b92915050565b6000602082840312156120c457600080fd5b60006120d284828501611fc0565b91505092915050565b6000602082840312156120ed57600080fd5b60006120fb84828501611fd5565b91505092915050565b60008060006060848603121561211957600080fd5b600061212786828701611fc0565b935050602061213886828701611fc0565b925050604061214986828701611fc0565b9150509250925092565b6000806000806080858703121561216957600080fd5b600061217787828801611fc0565b945050602061218887828801611fc0565b935050604061219987828801612088565b925050606085013567ffffffffffffffff8111156121b657600080fd5b6121c28782880161205e565b91505092959194509250565b600080604083850312156121e157600080fd5b60006121ef85828601611fc0565b925050602061220085828601612088565b9150509250929050565b60006020828403121561221c57600080fd5b600061222a84828501611fea565b91505092915050565b60008060006040848603121561224857600080fd5b600061225686828701611fff565b935050602084013567ffffffffffffffff81111561227357600080fd5b61227f86828701612014565b92509250509250925092565b6000806020838503121561229e57600080fd5b600083013567ffffffffffffffff8111156122b857600080fd5b6122c485828601612014565b92509250509250929050565b6000602082840312156122e257600080fd5b60006122f084828501612088565b91505092915050565b60006020828403121561230b57600080fd5b60006123198482850161209d565b91505092915050565b6000806040838503121561233557600080fd5b600061234385828601612088565b925050602061235485828601611fc0565b9150509250929050565b61236781612a8b565b82525050565b61237681612a9d565b82525050565b61238581612aa9565b82525050565b61239481612ab3565b82525050565b60006123a68385612a19565b93506123b3838584612b82565b82840190509392505050565b6123c881612b16565b82525050565b6123d781612b3a565b82525050565b6123e681612b5e565b82525050565b60006123f9601883612a24565b915061240482612c31565b602082019050919050565b600061241c602883612a24565b915061242782612c5a565b604082019050919050565b600061243f601f83612a24565b915061244a82612ca9565b602082019050919050565b6000612462602683612a24565b915061246d82612cd2565b604082019050919050565b6000612485601a83612a24565b915061249082612d21565b602082019050919050565b60006124a8602283612a24565b91506124b382612d4a565b604082019050919050565b60006124cb602883612a24565b91506124d682612d99565b604082019050919050565b60006124ee601983612a24565b91506124f982612de8565b602082019050919050565b6000612511602283612a24565b915061251c82612e11565b604082019050919050565b6000612534602083612a24565b915061253f82612e60565b602082019050919050565b6000612557601583612a24565b915061256282612e89565b602082019050919050565b600061257a601c83612a24565b915061258582612eb2565b602082019050919050565b600061259d602683612a24565b91506125a882612edb565b604082019050919050565b60006125c0602b83612a24565b91506125cb82612f2a565b604082019050919050565b60006125e3601a83612a24565b91506125ee82612f79565b602082019050919050565b6000612606602483612a24565b915061261182612fa2565b604082019050919050565b61262581612aff565b82525050565b61263481612b09565b82525050565b600061264782848661239a565b91508190509392505050565b6000602082019050612668600083018461235e565b92915050565b6000604082019050612683600083018561235e565b612690602083018461236d565b9392505050565b60006040820190506126ac600083018561235e565b6126b9602083018461261c565b9392505050565b60006060820190506126d5600083018661235e565b6126e2602083018561261c565b6126ef604083018461235e565b949350505050565b600060808201905061270c600083018761237c565b612719602083018661262b565b612726604083018561237c565b612733606083018461237c565b95945050505050565b6000602082019050612751600083018461238b565b92915050565b600060208201905061276c60008301846123bf565b92915050565b600060208201905061278760008301846123ce565b92915050565b60006020820190506127a260008301846123dd565b92915050565b600060208201905081810360008301526127c1816123ec565b9050919050565b600060208201905081810360008301526127e18161240f565b9050919050565b6000602082019050818103600083015261280181612432565b9050919050565b6000602082019050818103600083015261282181612455565b9050919050565b6000602082019050818103600083015261284181612478565b9050919050565b600060208201905081810360008301526128618161249b565b9050919050565b60006020820190508181036000830152612881816124be565b9050919050565b600060208201905081810360008301526128a1816124e1565b9050919050565b600060208201905081810360008301526128c181612504565b9050919050565b600060208201905081810360008301526128e181612527565b9050919050565b600060208201905081810360008301526129018161254a565b9050919050565b600060208201905081810360008301526129218161256d565b9050919050565b6000602082019050818103600083015261294181612590565b9050919050565b60006020820190508181036000830152612961816125b3565b9050919050565b60006020820190508181036000830152612981816125d6565b9050919050565b600060208201905081810360008301526129a1816125f9565b9050919050565b60006020820190506129bd600083018461261c565b92915050565b60006129cd6129de565b90506129d98282612b91565b919050565b6000604051905090565b600067ffffffffffffffff821115612a0357612a02612bf1565b5b612a0c82612c20565b9050602081019050919050565b600081905092915050565b600082825260208201905092915050565b6000612a4082612aff565b9150612a4b83612aff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612a8057612a7f612bc2565b5b828201905092915050565b6000612a9682612adf565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612b2182612b28565b9050919050565b6000612b3382612adf565b9050919050565b6000612b4582612b4c565b9050919050565b6000612b5782612adf565b9050919050565b6000612b6982612b70565b9050919050565b6000612b7b82612adf565b9050919050565b82818337600083830152505050565b612b9a82612c20565b810181811067ffffffffffffffff82111715612bb957612bb8612bf1565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f506f6f6c3a20706f6f6c206d616e616765722073686f756c642073746172742060008201527f74686520706f6f6c000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f506f6f6c3a206572726f7220617070726f76696e672057455448000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f506f6f6c3a2063616c6c6572206973206e6f7420746865206f776e6572206f7260008201527f206d616e61676572000000000000000000000000000000000000000000000000602082015250565b7f506f6f6c3a206e6f7420616c6c20746f6b656e7320736f6c6400000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f506f6f6c3a20746f6b656e4964206e6f74207365740000000000000000000000600082015250565b7f506f6f6c3a20746f6b656e496420697320616c72656164792073657400000000600082015250565b7f506f6f6c3a2063616c6c6572206973206e6f742074686520757064617465206d60008201527f616e616765720000000000000000000000000000000000000000000000000000602082015250565b7f506f6f6c3a20706f6f6c2063616e206e6f74206265207374617274656420776960008201527f74686f75742066756e6473000000000000000000000000000000000000000000602082015250565b7f506f6f6c3a20746f6b656e49642063616e206e6f742062652030000000000000600082015250565b7f506f6f6c3a206572726f722073656e64696e67206461746120746f206578636860008201527f616e676500000000000000000000000000000000000000000000000000000000602082015250565b612ffa81612a8b565b811461300557600080fd5b50565b61301181612a9d565b811461301c57600080fd5b50565b61302881612aa9565b811461303357600080fd5b50565b61303f81612aff565b811461304a57600080fd5b5056fea26469706673582212203fa0ea9589a5b9d2f91ec83b828296f8fa91b0222195c1b835061e144cd89f8164736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007bfc8b7c5a7f2dcc795c5eba02ed9eb9b5b7910c0000000000000000000000005cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c38000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000054aa569005332e4d6f91e27c55307aaef607c0e20000000000000000000000007f268357a8c2552623316e2562d90e642bb538e5000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000e5c783ee536cf5e63e792988335c4255169be4e1
-----Decoded View---------------
Arg [0] : poolManager_ (address): 0x7BFC8b7c5a7f2DCc795C5EBA02ED9eB9b5b7910C
Arg [1] : tokenContract_ (address): 0x5CC5B05a8A13E3fBDB0BB9FcCd98D38e50F90c38
Arg [2] : wrappedEther_ (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [3] : landDao_ (address): 0x54AA569005332e4d6f91e27C55307AAEF607c0E2
Arg [4] : openSeaExchange_ (address): 0x7f268357A8c2552623316e2562D90e642bB538E5
Arg [5] : openSeaProxyRegister_ (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [6] : openSeaTokenProxy_ (address): 0xE5c783EE536cf5E63E792988335c4255169be4E1
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000007bfc8b7c5a7f2dcc795c5eba02ed9eb9b5b7910c
Arg [1] : 0000000000000000000000005cc5b05a8a13e3fbdb0bb9fccd98d38e50f90c38
Arg [2] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [3] : 00000000000000000000000054aa569005332e4d6f91e27c55307aaef607c0e2
Arg [4] : 0000000000000000000000007f268357a8c2552623316e2562d90e642bb538e5
Arg [5] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [6] : 000000000000000000000000e5c783ee536cf5e63e792988335c4255169be4e1
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.