// 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"
}
]0x6080806040526004361015610012575f80fd5b5f3560e01c90816302d05d3f146105135750806306fdde0314610458578063095ea7b3146103d657806316eebd1e1461039257806318160ddd1461037557806323b872dd14610296578063313ce5671461027b5780633c130d901461026057806370a082311461022957806395d89b4114610125578063a9059cbb146100f45763dd62ed3e146100a0575f80fd5b346100f05760403660031901126100f0576100b961057e565b6100c1610594565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b5f80fd5b346100f05760403660031901126100f05761011a61011061057e565b60243590336107fa565b602060405160018152f35b346100f0575f3660031901126100f0576040515f6004548060011c9060018116801561021f575b60208310811461020b578285529081156101e75750600114610189575b61018583610179818503826105aa565b60405191829182610554565b0390f35b91905060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f905b8082106101cd57509091508101602001610179610169565b9192600181602092548385880101520191019092916101b5565b60ff191660208086019190915291151560051b840190910191506101799050610169565b634e487b7160e01b5f52602260045260245ffd5b91607f169161014c565b346100f05760203660031901126100f0576001600160a01b0361024a61057e565b165f525f602052602060405f2054604051908152f35b346100f0575f3660031901126100f0576101856101796105e0565b346100f0575f3660031901126100f057602060405160128152f35b346100f05760603660031901126100f0576102af61057e565b6102b7610594565b6001600160a01b0382165f818152600160209081526040808320338452909152902054909260443592915f1981106102f5575b5061011a93506107fa565b83811061035a5784156103475733156103345761011a945f52600160205260405f2060018060a01b0333165f526020528360405f2091039055846102ea565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b346100f0575f3660031901126100f0576020600254604051908152f35b346100f0575f3660031901126100f0576040517f0000000000000000000000006fda94aceedc5a97171469a8873d00fb9983bb8c6001600160a01b03168152602090f35b346100f05760403660031901126100f0576103ef61057e565b602435903315610347576001600160a01b031690811561033457335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346100f0575f3660031901126100f0576040515f6003548060011c90600181168015610509575b60208310811461020b578285529081156101e757506001146104ab5761018583610179818503826105aa565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b8082106104ef57509091508101602001610179610169565b9192600181602092548385880101520191019092916104d7565b91607f169161047f565b346100f0575f3660031901126100f0577f0000000000000000000000007b2daf7f696bb844c7786693062d6619d1858cc96001600160a01b03168152602090f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036100f057565b602435906001600160a01b03821682036100f057565b90601f8019910116810190811067ffffffffffffffff8211176105cc57604052565b634e487b7160e01b5f52604160045260245ffd5b60405163d547cfb760e01b81525f816004817f0000000000000000000000006fda94aceedc5a97171469a8873d00fb9983bb8c6001600160a01b03165afa5f918161076e575b50610640575060405161063a6020826105aa565b5f815290565b80511561075f57604051306106566060836105aa565b602a82526020820190604036833782511561074b576030825382516001101561074b576078602184015360295b600181116106f157506106d957602092836005926106d6946040519684889551918291018587015e840190838201905f8252519283915e010164173539b7b760d91b815203601a198101845201826105aa565b90565b63e22e27eb60e01b5f5230600452601460245260445ffd5b90600f8116601081101561074b57845183101561074b576f181899199a1a9b1b9c1cb0b131b232b360811b901a8483016020015360041c908015610737575f1901610683565b634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5060405161063a6020826105aa565b9091503d805f833e61078081836105aa565b8101906020818303126100f05780519067ffffffffffffffff82116100f0570181601f820112156100f05780519067ffffffffffffffff82116105cc57604051926107d5601f8401601f1916602001856105aa565b828452602083830101116100f057815f9260208093018386015e83010152905f610626565b6001600160a01b03169081156108a4576001600160a01b031691821561089157815f525f60205260405f205481811061087857817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffdfea264697066735822122021467dc33f6e064a45e9f4d50726cdb439e3dba873793ec51885eedeb09c620c64736f6c634300081e0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x39faa5…dc5de0 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Transfer | [0] 0x000000000000…9251423b [1] 0x000000000000…43e40951 data: 0x000000000000000000…6f0b02b8 |
| 0xf17004…1d1dbd | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Transfer | [0] 0x000000000000…ae458914 [1] 0x000000000000…43e40951 data: 0x000000000000000000…6549dd62 |
| 0xe4603d…1be80c | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Transfer | [0] 0x000000000000…4544a395 [1] 0x000000000000…43e40951 data: 0x000000000000000000…197485c7 |
| 0xfa3860…bc9ea9 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Transfer | [0] 0x000000000000…e4d49b74 [1] 0x000000000000…43e40951 data: 0x000000000000000000…4bf29fe3 |
| 0x1c818f…824479 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Approval | [0] 0x000000000000…e4d49b74 [1] 0x000000000000…262c40dc data: 0xffffffffffffffffff…ffffffff |
| 0xeeb260…04b46c | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Approval | [0] 0x000000000000…ae458914 [1] 0x000000000000…262c40dc data: 0xffffffffffffffffff…ffffffff |
| 0x984a1e…9053a4 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Transfer | [0] 0x000000000000…74066a28 [1] 0x000000000000…43e40951 data: 0x000000000000000000…7c811bb5 |
| 0x71d2a8…226f33 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Approval | [0] 0x000000000000…74066a28 [1] 0x000000000000…262c40dc data: 0xffffffffffffffffff…ffffffff |
| 0x07fb67…c8c0d2 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Approval | [0] 0x000000000000…4544a395 [1] 0x000000000000…262c40dc data: 0xffffffffffffffffff…ffffffff |
| 0x0a4ce2…f14831 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Transfer | [0] 0x000000000000…cd7232e6 [1] 0x000000000000…43e40951 data: 0x000000000000000000…d49f8ac9 |
| 0x411016…373624 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Transfer | [0] 0x000000000000…5be87591 [1] 0x000000000000…43e40951 data: 0x000000000000000000…5991251c |
| 0x84405d…bdb783 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Approval | [0] 0x000000000000…9251423b [1] 0x000000000000…262c40dc data: 0xffffffffffffffffff…ffffffff |
| 0xa57c07…d16742 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Approval | [0] 0x000000000000…5be87591 [1] 0x000000000000…262c40dc data: 0xffffffffffffffffff…ffffffff |
| 0x705b47…4d1ad9 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | Approval | [0] 0x000000000000…cd7232e6 [1] 0x000000000000…262c40dc data: 0xffffffffffffffffff…ffffffff |
| 0xe3439d…39eab4 | 22 days agoMon, 27 Jul 2026 00:02:30 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…4544a395 data: 0x000000000000000000…197485c7 |
| 0xacbfe0…9495c5 | 22 days agoMon, 27 Jul 2026 00:02:30 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…e4d49b74 data: 0x000000000000000000…4bf29fe3 |
| 0xed56f6…1f6b1f | 22 days agoMon, 27 Jul 2026 00:02:30 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…5be87591 data: 0x000000000000000000…5991251c |
| 0x4e193d…4d2553 | 22 days agoMon, 27 Jul 2026 00:02:30 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…cd7232e6 data: 0x000000000000000000…d49f8ac9 |
| 0xdc9613…1fd47c | 22 days agoMon, 27 Jul 2026 00:02:30 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…9251423b data: 0x000000000000000000…6f0b02b8 |
| 0xbeb65e…efa5fa | 22 days agoMon, 27 Jul 2026 00:02:30 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…ae458914 data: 0x000000000000000000…6549dd62 |
| 0x39f09a…bb8105 | 22 days agoMon, 27 Jul 2026 00:02:30 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…74066a28 data: 0x000000000000000000…7c811bb5 |
| 0xc0e96d…be164e | 22 days agoSun, 26 Jul 2026 14:41:39 UTC | Transfer | [0] 0x000000000000…544be4b6 [1] 0x000000000000…43e40951 data: 0x000000000000000000…e7fffefe |
| 0xc0e96d…be164e | 22 days agoSun, 26 Jul 2026 14:41:39 UTC | Transfer | [0] 0x000000000000…9983bb8c [1] 0x000000000000…544be4b6 data: 0x000000000000000000…e8000000 |
| 0xc0e96d…be164e | 22 days agoSun, 26 Jul 2026 14:41:39 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…9983bb8c data: 0x000000000000000000…e8000000 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x84405d…bdb783 | Approve | 20,289,475 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | 0xbd06…423b | IN | Test Token 2 | $0.000 ETH | 0.00000217 | |
| 0xa57c07…d16742 | Approve | 20,289,475 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | 0x0563…7591 | IN | Test Token 2 | $0.000 ETH | 0.00000217 | |
| 0x1c818f…824479 | Approve | 20,289,475 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | 0x8ff7…9b74 | IN | Test Token 2 | $0.000 ETH | 0.00000217 | |
| 0x705b47…4d1ad9 | Approve | 20,289,475 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | 0xa028…32e6 | IN | Test Token 2 | $0.000 ETH | 0.00000217 | |
| 0x71d2a8…226f33 | Approve | 20,289,475 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | 0xb96c…6a28 | IN | Test Token 2 | $0.000 ETH | 0.00000217 | |
| 0x07fb67…c8c0d2 | Approve | 20,289,475 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | 0x6b48…a395 | IN | Test Token 2 | $0.000 ETH | 0.00000217 | |
| 0xeeb260…04b46c | Approve | 20,289,475 | 22 days agoMon, 27 Jul 2026 00:07:57 UTC | 0x862f…8914 | IN | Test Token 2 | $0.000 ETH | 0.00000217 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 19,950,347 | 22 days agoSun, 26 Jul 2026 14:41:39 UTC | 0xc0e96d…be164e | CREATE | launchPair | 0x6fda…bb8c | IN | 0xa70e…84fd | 0 ETH |