Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 206 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Mint | 19734698 | 675 days ago | IN | 0 ETH | 0.00149569 | ||||
| Mint | 19734497 | 675 days ago | IN | 0 ETH | 0.00165391 | ||||
| Mint | 19729956 | 675 days ago | IN | 0 ETH | 0.00104265 | ||||
| Mint | 19725684 | 676 days ago | IN | 0 ETH | 0.00492904 | ||||
| Mint | 19724321 | 676 days ago | IN | 0 ETH | 0.00139793 | ||||
| Mint | 19723963 | 676 days ago | IN | 0 ETH | 0.00160625 | ||||
| Mint | 19723331 | 676 days ago | IN | 0 ETH | 0.00124063 | ||||
| Mint | 19722034 | 676 days ago | IN | 0 ETH | 0.00176632 | ||||
| Mint | 19722032 | 676 days ago | IN | 0 ETH | 0.00182253 | ||||
| Mint | 19721770 | 676 days ago | IN | 0 ETH | 0.00101098 | ||||
| Mint | 19721348 | 677 days ago | IN | 0 ETH | 0.001129 | ||||
| Mint | 19721033 | 677 days ago | IN | 0 ETH | 0.0019423 | ||||
| Mint | 19720582 | 677 days ago | IN | 0 ETH | 0.00211463 | ||||
| Mint | 19720174 | 677 days ago | IN | 0 ETH | 0.00253301 | ||||
| Mint | 19719813 | 677 days ago | IN | 0 ETH | 0.00250081 | ||||
| Mint | 19719784 | 677 days ago | IN | 0 ETH | 0.00264398 | ||||
| Mint | 19719535 | 677 days ago | IN | 0 ETH | 0.00226414 | ||||
| Mint | 19719397 | 677 days ago | IN | 0 ETH | 0.00220008 | ||||
| Mint | 19718748 | 677 days ago | IN | 0 ETH | 0.00365894 | ||||
| Mint | 19717059 | 677 days ago | IN | 0 ETH | 0.00148629 | ||||
| Mint | 19716983 | 677 days ago | IN | 0 ETH | 0.00145022 | ||||
| Mint | 19716241 | 677 days ago | IN | 0 ETH | 0.00146118 | ||||
| Mint | 19715881 | 677 days ago | IN | 0 ETH | 0.00110739 | ||||
| Mint | 19714974 | 677 days ago | IN | 0 ETH | 0.00105293 | ||||
| Mint | 19714963 | 677 days ago | IN | 0 ETH | 0.00096557 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Coupon
Compiler Version
v0.8.23+commit.f704f362
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import {SignatureChecker} from "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Signatures} from "../utils/Signatures.sol";
interface X0X {
function mint(
address _target,
uint256 _quantity
) external returns (uint256);
}
contract Coupon is Signatures, Ownable {
string public constant MINT_COUPON_MESSAGE_TYPE =
"Message(string minterId,address minterAddress,uint256 validUntil)";
bytes32 public constant MINT_COUPON_MESSAGE_TYPEHASH =
keccak256(abi.encodePacked(MINT_COUPON_MESSAGE_TYPE));
mapping(string minterId => uint256 tokenId) public minterClaimedTokenId;
address public signerAddress;
X0X public x0x;
constructor(address _signerAddress) Ownable(msg.sender) {
signerAddress = _signerAddress;
}
function mint(
string memory _minterId,
address _minterAddress,
uint256 _validUntil,
bytes memory _signature
) public {
require(
isValidCoupon(_minterId, _minterAddress, _validUntil, _signature),
"invalid sig"
);
require(block.timestamp <= _validUntil, "coupon expired");
require(minterClaimedTokenId[_minterId] == 0, "member already claimed");
uint256 tokenId = x0x.mint(_minterAddress, 1);
minterClaimedTokenId[_minterId] = tokenId;
}
function isValidCoupon(
string memory _minterId,
address _minterAddress,
uint256 _validUntil,
bytes memory _signature
) public view returns (bool) {
return
SignatureChecker.isValidSignatureNow(
signerAddress,
hashCouponMessage(_minterId, _minterAddress, _validUntil),
_signature
);
}
function hashCouponMessage(
string memory _minterId,
address _minterAddress,
uint256 _validUntil
) public view returns (bytes32) {
bytes32 message = keccak256(
abi.encode(
MINT_COUPON_MESSAGE_TYPEHASH,
keccak256(abi.encodePacked(_minterId)),
_minterAddress,
_validUntil
)
);
return hashMessage(address(this), message);
}
function setSignerAddress(address _signerAddress) public onlyOwner {
signerAddress = _signerAddress;
}
function setX0XAddress(address _x0xAddress) public onlyOwner {
x0x = X0X(_x0xAddress);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/SignatureChecker.sol)
pragma solidity ^0.8.20;
import {ECDSA} from "./ECDSA.sol";
import {IERC1271} from "../../interfaces/IERC1271.sol";
/**
* @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA
* signatures from externally owned accounts (EOAs) as well as ERC1271 signatures from smart contract wallets like
* Argent and Safe Wallet (previously Gnosis Safe).
*/
library SignatureChecker {
/**
* @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the
* signature is validated against that smart contract using ERC1271, otherwise it's validated using `ECDSA.recover`.
*
* NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus
* change through time. It could return true at block N and false at block N+1 (or the opposite).
*/
function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {
(address recovered, ECDSA.RecoverError error, ) = ECDSA.tryRecover(hash, signature);
return
(error == ECDSA.RecoverError.NoError && recovered == signer) ||
isValidERC1271SignatureNow(signer, hash, signature);
}
/**
* @dev Checks if a signature is valid for a given signer and data hash. The signature is validated
* against the signer smart contract using ERC1271.
*
* NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus
* change through time. It could return true at block N and false at block N+1 (or the opposite).
*/
function isValidERC1271SignatureNow(
address signer,
bytes32 hash,
bytes memory signature
) internal view returns (bool) {
(bool success, bytes memory result) = signer.staticcall(
abi.encodeCall(IERC1271.isValidSignature, (hash, signature))
);
return (success &&
result.length >= 32 &&
abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @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 {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/utils/cryptography/SignatureChecker.sol";
abstract contract Signatures {
string public constant EIP712_DOMAIN =
"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)";
bytes32 public constant EIP712_DOMAIN_TYPEHASH =
keccak256(abi.encodePacked(EIP712_DOMAIN));
function hashMessage(
// string memory messageName,
address _verifyingContract,
bytes32 message
) public view returns (bytes32) {
return
keccak256(
abi.encodePacked(
"\x19\x01",
domainSeparator(_verifyingContract),
message
)
);
}
function domainSeparator(
// string memory messageName,
address _verifyingContract
) public view returns (bytes32) {
return
keccak256(
abi.encode(
EIP712_DOMAIN_TYPEHASH,
keccak256("EIP712 Message"), // string name
keccak256("4"), // string version
block.chainid, // uint256 chainId
_verifyingContract // address verifyingContract
)
);
}
function isValidSignature(
address signer,
bytes32 hash,
bytes memory sig
) external view returns (bool) {
return SignatureChecker.isValidSignatureNow(signer, hash, sig);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)
pragma solidity ^0.8.20;
/**
* @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
}
/**
* @dev The signature derives the `address(0)`.
*/
error ECDSAInvalidSignature();
/**
* @dev The signature has an invalid length.
*/
error ECDSAInvalidSignatureLength(uint256 length);
/**
* @dev The signature has an S value that is in the upper half order.
*/
error ECDSAInvalidSignatureS(bytes32 s);
/**
* @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not
* return address(0) without also returning an error description. Errors are documented using an enum (error type)
* and a bytes32 providing additional information about the error.
*
* If no error is returned, then the address can be used for verification purposes.
*
* The `ecrecover` EVM precompile 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 {MessageHashUtils-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]
*/
function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {
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, bytes32(signature.length));
}
}
/**
* @dev Returns the address that signed a hashed message (`hash`) with
* `signature`. This address can then be used for verification purposes.
*
* The `ecrecover` EVM precompile 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 {MessageHashUtils-toEthSignedMessageHash} on it.
*/
function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
(address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);
_throwError(error, errorArg);
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]
*/
function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {
unchecked {
bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
// We do not check for an overflow here since the shift operation results in 0 or 1.
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.
*/
function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {
(address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);
_throwError(error, errorArg);
return recovered;
}
/**
* @dev Overload of {ECDSA-tryRecover} that receives the `v`,
* `r` and `s` signature fields separately.
*/
function tryRecover(
bytes32 hash,
uint8 v,
bytes32 r,
bytes32 s
) internal pure returns (address, RecoverError, bytes32) {
// 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, s);
}
// 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, bytes32(0));
}
return (signer, RecoverError.NoError, bytes32(0));
}
/**
* @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, bytes32 errorArg) = tryRecover(hash, v, r, s);
_throwError(error, errorArg);
return recovered;
}
/**
* @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.
*/
function _throwError(RecoverError error, bytes32 errorArg) private pure {
if (error == RecoverError.NoError) {
return; // no error: do nothing
} else if (error == RecoverError.InvalidSignature) {
revert ECDSAInvalidSignature();
} else if (error == RecoverError.InvalidSignatureLength) {
revert ECDSAInvalidSignatureLength(uint256(errorArg));
} else if (error == RecoverError.InvalidSignatureS) {
revert ECDSAInvalidSignatureS(errorArg);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC1271 standard signature validation method for
* contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].
*/
interface IERC1271 {
/**
* @dev Should return whether the signature provided is valid for the provided data
* @param hash Hash of the data to be signed
* @param signature Signature byte array associated with _data
*/
function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"remappings": [
"ERC721A/=lib/ERC721A/contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "paris",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_signerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"EIP712_DOMAIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EIP712_DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_COUPON_MESSAGE_TYPE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_COUPON_MESSAGE_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_verifyingContract","type":"address"}],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_minterId","type":"string"},{"internalType":"address","name":"_minterAddress","type":"address"},{"internalType":"uint256","name":"_validUntil","type":"uint256"}],"name":"hashCouponMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_verifyingContract","type":"address"},{"internalType":"bytes32","name":"message","type":"bytes32"}],"name":"hashMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_minterId","type":"string"},{"internalType":"address","name":"_minterAddress","type":"address"},{"internalType":"uint256","name":"_validUntil","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"isValidCoupon","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"isValidSignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_minterId","type":"string"},{"internalType":"address","name":"_minterAddress","type":"address"},{"internalType":"uint256","name":"_validUntil","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"minterId","type":"string"}],"name":"minterClaimedTokenId","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signerAddress","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_x0xAddress","type":"address"}],"name":"setX0XAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","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":"x0x","outputs":[{"internalType":"contract X0X","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50604051610f62380380610f6283398101604081905261002f916100d4565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e81610084565b50600280546001600160a01b0319166001600160a01b0392909216919091179055610104565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100e657600080fd5b81516001600160a01b03811681146100fd57600080fd5b9392505050565b610e4f806101136000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806390135fe4116100a2578063dedfca9a11610071578063dedfca9a14610246578063e0f4e1eb14610259578063e1b11da41461026c578063f2fde38b14610274578063fefd445f1461028757600080fd5b806390135fe4146101eb57806390147f3f146101fe57806395c6e94514610229578063c7977be71461023e57600080fd5b80635d24bdcf116100e95780635d24bdcf146101a4578063715018a6146101b757806371799898146101bf5780637db27953146101d25780638da5cb5b146101da57600080fd5b8063046dc1661461011b578063238a4d1e1461013057806355027b9d146101585780635b7633d014610179575b600080fd5b61012e610129366004610a6f565b61029a565b005b61014361013e366004610b34565b6102c4565b60405190151581526020015b60405180910390f35b61016b610166366004610b8b565b6102d9565b60405190815260200161014f565b60025461018c906001600160a01b031681565b6040516001600160a01b03909116815260200161014f565b61016b6101b2366004610be2565b610395565b61012e6103de565b61012e6101cd366004610a6f565b6103f2565b61016b61041c565b6000546001600160a01b031661018c565b61016b6101f9366004610a6f565b61045e565b61016b61020c366004610c0c565b805160208183018101805160018252928201919093012091525481565b610231610525565b60405161014f9190610c91565b61016b610541565b610143610254366004610ca4565b61056a565b60035461018c906001600160a01b031681565b61023161058e565b61012e610282366004610a6f565b6105aa565b61012e610295366004610ca4565b6105ed565b6102a261077d565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006102d18484846107aa565b949350505050565b600080604051806080016040528060418152602001610dd9604191396040516020016103059190610d22565b604051602081830303815290604052805190602001208560405160200161032c9190610d22565b60408051601f198184030181528282528051602091820120908301939093528101919091526001600160a01b03851660608201526080810184905260a00160405160208183030381529060405280519060200120905061038c3082610395565b95945050505050565b60006103a08361045e565b60405161190160f01b602082015260228101919091526042810183905260620160405160208183030381529060405280519060200120905092915050565b6103e661077d565b6103f0600061080c565b565b6103fa61077d565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b604051806080016040528060418152602001610dd9604191396040516020016104459190610d22565b6040516020818303038152906040528051906020012081565b6000604051806080016040528060528152602001610d87605291396040516020016104899190610d22565b60408051601f198184030181528282528051602091820120908301527fa5c91d37a0ec194e1ef05fed294b16198e52cfea332e21d42a822bac74ba215a908201527f13600b294191fc92924bb3ce4b969c1e7e2bab8f4c93c3fc6d0a51733df3c06060608201524660808201526001600160a01b03831660a082015260c001604051602081830303815290604052805190602001209050919050565b604051806080016040528060418152602001610dd96041913981565b604051806080016040528060528152602001610d87605291396040516020016104459190610d22565b60025460009061038c906001600160a01b03166105888787876102d9565b846107aa565b604051806080016040528060528152602001610d876052913981565b6105b261077d565b6001600160a01b0381166105e157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6105ea8161080c565b50565b6105f98484848461056a565b6106335760405162461bcd60e51b815260206004820152600b60248201526a696e76616c69642073696760a81b60448201526064016105d8565b814211156106745760405162461bcd60e51b815260206004820152600e60248201526d18dbdd5c1bdb88195e1c1a5c995960921b60448201526064016105d8565b6001846040516106849190610d22565b9081526020016040518091039020546000146106db5760405162461bcd60e51b81526020600482015260166024820152751b595b58995c88185b1c9958591e4818db185a5b595960521b60448201526064016105d8565b6003546040516340c10f1960e01b81526001600160a01b0385811660048301526001602483015260009216906340c10f19906044016020604051808303816000875af115801561072f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107539190610d3e565b9050806001866040516107669190610d22565b908152604051908190036020019020555050505050565b6000546001600160a01b031633146103f05760405163118cdaa760e01b81523360048201526024016105d8565b60008060006107b9858561085c565b50909250905060008160038111156107d3576107d3610d57565b1480156107f15750856001600160a01b0316826001600160a01b0316145b8061080257506108028686866108a9565b9695505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600083516041036108965760208401516040850151606086015160001a61088888828585610984565b9550955095505050506108a2565b50508151600091506002905b9250925092565b6000806000856001600160a01b031685856040516024016108cb929190610d6d565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b179052516109009190610d22565b600060405180830381855afa9150503d806000811461093b576040519150601f19603f3d011682016040523d82523d6000602084013e610940565b606091505b509150915081801561095457506020815110155b801561080257508051630b135d3f60e11b906109799083016020908101908401610d3e565b149695505050505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156109bf5750600091506003905082610a49565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610a13573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610a3f57506000925060019150829050610a49565b9250600091508190505b9450945094915050565b80356001600160a01b0381168114610a6a57600080fd5b919050565b600060208284031215610a8157600080fd5b610a8a82610a53565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610ab857600080fd5b813567ffffffffffffffff80821115610ad357610ad3610a91565b604051601f8301601f19908116603f01168101908282118183101715610afb57610afb610a91565b81604052838152866020858801011115610b1457600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610b4957600080fd5b610b5284610a53565b925060208401359150604084013567ffffffffffffffff811115610b7557600080fd5b610b8186828701610aa7565b9150509250925092565b600080600060608486031215610ba057600080fd5b833567ffffffffffffffff811115610bb757600080fd5b610bc386828701610aa7565b935050610bd260208501610a53565b9150604084013590509250925092565b60008060408385031215610bf557600080fd5b610bfe83610a53565b946020939093013593505050565b600060208284031215610c1e57600080fd5b813567ffffffffffffffff811115610c3557600080fd5b6102d184828501610aa7565b60005b83811015610c5c578181015183820152602001610c44565b50506000910152565b60008151808452610c7d816020860160208601610c41565b601f01601f19169290920160200192915050565b602081526000610a8a6020830184610c65565b60008060008060808587031215610cba57600080fd5b843567ffffffffffffffff80821115610cd257600080fd5b610cde88838901610aa7565b9550610cec60208801610a53565b9450604087013593506060870135915080821115610d0957600080fd5b50610d1687828801610aa7565b91505092959194509250565b60008251610d34818460208701610c41565b9190910192915050565b600060208284031215610d5057600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b8281526040602082015260006102d16040830184610c6556fe454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294d65737361676528737472696e67206d696e74657249642c61646472657373206d696e746572416464726573732c75696e743235362076616c6964556e74696c29a2646970667358221220aad2c0768e228f9ce1567317069667f65b2c226013c3f25df72ed30c9cd4dab764736f6c63430008170033000000000000000000000000a577fc3118e86e0538d8a5ff51986189e49f3411
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c806390135fe4116100a2578063dedfca9a11610071578063dedfca9a14610246578063e0f4e1eb14610259578063e1b11da41461026c578063f2fde38b14610274578063fefd445f1461028757600080fd5b806390135fe4146101eb57806390147f3f146101fe57806395c6e94514610229578063c7977be71461023e57600080fd5b80635d24bdcf116100e95780635d24bdcf146101a4578063715018a6146101b757806371799898146101bf5780637db27953146101d25780638da5cb5b146101da57600080fd5b8063046dc1661461011b578063238a4d1e1461013057806355027b9d146101585780635b7633d014610179575b600080fd5b61012e610129366004610a6f565b61029a565b005b61014361013e366004610b34565b6102c4565b60405190151581526020015b60405180910390f35b61016b610166366004610b8b565b6102d9565b60405190815260200161014f565b60025461018c906001600160a01b031681565b6040516001600160a01b03909116815260200161014f565b61016b6101b2366004610be2565b610395565b61012e6103de565b61012e6101cd366004610a6f565b6103f2565b61016b61041c565b6000546001600160a01b031661018c565b61016b6101f9366004610a6f565b61045e565b61016b61020c366004610c0c565b805160208183018101805160018252928201919093012091525481565b610231610525565b60405161014f9190610c91565b61016b610541565b610143610254366004610ca4565b61056a565b60035461018c906001600160a01b031681565b61023161058e565b61012e610282366004610a6f565b6105aa565b61012e610295366004610ca4565b6105ed565b6102a261077d565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006102d18484846107aa565b949350505050565b600080604051806080016040528060418152602001610dd9604191396040516020016103059190610d22565b604051602081830303815290604052805190602001208560405160200161032c9190610d22565b60408051601f198184030181528282528051602091820120908301939093528101919091526001600160a01b03851660608201526080810184905260a00160405160208183030381529060405280519060200120905061038c3082610395565b95945050505050565b60006103a08361045e565b60405161190160f01b602082015260228101919091526042810183905260620160405160208183030381529060405280519060200120905092915050565b6103e661077d565b6103f0600061080c565b565b6103fa61077d565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b604051806080016040528060418152602001610dd9604191396040516020016104459190610d22565b6040516020818303038152906040528051906020012081565b6000604051806080016040528060528152602001610d87605291396040516020016104899190610d22565b60408051601f198184030181528282528051602091820120908301527fa5c91d37a0ec194e1ef05fed294b16198e52cfea332e21d42a822bac74ba215a908201527f13600b294191fc92924bb3ce4b969c1e7e2bab8f4c93c3fc6d0a51733df3c06060608201524660808201526001600160a01b03831660a082015260c001604051602081830303815290604052805190602001209050919050565b604051806080016040528060418152602001610dd96041913981565b604051806080016040528060528152602001610d87605291396040516020016104459190610d22565b60025460009061038c906001600160a01b03166105888787876102d9565b846107aa565b604051806080016040528060528152602001610d876052913981565b6105b261077d565b6001600160a01b0381166105e157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6105ea8161080c565b50565b6105f98484848461056a565b6106335760405162461bcd60e51b815260206004820152600b60248201526a696e76616c69642073696760a81b60448201526064016105d8565b814211156106745760405162461bcd60e51b815260206004820152600e60248201526d18dbdd5c1bdb88195e1c1a5c995960921b60448201526064016105d8565b6001846040516106849190610d22565b9081526020016040518091039020546000146106db5760405162461bcd60e51b81526020600482015260166024820152751b595b58995c88185b1c9958591e4818db185a5b595960521b60448201526064016105d8565b6003546040516340c10f1960e01b81526001600160a01b0385811660048301526001602483015260009216906340c10f19906044016020604051808303816000875af115801561072f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107539190610d3e565b9050806001866040516107669190610d22565b908152604051908190036020019020555050505050565b6000546001600160a01b031633146103f05760405163118cdaa760e01b81523360048201526024016105d8565b60008060006107b9858561085c565b50909250905060008160038111156107d3576107d3610d57565b1480156107f15750856001600160a01b0316826001600160a01b0316145b8061080257506108028686866108a9565b9695505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600083516041036108965760208401516040850151606086015160001a61088888828585610984565b9550955095505050506108a2565b50508151600091506002905b9250925092565b6000806000856001600160a01b031685856040516024016108cb929190610d6d565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b179052516109009190610d22565b600060405180830381855afa9150503d806000811461093b576040519150601f19603f3d011682016040523d82523d6000602084013e610940565b606091505b509150915081801561095457506020815110155b801561080257508051630b135d3f60e11b906109799083016020908101908401610d3e565b149695505050505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156109bf5750600091506003905082610a49565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610a13573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610a3f57506000925060019150829050610a49565b9250600091508190505b9450945094915050565b80356001600160a01b0381168114610a6a57600080fd5b919050565b600060208284031215610a8157600080fd5b610a8a82610a53565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610ab857600080fd5b813567ffffffffffffffff80821115610ad357610ad3610a91565b604051601f8301601f19908116603f01168101908282118183101715610afb57610afb610a91565b81604052838152866020858801011115610b1457600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610b4957600080fd5b610b5284610a53565b925060208401359150604084013567ffffffffffffffff811115610b7557600080fd5b610b8186828701610aa7565b9150509250925092565b600080600060608486031215610ba057600080fd5b833567ffffffffffffffff811115610bb757600080fd5b610bc386828701610aa7565b935050610bd260208501610a53565b9150604084013590509250925092565b60008060408385031215610bf557600080fd5b610bfe83610a53565b946020939093013593505050565b600060208284031215610c1e57600080fd5b813567ffffffffffffffff811115610c3557600080fd5b6102d184828501610aa7565b60005b83811015610c5c578181015183820152602001610c44565b50506000910152565b60008151808452610c7d816020860160208601610c41565b601f01601f19169290920160200192915050565b602081526000610a8a6020830184610c65565b60008060008060808587031215610cba57600080fd5b843567ffffffffffffffff80821115610cd257600080fd5b610cde88838901610aa7565b9550610cec60208801610a53565b9450604087013593506060870135915080821115610d0957600080fd5b50610d1687828801610aa7565b91505092959194509250565b60008251610d34818460208701610c41565b9190910192915050565b600060208284031215610d5057600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b8281526040602082015260006102d16040830184610c6556fe454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374294d65737361676528737472696e67206d696e74657249642c61646472657373206d696e746572416464726573732c75696e743235362076616c6964556e74696c29a2646970667358221220aad2c0768e228f9ce1567317069667f65b2c226013c3f25df72ed30c9cd4dab764736f6c63430008170033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a577fc3118e86e0538d8a5ff51986189e49f3411
-----Decoded View---------------
Arg [0] : _signerAddress (address): 0xa577FC3118e86e0538d8a5FF51986189e49f3411
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a577fc3118e86e0538d8a5ff51986189e49f3411
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
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.