// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {ERC20} from "solady/tokens/ERC20.sol";
/// @title LaunchTokenV2 (metadata experiment)
/// @notice Same minimal, immutable 1B-supply ERC-20 as LaunchToken, PLUS a
/// standard, aggregator-readable metadata surface:
/// - EIP-1046 `tokenURI()` returning an `ipfs://` URI to a JSON
/// `{ name, symbol, decimals, image }` (image is itself `ipfs://`).
/// - OpenSea-style `contractURI()` returning the same URI.
/// This is what explorers (Blockscout) and aggregators (Axiom/GMGN)
/// actually read — unlike the current design where metadata is a
/// base64 `data:` blob only reachable via the factory's proprietary
/// `getTokenMetadata`. Deployed standalone (NOT via TokenFactory) so it
/// never hits the tracker/website; it exists only to prove the ipfs
/// metadata renders correctly on-chain.
contract LaunchTokenV2 is ERC20 {
string private _name;
string private _symbol;
string private _uri; // ipfs://<cid> → EIP-1046 JSON metadata
uint256 private constant _TOTAL_SUPPLY = 1_000_000_000e18;
constructor(
string memory name_,
string memory symbol_,
string memory tokenURI_,
address recipient
) {
_name = name_;
_symbol = symbol_;
_uri = tokenURI_;
_mint(recipient, _TOTAL_SUPPLY);
}
function name() public view override returns (string memory) {
return _name;
}
function symbol() public view override returns (string memory) {
return _symbol;
}
function decimals() public pure override returns (uint8) {
return 18;
}
/// @notice EIP-1046 token metadata URI (ipfs:// JSON with name/symbol/decimals/image).
function tokenURI() public view returns (string memory) {
return _uri;
}
/// @notice Contract-level metadata URI (same JSON); read by many aggregators.
function contractURI() public view returns (string memory) {
return _uri;
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "tokenURI_",
"type": "string",
"internalType": "string"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AllowanceOverflow",
"type": "error",
"inputs": []
},
{
"name": "AllowanceUnderflow",
"type": "error",
"inputs": []
},
{
"name": "InsufficientAllowance",
"type": "error",
"inputs": []
},
{
"name": "InsufficientBalance",
"type": "error",
"inputs": []
},
{
"name": "InvalidPermit",
"type": "error",
"inputs": []
},
{
"name": "Permit2AllowanceIsFixedAtInfinity",
"type": "error",
"inputs": []
},
{
"name": "PermitExpired",
"type": "error",
"inputs": []
},
{
"name": "TotalSupplyOverflow",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"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": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "DOMAIN_SEPARATOR",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "result",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "result",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "result",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "contractURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "pure"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "nonces",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "result",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "permit",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "deadline",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "v",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "r",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "s",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"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": "result",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"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": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
}
]0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde0314610713578063095ea7b31461068457806318160ddd1461065f57806323b872dd1461056a578063313ce5671461054f5780633644e515146104c75780633c130d90146100b357806370a08231146104955780637ecebe001461046357806395d89b4114610345578063a9059cbb146102b6578063d505accf146100f0578063dd62ed3e146100b85763e8a3d485146100b3575f80fd5b61078c565b346100ec5760403660031901126100ec5760206100e46100d6610760565b6100de610776565b90610950565b604051908152f35b5f80fd5b346100ec5760e03660031901126100ec57610109610760565b610111610776565b604435916064356084359260ff841684036100ec576001600160a01b0316936e22d473030f116ddee9f6b43ac78ba3851881191517156102a95761015361087d565b602081519101209082421161029c576040519360018060a01b03169465383775081901600e52855f5260c06020600c20958654957f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8252602082019586528660408301967fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc688528b6060850198468a528c608087019330855260a08820602e527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9885252528688525260a082015220604e526042602c205f5260ff1660205260a43560405260c43560605260208060805f60015afa93853d510361028f577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92594602094019055856303faf4f960a51b176040526034602c2055a3005b63ddafbaef5f526004601cfd5b631a15a3cc5f526004601cfd5b633f68539a5f526004601cfd5b346100ec5760403660031901126100ec576102cf610760565b602435906387a211a2600c52335f526020600c2080548084116103385783900390555f526020600c20818154019055602052600c5160601c337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3602060405160018152f35b63f4d678b85f526004601cfd5b346100ec575f3660031901126100ec576040515f6001548060011c90600181168015610459575b6020831081146104455782855290811561042957506001146103d3575b50819003601f01601f191681019067ffffffffffffffff8211818310176103bf57604082905281906103bb9082610736565b0390f35b634e487b7160e01b5f52604160045260245ffd5b60015f9081529091507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf65b82821061041357506020915082010182610389565b60018160209254838588010152019101906103fe565b90506020925060ff191682840152151560051b82010182610389565b634e487b7160e01b5f52602260045260245ffd5b91607f169161036c565b346100ec5760203660031901126100ec5761047c610760565b6338377508600c525f52602080600c2054604051908152f35b346100ec5760203660031901126100ec576104ae610760565b6387a211a2600c525f52602080600c2054604051908152f35b346100ec575f3660031901126100ec57602060a06104e361087d565b828151910120604051907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8252838201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6604082015246606082015230608082015220604051908152f35b346100ec575f3660031901126100ec57602060405160128152f35b346100ec5760603660031901126100ec57610583610760565b61058b610776565b604435908260601b6e22d473030f116ddee9f6b43ac78ba33303610615575b6387a211a217600c526020600c2080548084116103385783900390555f526020600c20818154019055602052600c5160601c9060018060a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3602060405160018152f35b33602052637f5e9f208117600c526034600c2090815491821961063b575b5090506105aa565b82851161065257846387a211a29303905585610633565b6313be252b5f526004601cfd5b346100ec575f3660031901126100ec5760206805345cdf77eb68f44c54604051908152f35b346100ec5760403660031901126100ec5761069d610760565b602435906001600160a01b0381166e22d473030f116ddee9f6b43ac78ba31882191517156102a957602052637f5e9f20600c52335f52806034600c20555f52602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa3602060405160018152f35b346100ec575f3660031901126100ec576103bb61072e61087d565b604051918291825b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036100ec57565b602435906001600160a01b03821682036100ec57565b346100ec575f3660031901126100ec576040515f6002548060011c90600181168015610873575b6020831081146104455782855290811561085757506001146108015750819003601f01601f191681019067ffffffffffffffff8211818310176103bf57604082905281906103bb9082610736565b60025f9081529091507f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b8282106108415750602091508201015f610389565b600181602092548385880101520191019061082c565b90506020925060ff191682840152151560051b8201015f610389565b91607f16916107b3565b604051905f80548060011c90600181168015610946575b6020831081146104455782865290811561092a57506001146108d6575b50829003601f01601f1916820167ffffffffffffffff8111838210176103bf57604052565b5f8080529091507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8282106109145750602091508301015f6108b1565b60018160209254838589010152019101906108ff565b90506020925060ff191682850152151560051b8301015f6108b1565b91607f1691610894565b906001600160a01b0381166e22d473030f116ddee9f6b43ac78ba31461098657602052637f5e9f20600c525f526034600c205490565b50505f199056fea264697066735822122091b293f304e9b4fbc431c8b6596ba5d6208957eb896514e21372641bd71a892b64736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xbcf150…d339ac | 32 days agoTue, 14 Jul 2026 16:31:30 UTC | Transfer | [0] 0x000000000000…fc28c9b3 [1] 0x000000000000…5243a92e data: 0x000000000000000000…af6dbef9 |
| 0x4c7379…b4a7ff | 32 days agoTue, 14 Jul 2026 16:31:12 UTC | Transfer | [0] 0x000000000000…fc28c9b3 [1] 0x000000000000…5243a92e data: 0x000000000000000000…94539afc |
| 0x20e56a…c05326 | 32 days agoTue, 14 Jul 2026 16:31:09 UTC | Approval | [0] 0x000000000000…fc28c9b3 [1] 0x000000000000…959e5cb2 data: 0xffffffffffffffffff…ffffffff |
| 0x63c962…de0139 | 32 days agoTue, 14 Jul 2026 16:30:24 UTC | Transfer | [0] 0x000000000000…5243a92e [1] 0x000000000000…fc28c9b3 data: 0x000000000000000000…43c159f5 |
| 0x63c962…de0139 | 32 days agoTue, 14 Jul 2026 16:30:24 UTC | Transfer | [0] 0x000000000000…441537e3 [1] 0x000000000000…2e0d281f data: 0x000000000000000000…00001994 |
| 0x63c962…de0139 | 32 days agoTue, 14 Jul 2026 16:30:24 UTC | Transfer | [0] 0x000000000000…441537e3 [1] 0x000000000000…5243a92e data: 0x000000000000000000…e7ffe66c |
| 0x63c962…de0139 | 32 days agoTue, 14 Jul 2026 16:30:24 UTC | Approval | [0] 0x000000000000…441537e3 [1] 0x000000000000…638de0d3 data: 0x000000000000000000…e8000000 |
| 0x63c962…de0139 | 32 days agoTue, 14 Jul 2026 16:30:24 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…441537e3 data: 0x000000000000000000…e8000000 |
| 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 | |||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x20e56a…c05326 | Approve | 9,675,041 | 32 days agoTue, 14 Jul 2026 16:31:09 UTC | 0xb83f…c9b3 | IN | Robbinghood | $0.000 ETH | 0.00000230 |