// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// TEST: identical to LunchV3Token EXCEPT there is NO _update override — no first-hour 2% max-wallet,
// no pool/initLimits gate. A dead-plain, immutable, fixed-supply ERC20. Same constructor signature +
// a no-op initLimits so the existing launcher works unchanged. Purpose: see whether removing the
// anti-snipe transfer hook makes GMGN stop flagging "honeypot / TradeRestriction".
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
interface ILunchLauncherBase {
function baseTokenURI() external view returns (string memory);
}
contract LunchTokenPlain is ERC20 {
address public immutable launcher;
address public immutable creator;
constructor(
string memory name_,
string memory symbol_,
uint256 totalSupply_,
address launcher_,
address creator_
) ERC20(name_, symbol_) {
require(totalSupply_ > 0, "supply=0");
require(launcher_ != address(0), "launcher=0");
launcher = launcher_;
creator = creator_;
_mint(launcher_, totalSupply_);
}
// NO initLimits, NO _update override, NO privileged functions of any kind — a pure, immutable,
// fixed-supply ERC20 with unrestricted transfers from block 0. (launcher/creator are just public
// getters, kept for constructor-signature parity + so the auto-verify cron can read them.)
/// @notice Metadata for this coin: `<base><address>.json` (e.g. https://www.lunch.fun/t/0x8ec1….json),
/// resolving to JSON with description, image, banner and socials. Indexers (GMGN) read it.
/// @dev A `view` getter — it touches nothing in the transfer path, so the plain-ERC20 property
/// this contract exists to preserve is unchanged and honeypot simulators see the same
/// unrestricted buys/sells as before.
///
/// Stores no state. The address half derives from `address(this)` and the base is read from
/// the launcher rather than hardcoded, so a domain move is one owner call on the launcher
/// and repairs every coin at once — a baked-in constant would strand them all forever.
/// Profile edits stay off-chain and cost the creator no gas.
///
/// The launcher owner can only move where the JSON is fetched from; supply and transfers
/// stay untouchable. Never reverts: "" if no base is set or the launcher call fails.
function tokenURI() external view returns (string memory) {
try ILunchLauncherBase(launcher).baseTokenURI() returns (string memory base) {
if (bytes(base).length == 0) return "";
return string.concat(base, Strings.toHexString(address(this)), ".json");
} catch {
return "";
}
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "totalSupply_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "launcher_",
"type": "address",
"internalType": "address"
},
{
"name": "creator_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "ERC20InsufficientAllowance",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "allowance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InsufficientBalance",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InvalidApprover",
"type": "error",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSpender",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "StringsInsufficientHexLength",
"type": "error",
"inputs": [
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "length",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "creator",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "launcher",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "tokenURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
}
]0x6080806040526004361015610012575f80fd5b5f3560e01c90816302d05d3f146105135750806306fdde0314610458578063095ea7b3146103d657806316eebd1e1461039257806318160ddd1461037557806323b872dd14610296578063313ce5671461027b5780633c130d901461026057806370a082311461022957806395d89b4114610125578063a9059cbb146100f45763dd62ed3e146100a0575f80fd5b346100f05760403660031901126100f0576100b961057e565b6100c1610594565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b5f80fd5b346100f05760403660031901126100f05761011a61011061057e565b60243590336107fa565b602060405160018152f35b346100f0575f3660031901126100f0576040515f6004548060011c9060018116801561021f575b60208310811461020b578285529081156101e75750600114610189575b61018583610179818503826105aa565b60405191829182610554565b0390f35b91905060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f905b8082106101cd57509091508101602001610179610169565b9192600181602092548385880101520191019092916101b5565b60ff191660208086019190915291151560051b840190910191506101799050610169565b634e487b7160e01b5f52602260045260245ffd5b91607f169161014c565b346100f05760203660031901126100f0576001600160a01b0361024a61057e565b165f525f602052602060405f2054604051908152f35b346100f0575f3660031901126100f0576101856101796105e0565b346100f0575f3660031901126100f057602060405160128152f35b346100f05760603660031901126100f0576102af61057e565b6102b7610594565b6001600160a01b0382165f818152600160209081526040808320338452909152902054909260443592915f1981106102f5575b5061011a93506107fa565b83811061035a5784156103475733156103345761011a945f52600160205260405f2060018060a01b0333165f526020528360405f2091039055846102ea565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b346100f0575f3660031901126100f0576020600254604051908152f35b346100f0575f3660031901126100f0576040517f000000000000000000000000568e12b312751992dcfe387cfc8ec7d63e9411036001600160a01b03168152602090f35b346100f05760403660031901126100f0576103ef61057e565b602435903315610347576001600160a01b031690811561033457335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346100f0575f3660031901126100f0576040515f6003548060011c90600181168015610509575b60208310811461020b578285529081156101e757506001146104ab5761018583610179818503826105aa565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b8082106104ef57509091508101602001610179610169565b9192600181602092548385880101520191019092916104d7565b91607f169161047f565b346100f0575f3660031901126100f0577f000000000000000000000000eb0e6c6a4fe86032aab04cc93eb2ec567cc4c6b36001600160a01b03168152602090f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036100f057565b602435906001600160a01b03821682036100f057565b90601f8019910116810190811067ffffffffffffffff8211176105cc57604052565b634e487b7160e01b5f52604160045260245ffd5b60405163d547cfb760e01b81525f816004817f000000000000000000000000568e12b312751992dcfe387cfc8ec7d63e9411036001600160a01b03165afa5f918161076e575b50610640575060405161063a6020826105aa565b5f815290565b80511561075f57604051306106566060836105aa565b602a82526020820190604036833782511561074b576030825382516001101561074b576078602184015360295b600181116106f157506106d957602092836005926106d6946040519684889551918291018587015e840190838201905f8252519283915e010164173539b7b760d91b815203601a198101845201826105aa565b90565b63e22e27eb60e01b5f5230600452601460245260445ffd5b90600f8116601081101561074b57845183101561074b576f181899199a1a9b1b9c1cb0b131b232b360811b901a8483016020015360041c908015610737575f1901610683565b634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5060405161063a6020826105aa565b9091503d805f833e61078081836105aa565b8101906020818303126100f05780519067ffffffffffffffff82116100f0570181601f820112156100f05780519067ffffffffffffffff82116105cc57604051926107d5601f8401601f1916602001856105aa565b828452602083830101116100f057815f9260208093018386015e83010152905f610626565b6001600160a01b03169081156108a4576001600160a01b031691821561089157815f525f60205260405f205481811061087857817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffdfea2646970667358221220317461000204ab7cec0ed9e4ca50e0b922097fccafcbca4823dc8e30ccd7b23164736f6c634300081e0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x3c39af…503849 | 18 days agoThu, 30 Jul 2026 12:35:15 UTC | Transfer | [0] 0x000000000000…7cc4c6b3 [1] 0x000000000000…ce204f23 data: 0x000000000000000000…52c80bcd |
| 0x0677c6…c454a0 | 18 days agoThu, 30 Jul 2026 12:27:10 UTC | Transfer | [0] 0x000000000000…e76c8326 [1] 0x000000000000…7cc4c6b3 data: 0x000000000000000000…52c80bcd |
| 0x0677c6…c454a0 | 18 days agoThu, 30 Jul 2026 12:27:10 UTC | Transfer | [0] 0x000000000000…e76c8326 [1] 0x000000000000…d1858cc9 data: 0x000000000000000000…98119b67 |
| 0x0677c6…c454a0 | 18 days agoThu, 30 Jul 2026 12:27:10 UTC | Approval | [0] 0x000000000000…e76c8326 [1] 0x000000000000…638de0d3 data: 0x000000000000000000…00000000 |
| 0x0677c6…c454a0 | 18 days agoThu, 30 Jul 2026 12:27:10 UTC | Transfer | [0] 0x000000000000…e76c8326 [1] 0x000000000000…985b0830 data: 0x000000000000000000…bab65ece |
| 0x0677c6…c454a0 | 18 days agoThu, 30 Jul 2026 12:27:10 UTC | Approval | [0] 0x000000000000…e76c8326 [1] 0x000000000000…638de0d3 data: 0x000000000000000000…bab6679a |
| 0x0677c6…c454a0 | 18 days agoThu, 30 Jul 2026 12:27:10 UTC | Transfer | [0] 0x000000000000…985b0830 [1] 0x000000000000…e76c8326 data: 0x000000000000000000…a5900602 |
| 0xdbec8d…025382 | 24 days agoFri, 24 Jul 2026 14:56:24 UTC | Transfer | [0] 0x000000000000…99748735 [1] 0x000000000000…985b0830 data: 0x000000000000000000…933f47ab |
| 0xdbec8d…025382 | 24 days agoFri, 24 Jul 2026 14:56:24 UTC | Transfer | [0] 0x000000000000…a8ac0ca6 [1] 0x000000000000…99748735 data: 0x000000000000000000…933f47ab |
| 0xd2624c…3f843d | 24 days agoFri, 24 Jul 2026 14:56:24 UTC | Approval | [0] 0x000000000000…a8ac0ca6 [1] 0x000000000000…c0e8cfdd data: 0xffffffffffffffffff…ffffffff |
| 0xc9760f…b1bc5f | 24 days agoFri, 24 Jul 2026 12:47:30 UTC | Transfer | [0] 0x000000000000…985b0830 [1] 0x000000000000…a8ac0ca6 data: 0x000000000000000000…933f47ab |
| 0xf1b24b…1ecd08 | 24 days agoFri, 24 Jul 2026 12:47:04 UTC | Transfer | [0] 0x000000000000…7cc4c6b3 [1] 0x000000000000…985b0830 data: 0x000000000000000000…190310e3 |
| 0x49cf5b…92f6b7 | 24 days agoFri, 24 Jul 2026 12:46:58 UTC | Approval | [0] 0x000000000000…7cc4c6b3 [1] 0x000000000000…959e5cb2 data: 0x000000000000000000…190310e3 |
| 0xfcc462…eae504 | 24 days agoFri, 24 Jul 2026 12:46:33 UTC | Transfer | [0] 0x000000000000…e76c8326 [1] 0x000000000000…7cc4c6b3 data: 0x000000000000000000…190310e3 |
| 0xfcc462…eae504 | 24 days agoFri, 24 Jul 2026 12:46:33 UTC | Transfer | [0] 0x000000000000…e76c8326 [1] 0x000000000000…d1858cc9 data: 0x000000000000000000…75682b55 |
| 0xfcc462…eae504 | 24 days agoFri, 24 Jul 2026 12:46:33 UTC | Approval | [0] 0x000000000000…e76c8326 [1] 0x000000000000…638de0d3 data: 0x000000000000000000…00000000 |
| 0xfcc462…eae504 | 24 days agoFri, 24 Jul 2026 12:46:33 UTC | Transfer | [0] 0x000000000000…e76c8326 [1] 0x000000000000…985b0830 data: 0x000000000000000000…a39aa990 |
| 0xfcc462…eae504 | 24 days agoFri, 24 Jul 2026 12:46:33 UTC | Approval | [0] 0x000000000000…e76c8326 [1] 0x000000000000…638de0d3 data: 0x000000000000000000…a39ac78e |
| 0xfcc462…eae504 | 24 days agoFri, 24 Jul 2026 12:46:33 UTC | Transfer | [0] 0x000000000000…985b0830 [1] 0x000000000000…e76c8326 data: 0x000000000000000000…3205e5c8 |
| 0x26c632…63fd37 | 24 days agoFri, 24 Jul 2026 12:45:54 UTC | Transfer | [0] 0x000000000000…7cc4c6b3 [1] 0x000000000000…985b0830 data: 0x000000000000000000…5f6526df |
| 0x12dca7…322699 | 24 days agoFri, 24 Jul 2026 12:45:50 UTC | Approval | [0] 0x000000000000…7cc4c6b3 [1] 0x000000000000…959e5cb2 data: 0x000000000000000000…5f6526df |
| 0x1f1914…ea7a07 | 24 days agoFri, 24 Jul 2026 12:20:32 UTC | Approval | [0] 0x000000000000…7cc4c6b3 [1] 0x000000000000…959e5cb2 data: 0x000000000000000000…5f6526df |
| 0xccc8aa…e5212b | 24 days agoFri, 24 Jul 2026 12:19:54 UTC | Approval | [0] 0x000000000000…7cc4c6b3 [1] 0x000000000000…959e5cb2 data: 0x000000000000000000…5f6526df |
| 0x484c48…0eafb2 | 24 days agoFri, 24 Jul 2026 12:11:56 UTC | Transfer | [0] 0x000000000000…985b0830 [1] 0x000000000000…7cc4c6b3 data: 0x000000000000000000…5f6526df |
| 0x6b8290…aa5df9 | 24 days agoFri, 24 Jul 2026 12:10:04 UTC | Transfer | [0] 0x000000000000…7cc4c6b3 [1] 0x000000000000…985b0830 data: 0x000000000000000000…2ae89b32 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x3c39af…503849 | Transfer | 23,319,401 | 18 days agoThu, 30 Jul 2026 12:35:15 UTC | 0xeb0e…c6b3 | IN | Tesla Cat | $0.000 ETH | 0.00000107 | |
| 0xd2624c…3f843d | Approve | 18,237,299 | 24 days agoFri, 24 Jul 2026 14:56:24 UTC | 0x54e8…0ca6 | IN | Tesla Cat | $0.000 ETH | 0.00000530 | |
| 0x49cf5b…92f6b7 | Approve | 18,159,785 | 24 days agoFri, 24 Jul 2026 12:46:58 UTC | 0xeb0e…c6b3 | IN | Tesla Cat | $0.000 ETH | 0.00000500 | |
| 0x12dca7…322699 | Approve | 18,159,101 | 24 days agoFri, 24 Jul 2026 12:45:50 UTC | 0xeb0e…c6b3 | IN | Tesla Cat | $0.000 ETH | 0.00000282 | |
| 0x1f1914…ea7a07 | Approve | 18,143,981 | 24 days agoFri, 24 Jul 2026 12:20:32 UTC | 0xeb0e…c6b3 | IN | Tesla Cat | $0.000 ETH | 0.00000286 | |
| 0xccc8aa…e5212b | Approve | 18,143,605 | 24 days agoFri, 24 Jul 2026 12:19:54 UTC | 0xeb0e…c6b3 | IN | Tesla Cat | $0.000 ETH | 0.00000498 | |
| 0x977898…e76e0d | Approve | 18,137,691 | 24 days agoFri, 24 Jul 2026 12:10:01 UTC | 0xeb0e…c6b3 | IN | Tesla Cat | $0.000 ETH | 0.00000498 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 18,135,927 | 24 days agoFri, 24 Jul 2026 12:07:04 UTC | 0x545599…6528f5 | CREATE2 | launchPairEthWithMetaRef | 0x568e…1103 | IN | 0x716d…f0c9 | 0 ETH |