Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 9,643 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Your Fu... | 19098043 | 122 days ago | IN | 0 ETH | 0.00055189 | ||||
Withdraw Your Fu... | 19098042 | 122 days ago | IN | 0 ETH | 0.00056237 | ||||
Withdraw Your Fu... | 19098025 | 122 days ago | IN | 0 ETH | 0.0005552 | ||||
Deposit Funds | 19093907 | 123 days ago | IN | 0.05 ETH | 0.00033854 | ||||
Withdraw Your Fu... | 19080926 | 125 days ago | IN | 0 ETH | 0.00052797 | ||||
Deposit Funds | 19080914 | 125 days ago | IN | 0.3 ETH | 0.00052992 | ||||
Deposit Funds | 19080906 | 125 days ago | IN | 0.3 ETH | 0.00047579 | ||||
Withdraw Your Fu... | 19080710 | 125 days ago | IN | 0 ETH | 0.00042959 | ||||
Deposit Funds | 19080699 | 125 days ago | IN | 0.2 ETH | 0.00046484 | ||||
Deposit Funds | 19080690 | 125 days ago | IN | 0.2 ETH | 0.00048857 | ||||
Withdraw Your Fu... | 19080667 | 125 days ago | IN | 0 ETH | 0.00050407 | ||||
Deposit Funds | 19080639 | 125 days ago | IN | 0.02 ETH | 0.00043977 | ||||
Deposit Funds | 19080638 | 125 days ago | IN | 0.017 ETH | 0.00043909 | ||||
Withdraw Your Fu... | 19076085 | 125 days ago | IN | 0 ETH | 0.00054906 | ||||
Deposit Funds | 19076025 | 125 days ago | IN | 0.02 ETH | 0.00077905 | ||||
Deposit Funds | 19075983 | 125 days ago | IN | 0.02 ETH | 0.0006692 | ||||
Withdraw Your Fu... | 19075954 | 125 days ago | IN | 0 ETH | 0.00061958 | ||||
Deposit Funds | 19075924 | 125 days ago | IN | 0.01 ETH | 0.00052584 | ||||
Deposit Funds | 19075890 | 125 days ago | IN | 0.01 ETH | 0.0005003 | ||||
Withdraw Your Fu... | 19075877 | 125 days ago | IN | 0 ETH | 0.00054979 | ||||
Deposit Funds | 19075787 | 125 days ago | IN | 0.007 ETH | 0.00064925 | ||||
Deposit Funds | 19075761 | 125 days ago | IN | 0.006 ETH | 0.00061862 | ||||
Withdraw Your Fu... | 19053449 | 129 days ago | IN | 0 ETH | 0.00041291 | ||||
Deposit Funds | 19053444 | 129 days ago | IN | 0.001 ETH | 0.00022577 | ||||
Withdraw Your Fu... | 19048761 | 129 days ago | IN | 0 ETH | 0.00087777 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
19098043 | 122 days ago | 0.008 ETH | ||||
19098042 | 122 days ago | 0.008 ETH | ||||
19098025 | 122 days ago | 0.035 ETH | ||||
19080926 | 125 days ago | 0.6 ETH | ||||
19080710 | 125 days ago | 0.4 ETH | ||||
19080667 | 125 days ago | 0.037 ETH | ||||
19076085 | 125 days ago | 0.04 ETH | ||||
19075954 | 125 days ago | 0.02 ETH | ||||
19075877 | 125 days ago | 0.012 ETH | ||||
19053449 | 129 days ago | 0.001 ETH | ||||
19048761 | 129 days ago | 0.006881 ETH | ||||
19048752 | 129 days ago | 0.006881 ETH | ||||
19048668 | 129 days ago | 0.035 ETH | ||||
19048668 | 129 days ago | 0.035 ETH | ||||
19048668 | 129 days ago | 0.035 ETH | ||||
19048666 | 129 days ago | 0.035 ETH | ||||
19048666 | 129 days ago | 0.035 ETH | ||||
19048666 | 129 days ago | 0.035 ETH | ||||
19048666 | 129 days ago | 0.035 ETH | ||||
19048666 | 129 days ago | 0.035 ETH | ||||
19048666 | 129 days ago | 0.035 ETH | ||||
19048665 | 129 days ago | 0.035 ETH | ||||
19048665 | 129 days ago | 0.035 ETH | ||||
19048665 | 129 days ago | 0.035 ETH | ||||
19048665 | 129 days ago | 0.035 ETH |
Loading...
Loading
Contract Name:
MMGAMERS
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-18 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @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] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @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 // Deprecated in v4.8 } 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"); } } /** * @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) { 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. /// @solidity memory-safe-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 { 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 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)); } } // File: @openzeppelin/contracts/utils/Context.sol // 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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: contracts/MMGAMERS.sol pragma solidity ^0.8.12; contract MMGAMERS is Ownable, Pausable { address public signer; mapping(address => uint256) public deposits; mapping(string => bool) public nonceUsed; event Deposit(uint256 value, address user); event Withdraw(uint256 value, address user); constructor(address _signer) { signer = _signer; } receive() external payable {} function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function hashClaimTransaction( uint256 amount, address player, string memory nonce ) public pure returns (bytes32) { bytes32 hash = keccak256(abi.encodePacked(amount, player, nonce)); return hash; } function matchSigner(bytes32 hash, bytes memory signature) public view returns (bool) { return signer == ECDSA.recover(hash, signature); } function DepositFunds() public payable { require(msg.value > 0, "Send valid eth amount!"); deposits[msg.sender] = msg.value; emit Deposit(msg.value, msg.sender); } function withdrawYourFund( uint256 amount, string memory nonce, bytes calldata signature ) public whenNotPaused { require( matchSigner( hashClaimTransaction(amount, msg.sender, nonce), signature ), "Not allowed to withdraw" ); require(deposits[msg.sender] > 0, "You did not deposit anthing"); payable(msg.sender).transfer(amount); emit Withdraw(amount, msg.sender); } function updateSigner(address _signer) external onlyOwner { signer = _signer; } function withdraw() external onlyOwner { uint256 balance = address(this).balance; payable(owner()).transfer(balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"DepositFunds","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"player","type":"address"},{"internalType":"string","name":"nonce","type":"string"}],"name":"hashClaimTransaction","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"matchSigner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"nonceUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"updateSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"nonce","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"withdrawYourFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051610eed380380610eed83398101604081905261002f916100ba565b6100383361006a565b6000805460ff60a01b19169055600180546001600160a01b0319166001600160a01b03929092169190911790556100ea565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100cc57600080fd5b81516001600160a01b03811681146100e357600080fd5b9392505050565b610df4806100f96000396000f3fe6080604052600436106100ec5760003560e01c80638456cb591161008a578063ad47494c11610059578063ad47494c14610257578063dd8d74d814610285578063f2fde38b146102a5578063fc7e286d146102c557600080fd5b80638456cb59146101c95780638da5cb5b146101de578063923c235b146101fc578063a7ecd37e1461023757600080fd5b80633f4ba83a116100c65780633f4ba83a1461016c5780634fbcd6d5146101815780635c975abb14610189578063715018a6146101b457600080fd5b8063238ac933146100f85780632f2c2d5d146101355780633ccfd60b1461015757600080fd5b366100f357005b600080fd5b34801561010457600080fd5b50600154610118906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014157600080fd5b50610155610150366004610b93565b6102f2565b005b34801561016357600080fd5b5061015561045d565b34801561017857600080fd5b506101556104b4565b6101556104c6565b34801561019557600080fd5b50600054600160a01b900460ff165b604051901515815260200161012c565b3480156101c057600080fd5b5061015561056d565b3480156101d557600080fd5b5061015561057f565b3480156101ea57600080fd5b506000546001600160a01b0316610118565b34801561020857600080fd5b506101a4610217366004610c2e565b805160208183018101805160038252928201919093012091525460ff1681565b34801561024357600080fd5b50610155610252366004610c87565b61058f565b34801561026357600080fd5b50610277610272366004610ca2565b6105b9565b60405190815260200161012c565b34801561029157600080fd5b506101a46102a0366004610cf9565b6105f2565b3480156102b157600080fd5b506101556102c0366004610c87565b610616565b3480156102d157600080fd5b506102776102e0366004610c87565b60026020526000908152604090205481565b6102fa61068f565b6103446103088533866105b9565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105f292505050565b6103955760405162461bcd60e51b815260206004820152601760248201527f4e6f7420616c6c6f77656420746f20776974686472617700000000000000000060448201526064015b60405180910390fd5b336000908152600260205260409020546103f15760405162461bcd60e51b815260206004820152601b60248201527f596f7520646964206e6f74206465706f73697420616e7468696e670000000000604482015260640161038c565b604051339085156108fc029086906000818181858888f1935050505015801561041e573d6000803e3d6000fd5b50604080518581523360208201527f8353ffcac0876ad14e226d9783c04540bfebf13871e868157d2a391cad98e918910160405180910390a150505050565b6104656106dc565b476104786000546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156104b0573d6000803e3d6000fd5b5050565b6104bc6106dc565b6104c4610736565b565b6000341161050f5760405162461bcd60e51b815260206004820152601660248201527553656e642076616c69642065746820616d6f756e742160501b604482015260640161038c565b3360008181526002602052604090819020349081905590517f4bcc17093cdf51079c755de089be5a85e70fa374ec656c194480fbdcda224a53926105639282526001600160a01b0316602082015260400190565b60405180910390a1565b6105756106dc565b6104c46000610786565b6105876106dc565b6104c46107d6565b6105976106dc565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000808484846040516020016105d193929190610d54565b60408051808303601f19018152919052805160209091012095945050505050565b60006105fe8383610819565b6001546001600160a01b039182169116149392505050565b61061e6106dc565b6001600160a01b0381166106835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161038c565b61068c81610786565b50565b600054600160a01b900460ff16156104c45760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161038c565b6000546001600160a01b031633146104c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161038c565b61073e61083d565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610563565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107de61068f565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861076e3390565b6000806000610828858561088d565b91509150610835816108d2565b509392505050565b600054600160a01b900460ff166104c45760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161038c565b60008082516041036108c35760208301516040840151606085015160001a6108b787828585610a1c565b945094505050506108cb565b506000905060025b9250929050565b60008160048111156108e6576108e6610da8565b036108ee5750565b600181600481111561090257610902610da8565b0361094f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161038c565b600281600481111561096357610963610da8565b036109b05760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161038c565b60038160048111156109c4576109c4610da8565b0361068c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161038c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610a535750600090506003610ad7565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610aa7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ad057600060019250925050610ad7565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610b1157610b11610ae0565b604051601f8501601f19908116603f01168101908282118183101715610b3957610b39610ae0565b81604052809350858152868686011115610b5257600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610b7d57600080fd5b610b8c83833560208501610af6565b9392505050565b60008060008060608587031215610ba957600080fd5b84359350602085013567ffffffffffffffff80821115610bc857600080fd5b610bd488838901610b6c565b94506040870135915080821115610bea57600080fd5b818701915087601f830112610bfe57600080fd5b813581811115610c0d57600080fd5b886020828501011115610c1f57600080fd5b95989497505060200194505050565b600060208284031215610c4057600080fd5b813567ffffffffffffffff811115610c5757600080fd5b610c6384828501610b6c565b949350505050565b80356001600160a01b0381168114610c8257600080fd5b919050565b600060208284031215610c9957600080fd5b610b8c82610c6b565b600080600060608486031215610cb757600080fd5b83359250610cc760208501610c6b565b9150604084013567ffffffffffffffff811115610ce357600080fd5b610cef86828701610b6c565b9150509250925092565b60008060408385031215610d0c57600080fd5b82359150602083013567ffffffffffffffff811115610d2a57600080fd5b8301601f81018513610d3b57600080fd5b610d4a85823560208401610af6565b9150509250929050565b838152600060206bffffffffffffffffffffffff198560601b1681840152835160005b81811015610d9357858101830151858201603401528201610d77565b50600093016034019283525090949350505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220789ddee04bc0915f2f2d074c934d2086e36a874000fcc36ccc5005281471221a64736f6c63430008130033000000000000000000000000d0752969cbf11572d53bc0373390fbe71e6bd36c
Deployed Bytecode
0x6080604052600436106100ec5760003560e01c80638456cb591161008a578063ad47494c11610059578063ad47494c14610257578063dd8d74d814610285578063f2fde38b146102a5578063fc7e286d146102c557600080fd5b80638456cb59146101c95780638da5cb5b146101de578063923c235b146101fc578063a7ecd37e1461023757600080fd5b80633f4ba83a116100c65780633f4ba83a1461016c5780634fbcd6d5146101815780635c975abb14610189578063715018a6146101b457600080fd5b8063238ac933146100f85780632f2c2d5d146101355780633ccfd60b1461015757600080fd5b366100f357005b600080fd5b34801561010457600080fd5b50600154610118906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014157600080fd5b50610155610150366004610b93565b6102f2565b005b34801561016357600080fd5b5061015561045d565b34801561017857600080fd5b506101556104b4565b6101556104c6565b34801561019557600080fd5b50600054600160a01b900460ff165b604051901515815260200161012c565b3480156101c057600080fd5b5061015561056d565b3480156101d557600080fd5b5061015561057f565b3480156101ea57600080fd5b506000546001600160a01b0316610118565b34801561020857600080fd5b506101a4610217366004610c2e565b805160208183018101805160038252928201919093012091525460ff1681565b34801561024357600080fd5b50610155610252366004610c87565b61058f565b34801561026357600080fd5b50610277610272366004610ca2565b6105b9565b60405190815260200161012c565b34801561029157600080fd5b506101a46102a0366004610cf9565b6105f2565b3480156102b157600080fd5b506101556102c0366004610c87565b610616565b3480156102d157600080fd5b506102776102e0366004610c87565b60026020526000908152604090205481565b6102fa61068f565b6103446103088533866105b9565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105f292505050565b6103955760405162461bcd60e51b815260206004820152601760248201527f4e6f7420616c6c6f77656420746f20776974686472617700000000000000000060448201526064015b60405180910390fd5b336000908152600260205260409020546103f15760405162461bcd60e51b815260206004820152601b60248201527f596f7520646964206e6f74206465706f73697420616e7468696e670000000000604482015260640161038c565b604051339085156108fc029086906000818181858888f1935050505015801561041e573d6000803e3d6000fd5b50604080518581523360208201527f8353ffcac0876ad14e226d9783c04540bfebf13871e868157d2a391cad98e918910160405180910390a150505050565b6104656106dc565b476104786000546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156104b0573d6000803e3d6000fd5b5050565b6104bc6106dc565b6104c4610736565b565b6000341161050f5760405162461bcd60e51b815260206004820152601660248201527553656e642076616c69642065746820616d6f756e742160501b604482015260640161038c565b3360008181526002602052604090819020349081905590517f4bcc17093cdf51079c755de089be5a85e70fa374ec656c194480fbdcda224a53926105639282526001600160a01b0316602082015260400190565b60405180910390a1565b6105756106dc565b6104c46000610786565b6105876106dc565b6104c46107d6565b6105976106dc565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000808484846040516020016105d193929190610d54565b60408051808303601f19018152919052805160209091012095945050505050565b60006105fe8383610819565b6001546001600160a01b039182169116149392505050565b61061e6106dc565b6001600160a01b0381166106835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161038c565b61068c81610786565b50565b600054600160a01b900460ff16156104c45760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161038c565b6000546001600160a01b031633146104c45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161038c565b61073e61083d565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610563565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107de61068f565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861076e3390565b6000806000610828858561088d565b91509150610835816108d2565b509392505050565b600054600160a01b900460ff166104c45760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161038c565b60008082516041036108c35760208301516040840151606085015160001a6108b787828585610a1c565b945094505050506108cb565b506000905060025b9250929050565b60008160048111156108e6576108e6610da8565b036108ee5750565b600181600481111561090257610902610da8565b0361094f5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161038c565b600281600481111561096357610963610da8565b036109b05760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161038c565b60038160048111156109c4576109c4610da8565b0361068c5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161038c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610a535750600090506003610ad7565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015610aa7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610ad057600060019250925050610ad7565b9150600090505b94509492505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610b1157610b11610ae0565b604051601f8501601f19908116603f01168101908282118183101715610b3957610b39610ae0565b81604052809350858152868686011115610b5257600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112610b7d57600080fd5b610b8c83833560208501610af6565b9392505050565b60008060008060608587031215610ba957600080fd5b84359350602085013567ffffffffffffffff80821115610bc857600080fd5b610bd488838901610b6c565b94506040870135915080821115610bea57600080fd5b818701915087601f830112610bfe57600080fd5b813581811115610c0d57600080fd5b886020828501011115610c1f57600080fd5b95989497505060200194505050565b600060208284031215610c4057600080fd5b813567ffffffffffffffff811115610c5757600080fd5b610c6384828501610b6c565b949350505050565b80356001600160a01b0381168114610c8257600080fd5b919050565b600060208284031215610c9957600080fd5b610b8c82610c6b565b600080600060608486031215610cb757600080fd5b83359250610cc760208501610c6b565b9150604084013567ffffffffffffffff811115610ce357600080fd5b610cef86828701610b6c565b9150509250925092565b60008060408385031215610d0c57600080fd5b82359150602083013567ffffffffffffffff811115610d2a57600080fd5b8301601f81018513610d3b57600080fd5b610d4a85823560208401610af6565b9150509250929050565b838152600060206bffffffffffffffffffffffff198560601b1681840152835160005b81811015610d9357858101830151858201603401528201610d77565b50600093016034019283525090949350505050565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220789ddee04bc0915f2f2d074c934d2086e36a874000fcc36ccc5005281471221a64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d0752969cbf11572d53bc0373390fbe71e6bd36c
-----Decoded View---------------
Arg [0] : _signer (address): 0xD0752969CBf11572d53bc0373390FBE71e6Bd36C
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d0752969cbf11572d53bc0373390fbe71e6bd36c
Deployed Bytecode Sourcemap
30306:1961:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30352:21;;;;;;;;;;-1:-1:-1;30352:21:0;;;;-1:-1:-1;;;;;30352:21:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;30352:21:0;;;;;;;;31489:524;;;;;;;;;;-1:-1:-1;31489:524:0;;;;;:::i;:::-;;:::i;:::-;;32122:142;;;;;;;;;;;;;:::i;30760:65::-;;;;;;;;;;;;;:::i;31286:195::-;;;:::i;29261:86::-;;;;;;;;;;-1:-1:-1;29308:4:0;29332:7;-1:-1:-1;;;29332:7:0;;;;29261:86;;;2247:14:1;;2240:22;2222:41;;2210:2;2195:18;29261:86:0;2082:187:1;26771:103:0;;;;;;;;;;;;;:::i;30691:61::-;;;;;;;;;;;;;:::i;26123:87::-;;;;;;;;;;-1:-1:-1;26169:7:0;26196:6;-1:-1:-1;;;;;26196:6:0;26123:87;;30432:40;;;;;;;;;;-1:-1:-1;30432:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32021:93;;;;;;;;;;-1:-1:-1;32021:93:0;;;;;:::i;:::-;;:::i;30833:253::-;;;;;;;;;;-1:-1:-1;30833:253:0;;;;;:::i;:::-;;:::i;:::-;;;3585:25:1;;;3573:2;3558:18;30833:253:0;3439:177:1;31094:184:0;;;;;;;;;;-1:-1:-1;31094:184:0;;;;;:::i;:::-;;:::i;27029:201::-;;;;;;;;;;-1:-1:-1;27029:201:0;;;;;:::i;:::-;;:::i;30382:43::-;;;;;;;;;;-1:-1:-1;30382:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;31489:524;28866:19;:17;:19::i;:::-;31666:120:::1;31696:47;31717:6;31725:10;31737:5;31696:20;:47::i;:::-;31762:9;;31666:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31666:11:0::1;::::0;-1:-1:-1;;;31666:120:0:i:1;:::-;31644:193;;;::::0;-1:-1:-1;;;31644:193:0;;4528:2:1;31644:193:0::1;::::0;::::1;4510:21:1::0;4567:2;4547:18;;;4540:30;4606:25;4586:18;;;4579:53;4649:18;;31644:193:0::1;;;;;;;;;31867:10;31881:1;31858:20:::0;;;:8:::1;:20;::::0;;;;;31850:64:::1;;;::::0;-1:-1:-1;;;31850:64:0;;4880:2:1;31850:64:0::1;::::0;::::1;4862:21:1::0;4919:2;4899:18;;;4892:30;4958:29;4938:18;;;4931:57;5005:18;;31850:64:0::1;4678:351:1::0;31850:64:0::1;31925:36;::::0;31933:10:::1;::::0;31925:36;::::1;;;::::0;31954:6;;31925:36:::1;::::0;;;31954:6;31933:10;31925:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;31977:28:0::1;::::0;;5208:25:1;;;31994:10:0::1;5264:2:1::0;5249:18;;5242:60;31977:28:0::1;::::0;5181:18:1;31977:28:0::1;;;;;;;31489:524:::0;;;;:::o;32122:142::-;26009:13;:11;:13::i;:::-;32190:21:::1;32230:7;26169::::0;26196:6;-1:-1:-1;;;;;26196:6:0;;26123:87;32230:7:::1;-1:-1:-1::0;;;;;32222:25:0::1;:34;32248:7;32222:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32161:103;32122:142::o:0;30760:65::-;26009:13;:11;:13::i;:::-;30807:10:::1;:8;:10::i;:::-;30760:65::o:0;31286:195::-;31356:1;31344:9;:13;31336:48;;;;-1:-1:-1;;;31336:48:0;;5515:2:1;31336:48:0;;;5497:21:1;5554:2;5534:18;;;5527:30;-1:-1:-1;;;5573:18:1;;;5566:52;5635:18;;31336:48:0;5313:346:1;31336:48:0;31404:10;31395:20;;;;:8;:20;;;;;;;31418:9;31395:32;;;;31443:30;;;;;;5208:25:1;;-1:-1:-1;;;;;5269:32:1;5264:2;5249:18;;5242:60;5196:2;5181:18;;5034:274;31443:30:0;;;;;;;;31286:195::o;26771:103::-;26009:13;:11;:13::i;:::-;26836:30:::1;26863:1;26836:18;:30::i;30691:61::-:0;26009:13;:11;:13::i;:::-;30736:8:::1;:6;:8::i;32021:93::-:0;26009:13;:11;:13::i;:::-;32090:6:::1;:16:::0;;-1:-1:-1;;;;;;32090:16:0::1;-1:-1:-1::0;;;;;32090:16:0;;;::::1;::::0;;;::::1;::::0;;32021:93::o;30833:253::-;30971:7;30991:12;31033:6;31041;31049:5;31016:39;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;31016:39:0;;;;;;31006:50;;31016:39;31006:50;;;;;30833:253;-1:-1:-1;;;;;30833:253:0:o;31094:184::-;31201:4;31240:30;31254:4;31260:9;31240:13;:30::i;:::-;31230:6;;-1:-1:-1;;;;;31230:40:0;;;:6;;:40;;31094:184;-1:-1:-1;;;31094:184:0:o;27029:201::-;26009:13;:11;:13::i;:::-;-1:-1:-1;;;;;27118:22:0;::::1;27110:73;;;::::0;-1:-1:-1;;;27110:73:0;;6488:2:1;27110:73:0::1;::::0;::::1;6470:21:1::0;6527:2;6507:18;;;6500:30;6566:34;6546:18;;;6539:62;-1:-1:-1;;;6617:18:1;;;6610:36;6663:19;;27110:73:0::1;6286:402:1::0;27110:73:0::1;27194:28;27213:8;27194:18;:28::i;:::-;27029:201:::0;:::o;29420:108::-;29308:4;29332:7;-1:-1:-1;;;29332:7:0;;;;29490:9;29482:38;;;;-1:-1:-1;;;29482:38:0;;6895:2:1;29482:38:0;;;6877:21:1;6934:2;6914:18;;;6907:30;-1:-1:-1;;;6953:18:1;;;6946:46;7009:18;;29482:38:0;6693:340:1;26288:132:0;26169:7;26196:6;-1:-1:-1;;;;;26196:6:0;24754:10;26352:23;26344:68;;;;-1:-1:-1;;;26344:68:0;;7240:2:1;26344:68:0;;;7222:21:1;;;7259:18;;;7252:30;7318:34;7298:18;;;7291:62;7370:18;;26344:68:0;7038:356:1;30116:120:0;29125:16;:14;:16::i;:::-;30185:5:::1;30175:15:::0;;-1:-1:-1;;;;30175:15:0::1;::::0;;30206:22:::1;24754:10:::0;30215:12:::1;30206:22;::::0;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;30206:22:0::1;14:203:1::0;27390:191:0;27464:16;27483:6;;-1:-1:-1;;;;;27500:17:0;;;-1:-1:-1;;;;;;27500:17:0;;;;;;27533:40;;27483:6;;;;;;;27533:40;;27464:16;27533:40;27453:128;27390:191;:::o;29857:118::-;28866:19;:17;:19::i;:::-;29917:7:::1;:14:::0;;-1:-1:-1;;;;29917:14:0::1;-1:-1:-1::0;;;29917:14:0::1;::::0;;29947:20:::1;29954:12;24754:10:::0;;24674:98;18990:231;19068:7;19089:17;19108:18;19130:27;19141:4;19147:9;19130:10;:27::i;:::-;19088:69;;;;19168:18;19180:5;19168:11;:18::i;:::-;-1:-1:-1;19204:9:0;18990:231;-1:-1:-1;;;18990:231:0:o;29605:108::-;29308:4;29332:7;-1:-1:-1;;;29332:7:0;;;;29664:41;;;;-1:-1:-1;;;29664:41:0;;7601:2:1;29664:41:0;;;7583:21:1;7640:2;7620:18;;;7613:30;-1:-1:-1;;;7659:18:1;;;7652:50;7719:18;;29664:41:0;7399:344:1;17441:747:0;17522:7;17531:12;17560:9;:16;17580:2;17560:22;17556:625;;17904:4;17889:20;;17883:27;17954:4;17939:20;;17933:27;18012:4;17997:20;;17991:27;17599:9;17983:36;18055:25;18066:4;17983:36;17883:27;17933;18055:10;:25::i;:::-;18048:32;;;;;;;;;17556:625;-1:-1:-1;18129:1:0;;-1:-1:-1;18133:35:0;17556:625;17441:747;;;;;:::o;15834:521::-;15912:20;15903:5;:29;;;;;;;;:::i;:::-;;15899:449;;15834:521;:::o;15899:449::-;16010:29;16001:5;:38;;;;;;;;:::i;:::-;;15997:351;;16056:34;;-1:-1:-1;;;16056:34:0;;8082:2:1;16056:34:0;;;8064:21:1;8121:2;8101:18;;;8094:30;8160:26;8140:18;;;8133:54;8204:18;;16056:34:0;7880:348:1;15997:351:0;16121:35;16112:5;:44;;;;;;;;:::i;:::-;;16108:240;;16173:41;;-1:-1:-1;;;16173:41:0;;8435:2:1;16173:41:0;;;8417:21:1;8474:2;8454:18;;;8447:30;8513:33;8493:18;;;8486:61;8564:18;;16173:41:0;8233:355:1;16108:240:0;16245:30;16236:5;:39;;;;;;;;:::i;:::-;;16232:116;;16292:44;;-1:-1:-1;;;16292:44:0;;8795:2:1;16292:44:0;;;8777:21:1;8834:2;8814:18;;;8807:30;8873:34;8853:18;;;8846:62;-1:-1:-1;;;8924:18:1;;;8917:32;8966:19;;16292:44:0;8593:398:1;20442:1520:0;20573:7;;21507:66;21494:79;;21490:163;;;-1:-1:-1;21606:1:0;;-1:-1:-1;21610:30:0;21590:51;;21490:163;21767:24;;;21750:14;21767:24;;;;;;;;;9223:25:1;;;9296:4;9284:17;;9264:18;;;9257:45;;;;9318:18;;;9311:34;;;9361:18;;;9354:34;;;21767:24:0;;9195:19:1;;21767:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21767:24:0;;-1:-1:-1;;21767:24:0;;;-1:-1:-1;;;;;;;21806:20:0;;21802:103;;21859:1;21863:29;21843:50;;;;;;;21802:103;21925:6;-1:-1:-1;21933:20:0;;-1:-1:-1;20442:1520:0;;;;;;;;:::o;222:127:1:-;283:10;278:3;274:20;271:1;264:31;314:4;311:1;304:15;338:4;335:1;328:15;354:632;419:5;449:18;490:2;482:6;479:14;476:40;;;496:18;;:::i;:::-;571:2;565:9;539:2;625:15;;-1:-1:-1;;621:24:1;;;647:2;617:33;613:42;601:55;;;671:18;;;691:22;;;668:46;665:72;;;717:18;;:::i;:::-;757:10;753:2;746:22;786:6;777:15;;816:6;808;801:22;856:3;847:6;842:3;838:16;835:25;832:45;;;873:1;870;863:12;832:45;923:6;918:3;911:4;903:6;899:17;886:44;978:1;971:4;962:6;954;950:19;946:30;939:41;;;;354:632;;;;;:::o;991:222::-;1034:5;1087:3;1080:4;1072:6;1068:17;1064:27;1054:55;;1105:1;1102;1095:12;1054:55;1127:80;1203:3;1194:6;1181:20;1174:4;1166:6;1162:17;1127:80;:::i;:::-;1118:89;991:222;-1:-1:-1;;;991:222:1:o;1218:859::-;1316:6;1324;1332;1340;1393:2;1381:9;1372:7;1368:23;1364:32;1361:52;;;1409:1;1406;1399:12;1361:52;1445:9;1432:23;1422:33;;1506:2;1495:9;1491:18;1478:32;1529:18;1570:2;1562:6;1559:14;1556:34;;;1586:1;1583;1576:12;1556:34;1609:50;1651:7;1642:6;1631:9;1627:22;1609:50;:::i;:::-;1599:60;;1712:2;1701:9;1697:18;1684:32;1668:48;;1741:2;1731:8;1728:16;1725:36;;;1757:1;1754;1747:12;1725:36;1795:8;1784:9;1780:24;1770:34;;1842:7;1835:4;1831:2;1827:13;1823:27;1813:55;;1864:1;1861;1854:12;1813:55;1904:2;1891:16;1930:2;1922:6;1919:14;1916:34;;;1946:1;1943;1936:12;1916:34;1991:7;1986:2;1977:6;1973:2;1969:15;1965:24;1962:37;1959:57;;;2012:1;2009;2002:12;1959:57;1218:859;;;;-1:-1:-1;;2043:2:1;2035:11;;-1:-1:-1;;;1218:859:1:o;2274:322::-;2343:6;2396:2;2384:9;2375:7;2371:23;2367:32;2364:52;;;2412:1;2409;2402:12;2364:52;2452:9;2439:23;2485:18;2477:6;2474:30;2471:50;;;2517:1;2514;2507:12;2471:50;2540;2582:7;2573:6;2562:9;2558:22;2540:50;:::i;:::-;2530:60;2274:322;-1:-1:-1;;;;2274:322:1:o;2601:173::-;2669:20;;-1:-1:-1;;;;;2718:31:1;;2708:42;;2698:70;;2764:1;2761;2754:12;2698:70;2601:173;;;:::o;2779:186::-;2838:6;2891:2;2879:9;2870:7;2866:23;2862:32;2859:52;;;2907:1;2904;2897:12;2859:52;2930:29;2949:9;2930:29;:::i;2970:464::-;3057:6;3065;3073;3126:2;3114:9;3105:7;3101:23;3097:32;3094:52;;;3142:1;3139;3132:12;3094:52;3178:9;3165:23;3155:33;;3207:38;3241:2;3230:9;3226:18;3207:38;:::i;:::-;3197:48;;3296:2;3285:9;3281:18;3268:32;3323:18;3315:6;3312:30;3309:50;;;3355:1;3352;3345:12;3309:50;3378;3420:7;3411:6;3400:9;3396:22;3378:50;:::i;:::-;3368:60;;;2970:464;;;;;:::o;3621:518::-;3698:6;3706;3759:2;3747:9;3738:7;3734:23;3730:32;3727:52;;;3775:1;3772;3765:12;3727:52;3811:9;3798:23;3788:33;;3872:2;3861:9;3857:18;3844:32;3899:18;3891:6;3888:30;3885:50;;;3931:1;3928;3921:12;3885:50;3954:22;;4007:4;3999:13;;3995:27;-1:-1:-1;3985:55:1;;4036:1;4033;4026:12;3985:55;4059:74;4125:7;4120:2;4107:16;4102:2;4098;4094:11;4059:74;:::i;:::-;4049:84;;;3621:518;;;;;:::o;5664:617::-;5881:6;5876:3;5869:19;5851:3;5907:2;5964:26;5960:31;5951:6;5947:2;5943:15;5939:53;5934:2;5929:3;5925:12;5918:75;6022:6;6016:13;6047:1;6057:134;6071:6;6068:1;6065:13;6057:134;;;6160:14;;;6156:23;;6150:30;6132:11;;;6145:2;6128:20;6121:60;6086:10;;6057:134;;;-1:-1:-1;6255:1:1;6214:16;;6232:2;6210:25;6244:13;;;-1:-1:-1;6210:25:1;;5664:617;-1:-1:-1;;;;5664:617:1:o;7748:127::-;7809:10;7804:3;7800:20;7797:1;7790:31;7840:4;7837:1;7830:15;7864:4;7861:1;7854:15
Swarm Source
ipfs://789ddee04bc0915f2f2d074c934d2086e36a874000fcc36ccc5005281471221a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.