Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 17 from a total of 17 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Finalize Auction | 14841336 | 920 days ago | IN | 0 ETH | 0.00367068 | ||||
Finalize Auction | 14841260 | 920 days ago | IN | 0 ETH | 0.00217327 | ||||
Finalize Auction | 14841257 | 920 days ago | IN | 0 ETH | 0.0023379 | ||||
Finalize Auction | 14841255 | 920 days ago | IN | 0 ETH | 0.00233282 | ||||
Finalize Auction | 14841253 | 920 days ago | IN | 0 ETH | 0.00264925 | ||||
Finalize Auction | 14841253 | 920 days ago | IN | 0 ETH | 0.00264925 | ||||
Place Bid | 14841250 | 920 days ago | IN | 0.28 ETH | 0.00099951 | ||||
Place Bid | 14841228 | 920 days ago | IN | 0.27 ETH | 0.00128604 | ||||
Place Bid | 14841039 | 920 days ago | IN | 0.2 ETH | 0.00130717 | ||||
Place Bid | 14840964 | 920 days ago | IN | 0.26 ETH | 0.00124358 | ||||
Place Bid | 14840185 | 920 days ago | IN | 0.2 ETH | 0.00204223 | ||||
Place Bid | 14835564 | 921 days ago | IN | 0.2 ETH | 0.00255651 | ||||
Place Bid | 14835488 | 921 days ago | IN | 0.22 ETH | 0.00099329 | ||||
Place Bid | 14835486 | 921 days ago | IN | 0.21 ETH | 0.001039 | ||||
Place Bid | 14835478 | 921 days ago | IN | 0.2 ETH | 0.00125265 | ||||
Place Bid | 14835471 | 921 days ago | IN | 0.2 ETH | 0.00124979 | ||||
Place Bid | 14835420 | 921 days ago | IN | 0.25 ETH | 0.00149384 |
Latest 11 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14841336 | 920 days ago | 0.28 ETH | ||||
14841260 | 920 days ago | 0.2 ETH | ||||
14841257 | 920 days ago | 0.2 ETH | ||||
14841255 | 920 days ago | 0.22 ETH | ||||
14841253 | 920 days ago | 0.2 ETH | ||||
14841253 | 920 days ago | 0.2 ETH | ||||
14841250 | 920 days ago | 0.27 ETH | ||||
14841228 | 920 days ago | 0.26 ETH | ||||
14840964 | 920 days ago | 0.25 ETH | ||||
14835488 | 921 days ago | 0.21 ETH | ||||
14835486 | 921 days ago | 0.2 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
EnglishAuction
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "../interfaces/IFinalizeAuctionController.sol"; import "./utils/EnglishAuctionStorage.sol"; import "./utils/EIP712.sol"; import "./SafeEthSender.sol"; contract EnglishAuction is EnglishAuctionStorage, SafeEthSender, EIP712 { bytes32 immutable BID_TYPEHASH = keccak256("Bid(uint32 auctionId,address bidder,uint256 value)"); event AuctionCreated(uint32 auctionId); event AuctionCanceled(uint32 auctionId); event AuctionCanceledByAdmin(uint32 auctionId, string reason); event AuctionFinalized(uint32 auctionId, uint256 auctionBalance); event AuctionBidPlaced(uint32 auctionId, address bidder, uint256 amount); constructor( address _accessManangerAddress, address payable _withdrawalAddress ) EIP712("Place Bid", "1") { accessManager = IAccessManager(_accessManangerAddress); withdrawalAddress = _withdrawalAddress; initializeAuction(); } modifier isOperationalAddress() { require( accessManager.isOperationalAddress(msg.sender) == true, "English Auction: You are not allowed to use this function" ); _; } function setWithdrawalAddress(address payable _newWithdrawalAddress) public isOperationalAddress { withdrawalAddress = _newWithdrawalAddress; } function createAuction( uint32 _tokenId, uint32 _timeStart, uint32 _timeEnd, uint8 _minBidPercentage, uint256 _initialPrice, uint256 _minBidValue, address _nftContractAddress, address _finalizeAuctionControllerAddress, bytes memory _additionalDataForFinalizeAuction ) public isOperationalAddress { require( _initialPrice > 0, "English Auction: Initial price have to be bigger than zero" ); uint32 currentAuctionId = incrementAuctionId(); auctionIdToAuction[currentAuctionId] = AuctionStruct( _tokenId, _timeStart, _timeEnd, _minBidPercentage, _initialPrice, _minBidValue, 0, //auctionBalance _nftContractAddress, _finalizeAuctionControllerAddress, payable(address(0)), _additionalDataForFinalizeAuction ); emit AuctionCreated(currentAuctionId); } function incrementAuctionId() private returns (uint32) { return lastAuctionId++; } /** * @notice Returns auction details for a given auctionId. */ function getAuction(uint32 _auctionId) public view returns (AuctionStruct memory) { return auctionIdToAuction[_auctionId]; } function initializeAuction() private { lastAuctionId = 1; } function placeBid(uint32 _auctionId, bytes memory _signature) public payable { placeBid(_auctionId, _signature, msg.sender); } function placeBid( uint32 _auctionId, bytes memory _signature, address _bidder ) public payable { bytes32 _hash = _hashTypedDataV4( keccak256(abi.encode(BID_TYPEHASH, _auctionId, _bidder, msg.value)) ); address recoverAddress = ECDSA.recover(_hash, _signature); require( accessManager.isOperationalAddress(recoverAddress) == true, "Incorrect bid permission signature" ); AuctionStruct storage auction = auctionIdToAuction[_auctionId]; require(auction.initialPrice > 0, "English Auction: Auction not found"); if (auction.timeStart == 0) { auction.timeStart = uint32(block.timestamp); auction.timeEnd += auction.timeStart; } require( auction.timeStart <= block.timestamp, "English Auction: Auction is not active yet" ); require( auction.timeEnd > block.timestamp, "English Auction: Auction has been finished" ); uint256 requiredBalance = auction.auctionBalance == 0 ? auction.initialPrice : auction.auctionBalance + auction.minBidValue; uint256 requiredPercentageValue = (auction.auctionBalance * (auction.minBidPercentage + 100)) / 100; require( msg.value >= requiredBalance && msg.value >= requiredPercentageValue, "English Auction: Bid amount was too low" ); uint256 prevBalance = auction.auctionBalance; address payable prevBidder = auction.bidder; auction.bidder = payable(_bidder); auction.auctionBalance = msg.value; if ((auction.timeEnd - uint32(block.timestamp)) < 15 minutes) { auction.timeEnd = uint32(block.timestamp) + 15 minutes; } if (prevBalance > 0) { sendEthWithLimitedGas(prevBidder, prevBalance, 2300); } emit AuctionBidPlaced(_auctionId, _bidder, msg.value); } /** * @notice Once the countdown has expired for an auction, anyone can settle the auction. * This will send the NFT to the highest bidder and distribute funds. */ function finalizeAuction(uint32 _auctionId) external { AuctionStruct memory auction = auctionIdToAuction[_auctionId]; uint256 auctionBalance = auction.auctionBalance; require(auction.timeEnd > 0, "English Auction: Auction not found"); require( auction.timeEnd <= block.timestamp, "English Auction: Auction is still in progress" ); IFinalizeAuctionController finalizeAuctionController = IFinalizeAuctionController( auction.finalizeAuctionControllerAddress ); (bool success, ) = auction .finalizeAuctionControllerAddress .delegatecall( abi.encodeWithSelector( finalizeAuctionController.finalize.selector, _auctionId ) ); require(success, "FinalizeAuction: DelegateCall failed"); delete auctionIdToAuction[_auctionId]; emit AuctionFinalized(_auctionId, auctionBalance); } /** * @notice If an auction has been created but has not yet received bids, it may be canceled by the seller. */ function cancelAuction(uint32 _auctionId) external { AuctionStruct memory auction = auctionIdToAuction[_auctionId]; IFinalizeAuctionController finalizeAuctionController = IFinalizeAuctionController( auction.finalizeAuctionControllerAddress ); (bool success, ) = auction .finalizeAuctionControllerAddress .delegatecall( abi.encodeWithSelector( finalizeAuctionController.cancel.selector, _auctionId ) ); require(success, "CancelAuction: DelegateCall failed"); delete auctionIdToAuction[_auctionId]; emit AuctionCanceled(_auctionId); } /** * @notice Allows Nifties to cancel an auction, refunding the bidder and returning the NFT to the seller. * This should only be used for extreme cases such as DMCA takedown requests. The reason should always be provided. */ function adminCancelAuction(uint32 _auctionId, string memory _reason) public isOperationalAddress { AuctionStruct memory auction = auctionIdToAuction[_auctionId]; IFinalizeAuctionController finalizeAuctionController = IFinalizeAuctionController( auction.finalizeAuctionControllerAddress ); (bool success, ) = auction .finalizeAuctionControllerAddress .delegatecall( abi.encodeWithSelector( finalizeAuctionController.adminCancel.selector, _auctionId, _reason ) ); require(success, "AdminCancelAuction: DelegateCall failed"); if (auction.bidder != address(0)) { uint256 bidderAmount = auction.auctionBalance; auction.auctionBalance -= auction.auctionBalance; sendEthWithLimitedGas(auction.bidder, bidderAmount, 2300); } delete auctionIdToAuction[_auctionId]; emit AuctionCanceledByAdmin(_auctionId, _reason); } }
// 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/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 (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 pragma solidity ^0.8.7; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "./utils/CallHelpers.sol"; abstract contract SafeEthSender is ReentrancyGuard { mapping(address => uint256) private withdrawRegistry; event PendingWithdraw(address _user, uint256 _amount); event Withdrawn(address _user, uint256 _amount); constructor() ReentrancyGuard() {} function sendEthWithLimitedGas( address payable _user, uint256 _amount, uint256 _gasLimit ) internal { if (_amount == 0) { return; } (bool success, ) = _user.call{value: _amount, gas: _gasLimit}(""); if (!success) { withdrawRegistry[_user] += _amount; emit PendingWithdraw(_user, _amount); } } function getAmountToWithdrawForUser(address user) public view returns (uint256) { return withdrawRegistry[user]; } function withdrawPendingEth() external { this.withdrawPendingEthFor(payable(msg.sender)); } function withdrawPendingEthFor(address payable _user) external nonReentrant { uint256 amount = withdrawRegistry[_user]; require(amount > 0, "SafeEthSender: no funds to withdraw"); withdrawRegistry[_user] = 0; (bool success, bytes memory response) = _user.call{value: amount}(""); if (!success) { string memory message = CallHelpers.getRevertMsg(response); revert(message); } emit Withdrawn(_user, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; library CallHelpers { function getRevertMsg(bytes memory _returnData) internal pure returns (string memory) { if (_returnData.length < 68) return "Transaction reverted silently"; assembly { _returnData := add(_returnData, 0x04) } return abi.decode(_returnData, (string)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; /** * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. * * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding * they need in their contracts using a combination of `abi.encode` and `keccak256`. * * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA * ({_hashTypedDataV4}). * * The implementation of the domain separator was designed to be as efficient as possible while still properly updating * the chain id to protect against replay attacks on an eventual fork of the chain. * * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. * * _Available since v3.4._ */ abstract contract EIP712 { /* solhint-disable var-name-mixedcase */ // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to // invalidate the cached domain separator if the chain id changes. bytes32 private immutable _HASHED_NAME; bytes32 private immutable _HASHED_VERSION; bytes32 private immutable _TYPE_HASH; /* solhint-enable var-name-mixedcase */ /** * @dev Initializes the domain separator and parameter caches. * * The meaning of `name` and `version` is specified in * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: * * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. * - `version`: the current major version of the signing domain. * * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart * contract upgrade]. */ constructor(string memory name, string memory version) { bytes32 hashedName = keccak256(bytes(name)); bytes32 hashedVersion = keccak256(bytes(version)); bytes32 typeHash = keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ); _HASHED_NAME = hashedName; _HASHED_VERSION = hashedVersion; _TYPE_HASH = typeHash; } /** * @dev Returns the domain separator for the current chain. */ function _domainSeparatorV4() internal view returns (bytes32) { return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION); } function _buildDomainSeparator( bytes32 typeHash, bytes32 nameHash, bytes32 versionHash ) private view returns (bytes32) { return keccak256( abi.encode( typeHash, nameHash, versionHash, block.chainid, address(this) ) ); } /** * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this * function returns the hash of the fully encoded EIP712 message for this domain. * * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example: * * ```solidity * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode( * keccak256("Mail(address to,string contents)"), * mailTo, * keccak256(bytes(mailContents)) * ))); * address signer = ECDSA.recover(digest, signature); * ``` */ function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "../../interfaces/IAccessManager.sol"; abstract contract EnglishAuctionStorage { uint32 lastAuctionId; address payable public withdrawalAddress; IAccessManager accessManager; struct AuctionStruct { uint32 tokenId; uint32 timeStart; uint32 timeEnd; uint8 minBidPercentage; uint256 initialPrice; uint256 minBidValue; uint256 auctionBalance; address nftContractAddress; address finalizeAuctionControllerAddress; address payable bidder; bytes additionalDataForFinalizeAuction; } mapping(uint32 => AuctionStruct) auctionIdToAuction; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; interface IAccessManager { function isOperationalAddress(address _address) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; interface IFinalizeAuctionController { function finalize(uint32 _auctionId) external; function cancel(uint32 _auctionId) external; function adminCancel(uint32 _auctionId, string memory _reason) external; function getAuctionType() external view returns (string memory); }
{ "evmVersion": "london", "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":"address","name":"_accessManangerAddress","type":"address"},{"internalType":"address payable","name":"_withdrawalAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"auctionId","type":"uint32"},{"indexed":false,"internalType":"address","name":"bidder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AuctionBidPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"auctionId","type":"uint32"}],"name":"AuctionCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"auctionId","type":"uint32"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"AuctionCanceledByAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"auctionId","type":"uint32"}],"name":"AuctionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"auctionId","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"auctionBalance","type":"uint256"}],"name":"AuctionFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"PendingWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_user","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"uint32","name":"_auctionId","type":"uint32"},{"internalType":"string","name":"_reason","type":"string"}],"name":"adminCancelAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_auctionId","type":"uint32"}],"name":"cancelAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_tokenId","type":"uint32"},{"internalType":"uint32","name":"_timeStart","type":"uint32"},{"internalType":"uint32","name":"_timeEnd","type":"uint32"},{"internalType":"uint8","name":"_minBidPercentage","type":"uint8"},{"internalType":"uint256","name":"_initialPrice","type":"uint256"},{"internalType":"uint256","name":"_minBidValue","type":"uint256"},{"internalType":"address","name":"_nftContractAddress","type":"address"},{"internalType":"address","name":"_finalizeAuctionControllerAddress","type":"address"},{"internalType":"bytes","name":"_additionalDataForFinalizeAuction","type":"bytes"}],"name":"createAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_auctionId","type":"uint32"}],"name":"finalizeAuction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAmountToWithdrawForUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_auctionId","type":"uint32"}],"name":"getAuction","outputs":[{"components":[{"internalType":"uint32","name":"tokenId","type":"uint32"},{"internalType":"uint32","name":"timeStart","type":"uint32"},{"internalType":"uint32","name":"timeEnd","type":"uint32"},{"internalType":"uint8","name":"minBidPercentage","type":"uint8"},{"internalType":"uint256","name":"initialPrice","type":"uint256"},{"internalType":"uint256","name":"minBidValue","type":"uint256"},{"internalType":"uint256","name":"auctionBalance","type":"uint256"},{"internalType":"address","name":"nftContractAddress","type":"address"},{"internalType":"address","name":"finalizeAuctionControllerAddress","type":"address"},{"internalType":"address payable","name":"bidder","type":"address"},{"internalType":"bytes","name":"additionalDataForFinalizeAuction","type":"bytes"}],"internalType":"struct EnglishAuctionStorage.AuctionStruct","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_auctionId","type":"uint32"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"address","name":"_bidder","type":"address"}],"name":"placeBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_auctionId","type":"uint32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"placeBid","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newWithdrawalAddress","type":"address"}],"name":"setWithdrawalAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawPendingEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_user","type":"address"}],"name":"withdrawPendingEthFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101006040527f9c48cb59bce9867de34f47239f97c825100e82912669dfa288d4deaf43d0de7b60e0523480156200003657600080fd5b506040516200292738038062002927833981016040819052620000599162000139565b6040805180820182526009815268141b1858d948109a5960ba1b602080830191825283518085019094526001808552603160f81b94909101939093526003839055905190206080527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a0527f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c05280546001600160a01b0319166001600160a01b03848116919091178255600080546001600160c01b0319166401000000009285169290920263ffffffff1916919091179091179055505062000191565b600080604083850312156200014d57600080fd5b82516200015a8162000178565b60208401519092506200016d8162000178565b809150509250929050565b6001600160a01b03811681146200018e57600080fd5b50565b60805160a05160c05160e05161275c620001cb6000396000610d7401526000611987015260006119d6015260006119b1015261275c6000f3fe6080604052600436106100a75760003560e01c80636d5ae9b3116100645780636d5ae9b3146101565780638c4eac1914610169578063a6da635714610189578063b102d1b7146101d2578063ca246c2c146101ff578063f2bcd0221461021f57600080fd5b806316bdd411146100ac5780631accff55146100ce57806321b8092e146100e357806327eac91414610103578063579dd30814610123578063651f082014610143575b600080fd5b3480156100b857600080fd5b506100cc6100c7366004612128565b61025e565b005b3480156100da57600080fd5b506100cc610602565b3480156100ef57600080fd5b506100cc6100fe366004612072565b610654565b34801561010f57600080fd5b506100cc61011e366004612128565b61071d565b34801561012f57600080fd5b506100cc61013e36600461224b565b610a10565b6100cc610151366004612191565b610d6e565b6100cc610164366004612143565b611219565b34801561017557600080fd5b506100cc610184366004612072565b611228565b34801561019557600080fd5b506101bf6101a4366004612072565b6001600160a01b031660009081526004602052604090205490565b6040519081526020015b60405180910390f35b3480156101de57600080fd5b506101f26101ed366004612128565b6113d0565b6040516101c99190612404565b34801561020b57600080fd5b506100cc61021a3660046121f3565b61156e565b34801561022b57600080fd5b5060005461024690600160201b90046001600160a01b031681565b6040516001600160a01b0390911681526020016101c9565b63ffffffff818116600090815260026020818152604080842081516101608101835281548088168252600160201b8104881694820194909452600160401b840490961691860191909152600160601b90910460ff166060850152600181015460808501529081015460a0840152600381015460c084015260048101546001600160a01b0390811660e0850152600582015481166101008501526006820154166101208401526007810180549293926101408401919061031c90612670565b80601f016020809104026020016040519081016040528092919081815260200182805461034890612670565b80156103955780601f1061036a57610100808354040283529160200191610395565b820191906000526020600020905b81548152906001019060200180831161037857829003601f168201915b505050505081525050905060008160c0015190506000826040015163ffffffff16116103dc5760405162461bcd60e51b81526004016103d3906123c2565b60405180910390fd5b42826040015163ffffffff16111561044c5760405162461bcd60e51b815260206004820152602d60248201527f456e676c6973682041756374696f6e3a2041756374696f6e206973207374696c60448201526c6c20696e2070726f677265737360981b60648201526084016103d3565b6101008201516040805163ffffffff861660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d9adbf8560e01b17905290516000916001600160a01b038416916104ab9190612336565b600060405180830381855af49150503d80600081146104e6576040519150601f19603f3d011682016040523d82523d6000602084013e6104eb565b606091505b50509050806105485760405162461bcd60e51b8152602060048201526024808201527f46696e616c697a6541756374696f6e3a2044656c656761746543616c6c2066616044820152631a5b195960e21b60648201526084016103d3565b63ffffffff85166000908152600260208190526040822080546001600160681b031916815560018101839055908101829055600381018290556004810180546001600160a01b0319908116909155600582018054821690556006820180549091169055906105b96007830182611f16565b50506040805163ffffffff87168152602081018590527fe2a9a8abc9c1bbb014d705f50f3fd8b03e07fb414651242b9664a2ae7fe9f7a191015b60405180910390a15050505050565b604051638c4eac1960e01b81523360048201523090638c4eac1990602401600060405180830381600087803b15801561063a57600080fd5b505af115801561064e573d6000803e3d6000fd5b50505050565b60015460405163bb29825f60e01b81523360048201526001600160a01b039091169063bb29825f9060240160206040518083038186803b15801561069757600080fd5b505afa1580156106ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf919061208f565b15156001146106f05760405162461bcd60e51b81526004016103d390612365565b600080546001600160a01b03909216600160201b02640100000000600160c01b0319909216919091179055565b63ffffffff818116600090815260026020818152604080842081516101608101835281548088168252600160201b8104881694820194909452600160401b840490961691860191909152600160601b90910460ff166060850152600181015460808501529081015460a0840152600381015460c084015260048101546001600160a01b0390811660e085015260058201548116610100850152600682015416610120840152600781018054929392610140840191906107db90612670565b80601f016020809104026020016040519081016040528092919081815260200182805461080790612670565b80156108545780601f1061082957610100808354040283529160200191610854565b820191906000526020600020905b81548152906001019060200180831161083757829003601f168201915b505050919092525050506101008101516040805163ffffffff861660248083019190915282518083039091018152604490910182526020810180516001600160e01b03166204e07960ea1b179052905192935090916000916001600160a01b038416916108c19190612336565b600060405180830381855af49150503d80600081146108fc576040519150601f19603f3d011682016040523d82523d6000602084013e610901565b606091505b505090508061095d5760405162461bcd60e51b815260206004820152602260248201527f43616e63656c41756374696f6e3a2044656c656761746543616c6c206661696c604482015261195960f21b60648201526084016103d3565b63ffffffff84166000908152600260208190526040822080546001600160681b031916815560018101839055908101829055600381018290556004810180546001600160a01b0319908116909155600582018054821690556006820180549091169055906109ce6007830182611f16565b505060405163ffffffff851681527f19ca51ac72a11e3bb946eb0cca8165365d92659ba92cd329251506e37b1ac41f906020015b60405180910390a150505050565b60015460405163bb29825f60e01b81523360048201526001600160a01b039091169063bb29825f9060240160206040518083038186803b158015610a5357600080fd5b505afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8b919061208f565b1515600114610aac5760405162461bcd60e51b81526004016103d390612365565b60008511610b225760405162461bcd60e51b815260206004820152603a60248201527f456e676c6973682041756374696f6e3a20496e697469616c207072696365206860448201527f61766520746f20626520626967676572207468616e207a65726f00000000000060648201526084016103d3565b6000610b2c611941565b90506040518061016001604052808b63ffffffff1681526020018a63ffffffff1681526020018963ffffffff1681526020018860ff16815260200187815260200186815260200160008152602001856001600160a01b03168152602001846001600160a01b0316815260200160006001600160a01b0316815260200183815250600260008363ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548160ff021916908360ff1602179055506080820151816001015560a0820151816002015560c0820151816003015560e08201518160040160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101208201518160060160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610140820151816007019080519060200190610d25929190611f50565b505060405163ffffffff831681527fbf79adf6eed1cf209acb474c06aea614a895e860a714d0299fffa5173ab016a191506020015b60405180910390a150505050505050505050565b604080517f0000000000000000000000000000000000000000000000000000000000000000602082015263ffffffff8516918101919091526001600160a01b0382166060820152346080820152600090610de09060a00160405160208183030381529060405280519060200120611979565b90506000610dee8285611a6b565b60015460405163bb29825f60e01b81526001600160a01b03808416600483015292935091169063bb29825f9060240160206040518083038186803b158015610e3557600080fd5b505afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d919061208f565b1515600114610ec95760405162461bcd60e51b815260206004820152602260248201527f496e636f727265637420626964207065726d697373696f6e207369676e617475604482015261726560f01b60648201526084016103d3565b63ffffffff851660009081526002602052604090206001810154610eff5760405162461bcd60e51b81526004016103d3906123c2565b8054600160201b900463ffffffff16610f7457805467ffffffff000000001916600160201b4263ffffffff9081168202929092178084559081048216918391600891610f55918591600160401b9091041661257a565b92506101000a81548163ffffffff021916908363ffffffff1602179055505b805442600160201b90910463ffffffff161115610fe65760405162461bcd60e51b815260206004820152602a60248201527f456e676c6973682041756374696f6e3a2041756374696f6e206973206e6f74206044820152691858dd1a5d99481e595d60b21b60648201526084016103d3565b805442600160401b90910463ffffffff16116110575760405162461bcd60e51b815260206004820152602a60248201527f456e676c6973682041756374696f6e3a2041756374696f6e20686173206265656044820152691b88199a5b9a5cda195960b21b60648201526084016103d3565b6000816003015460001461107e57816002015482600301546110799190612562565b611084565b81600101545b82549091506000906064906110a390600160601b900460ff16826125a2565b60ff1684600301546110b591906125e9565b6110bf91906125c7565b90508134101580156110d15750803410155b61112d5760405162461bcd60e51b815260206004820152602760248201527f456e676c6973682041756374696f6e3a2042696420616d6f756e742077617320604482015266746f6f206c6f7760c81b60648201526084016103d3565b6003830180546006850180546001600160a01b038a81166001600160a01b0319831617909255349093558554919216906103849061117a90429063ffffffff600160401b9091041661261f565b63ffffffff1610156111b8576111924261038461257a565b855463ffffffff91909116600160401b026bffffffff0000000000000000199091161785555b81156111cb576111cb81836108fc611a8f565b6040805163ffffffff8c1681526001600160a01b038a16602082015234918101919091527fbbfeada1fd2abe8b045fee13b3e187f690add43b86b71e19786ffbe3fd88b5c890606001610d5a565b611224828233610d6e565b5050565b6002600354141561127b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103d3565b60026003556001600160a01b038116600090815260046020526040902054806112f25760405162461bcd60e51b815260206004820152602360248201527f5361666545746853656e6465723a206e6f2066756e647320746f20776974686460448201526272617760e81b60648201526084016103d3565b6001600160a01b038216600081815260046020526040808220829055519091829184908381818185875af1925050503d806000811461134d576040519150601f19603f3d011682016040523d82523d6000602084013e611352565b606091505b50915091508161138357600061136782611b63565b90508060405162461bcd60e51b81526004016103d39190612352565b604080516001600160a01b0386168152602081018590527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a1505060016003555050565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915263ffffffff82811660009081526002602081815260409283902083516101608101855281548087168252600160201b8104871693820193909352600160401b830490951693850193909352600160601b900460ff1660608401526001820154608084015281015460a0830152600381015460c083015260048101546001600160a01b0390811660e084015260058201548116610100840152600682015416610120830152600781018054610140840191906114e590612670565b80601f016020809104026020016040519081016040528092919081815260200182805461151190612670565b801561155e5780601f106115335761010080835404028352916020019161155e565b820191906000526020600020905b81548152906001019060200180831161154157829003601f168201915b5050505050815250509050919050565b60015460405163bb29825f60e01b81523360048201526001600160a01b039091169063bb29825f9060240160206040518083038186803b1580156115b157600080fd5b505afa1580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e9919061208f565b151560011461160a5760405162461bcd60e51b81526004016103d390612365565b63ffffffff828116600090815260026020818152604080842081516101608101835281548088168252600160201b8104881694820194909452600160401b840490961691860191909152600160601b90910460ff166060850152600181015460808501529081015460a0840152600381015460c084015260048101546001600160a01b0390811660e085015260058201548116610100850152600682015416610120840152600781018054929392610140840191906116c890612670565b80601f01602080910402602001604051908101604052809291908181526020018280546116f490612670565b80156117415780601f1061171657610100808354040283529160200191611741565b820191906000526020600020905b81548152906001019060200180831161172457829003601f168201915b50505091909252505050610100810151604051919250906000906001600160a01b038316906351de55c960e11b9061177f90889088906024016124ea565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516117bd9190612336565b600060405180830381855af49150503d80600081146117f8576040519150601f19603f3d011682016040523d82523d6000602084013e6117fd565b606091505b505090508061185e5760405162461bcd60e51b815260206004820152602760248201527f41646d696e43616e63656c41756374696f6e3a2044656c656761746543616c6c6044820152660819985a5b195960ca1b60648201526084016103d3565b6101208301516001600160a01b03161561189d5760c0830180519081906118858280612608565b90525061012084015161189b90826108fc611a8f565b505b63ffffffff85166000908152600260208190526040822080546001600160681b031916815560018101839055908101829055600381018290556004810180546001600160a01b03199081169091556005820180548216905560068201805490911690559061190e6007830182611f16565b50507fd3afdcd84753a6c7bc845981516ecda290dfac47c600fe47d5d10dc857fc923c85856040516105f39291906124ea565b6000805463ffffffff168180611956836126ab565b91906101000a81548163ffffffff021916908363ffffffff160217905550905090565b6000611a65611a24604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b92915050565b6000806000611a7a8585611bc2565b91509150611a8781611c32565b509392505050565b81611a9957505050565b6000836001600160a01b0316838390604051600060405180830381858888f193505050503d8060008114611ae9576040519150601f19603f3d011682016040523d82523d6000602084013e611aee565b606091505b505090508061064e576001600160a01b03841660009081526004602052604081208054859290611b1f908490612562565b9091555050604080516001600160a01b0386168152602081018590527f3453f4a207b5a3e324fc5f2cea61205b3dd9fb626cd198df77626b42253b7bee9101610a02565b6060604482511015611ba857505060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000602082015290565b60048201915081806020019051810190611a6591906120b1565b600080825160411415611bf95760208301516040840151606085015160001a611bed87828585611df0565b94509450505050611c2b565b825160401415611c235760208301516040840151611c18868383611edd565b935093505050611c2b565b506000905060025b9250929050565b6000816004811115611c4657611c466126e5565b1415611c4f5750565b6001816004811115611c6357611c636126e5565b1415611cb15760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103d3565b6002816004811115611cc557611cc56126e5565b1415611d135760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103d3565b6003816004811115611d2757611d276126e5565b1415611d805760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103d3565b6004816004811115611d9457611d946126e5565b1415611ded5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016103d3565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611e275750600090506003611ed4565b8460ff16601b14158015611e3f57508460ff16601c14155b15611e505750600090506004611ed4565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611ea4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611ecd57600060019250925050611ed4565b9150600090505b94509492505050565b6000806001600160ff1b03831681611efa60ff86901c601b612562565b9050611f0887828885611df0565b935093505050935093915050565b508054611f2290612670565b6000825580601f10611f32575050565b601f016020900490600052602060002090810190611ded9190611fd4565b828054611f5c90612670565b90600052602060002090601f016020900481019282611f7e5760008555611fc4565b82601f10611f9757805160ff1916838001178555611fc4565b82800160010185558215611fc4579182015b82811115611fc4578251825591602001919060010190611fa9565b50611fd0929150611fd4565b5090565b5b80821115611fd05760008155600101611fd5565b6000611ffc611ff78461253a565b612509565b905082815283838301111561201057600080fd5b828260208301376000602084830101529392505050565b803561203281612711565b919050565b600082601f83011261204857600080fd5b61205783833560208501611fe9565b9392505050565b803563ffffffff8116811461203257600080fd5b60006020828403121561208457600080fd5b813561205781612711565b6000602082840312156120a157600080fd5b8151801515811461205757600080fd5b6000602082840312156120c357600080fd5b815167ffffffffffffffff8111156120da57600080fd5b8201601f810184136120eb57600080fd5b80516120f9611ff78261253a565b81815285602083850101111561210e57600080fd5b61211f826020830160208601612644565b95945050505050565b60006020828403121561213a57600080fd5b6120578261205e565b6000806040838503121561215657600080fd5b61215f8361205e565b9150602083013567ffffffffffffffff81111561217b57600080fd5b61218785828601612037565b9150509250929050565b6000806000606084860312156121a657600080fd5b6121af8461205e565b9250602084013567ffffffffffffffff8111156121cb57600080fd5b6121d786828701612037565b92505060408401356121e881612711565b809150509250925092565b6000806040838503121561220657600080fd5b61220f8361205e565b9150602083013567ffffffffffffffff81111561222b57600080fd5b8301601f8101851361223c57600080fd5b61218785823560208401611fe9565b60008060008060008060008060006101208a8c03121561226a57600080fd5b6122738a61205e565b985061228160208b0161205e565b975061228f60408b0161205e565b965060608a013560ff811681146122a557600080fd5b955060808a0135945060a08a0135935060c08a01356122c381612711565b92506122d160e08b01612027565b91506101008a013567ffffffffffffffff8111156122ee57600080fd5b6122fa8c828d01612037565b9150509295985092959850929598565b60008151808452612322816020860160208601612644565b601f01601f19169290920160200192915050565b60008251612348818460208701612644565b9190910192915050565b602081526000612057602083018461230a565b60208082526039908201527f456e676c6973682041756374696f6e3a20596f7520617265206e6f7420616c6c60408201527f6f77656420746f2075736520746869732066756e6374696f6e00000000000000606082015260800190565b60208082526022908201527f456e676c6973682041756374696f6e3a2041756374696f6e206e6f7420666f756040820152611b9960f21b606082015260800190565b6020815261241b60208201835163ffffffff169052565b60006020830151612434604084018263ffffffff169052565b50604083015163ffffffff8116606084015250606083015160ff8116608084015250608083015160a083015260a083015160c083015260c083015160e083015260e0830151610100612490818501836001600160a01b03169052565b84015190506101206124ac848201836001600160a01b03169052565b84015190506101406124c8848201836001600160a01b03169052565b8401516101608481015290506124e261018084018261230a565b949350505050565b63ffffffff831681526040602082015260006124e2604083018461230a565b604051601f8201601f1916810167ffffffffffffffff81118282101715612532576125326126fb565b604052919050565b600067ffffffffffffffff821115612554576125546126fb565b50601f01601f191660200190565b60008219821115612575576125756126cf565b500190565b600063ffffffff808316818516808303821115612599576125996126cf565b01949350505050565b600060ff821660ff84168060ff038211156125bf576125bf6126cf565b019392505050565b6000826125e457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612603576126036126cf565b500290565b60008282101561261a5761261a6126cf565b500390565b600063ffffffff8381169083168181101561263c5761263c6126cf565b039392505050565b60005b8381101561265f578181015183820152602001612647565b8381111561064e5750506000910152565b600181811c9082168061268457607f821691505b602082108114156126a557634e487b7160e01b600052602260045260246000fd5b50919050565b600063ffffffff808316818114156126c5576126c56126cf565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611ded57600080fdfea26469706673582212208bc521d96c92dd7635608f82b8d46017fe50a53663aa6bf1740e33391ec7ec3464736f6c634300080700330000000000000000000000001fdf7a91658373c729af90e3a3b41d7b8a75c6790000000000000000000000009115e13b2711e63e505ba56b55ca7f0acfb089dc
Deployed Bytecode
0x6080604052600436106100a75760003560e01c80636d5ae9b3116100645780636d5ae9b3146101565780638c4eac1914610169578063a6da635714610189578063b102d1b7146101d2578063ca246c2c146101ff578063f2bcd0221461021f57600080fd5b806316bdd411146100ac5780631accff55146100ce57806321b8092e146100e357806327eac91414610103578063579dd30814610123578063651f082014610143575b600080fd5b3480156100b857600080fd5b506100cc6100c7366004612128565b61025e565b005b3480156100da57600080fd5b506100cc610602565b3480156100ef57600080fd5b506100cc6100fe366004612072565b610654565b34801561010f57600080fd5b506100cc61011e366004612128565b61071d565b34801561012f57600080fd5b506100cc61013e36600461224b565b610a10565b6100cc610151366004612191565b610d6e565b6100cc610164366004612143565b611219565b34801561017557600080fd5b506100cc610184366004612072565b611228565b34801561019557600080fd5b506101bf6101a4366004612072565b6001600160a01b031660009081526004602052604090205490565b6040519081526020015b60405180910390f35b3480156101de57600080fd5b506101f26101ed366004612128565b6113d0565b6040516101c99190612404565b34801561020b57600080fd5b506100cc61021a3660046121f3565b61156e565b34801561022b57600080fd5b5060005461024690600160201b90046001600160a01b031681565b6040516001600160a01b0390911681526020016101c9565b63ffffffff818116600090815260026020818152604080842081516101608101835281548088168252600160201b8104881694820194909452600160401b840490961691860191909152600160601b90910460ff166060850152600181015460808501529081015460a0840152600381015460c084015260048101546001600160a01b0390811660e0850152600582015481166101008501526006820154166101208401526007810180549293926101408401919061031c90612670565b80601f016020809104026020016040519081016040528092919081815260200182805461034890612670565b80156103955780601f1061036a57610100808354040283529160200191610395565b820191906000526020600020905b81548152906001019060200180831161037857829003601f168201915b505050505081525050905060008160c0015190506000826040015163ffffffff16116103dc5760405162461bcd60e51b81526004016103d3906123c2565b60405180910390fd5b42826040015163ffffffff16111561044c5760405162461bcd60e51b815260206004820152602d60248201527f456e676c6973682041756374696f6e3a2041756374696f6e206973207374696c60448201526c6c20696e2070726f677265737360981b60648201526084016103d3565b6101008201516040805163ffffffff861660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663d9adbf8560e01b17905290516000916001600160a01b038416916104ab9190612336565b600060405180830381855af49150503d80600081146104e6576040519150601f19603f3d011682016040523d82523d6000602084013e6104eb565b606091505b50509050806105485760405162461bcd60e51b8152602060048201526024808201527f46696e616c697a6541756374696f6e3a2044656c656761746543616c6c2066616044820152631a5b195960e21b60648201526084016103d3565b63ffffffff85166000908152600260208190526040822080546001600160681b031916815560018101839055908101829055600381018290556004810180546001600160a01b0319908116909155600582018054821690556006820180549091169055906105b96007830182611f16565b50506040805163ffffffff87168152602081018590527fe2a9a8abc9c1bbb014d705f50f3fd8b03e07fb414651242b9664a2ae7fe9f7a191015b60405180910390a15050505050565b604051638c4eac1960e01b81523360048201523090638c4eac1990602401600060405180830381600087803b15801561063a57600080fd5b505af115801561064e573d6000803e3d6000fd5b50505050565b60015460405163bb29825f60e01b81523360048201526001600160a01b039091169063bb29825f9060240160206040518083038186803b15801561069757600080fd5b505afa1580156106ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cf919061208f565b15156001146106f05760405162461bcd60e51b81526004016103d390612365565b600080546001600160a01b03909216600160201b02640100000000600160c01b0319909216919091179055565b63ffffffff818116600090815260026020818152604080842081516101608101835281548088168252600160201b8104881694820194909452600160401b840490961691860191909152600160601b90910460ff166060850152600181015460808501529081015460a0840152600381015460c084015260048101546001600160a01b0390811660e085015260058201548116610100850152600682015416610120840152600781018054929392610140840191906107db90612670565b80601f016020809104026020016040519081016040528092919081815260200182805461080790612670565b80156108545780601f1061082957610100808354040283529160200191610854565b820191906000526020600020905b81548152906001019060200180831161083757829003601f168201915b505050919092525050506101008101516040805163ffffffff861660248083019190915282518083039091018152604490910182526020810180516001600160e01b03166204e07960ea1b179052905192935090916000916001600160a01b038416916108c19190612336565b600060405180830381855af49150503d80600081146108fc576040519150601f19603f3d011682016040523d82523d6000602084013e610901565b606091505b505090508061095d5760405162461bcd60e51b815260206004820152602260248201527f43616e63656c41756374696f6e3a2044656c656761746543616c6c206661696c604482015261195960f21b60648201526084016103d3565b63ffffffff84166000908152600260208190526040822080546001600160681b031916815560018101839055908101829055600381018290556004810180546001600160a01b0319908116909155600582018054821690556006820180549091169055906109ce6007830182611f16565b505060405163ffffffff851681527f19ca51ac72a11e3bb946eb0cca8165365d92659ba92cd329251506e37b1ac41f906020015b60405180910390a150505050565b60015460405163bb29825f60e01b81523360048201526001600160a01b039091169063bb29825f9060240160206040518083038186803b158015610a5357600080fd5b505afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8b919061208f565b1515600114610aac5760405162461bcd60e51b81526004016103d390612365565b60008511610b225760405162461bcd60e51b815260206004820152603a60248201527f456e676c6973682041756374696f6e3a20496e697469616c207072696365206860448201527f61766520746f20626520626967676572207468616e207a65726f00000000000060648201526084016103d3565b6000610b2c611941565b90506040518061016001604052808b63ffffffff1681526020018a63ffffffff1681526020018963ffffffff1681526020018860ff16815260200187815260200186815260200160008152602001856001600160a01b03168152602001846001600160a01b0316815260200160006001600160a01b0316815260200183815250600260008363ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548160ff021916908360ff1602179055506080820151816001015560a0820151816002015560c0820151816003015560e08201518160040160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101208201518160060160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610140820151816007019080519060200190610d25929190611f50565b505060405163ffffffff831681527fbf79adf6eed1cf209acb474c06aea614a895e860a714d0299fffa5173ab016a191506020015b60405180910390a150505050505050505050565b604080517f9c48cb59bce9867de34f47239f97c825100e82912669dfa288d4deaf43d0de7b602082015263ffffffff8516918101919091526001600160a01b0382166060820152346080820152600090610de09060a00160405160208183030381529060405280519060200120611979565b90506000610dee8285611a6b565b60015460405163bb29825f60e01b81526001600160a01b03808416600483015292935091169063bb29825f9060240160206040518083038186803b158015610e3557600080fd5b505afa158015610e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6d919061208f565b1515600114610ec95760405162461bcd60e51b815260206004820152602260248201527f496e636f727265637420626964207065726d697373696f6e207369676e617475604482015261726560f01b60648201526084016103d3565b63ffffffff851660009081526002602052604090206001810154610eff5760405162461bcd60e51b81526004016103d3906123c2565b8054600160201b900463ffffffff16610f7457805467ffffffff000000001916600160201b4263ffffffff9081168202929092178084559081048216918391600891610f55918591600160401b9091041661257a565b92506101000a81548163ffffffff021916908363ffffffff1602179055505b805442600160201b90910463ffffffff161115610fe65760405162461bcd60e51b815260206004820152602a60248201527f456e676c6973682041756374696f6e3a2041756374696f6e206973206e6f74206044820152691858dd1a5d99481e595d60b21b60648201526084016103d3565b805442600160401b90910463ffffffff16116110575760405162461bcd60e51b815260206004820152602a60248201527f456e676c6973682041756374696f6e3a2041756374696f6e20686173206265656044820152691b88199a5b9a5cda195960b21b60648201526084016103d3565b6000816003015460001461107e57816002015482600301546110799190612562565b611084565b81600101545b82549091506000906064906110a390600160601b900460ff16826125a2565b60ff1684600301546110b591906125e9565b6110bf91906125c7565b90508134101580156110d15750803410155b61112d5760405162461bcd60e51b815260206004820152602760248201527f456e676c6973682041756374696f6e3a2042696420616d6f756e742077617320604482015266746f6f206c6f7760c81b60648201526084016103d3565b6003830180546006850180546001600160a01b038a81166001600160a01b0319831617909255349093558554919216906103849061117a90429063ffffffff600160401b9091041661261f565b63ffffffff1610156111b8576111924261038461257a565b855463ffffffff91909116600160401b026bffffffff0000000000000000199091161785555b81156111cb576111cb81836108fc611a8f565b6040805163ffffffff8c1681526001600160a01b038a16602082015234918101919091527fbbfeada1fd2abe8b045fee13b3e187f690add43b86b71e19786ffbe3fd88b5c890606001610d5a565b611224828233610d6e565b5050565b6002600354141561127b5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103d3565b60026003556001600160a01b038116600090815260046020526040902054806112f25760405162461bcd60e51b815260206004820152602360248201527f5361666545746853656e6465723a206e6f2066756e647320746f20776974686460448201526272617760e81b60648201526084016103d3565b6001600160a01b038216600081815260046020526040808220829055519091829184908381818185875af1925050503d806000811461134d576040519150601f19603f3d011682016040523d82523d6000602084013e611352565b606091505b50915091508161138357600061136782611b63565b90508060405162461bcd60e51b81526004016103d39190612352565b604080516001600160a01b0386168152602081018590527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a1505060016003555050565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915263ffffffff82811660009081526002602081815260409283902083516101608101855281548087168252600160201b8104871693820193909352600160401b830490951693850193909352600160601b900460ff1660608401526001820154608084015281015460a0830152600381015460c083015260048101546001600160a01b0390811660e084015260058201548116610100840152600682015416610120830152600781018054610140840191906114e590612670565b80601f016020809104026020016040519081016040528092919081815260200182805461151190612670565b801561155e5780601f106115335761010080835404028352916020019161155e565b820191906000526020600020905b81548152906001019060200180831161154157829003601f168201915b5050505050815250509050919050565b60015460405163bb29825f60e01b81523360048201526001600160a01b039091169063bb29825f9060240160206040518083038186803b1580156115b157600080fd5b505afa1580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e9919061208f565b151560011461160a5760405162461bcd60e51b81526004016103d390612365565b63ffffffff828116600090815260026020818152604080842081516101608101835281548088168252600160201b8104881694820194909452600160401b840490961691860191909152600160601b90910460ff166060850152600181015460808501529081015460a0840152600381015460c084015260048101546001600160a01b0390811660e085015260058201548116610100850152600682015416610120840152600781018054929392610140840191906116c890612670565b80601f01602080910402602001604051908101604052809291908181526020018280546116f490612670565b80156117415780601f1061171657610100808354040283529160200191611741565b820191906000526020600020905b81548152906001019060200180831161172457829003601f168201915b50505091909252505050610100810151604051919250906000906001600160a01b038316906351de55c960e11b9061177f90889088906024016124ea565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516117bd9190612336565b600060405180830381855af49150503d80600081146117f8576040519150601f19603f3d011682016040523d82523d6000602084013e6117fd565b606091505b505090508061185e5760405162461bcd60e51b815260206004820152602760248201527f41646d696e43616e63656c41756374696f6e3a2044656c656761746543616c6c6044820152660819985a5b195960ca1b60648201526084016103d3565b6101208301516001600160a01b03161561189d5760c0830180519081906118858280612608565b90525061012084015161189b90826108fc611a8f565b505b63ffffffff85166000908152600260208190526040822080546001600160681b031916815560018101839055908101829055600381018290556004810180546001600160a01b03199081169091556005820180548216905560068201805490911690559061190e6007830182611f16565b50507fd3afdcd84753a6c7bc845981516ecda290dfac47c600fe47d5d10dc857fc923c85856040516105f39291906124ea565b6000805463ffffffff168180611956836126ab565b91906101000a81548163ffffffff021916908363ffffffff160217905550905090565b6000611a65611a24604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527f1af6a4aca3d8f1f63d04a4153d11eb522dc617d49ddd7c2737031e29a2af41e5828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b92915050565b6000806000611a7a8585611bc2565b91509150611a8781611c32565b509392505050565b81611a9957505050565b6000836001600160a01b0316838390604051600060405180830381858888f193505050503d8060008114611ae9576040519150601f19603f3d011682016040523d82523d6000602084013e611aee565b606091505b505090508061064e576001600160a01b03841660009081526004602052604081208054859290611b1f908490612562565b9091555050604080516001600160a01b0386168152602081018590527f3453f4a207b5a3e324fc5f2cea61205b3dd9fb626cd198df77626b42253b7bee9101610a02565b6060604482511015611ba857505060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000602082015290565b60048201915081806020019051810190611a6591906120b1565b600080825160411415611bf95760208301516040840151606085015160001a611bed87828585611df0565b94509450505050611c2b565b825160401415611c235760208301516040840151611c18868383611edd565b935093505050611c2b565b506000905060025b9250929050565b6000816004811115611c4657611c466126e5565b1415611c4f5750565b6001816004811115611c6357611c636126e5565b1415611cb15760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103d3565b6002816004811115611cc557611cc56126e5565b1415611d135760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103d3565b6003816004811115611d2757611d276126e5565b1415611d805760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103d3565b6004816004811115611d9457611d946126e5565b1415611ded5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016103d3565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611e275750600090506003611ed4565b8460ff16601b14158015611e3f57508460ff16601c14155b15611e505750600090506004611ed4565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611ea4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611ecd57600060019250925050611ed4565b9150600090505b94509492505050565b6000806001600160ff1b03831681611efa60ff86901c601b612562565b9050611f0887828885611df0565b935093505050935093915050565b508054611f2290612670565b6000825580601f10611f32575050565b601f016020900490600052602060002090810190611ded9190611fd4565b828054611f5c90612670565b90600052602060002090601f016020900481019282611f7e5760008555611fc4565b82601f10611f9757805160ff1916838001178555611fc4565b82800160010185558215611fc4579182015b82811115611fc4578251825591602001919060010190611fa9565b50611fd0929150611fd4565b5090565b5b80821115611fd05760008155600101611fd5565b6000611ffc611ff78461253a565b612509565b905082815283838301111561201057600080fd5b828260208301376000602084830101529392505050565b803561203281612711565b919050565b600082601f83011261204857600080fd5b61205783833560208501611fe9565b9392505050565b803563ffffffff8116811461203257600080fd5b60006020828403121561208457600080fd5b813561205781612711565b6000602082840312156120a157600080fd5b8151801515811461205757600080fd5b6000602082840312156120c357600080fd5b815167ffffffffffffffff8111156120da57600080fd5b8201601f810184136120eb57600080fd5b80516120f9611ff78261253a565b81815285602083850101111561210e57600080fd5b61211f826020830160208601612644565b95945050505050565b60006020828403121561213a57600080fd5b6120578261205e565b6000806040838503121561215657600080fd5b61215f8361205e565b9150602083013567ffffffffffffffff81111561217b57600080fd5b61218785828601612037565b9150509250929050565b6000806000606084860312156121a657600080fd5b6121af8461205e565b9250602084013567ffffffffffffffff8111156121cb57600080fd5b6121d786828701612037565b92505060408401356121e881612711565b809150509250925092565b6000806040838503121561220657600080fd5b61220f8361205e565b9150602083013567ffffffffffffffff81111561222b57600080fd5b8301601f8101851361223c57600080fd5b61218785823560208401611fe9565b60008060008060008060008060006101208a8c03121561226a57600080fd5b6122738a61205e565b985061228160208b0161205e565b975061228f60408b0161205e565b965060608a013560ff811681146122a557600080fd5b955060808a0135945060a08a0135935060c08a01356122c381612711565b92506122d160e08b01612027565b91506101008a013567ffffffffffffffff8111156122ee57600080fd5b6122fa8c828d01612037565b9150509295985092959850929598565b60008151808452612322816020860160208601612644565b601f01601f19169290920160200192915050565b60008251612348818460208701612644565b9190910192915050565b602081526000612057602083018461230a565b60208082526039908201527f456e676c6973682041756374696f6e3a20596f7520617265206e6f7420616c6c60408201527f6f77656420746f2075736520746869732066756e6374696f6e00000000000000606082015260800190565b60208082526022908201527f456e676c6973682041756374696f6e3a2041756374696f6e206e6f7420666f756040820152611b9960f21b606082015260800190565b6020815261241b60208201835163ffffffff169052565b60006020830151612434604084018263ffffffff169052565b50604083015163ffffffff8116606084015250606083015160ff8116608084015250608083015160a083015260a083015160c083015260c083015160e083015260e0830151610100612490818501836001600160a01b03169052565b84015190506101206124ac848201836001600160a01b03169052565b84015190506101406124c8848201836001600160a01b03169052565b8401516101608481015290506124e261018084018261230a565b949350505050565b63ffffffff831681526040602082015260006124e2604083018461230a565b604051601f8201601f1916810167ffffffffffffffff81118282101715612532576125326126fb565b604052919050565b600067ffffffffffffffff821115612554576125546126fb565b50601f01601f191660200190565b60008219821115612575576125756126cf565b500190565b600063ffffffff808316818516808303821115612599576125996126cf565b01949350505050565b600060ff821660ff84168060ff038211156125bf576125bf6126cf565b019392505050565b6000826125e457634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612603576126036126cf565b500290565b60008282101561261a5761261a6126cf565b500390565b600063ffffffff8381169083168181101561263c5761263c6126cf565b039392505050565b60005b8381101561265f578181015183820152602001612647565b8381111561064e5750506000910152565b600181811c9082168061268457607f821691505b602082108114156126a557634e487b7160e01b600052602260045260246000fd5b50919050565b600063ffffffff808316818114156126c5576126c56126cf565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611ded57600080fdfea26469706673582212208bc521d96c92dd7635608f82b8d46017fe50a53663aa6bf1740e33391ec7ec3464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000001fdf7a91658373c729af90e3a3b41d7b8a75c6790000000000000000000000009115e13b2711e63e505ba56b55ca7f0acfb089dc
-----Decoded View---------------
Arg [0] : _accessManangerAddress (address): 0x1FdF7A91658373c729Af90e3A3b41D7b8a75c679
Arg [1] : _withdrawalAddress (address): 0x9115e13b2711E63E505ba56B55cA7f0AcFb089dC
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000001fdf7a91658373c729af90e3a3b41d7b8a75c679
Arg [1] : 0000000000000000000000009115e13b2711e63e505ba56b55ca7f0acfb089dc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.