Overview
Max Total Supply
10,000,000 JEFE
Holders
19 (0.00%)
Total Transfers
-
Market
Price
-
Onchain Market Cap
-
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
JEFE
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-22 */ // SPDX-License-Identifier: MIT /** WWW.JEFETOKEN.COM JEFE TOKEN JEFE Helping heroes around the world */ pragma solidity 0.8.21; interface IERC20Errors { error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); error ERC20InvalidSender(address sender); error ERC20InvalidReceiver(address receiver); error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); error ERC20InvalidApprover(address approver); error ERC20InvalidSpender(address spender); } interface IERC721Errors { error ERC721InvalidOwner(address owner); error ERC721NonexistentToken(uint256 tokenId); error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); error ERC721InvalidSender(address sender); error ERC721InvalidReceiver(address receiver); error ERC721InsufficientApproval(address operator, uint256 tokenId); error ERC721InvalidApprover(address approver); error ERC721InvalidOperator(address operator); } interface IERC1155Errors { error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); error ERC1155InvalidSender(address sender); error ERC1155InvalidReceiver(address receiver); error ERC1155MissingApprovalForAll(address operator, address owner); error ERC1155InvalidApprover(address approver); error ERC1155InvalidOperator(address operator); error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC5267 { event EIP712DomainChanged(); function eip712Domain() external view returns ( bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions ); } interface IERC20Permit { function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); } 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; } } abstract contract Nonces { error InvalidAccountNonce(address account, uint256 currentNonce); mapping(address account => uint256) private _nonces; function nonces(address owner) public view virtual returns (uint256) { return _nonces[owner]; } function _useNonce(address owner) internal virtual returns (uint256) { unchecked { return _nonces[owner]++; } } function _useCheckedNonce(address owner, uint256 nonce) internal virtual { uint256 current = _useNonce(owner); if (nonce != current) { revert InvalidAccountNonce(owner, current); } } } library Panic { uint256 internal constant GENERIC = 0x00; uint256 internal constant ASSERT = 0x01; uint256 internal constant UNDER_OVERFLOW = 0x11; uint256 internal constant DIVISION_BY_ZERO = 0x12; uint256 internal constant ENUM_CONVERSION_ERROR = 0x21; uint256 internal constant STORAGE_ENCODING_ERROR = 0x22; uint256 internal constant EMPTY_ARRAY_POP = 0x31; uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32; uint256 internal constant RESOURCE_ERROR = 0x41; uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51; function panic(uint256 code) internal pure { assembly ("memory-safe") { mstore(0x00, 0x4e487b71) mstore(0x20, code) revert(0x1c, 0x24) } } } library StorageSlot { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } struct Int256Slot { int256 value; } struct StringSlot { string value; } struct BytesSlot { bytes value; } function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { assembly ("memory-safe") { r.slot := slot } } function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { assembly ("memory-safe") { r.slot := slot } } function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { assembly ("memory-safe") { r.slot := slot } } function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { assembly ("memory-safe") { r.slot := slot } } function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) { assembly ("memory-safe") { r.slot := slot } } function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) { assembly ("memory-safe") { r.slot := slot } } function getStringSlot(string storage store) internal pure returns (StringSlot storage r) { assembly ("memory-safe") { r.slot := store.slot } } function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) { assembly ("memory-safe") { r.slot := slot } } function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) { assembly ("memory-safe") { r.slot := store.slot } } } library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS } error ECDSAInvalidSignature(); error ECDSAInvalidSignatureLength(uint256 length); error ECDSAInvalidSignatureS(bytes32 s); function tryRecover( bytes32 hash, bytes memory signature ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly ("memory-safe") { 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)); } } 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; } function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) { unchecked { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } } 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; } function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address recovered, RecoverError err, bytes32 errArg) { if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS, s); } address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature, bytes32(0)); } return (signer, RecoverError.NoError, bytes32(0)); } 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; } 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); } } } library SafeCast { error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value); error SafeCastOverflowedIntToUint(int256 value); error SafeCastOverflowedIntDowncast(uint8 bits, int256 value); error SafeCastOverflowedUintToInt(uint256 value); function toUint248(uint256 value) internal pure returns (uint248) { if (value > type(uint248).max) { revert SafeCastOverflowedUintDowncast(248, value); } return uint248(value); } function toUint240(uint256 value) internal pure returns (uint240) { if (value > type(uint240).max) { revert SafeCastOverflowedUintDowncast(240, value); } return uint240(value); } function toUint232(uint256 value) internal pure returns (uint232) { if (value > type(uint232).max) { revert SafeCastOverflowedUintDowncast(232, value); } return uint232(value); } function toUint224(uint256 value) internal pure returns (uint224) { if (value > type(uint224).max) { revert SafeCastOverflowedUintDowncast(224, value); } return uint224(value); } function toUint216(uint256 value) internal pure returns (uint216) { if (value > type(uint216).max) { revert SafeCastOverflowedUintDowncast(216, value); } return uint216(value); } function toUint208(uint256 value) internal pure returns (uint208) { if (value > type(uint208).max) { revert SafeCastOverflowedUintDowncast(208, value); } return uint208(value); } function toUint200(uint256 value) internal pure returns (uint200) { if (value > type(uint200).max) { revert SafeCastOverflowedUintDowncast(200, value); } return uint200(value); } function toUint192(uint256 value) internal pure returns (uint192) { if (value > type(uint192).max) { revert SafeCastOverflowedUintDowncast(192, value); } return uint192(value); } function toUint184(uint256 value) internal pure returns (uint184) { if (value > type(uint184).max) { revert SafeCastOverflowedUintDowncast(184, value); } return uint184(value); } function toUint176(uint256 value) internal pure returns (uint176) { if (value > type(uint176).max) { revert SafeCastOverflowedUintDowncast(176, value); } return uint176(value); } function toUint168(uint256 value) internal pure returns (uint168) { if (value > type(uint168).max) { revert SafeCastOverflowedUintDowncast(168, value); } return uint168(value); } function toUint160(uint256 value) internal pure returns (uint160) { if (value > type(uint160).max) { revert SafeCastOverflowedUintDowncast(160, value); } return uint160(value); } function toUint152(uint256 value) internal pure returns (uint152) { if (value > type(uint152).max) { revert SafeCastOverflowedUintDowncast(152, value); } return uint152(value); } function toUint144(uint256 value) internal pure returns (uint144) { if (value > type(uint144).max) { revert SafeCastOverflowedUintDowncast(144, value); } return uint144(value); } function toUint136(uint256 value) internal pure returns (uint136) { if (value > type(uint136).max) { revert SafeCastOverflowedUintDowncast(136, value); } return uint136(value); } function toUint128(uint256 value) internal pure returns (uint128) { if (value > type(uint128).max) { revert SafeCastOverflowedUintDowncast(128, value); } return uint128(value); } function toUint120(uint256 value) internal pure returns (uint120) { if (value > type(uint120).max) { revert SafeCastOverflowedUintDowncast(120, value); } return uint120(value); } function toUint112(uint256 value) internal pure returns (uint112) { if (value > type(uint112).max) { revert SafeCastOverflowedUintDowncast(112, value); } return uint112(value); } function toUint104(uint256 value) internal pure returns (uint104) { if (value > type(uint104).max) { revert SafeCastOverflowedUintDowncast(104, value); } return uint104(value); } function toUint96(uint256 value) internal pure returns (uint96) { if (value > type(uint96).max) { revert SafeCastOverflowedUintDowncast(96, value); } return uint96(value); } function toUint88(uint256 value) internal pure returns (uint88) { if (value > type(uint88).max) { revert SafeCastOverflowedUintDowncast(88, value); } return uint88(value); } function toUint80(uint256 value) internal pure returns (uint80) { if (value > type(uint80).max) { revert SafeCastOverflowedUintDowncast(80, value); } return uint80(value); } function toUint72(uint256 value) internal pure returns (uint72) { if (value > type(uint72).max) { revert SafeCastOverflowedUintDowncast(72, value); } return uint72(value); } function toUint64(uint256 value) internal pure returns (uint64) { if (value > type(uint64).max) { revert SafeCastOverflowedUintDowncast(64, value); } return uint64(value); } function toUint56(uint256 value) internal pure returns (uint56) { if (value > type(uint56).max) { revert SafeCastOverflowedUintDowncast(56, value); } return uint56(value); } function toUint48(uint256 value) internal pure returns (uint48) { if (value > type(uint48).max) { revert SafeCastOverflowedUintDowncast(48, value); } return uint48(value); } function toUint40(uint256 value) internal pure returns (uint40) { if (value > type(uint40).max) { revert SafeCastOverflowedUintDowncast(40, value); } return uint40(value); } function toUint32(uint256 value) internal pure returns (uint32) { if (value > type(uint32).max) { revert SafeCastOverflowedUintDowncast(32, value); } return uint32(value); } function toUint24(uint256 value) internal pure returns (uint24) { if (value > type(uint24).max) { revert SafeCastOverflowedUintDowncast(24, value); } return uint24(value); } function toUint16(uint256 value) internal pure returns (uint16) { if (value > type(uint16).max) { revert SafeCastOverflowedUintDowncast(16, value); } return uint16(value); } function toUint8(uint256 value) internal pure returns (uint8) { if (value > type(uint8).max) { revert SafeCastOverflowedUintDowncast(8, value); } return uint8(value); } function toUint256(int256 value) internal pure returns (uint256) { if (value < 0) { revert SafeCastOverflowedIntToUint(value); } return uint256(value); } function toInt248(int256 value) internal pure returns (int248 downcasted) { downcasted = int248(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(248, value); } } function toInt240(int256 value) internal pure returns (int240 downcasted) { downcasted = int240(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(240, value); } } function toInt232(int256 value) internal pure returns (int232 downcasted) { downcasted = int232(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(232, value); } } function toInt224(int256 value) internal pure returns (int224 downcasted) { downcasted = int224(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(224, value); } } function toInt216(int256 value) internal pure returns (int216 downcasted) { downcasted = int216(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(216, value); } } function toInt208(int256 value) internal pure returns (int208 downcasted) { downcasted = int208(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(208, value); } } function toInt200(int256 value) internal pure returns (int200 downcasted) { downcasted = int200(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(200, value); } } function toInt192(int256 value) internal pure returns (int192 downcasted) { downcasted = int192(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(192, value); } } function toInt184(int256 value) internal pure returns (int184 downcasted) { downcasted = int184(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(184, value); } } function toInt176(int256 value) internal pure returns (int176 downcasted) { downcasted = int176(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(176, value); } } function toInt168(int256 value) internal pure returns (int168 downcasted) { downcasted = int168(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(168, value); } } function toInt160(int256 value) internal pure returns (int160 downcasted) { downcasted = int160(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(160, value); } } function toInt152(int256 value) internal pure returns (int152 downcasted) { downcasted = int152(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(152, value); } } function toInt144(int256 value) internal pure returns (int144 downcasted) { downcasted = int144(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(144, value); } } function toInt136(int256 value) internal pure returns (int136 downcasted) { downcasted = int136(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(136, value); } } function toInt128(int256 value) internal pure returns (int128 downcasted) { downcasted = int128(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(128, value); } } function toInt120(int256 value) internal pure returns (int120 downcasted) { downcasted = int120(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(120, value); } } function toInt112(int256 value) internal pure returns (int112 downcasted) { downcasted = int112(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(112, value); } } function toInt104(int256 value) internal pure returns (int104 downcasted) { downcasted = int104(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(104, value); } } function toInt96(int256 value) internal pure returns (int96 downcasted) { downcasted = int96(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(96, value); } } function toInt88(int256 value) internal pure returns (int88 downcasted) { downcasted = int88(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(88, value); } } function toInt80(int256 value) internal pure returns (int80 downcasted) { downcasted = int80(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(80, value); } } function toInt72(int256 value) internal pure returns (int72 downcasted) { downcasted = int72(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(72, value); } } function toInt64(int256 value) internal pure returns (int64 downcasted) { downcasted = int64(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(64, value); } } function toInt56(int256 value) internal pure returns (int56 downcasted) { downcasted = int56(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(56, value); } } function toInt48(int256 value) internal pure returns (int48 downcasted) { downcasted = int48(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(48, value); } } function toInt40(int256 value) internal pure returns (int40 downcasted) { downcasted = int40(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(40, value); } } function toInt32(int256 value) internal pure returns (int32 downcasted) { downcasted = int32(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(32, value); } } function toInt24(int256 value) internal pure returns (int24 downcasted) { downcasted = int24(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(24, value); } } function toInt16(int256 value) internal pure returns (int16 downcasted) { downcasted = int16(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(16, value); } } function toInt8(int256 value) internal pure returns (int8 downcasted) { downcasted = int8(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(8, value); } } function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive if (value > uint256(type(int256).max)) { revert SafeCastOverflowedUintToInt(value); } return int256(value); } function toUint(bool b) internal pure returns (uint256 u) { assembly ("memory-safe") { u := iszero(iszero(b)) } } } abstract contract Ownable is Context { address private _owner; error OwnableUnauthorizedAccount(address account); error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol) interface IERC20Metadata is IERC20 { //full data of JEFE TOKEN function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } // lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol // OpenZeppelin Contracts (last updated v5.1.0) (utils/ShortStrings.sol) // | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | // | length | 0x BB | type ShortString is bytes32; library ShortStrings { // Used as an identifier for strings longer than 31 bytes. bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF; error StringTooLong(string str); error InvalidShortString(); function toShortString(string memory str) internal pure returns (ShortString) { bytes memory bstr = bytes(str); if (bstr.length > 31) { revert StringTooLong(str); } return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length)); } function toString(ShortString sstr) internal pure returns (string memory) { uint256 len = byteLength(sstr); string memory str = new string(32); assembly ("memory-safe") { mstore(str, len) mstore(add(str, 0x20), sstr) } return str; } function byteLength(ShortString sstr) internal pure returns (uint256) { uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF; if (result > 31) { revert InvalidShortString(); } return result; } function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) { if (bytes(value).length < 32) { return toShortString(value); } else { StorageSlot.getStringSlot(store).value = value; return ShortString.wrap(FALLBACK_SENTINEL); } } function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) { if (ShortString.unwrap(value) != FALLBACK_SENTINEL) { return toString(value); } else { return store; } } function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) { if (ShortString.unwrap(value) != FALLBACK_SENTINEL) { return byteLength(value); } else { return bytes(store).length; } } } library SignedMath { function ternary(bool condition, int256 a, int256 b) internal pure returns (int256) { unchecked { return b ^ ((a ^ b) * int256(SafeCast.toUint(condition))); } } function max(int256 a, int256 b) internal pure returns (int256) { return ternary(a > b, a, b); } function min(int256 a, int256 b) internal pure returns (int256) { return ternary(a < b, a, b); } function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } function abs(int256 n) internal pure returns (uint256) { unchecked { int256 mask = n >> 255; // A `bytes32(0)` mask leaves the input unchanged, while a `~bytes32(0)` mask complements it. return uint256((n + mask) ^ mask); } } } library Math { enum Rounding { Floor, // Toward negative infinity Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero } function tryAdd(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool success, uint256 result) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function ternary(bool condition, uint256 a, uint256 b) internal pure returns (uint256) { unchecked { // branchless ternary works because: // b ^ (a ^ b) == a // b ^ 0 == b return b ^ ((a ^ b) * SafeCast.toUint(condition)); } } function max(uint256 a, uint256 b) internal pure returns (uint256) { return ternary(a > b, a, b); } function min(uint256 a, uint256 b) internal pure returns (uint256) { return ternary(a < b, a, b); } function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { if (b == 0) { Panic.panic(Panic.DIVISION_BY_ZERO); } unchecked { return SafeCast.toUint(a > 0) * ((a - 1) / b + 1); } } function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { uint256 prod0 = x * y; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2²⁵⁶. Also prevents denominator == 0. if (denominator <= prod1) { Panic.panic(ternary(denominator == 0, Panic.DIVISION_BY_ZERO, Panic.UNDER_OVERFLOW)); } 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) } uint256 twos = denominator & (0 - denominator); assembly { denominator := div(denominator, twos) prod0 := div(prod0, twos) twos := add(div(sub(0, twos), twos), 1) } prod0 |= prod1 * twos; uint256 inverse = (3 * denominator) ^ 2; inverse *= 2 - denominator * inverse; // inverse mod 2⁸ inverse *= 2 - denominator * inverse; // inverse mod 2¹⁶ inverse *= 2 - denominator * inverse; // inverse mod 2³² inverse *= 2 - denominator * inverse; // inverse mod 2⁶⁴ inverse *= 2 - denominator * inverse; // inverse mod 2¹²⁸ inverse *= 2 - denominator * inverse; // inverse mod 2²⁵⁶ result = prod0 * inverse; return result; } } function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { return mulDiv(x, y, denominator) + SafeCast.toUint(unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0); } function invMod(uint256 a, uint256 n) internal pure returns (uint256) { unchecked { if (n == 0) return 0; uint256 remainder = a % n; uint256 gcd = n; int256 x = 0; int256 y = 1; while (remainder != 0) { uint256 quotient = gcd / remainder; (gcd, remainder) = ( remainder, gcd - remainder * quotient ); (x, y) = ( y, x - y * int256(quotient) ); } if (gcd != 1) return 0; // No inverse exists. return ternary(x < 0, n - uint256(-x), uint256(x)); // Wrap the result if it's negative. } } function invModPrime(uint256 a, uint256 p) internal view returns (uint256) { unchecked { return Math.modExp(a, p - 2, p); } } function modExp(uint256 b, uint256 e, uint256 m) internal view returns (uint256) { (bool success, uint256 result) = tryModExp(b, e, m); if (!success) { Panic.panic(Panic.DIVISION_BY_ZERO); } return result; } function tryModExp(uint256 b, uint256 e, uint256 m) internal view returns (bool success, uint256 result) { if (m == 0) return (false, 0); assembly ("memory-safe") { let ptr := mload(0x40) mstore(ptr, 0x20) mstore(add(ptr, 0x20), 0x20) mstore(add(ptr, 0x40), 0x20) mstore(add(ptr, 0x60), b) mstore(add(ptr, 0x80), e) mstore(add(ptr, 0xa0), m) success := staticcall(gas(), 0x05, ptr, 0xc0, 0x00, 0x20) result := mload(0x00) } } function modExp(bytes memory b, bytes memory e, bytes memory m) internal view returns (bytes memory) { (bool success, bytes memory result) = tryModExp(b, e, m); if (!success) { Panic.panic(Panic.DIVISION_BY_ZERO); } return result; } function tryModExp( bytes memory b, bytes memory e, bytes memory m ) internal view returns (bool success, bytes memory result) { if (_zeroBytes(m)) return (false, new bytes(0)); uint256 mLen = m.length; result = abi.encodePacked(b.length, e.length, mLen, b, e, m); assembly ("memory-safe") { let dataPtr := add(result, 0x20) success := staticcall(gas(), 0x05, dataPtr, mload(result), dataPtr, mLen) mstore(result, mLen) mstore(0x40, add(dataPtr, mLen)) } } function _zeroBytes(bytes memory byteArray) private pure returns (bool) { for (uint256 i = 0; i < byteArray.length; ++i) { if (byteArray[i] != 0) { return false; } } return true; } function sqrt(uint256 a) internal pure returns (uint256) { unchecked { if (a <= 1) { return a; } uint256 aa = a; uint256 xn = 1; if (aa >= (1 << 128)) { aa >>= 128; xn <<= 64; } if (aa >= (1 << 64)) { aa >>= 64; xn <<= 32; } if (aa >= (1 << 32)) { aa >>= 32; xn <<= 16; } if (aa >= (1 << 16)) { aa >>= 16; xn <<= 8; } if (aa >= (1 << 8)) { aa >>= 8; xn <<= 4; } if (aa >= (1 << 4)) { aa >>= 4; xn <<= 2; } if (aa >= (1 << 2)) { xn <<= 1; } xn = (xn + a / xn) >> 1; // ε_1 := | x_1 - sqrt(a) | ≤ 2**(e-4.5) -- special case, see above xn = (xn + a / xn) >> 1; // ε_2 := | x_2 - sqrt(a) | ≤ 2**(e-9) -- general case with k = 4.5 xn = (xn + a / xn) >> 1; // ε_3 := | x_3 - sqrt(a) | ≤ 2**(e-18) -- general case with k = 9 xn = (xn + a / xn) >> 1; // ε_4 := | x_4 - sqrt(a) | ≤ 2**(e-36) -- general case with k = 18 xn = (xn + a / xn) >> 1; // ε_5 := | x_5 - sqrt(a) | ≤ 2**(e-72) -- general case with k = 36 xn = (xn + a / xn) >> 1; // ε_6 := | x_6 - sqrt(a) | ≤ 2**(e-144) -- general case with k = 72 return xn - SafeCast.toUint(xn > a / xn); } } function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + SafeCast.toUint(unsignedRoundsUp(rounding) && result * result < a); } } function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; uint256 exp; unchecked { exp = 128 * SafeCast.toUint(value > (1 << 128) - 1); value >>= exp; result += exp; exp = 64 * SafeCast.toUint(value > (1 << 64) - 1); value >>= exp; result += exp; exp = 32 * SafeCast.toUint(value > (1 << 32) - 1); value >>= exp; result += exp; exp = 16 * SafeCast.toUint(value > (1 << 16) - 1); value >>= exp; result += exp; exp = 8 * SafeCast.toUint(value > (1 << 8) - 1); value >>= exp; result += exp; exp = 4 * SafeCast.toUint(value > (1 << 4) - 1); value >>= exp; result += exp; exp = 2 * SafeCast.toUint(value > (1 << 2) - 1); value >>= exp; result += exp; result += SafeCast.toUint(value > 1); } return result; } function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << result < value); } } 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; } function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 10 ** result < value); } } function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; uint256 isGt; unchecked { isGt = SafeCast.toUint(value > (1 << 128) - 1); value >>= isGt * 128; result += isGt * 16; isGt = SafeCast.toUint(value > (1 << 64) - 1); value >>= isGt * 64; result += isGt * 8; isGt = SafeCast.toUint(value > (1 << 32) - 1); value >>= isGt * 32; result += isGt * 4; isGt = SafeCast.toUint(value > (1 << 16) - 1); value >>= isGt * 16; result += isGt * 2; result += SafeCast.toUint(value > (1 << 8) - 1); } return result; } function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + SafeCast.toUint(unsignedRoundsUp(rounding) && 1 << (result << 3) < value); } } function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { return uint8(rounding) % 2 == 1; } } abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 9; } function totalSupply() public view virtual returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { _totalSupply -= value; } } else { unchecked { _balances[to] += value; } } emit Transfer(from, to, value); } function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } library Strings { bytes16 private constant HEX_DIGITS = "0123456789abcdef"; uint8 private constant ADDRESS_LENGTH = 20; error StringsInsufficientHexLength(uint256 value, uint256 length); function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; assembly ("memory-safe") { ptr := add(buffer, add(32, length)) } while (true) { ptr--; assembly ("memory-safe") { mstore8(ptr, byte(mod(value, 10), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } function toStringSigned(int256 value) internal pure returns (string memory) { return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); } function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { uint256 localValue = value; bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = HEX_DIGITS[localValue & 0xf]; localValue >>= 4; } if (localValue != 0) { revert StringsInsufficientHexLength(value, length); } return string(buffer); } function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH); } function toChecksumHexString(address addr) internal pure returns (string memory) { bytes memory buffer = bytes(toHexString(addr)); uint256 hashValue; assembly ("memory-safe") { hashValue := shr(96, keccak256(add(buffer, 0x22), 40)) } for (uint256 i = 41; i > 1; --i) { if (hashValue & 0xf > 7 && uint8(buffer[i]) > 96) { buffer[i] ^= 0x20; } hashValue >>= 4; } return string(buffer); } function equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); } } //No burning allowed library MessageHashUtils { function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) { assembly ("memory-safe") { mstore(0x00, "\x19Signed Message:\n32") // 32 is the bytes-length of messageHash mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20) } } function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) { return keccak256(bytes.concat("\x19Signed Message:\n", bytes(Strings.toString(message.length)), message)); } function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) { return keccak256(abi.encodePacked(hex"19_00", validator, data)); } function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) { assembly ("memory-safe") { let ptr := mload(0x40) mstore(ptr, hex"19_01") mstore(add(ptr, 0x02), domainSeparator) mstore(add(ptr, 0x22), structHash) digest := keccak256(ptr, 0x42) } } } abstract contract EIP712 is IERC5267 { using ShortStrings for *; bytes32 private constant TYPE_HASH = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); bytes32 private immutable _cachedDomainSeparator; uint256 private immutable _cachedChainId; address private immutable _cachedThis; bytes32 private immutable _hashedName; bytes32 private immutable _hashedVersion; ShortString private immutable _name; ShortString private immutable _version; string private _nameFallback; string private _versionFallback; constructor(string memory name, string memory version) { _name = name.toShortStringWithFallback(_nameFallback); _version = version.toShortStringWithFallback(_versionFallback); _hashedName = keccak256(bytes(name)); _hashedVersion = keccak256(bytes(version)); _cachedChainId = block.chainid; _cachedDomainSeparator = _buildDomainSeparator(); _cachedThis = address(this); } function _domainSeparatorV4() internal view returns (bytes32) { if (address(this) == _cachedThis && block.chainid == _cachedChainId) { return _cachedDomainSeparator; } else { return _buildDomainSeparator(); } } function _buildDomainSeparator() private view returns (bytes32) { return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this))); } function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash); } function eip712Domain() public view virtual returns ( bytes1 fields, string memory name, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions ) { return ( hex"0f", // 01111 _EIP712Name(), _EIP712Version(), block.chainid, address(this), bytes32(0), new uint256[](0) ); } function _EIP712Name() internal view returns (string memory) { return _name.toStringWithFallback(_nameFallback); } function _EIP712Version() internal view returns (string memory) { return _version.toStringWithFallback(_versionFallback); } } abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712, Nonces { bytes32 private constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); error ERC2612ExpiredSignature(uint256 deadline); error ERC2612InvalidSigner(address signer, address owner); constructor(string memory name) EIP712(name, "1") {} function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { if (block.timestamp > deadline) { revert ERC2612ExpiredSignature(deadline); } bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline)); bytes32 hash = _hashTypedDataV4(structHash); address signer = ECDSA.recover(hash, v, r, s); if (signer != owner) { revert ERC2612InvalidSigner(signer, owner); } _approve(owner, spender, value); } function nonces(address owner) public view virtual override(IERC20Permit, Nonces) returns (uint256) { return super.nonces(owner); } function DOMAIN_SEPARATOR() external view virtual returns (bytes32) { return _domainSeparatorV4(); } } // Compatible with OpenZeppelin Contracts ^5.0.0 contract JEFE is ERC20, ERC20Permit, Ownable { uint256 public constant MAX_SUPPLY = 10_000_000 * 10 ** 9; // max supply constructor( address initialOwner ) ERC20("JEFE TOKEN", "JEFE") ERC20Permit("JEFE TOKEN") Ownable(initialOwner) { _mint(initialOwner, MAX_SUPPLY); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61016060405234801562000011575f80fd5b506040516200168b3803806200168b833981016040819052620000349162000418565b806040518060400160405280600a8152602001692522a322902a27a5a2a760b11b81525080604051806040016040528060018152602001603160f81b8152506040518060400160405280600a8152602001692522a322902a27a5a2a760b11b815250604051806040016040528060048152602001634a45464560e01b8152508160039081620000c49190620004e7565b506004620000d38282620004e7565b50620000e591508390506005620001e2565b61012052620000f6816006620001e2565b61014052815160208084019190912060e052815190820120610100524660a0526200018360e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506001600160a01b038116620001bc57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b620001c7816200021a565b50620001db81662386f26fc100006200026b565b5062000640565b5f6020835110156200020157620001f983620002a7565b905062000214565b816200020e8482620004e7565b5060ff90505b92915050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038216620002965760405163ec442f0560e01b81525f6004820152602401620001b3565b620002a35f8383620002e9565b5050565b5f80829050601f81511115620002d4578260405163305a27a960e01b8152600401620001b39190620005af565b8051620002e182620005fc565b179392505050565b6001600160a01b03831662000317578060025f8282546200030b919062000620565b90915550620003899050565b6001600160a01b0383165f90815260208190526040902054818110156200036b5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620001b3565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216620003a757600280548290039055620003c5565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200040b91815260200190565b60405180910390a3505050565b5f6020828403121562000429575f80fd5b81516001600160a01b038116811462000440575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200047057607f821691505b6020821081036200048f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620004e2575f81815260208120601f850160051c81016020861015620004bd5750805b601f850160051c820191505b81811015620004de57828155600101620004c9565b5050505b505050565b81516001600160401b0381111562000503576200050362000447565b6200051b816200051484546200045b565b8462000495565b602080601f83116001811462000551575f8415620005395750858301515b5f19600386901b1c1916600185901b178555620004de565b5f85815260208120601f198616915b82811015620005815788860151825594840194600190910190840162000560565b50858210156200059f57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020808352835180828501525f5b81811015620005dc57858101830151858201604001528201620005be565b505f604082860101526040601f19601f8301168501019250505092915050565b805160208083015191908110156200048f575f1960209190910360031b1b16919050565b808201808211156200021457634e487b7160e01b5f52601160045260245ffd5b60805160a05160c05160e051610100516101205161014051610ff9620006925f395f61082e01525f61080101525f61072c01525f61070401525f61065f01525f61068901525f6106b30152610ff95ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c8063715018a61161009e57806395d89b411161006e57806395d89b4114610210578063a9059cbb14610218578063d505accf1461022b578063dd62ed3e1461023e578063f2fde38b14610276575f80fd5b8063715018a6146101bd5780637ecebe00146101c757806384b0196e146101da5780638da5cb5b146101f5575f80fd5b8063313ce567116100d9578063313ce5671461017057806332cb6b0c1461017f5780633644e5151461018d57806370a0823114610195575f80fd5b806306fdde031461010a578063095ea7b31461012857806318160ddd1461014b57806323b872dd1461015d575b5f80fd5b610112610289565b60405161011f9190610d78565b60405180910390f35b61013b610136366004610dac565b610319565b604051901515815260200161011f565b6002545b60405190815260200161011f565b61013b61016b366004610dd4565b610332565b6040516009815260200161011f565b61014f662386f26fc1000081565b61014f610355565b61014f6101a3366004610e0d565b6001600160a01b03165f9081526020819052604090205490565b6101c5610363565b005b61014f6101d5366004610e0d565b610376565b6101e2610393565b60405161011f9796959493929190610e26565b6008546040516001600160a01b03909116815260200161011f565b6101126103d5565b61013b610226366004610dac565b6103e4565b6101c5610239366004610eba565b6103f1565b61014f61024c366004610f27565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6101c5610284366004610e0d565b61052c565b60606003805461029890610f58565b80601f01602080910402602001604051908101604052809291908181526020018280546102c490610f58565b801561030f5780601f106102e65761010080835404028352916020019161030f565b820191905f5260205f20905b8154815290600101906020018083116102f257829003601f168201915b5050505050905090565b5f33610326818585610569565b60019150505b92915050565b5f3361033f85828561057b565b61034a8585856105f6565b506001949350505050565b5f61035e610653565b905090565b61036b61077c565b6103745f6107a9565b565b6001600160a01b0381165f9081526007602052604081205461032c565b5f6060805f805f60606103a46107fa565b6103ac610827565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606004805461029890610f58565b5f336103268185856105f6565b8342111561041a5760405163313c898160e11b8152600481018590526024015b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104658c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6104bf82610854565b90505f6104ce82878787610880565b9050896001600160a01b0316816001600160a01b031614610515576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610411565b6105208a8a8a610569565b50505050505050505050565b61053461077c565b6001600160a01b03811661055d57604051631e4fbdf760e01b81525f6004820152602401610411565b610566816107a9565b50565b61057683838360016108ac565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146105f057818110156105e257604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610411565b6105f084848484035f6108ac565b50505050565b6001600160a01b03831661061f57604051634b637e8f60e11b81525f6004820152602401610411565b6001600160a01b0382166106485760405163ec442f0560e01b81525f6004820152602401610411565b61057683838361097e565b5f306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156106ab57507f000000000000000000000000000000000000000000000000000000000000000046145b156106d557507f000000000000000000000000000000000000000000000000000000000000000090565b61035e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6008546001600160a01b031633146103745760405163118cdaa760e01b8152336004820152602401610411565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606061035e7f00000000000000000000000000000000000000000000000000000000000000006005610aa4565b606061035e7f00000000000000000000000000000000000000000000000000000000000000006006610aa4565b5f61032c610860610653565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f8061089088888888610b4d565b9250925092506108a08282610c15565b50909695505050505050565b6001600160a01b0384166108d55760405163e602df0560e01b81525f6004820152602401610411565b6001600160a01b0383166108fe57604051634a1406b160e11b81525f6004820152602401610411565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156105f057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161097091815260200190565b60405180910390a350505050565b6001600160a01b0383166109a8578060025f82825461099d9190610f90565b90915550610a189050565b6001600160a01b0383165f90815260208190526040902054818110156109fa5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610411565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a3457600280548290039055610a52565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a9791815260200190565b60405180910390a3505050565b606060ff8314610abe57610ab783610cd1565b905061032c565b818054610aca90610f58565b80601f0160208091040260200160405190810160405280929190818152602001828054610af690610f58565b8015610b415780601f10610b1857610100808354040283529160200191610b41565b820191905f5260205f20905b815481529060010190602001808311610b2457829003601f168201915b5050505050905061032c565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610b8657505f91506003905082610c0b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610bd7573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c0257505f925060019150829050610c0b565b92505f91508190505b9450945094915050565b5f826003811115610c2857610c28610faf565b03610c31575050565b6001826003811115610c4557610c45610faf565b03610c635760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610c7757610c77610faf565b03610c985760405163fce698f760e01b815260048101829052602401610411565b6003826003811115610cac57610cac610faf565b03610ccd576040516335e2f38360e21b815260048101829052602401610411565b5050565b60605f610cdd83610d0e565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561032c57604051632cd44ac360e21b815260040160405180910390fd5b5f81518084525f5b81811015610d5957602081850181015186830182015201610d3d565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610d8a6020830184610d35565b9392505050565b80356001600160a01b0381168114610da7575f80fd5b919050565b5f8060408385031215610dbd575f80fd5b610dc683610d91565b946020939093013593505050565b5f805f60608486031215610de6575f80fd5b610def84610d91565b9250610dfd60208501610d91565b9150604084013590509250925092565b5f60208284031215610e1d575f80fd5b610d8a82610d91565b60ff60f81b881681525f602060e081840152610e4560e084018a610d35565b8381036040850152610e57818a610d35565b606085018990526001600160a01b038816608086015260a0850187905284810360c086015285518082528387019250908301905f5b81811015610ea857835183529284019291840191600101610e8c565b50909c9b505050505050505050505050565b5f805f805f805f60e0888a031215610ed0575f80fd5b610ed988610d91565b9650610ee760208901610d91565b95506040880135945060608801359350608088013560ff81168114610f0a575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215610f38575f80fd5b610f4183610d91565b9150610f4f60208401610d91565b90509250929050565b600181811c90821680610f6c57607f821691505b602082108103610f8a57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561032c57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220f0de2ee72934fd6590a802c9eb175bf6af3d871eec4169bb77cbe92fab056ec164736f6c63430008150033000000000000000000000000f7836552f9fefce49f819649ebbd26b354c6fc10
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610106575f3560e01c8063715018a61161009e57806395d89b411161006e57806395d89b4114610210578063a9059cbb14610218578063d505accf1461022b578063dd62ed3e1461023e578063f2fde38b14610276575f80fd5b8063715018a6146101bd5780637ecebe00146101c757806384b0196e146101da5780638da5cb5b146101f5575f80fd5b8063313ce567116100d9578063313ce5671461017057806332cb6b0c1461017f5780633644e5151461018d57806370a0823114610195575f80fd5b806306fdde031461010a578063095ea7b31461012857806318160ddd1461014b57806323b872dd1461015d575b5f80fd5b610112610289565b60405161011f9190610d78565b60405180910390f35b61013b610136366004610dac565b610319565b604051901515815260200161011f565b6002545b60405190815260200161011f565b61013b61016b366004610dd4565b610332565b6040516009815260200161011f565b61014f662386f26fc1000081565b61014f610355565b61014f6101a3366004610e0d565b6001600160a01b03165f9081526020819052604090205490565b6101c5610363565b005b61014f6101d5366004610e0d565b610376565b6101e2610393565b60405161011f9796959493929190610e26565b6008546040516001600160a01b03909116815260200161011f565b6101126103d5565b61013b610226366004610dac565b6103e4565b6101c5610239366004610eba565b6103f1565b61014f61024c366004610f27565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6101c5610284366004610e0d565b61052c565b60606003805461029890610f58565b80601f01602080910402602001604051908101604052809291908181526020018280546102c490610f58565b801561030f5780601f106102e65761010080835404028352916020019161030f565b820191905f5260205f20905b8154815290600101906020018083116102f257829003601f168201915b5050505050905090565b5f33610326818585610569565b60019150505b92915050565b5f3361033f85828561057b565b61034a8585856105f6565b506001949350505050565b5f61035e610653565b905090565b61036b61077c565b6103745f6107a9565b565b6001600160a01b0381165f9081526007602052604081205461032c565b5f6060805f805f60606103a46107fa565b6103ac610827565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b60606004805461029890610f58565b5f336103268185856105f6565b8342111561041a5760405163313c898160e11b8152600481018590526024015b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886104658c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6104bf82610854565b90505f6104ce82878787610880565b9050896001600160a01b0316816001600160a01b031614610515576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610411565b6105208a8a8a610569565b50505050505050505050565b61053461077c565b6001600160a01b03811661055d57604051631e4fbdf760e01b81525f6004820152602401610411565b610566816107a9565b50565b61057683838360016108ac565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f1981146105f057818110156105e257604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610411565b6105f084848484035f6108ac565b50505050565b6001600160a01b03831661061f57604051634b637e8f60e11b81525f6004820152602401610411565b6001600160a01b0382166106485760405163ec442f0560e01b81525f6004820152602401610411565b61057683838361097e565b5f306001600160a01b037f00000000000000000000000070e7f1d907e30efb18fe1dd8a1d75c09a98177d3161480156106ab57507f000000000000000000000000000000000000000000000000000000000000009246145b156106d557507fa974071c67a6964d31db3e60079dc554fd8adbeb93d3ff655bff56a608030d9290565b61035e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f6b6d8a434d02ec021f79d6d3ff49f0797c6a0523fc1eef20ab3790adf1f0e9ff918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b6008546001600160a01b031633146103745760405163118cdaa760e01b8152336004820152602401610411565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606061035e7f4a45464520544f4b454e0000000000000000000000000000000000000000000a6005610aa4565b606061035e7f31000000000000000000000000000000000000000000000000000000000000016006610aa4565b5f61032c610860610653565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f8061089088888888610b4d565b9250925092506108a08282610c15565b50909695505050505050565b6001600160a01b0384166108d55760405163e602df0560e01b81525f6004820152602401610411565b6001600160a01b0383166108fe57604051634a1406b160e11b81525f6004820152602401610411565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156105f057826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161097091815260200190565b60405180910390a350505050565b6001600160a01b0383166109a8578060025f82825461099d9190610f90565b90915550610a189050565b6001600160a01b0383165f90815260208190526040902054818110156109fa5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610411565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610a3457600280548290039055610a52565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a9791815260200190565b60405180910390a3505050565b606060ff8314610abe57610ab783610cd1565b905061032c565b818054610aca90610f58565b80601f0160208091040260200160405190810160405280929190818152602001828054610af690610f58565b8015610b415780601f10610b1857610100808354040283529160200191610b41565b820191905f5260205f20905b815481529060010190602001808311610b2457829003601f168201915b5050505050905061032c565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610b8657505f91506003905082610c0b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610bd7573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610c0257505f925060019150829050610c0b565b92505f91508190505b9450945094915050565b5f826003811115610c2857610c28610faf565b03610c31575050565b6001826003811115610c4557610c45610faf565b03610c635760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610c7757610c77610faf565b03610c985760405163fce698f760e01b815260048101829052602401610411565b6003826003811115610cac57610cac610faf565b03610ccd576040516335e2f38360e21b815260048101829052602401610411565b5050565b60605f610cdd83610d0e565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561032c57604051632cd44ac360e21b815260040160405180910390fd5b5f81518084525f5b81811015610d5957602081850181015186830182015201610d3d565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610d8a6020830184610d35565b9392505050565b80356001600160a01b0381168114610da7575f80fd5b919050565b5f8060408385031215610dbd575f80fd5b610dc683610d91565b946020939093013593505050565b5f805f60608486031215610de6575f80fd5b610def84610d91565b9250610dfd60208501610d91565b9150604084013590509250925092565b5f60208284031215610e1d575f80fd5b610d8a82610d91565b60ff60f81b881681525f602060e081840152610e4560e084018a610d35565b8381036040850152610e57818a610d35565b606085018990526001600160a01b038816608086015260a0850187905284810360c086015285518082528387019250908301905f5b81811015610ea857835183529284019291840191600101610e8c565b50909c9b505050505050505050505050565b5f805f805f805f60e0888a031215610ed0575f80fd5b610ed988610d91565b9650610ee760208901610d91565b95506040880135945060608801359350608088013560ff81168114610f0a575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215610f38575f80fd5b610f4183610d91565b9150610f4f60208401610d91565b90509250929050565b600181811c90821680610f6c57607f821691505b602082108103610f8a57634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561032c57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220f0de2ee72934fd6590a802c9eb175bf6af3d871eec4169bb77cbe92fab056ec164736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f7836552f9fefce49f819649ebbd26b354c6fc10
-----Decoded View---------------
Arg [0] : initialOwner (address): 0xf7836552f9Fefce49f819649ebBd26B354C6fc10
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f7836552f9fefce49f819649ebbd26b354c6fc10
Deployed Bytecode Sourcemap
56852:321:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45152:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46023:190;;;;;;:::i;:::-;;:::i;:::-;;;1269:14:1;;1262:22;1244:41;;1232:2;1217:18;46023:190:0;1104:187:1;45450:99:0;45529:12;;45450:99;;;1442:25:1;;;1430:2;1415:18;45450:99:0;1296:177:1;46221:249:0;;;;;;:::i;:::-;;:::i;45359:83::-;;;45433:1;1953:36:1;;1941:2;1926:18;45359:83:0;1811:184:1;56906:57:0;;56943:20;56906:57;;56679:114;;;:::i;45557:118::-;;;;;;:::i;:::-;-1:-1:-1;;;;;45649:18:0;45622:7;45649:18;;;;;;;;;;;;45557:118;26658:103;;;:::i;:::-;;56526:145;;;;;;:::i;:::-;;:::i;54551:580::-;;;:::i;:::-;;;;;;;;;;;;;:::i;26387:87::-;26460:6;;26387:87;;-1:-1:-1;;;;;26460:6:0;;;3783:51:1;;3771:2;3756:18;26387:87:0;3637:203:1;45251:95:0;;;:::i;45683:182::-;;;;;;:::i;:::-;;:::i;55827:691::-;;;;;;:::i;:::-;;:::i;45873:142::-;;;;;;:::i;:::-;-1:-1:-1;;;;;45980:18:0;;;45953:7;45980:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;45873:142;26769:220;;;;;;:::i;:::-;;:::i;45152:91::-;45197:13;45230:5;45223:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45152:91;:::o;46023:190::-;46096:4;3135:10;46152:31;3135:10;46168:7;46177:5;46152:8;:31::i;:::-;46201:4;46194:11;;;46023:190;;;;;:::o;46221:249::-;46308:4;3135:10;46366:37;46382:4;3135:10;46397:5;46366:15;:37::i;:::-;46414:26;46424:4;46430:2;46434:5;46414:9;:26::i;:::-;-1:-1:-1;46458:4:0;;46221:249;-1:-1:-1;;;;46221:249:0:o;56679:114::-;56738:7;56765:20;:18;:20::i;:::-;56758:27;;56679:114;:::o;26658:103::-;26344:13;:11;:13::i;:::-;26723:30:::1;26750:1;26723:18;:30::i;:::-;26658:103::o:0;56526:145::-;-1:-1:-1;;;;;3631:14:0;;56617:7;3631:14;;;:7;:14;;;;;;56644:19;3544:109;54551:580;54654:13;54682:18;54715:21;54751:15;54781:25;54821:12;54848:27;54956:13;:11;:13::i;:::-;54984:16;:14;:16::i;:::-;55096;;;55079:1;55096:16;;;;;;;;;-1:-1:-1;;;54903:220:0;;;-1:-1:-1;54903:220:0;;-1:-1:-1;55015:13:0;;-1:-1:-1;55051:4:0;;-1:-1:-1;55079:1:0;-1:-1:-1;55096:16:0;-1:-1:-1;54903:220:0;-1:-1:-1;54551:580:0:o;45251:95::-;45298:13;45331:7;45324:14;;;;;:::i;45683:182::-;45752:4;3135:10;45808:27;3135:10;45825:2;45829:5;45808:9;:27::i;55827:691::-;56057:8;56039:15;:26;56035:99;;;56089:33;;-1:-1:-1;;;56089:33:0;;;;;1442:25:1;;;1415:18;;56089:33:0;;;;;;;;56035:99;56146:18;55547:95;56205:5;56212:7;56221:5;56228:16;56238:5;-1:-1:-1;;;;;3784:14:0;3726:7;3784:14;;;:7;:14;;;;;:16;;;;;;;;;3666:153;56228:16;56177:78;;;;;;5612:25:1;;;;-1:-1:-1;;;;;5711:15:1;;;5691:18;;;5684:43;5763:15;;;;5743:18;;;5736:43;5795:18;;;5788:34;5838:19;;;5831:35;5882:19;;;5875:35;;;5584:19;;56177:78:0;;;;;;;;;;;;56167:89;;;;;;56146:110;;56267:12;56282:28;56299:10;56282:16;:28::i;:::-;56267:43;;56321:14;56338:28;56352:4;56358:1;56361;56364;56338:13;:28::i;:::-;56321:45;;56391:5;-1:-1:-1;;;;;56381:15:0;:6;-1:-1:-1;;;;;56381:15:0;;56377:90;;56420:35;;-1:-1:-1;;;56420:35:0;;-1:-1:-1;;;;;6151:15:1;;;56420:35:0;;;6133:34:1;6203:15;;6183:18;;;6176:43;6068:18;;56420:35:0;5921:304:1;56377:90:0;56479:31;56488:5;56495:7;56504:5;56479:8;:31::i;:::-;56024:494;;;55827:691;;;;;;;:::o;26769:220::-;26344:13;:11;:13::i;:::-;-1:-1:-1;;;;;26854:22:0;::::1;26850:93;;26900:31;::::0;-1:-1:-1;;;26900:31:0;;26928:1:::1;26900:31;::::0;::::1;3783:51:1::0;3756:18;;26900:31:0::1;3637:203:1::0;26850:93:0::1;26953:28;26972:8;26953:18;:28::i;:::-;26769:220:::0;:::o;47753:130::-;47838:37;47847:5;47854:7;47863:5;47870:4;47838:8;:37::i;:::-;47753:130;;;:::o;48342:487::-;-1:-1:-1;;;;;45980:18:0;;;48442:24;45980:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;48509:37:0;;48505:317;;48586:5;48567:16;:24;48563:132;;;48619:60;;-1:-1:-1;;;48619:60:0;;-1:-1:-1;;;;;6450:32:1;;48619:60:0;;;6432:51:1;6499:18;;;6492:34;;;6542:18;;;6535:34;;;6405:18;;48619:60:0;6230:345:1;48563:132:0;48738:57;48747:5;48754:7;48782:5;48763:16;:24;48789:5;48738:8;:57::i;:::-;48431:398;48342:487;;;:::o;46478:308::-;-1:-1:-1;;;;;46562:18:0;;46558:88;;46604:30;;-1:-1:-1;;;46604:30:0;;46631:1;46604:30;;;3783:51:1;3756:18;;46604:30:0;3637:203:1;46558:88:0;-1:-1:-1;;;;;46660:16:0;;46656:88;;46700:32;;-1:-1:-1;;;46700:32:0;;46729:1;46700:32;;;3783:51:1;3756:18;;46700:32:0;3637:203:1;46656:88:0;46754:24;46762:4;46768:2;46772:5;46754:7;:24::i;53897:268::-;53950:7;53982:4;-1:-1:-1;;;;;53991:11:0;53974:28;;:63;;;;;54023:14;54006:13;:31;53974:63;53970:188;;;-1:-1:-1;54061:22:0;;53897:268::o;53970:188::-;54123:23;54265:80;;;52942:95;54265:80;;;7066:25:1;54287:11:0;7107:18:1;;;7100:34;;;;54300:14:0;7150:18:1;;;7143:34;54316:13:0;7193:18:1;;;7186:34;54339:4:0;7236:19:1;;;7229:61;54228:7:0;;7038:19:1;;54265:80:0;;;;;;;;;;;;54255:91;;;;;;54248:98;;54173:181;;26482:166;26460:6;;-1:-1:-1;;;;;26460:6:0;3135:10;26542:23;26538:103;;26589:40;;-1:-1:-1;;;26589:40:0;;3135:10;26589:40;;;3783:51:1;3756:18;;26589:40:0;3637:203:1;26997:191:0;27090:6;;;-1:-1:-1;;;;;27107:17:0;;;-1:-1:-1;;;;;;27107:17:0;;;;;;;27140:40;;27090:6;;;27107:17;27090:6;;27140:40;;27071:16;;27140:40;27060:128;26997:191;:::o;55141:128::-;55187:13;55220:41;:5;55247:13;55220:26;:41::i;55277:137::-;55326:13;55359:47;:8;55389:16;55359:29;:47::i;54365:178::-;54442:7;54469:66;54502:20;:18;:20::i;:::-;54524:10;52613:4;52607:11;-1:-1:-1;;;52632:23:0;;52685:4;52676:14;;52669:39;;;;52738:4;52729:14;;52722:34;52795:4;52780:20;;;52436:382;9560:264;9645:7;9666:17;9685:18;9705:16;9725:25;9736:4;9742:1;9745;9748;9725:10;:25::i;:::-;9665:85;;;;;;9761:28;9773:5;9780:8;9761:11;:28::i;:::-;-1:-1:-1;9807:9:0;;9560:264;-1:-1:-1;;;;;;9560:264:0:o;47891:443::-;-1:-1:-1;;;;;48004:19:0;;48000:91;;48047:32;;-1:-1:-1;;;48047:32:0;;48076:1;48047:32;;;3783:51:1;3756:18;;48047:32:0;3637:203:1;48000:91:0;-1:-1:-1;;;;;48105:21:0;;48101:92;;48150:31;;-1:-1:-1;;;48150:31:0;;48178:1;48150:31;;;3783:51:1;3756:18;;48150:31:0;3637:203:1;48101:92:0;-1:-1:-1;;;;;48203:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;48249:78;;;;48300:7;-1:-1:-1;;;;;48284:31:0;48293:5;-1:-1:-1;;;;;48284:31:0;;48309:5;48284:31;;;;1442:25:1;;1430:2;1415:18;;1296:177;48284:31:0;;;;;;;;47891:443;;;;:::o;46794:730::-;-1:-1:-1;;;;;46884:18:0;;46880:369;;46935:5;46919:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;46880:369:0;;-1:-1:-1;46880:369:0;;-1:-1:-1;;;;;46995:15:0;;46973:19;46995:15;;;;;;;;;;;47029:19;;;47025:117;;;47076:50;;-1:-1:-1;;;47076:50:0;;-1:-1:-1;;;;;6450:32:1;;47076:50:0;;;6432:51:1;6499:18;;;6492:34;;;6542:18;;;6535:34;;;6405:18;;47076:50:0;6230:345:1;47025:117:0;-1:-1:-1;;;;;47185:15:0;;:9;:15;;;;;;;;;;47203:19;;;;47185:37;;46880:369;-1:-1:-1;;;;;47265:16:0;;47261:213;;47327:12;:21;;;;;;;47261:213;;;-1:-1:-1;;;;;47425:13:0;;:9;:13;;;;;;;;;;:22;;;;;;47261:213;47506:2;-1:-1:-1;;;;;47491:25:0;47500:4;-1:-1:-1;;;;;47491:25:0;;47510:5;47491:25;;;;1442::1;;1430:2;1415:18;;1296:177;47491:25:0;;;;;;;;46794:730;;;:::o;29485:273::-;29579:13;28102:66;29609:46;;29605:146;;29679:15;29688:5;29679:8;:15::i;:::-;29672:22;;;;29605:146;29734:5;29727:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8934:618;9065:17;;;9155:66;9142:79;;9138:166;;;-1:-1:-1;9254:1:0;;-1:-1:-1;9258:30:0;;-1:-1:-1;9290:1:0;9238:54;;9138:166;9333:24;;;9316:14;9333:24;;;;;;;;;7528:25:1;;;7601:4;7589:17;;7569:18;;;7562:45;;;;7623:18;;;7616:34;;;7666:18;;;7659:34;;;9333:24:0;;7500:19:1;;9333:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9333:24:0;;-1:-1:-1;;9333:24:0;;;-1:-1:-1;;;;;;;9372:20:0;;9368:115;;-1:-1:-1;9425:1:0;;-1:-1:-1;9429:29:0;;-1:-1:-1;9425:1:0;;-1:-1:-1;9409:62:0;;9368:115;9503:6;-1:-1:-1;9511:20:0;;-1:-1:-1;9511:20:0;;-1:-1:-1;8934:618:0;;;;;;;;;:::o;9830:542::-;9926:20;9917:5;:29;;;;;;;;:::i;:::-;;9913:452;;9830:542;;:::o;9913:452::-;10024:29;10015:5;:38;;;;;;;;:::i;:::-;;10011:354;;10077:23;;-1:-1:-1;;;10077:23:0;;;;;;;;;;;10011:354;10131:35;10122:5;:44;;;;;;;;:::i;:::-;;10118:247;;10190:46;;-1:-1:-1;;;10190:46:0;;;;;1442:25:1;;;1415:18;;10190:46:0;1296:177:1;10118:247:0;10267:30;10258:5;:39;;;;;;;;:::i;:::-;;10254:111;;10321:32;;-1:-1:-1;;;10321:32:0;;;;;1442:25:1;;;1415:18;;10321:32:0;1296:177:1;10254:111:0;9830:542;;:::o;28550:308::-;28609:13;28635:11;28649:16;28660:4;28649:10;:16::i;:::-;28696:14;;;28707:2;28696:14;;;;;;;;;28635:30;;-1:-1:-1;28676:17:0;;28696:14;;;;;;;;;-1:-1:-1;;;28761:16:0;;;-1:-1:-1;28807:4:0;28798:14;;28791:28;;;;-1:-1:-1;28761:16:0;28550:308::o;28868:251::-;28929:7;29002:4;28966:40;;29030:2;29021:11;;29017:71;;;29056:20;;-1:-1:-1;;;29056:20:0;;;;;;;;;;;14:423:1;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;160:3;363:1;356:4;347:6;342:3;338:16;334:27;327:38;426:4;419:2;415:7;410:2;402:6;398:15;394:29;389:3;385:39;381:50;374:57;;;14:423;;;;:::o;442:220::-;591:2;580:9;573:21;554:4;611:45;652:2;641:9;637:18;629:6;611:45;:::i;:::-;603:53;442:220;-1:-1:-1;;;442:220:1:o;667:173::-;735:20;;-1:-1:-1;;;;;784:31:1;;774:42;;764:70;;830:1;827;820:12;764:70;667:173;;;:::o;845:254::-;913:6;921;974:2;962:9;953:7;949:23;945:32;942:52;;;990:1;987;980:12;942:52;1013:29;1032:9;1013:29;:::i;:::-;1003:39;1089:2;1074:18;;;;1061:32;;-1:-1:-1;;;845:254:1:o;1478:328::-;1555:6;1563;1571;1624:2;1612:9;1603:7;1599:23;1595:32;1592:52;;;1640:1;1637;1630:12;1592:52;1663:29;1682:9;1663:29;:::i;:::-;1653:39;;1711:38;1745:2;1734:9;1730:18;1711:38;:::i;:::-;1701:48;;1796:2;1785:9;1781:18;1768:32;1758:42;;1478:328;;;;;:::o;2182:186::-;2241:6;2294:2;2282:9;2273:7;2269:23;2265:32;2262:52;;;2310:1;2307;2300:12;2262:52;2333:29;2352:9;2333:29;:::i;2373:1259::-;2779:3;2774;2770:13;2762:6;2758:26;2747:9;2740:45;2721:4;2804:2;2842:3;2837:2;2826:9;2822:18;2815:31;2869:46;2910:3;2899:9;2895:19;2887:6;2869:46;:::i;:::-;2963:9;2955:6;2951:22;2946:2;2935:9;2931:18;2924:50;2997:33;3023:6;3015;2997:33;:::i;:::-;3061:2;3046:18;;3039:34;;;-1:-1:-1;;;;;3110:32:1;;3104:3;3089:19;;3082:61;3130:3;3159:19;;3152:35;;;3224:22;;;3218:3;3203:19;;3196:51;3296:13;;3318:22;;;3394:15;;;;-1:-1:-1;3356:15:1;;;;-1:-1:-1;3437:169:1;3451:6;3448:1;3445:13;3437:169;;;3512:13;;3500:26;;3581:15;;;;3546:12;;;;3473:1;3466:9;3437:169;;;-1:-1:-1;3623:3:1;;2373:1259;-1:-1:-1;;;;;;;;;;;;2373:1259:1:o;3845:693::-;3956:6;3964;3972;3980;3988;3996;4004;4057:3;4045:9;4036:7;4032:23;4028:33;4025:53;;;4074:1;4071;4064:12;4025:53;4097:29;4116:9;4097:29;:::i;:::-;4087:39;;4145:38;4179:2;4168:9;4164:18;4145:38;:::i;:::-;4135:48;;4230:2;4219:9;4215:18;4202:32;4192:42;;4281:2;4270:9;4266:18;4253:32;4243:42;;4335:3;4324:9;4320:19;4307:33;4380:4;4373:5;4369:16;4362:5;4359:27;4349:55;;4400:1;4397;4390:12;4349:55;3845:693;;;;-1:-1:-1;3845:693:1;;;;4423:5;4475:3;4460:19;;4447:33;;-1:-1:-1;4527:3:1;4512:19;;;4499:33;;3845:693;-1:-1:-1;;3845:693:1:o;4543:260::-;4611:6;4619;4672:2;4660:9;4651:7;4647:23;4643:32;4640:52;;;4688:1;4685;4678:12;4640:52;4711:29;4730:9;4711:29;:::i;:::-;4701:39;;4759:38;4793:2;4782:9;4778:18;4759:38;:::i;:::-;4749:48;;4543:260;;;;;:::o;4808:380::-;4887:1;4883:12;;;;4930;;;4951:61;;5005:4;4997:6;4993:17;4983:27;;4951:61;5058:2;5050:6;5047:14;5027:18;5024:38;5021:161;;5104:10;5099:3;5095:20;5092:1;5085:31;5139:4;5136:1;5129:15;5167:4;5164:1;5157:15;5021:161;;4808:380;;;:::o;6580:222::-;6645:9;;;6666:10;;;6663:133;;;6718:10;6713:3;6709:20;6706:1;6699:31;6753:4;6750:1;6743:15;6781:4;6778:1;6771:15;7704:127;7765:10;7760:3;7756:20;7753:1;7746:31;7796:4;7793:1;7786:15;7820:4;7817:1;7810:15
Swarm Source
ipfs://f0de2ee72934fd6590a802c9eb175bf6af3d871eec4169bb77cbe92fab056ec1
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.