// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
/**
* @title ScanHoodV4LauncherToken
* @notice Fixed-supply ERC-20 deployed by ScanHoodV4LaunchFactory for a V4
* launch. Deliberately simpler than the V3 launcher token (PonsLauncherToken):
* V4 has no per-pool deployed contract to detect "is this transfer a pool
* buy" against (every V4 pool lives inside one shared singleton PoolManager),
* so the same anti-snipe mechanism has no direct equivalent — by design
* decision, V4 launches skip it rather than build a custom hook (novel attack
* surface, requires CREATE2 address-mining). The "locked liquidity, can't
* rug" guarantee is unaffected — that comes entirely from
* ScanHoodV4LaunchLocker, not from anything in this token.
*/
contract ScanHoodV4LauncherToken is ERC20 {
struct Socials {
string twitter;
string telegram;
string discord;
string website;
string farcaster;
}
error ZeroAddress();
address public immutable deployer;
address public immutable launchFactory;
string public logo;
string public description;
Socials private _socials;
constructor(
string memory name_,
string memory symbol_,
string memory logo_,
string memory description_,
Socials memory socials_,
address deployer_,
uint256 supply_
) ERC20(name_, symbol_) {
if (deployer_ == address(0)) revert ZeroAddress();
deployer = deployer_;
launchFactory = msg.sender;
logo = logo_;
description = description_;
_socials = socials_;
_mint(msg.sender, supply_);
}
/**
* @notice Returns the launch token's five social metadata fields.
*/
function socials()
external
view
returns (
string memory twitter,
string memory telegram,
string memory discord,
string memory website,
string memory farcaster
)
{
Socials memory values = _socials;
return (values.twitter, values.telegram, values.discord, values.website, values.farcaster);
}
/**
* @notice Returns creator and metadata in the launcher-compatible tuple.
*/
function getTokenInfo()
external
view
returns (
address tokenDeployer,
string memory tokenLogo,
string memory tokenDescription,
Socials memory tokenSocials
)
{
return (deployer, logo, description, _socials);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "logo_",
"type": "string",
"internalType": "string"
},
{
"name": "description_",
"type": "string",
"internalType": "string"
},
{
"name": "socials_",
"type": "tuple",
"components": [
{
"name": "twitter",
"type": "string",
"internalType": "string"
},
{
"name": "telegram",
"type": "string",
"internalType": "string"
},
{
"name": "discord",
"type": "string",
"internalType": "string"
},
{
"name": "website",
"type": "string",
"internalType": "string"
},
{
"name": "farcaster",
"type": "string",
"internalType": "string"
}
],
"internalType": "struct ScanHoodV4LauncherToken.Socials"
},
{
"name": "deployer_",
"type": "address",
"internalType": "address"
},
{
"name": "supply_",
"type": "uint256",
"internalType": "uint256"
}
],
"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": "ZeroAddress",
"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": "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": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "deployer",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "description",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "getTokenInfo",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "tokenDeployer",
"type": "address",
"internalType": "address"
},
{
"name": "tokenLogo",
"type": "string",
"internalType": "string"
},
{
"name": "tokenDescription",
"type": "string",
"internalType": "string"
},
{
"name": "tokenSocials",
"type": "tuple",
"components": [
{
"name": "twitter",
"type": "string",
"internalType": "string"
},
{
"name": "telegram",
"type": "string",
"internalType": "string"
},
{
"name": "discord",
"type": "string",
"internalType": "string"
},
{
"name": "website",
"type": "string",
"internalType": "string"
},
{
"name": "farcaster",
"type": "string",
"internalType": "string"
}
],
"internalType": "struct ScanHoodV4LauncherToken.Socials"
}
],
"stateMutability": "view"
},
{
"name": "launchFactory",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "logo",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "socials",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "twitter",
"type": "string",
"internalType": "string"
},
{
"name": "telegram",
"type": "string",
"internalType": "string"
},
{
"name": "discord",
"type": "string",
"internalType": "string"
},
{
"name": "website",
"type": "string",
"internalType": "string"
},
{
"name": "farcaster",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "symbol",
"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"
}
]0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461067e578063095ea7b3146105fc57806318160ddd146105df57806323b872dd14610500578063313ce567146104e5578063536dac9b146104a157806353cd512a1461041557806370a08231146103de5780637284e416146103c357806395d89b41146102cf578063a9059cbb1461029e578063abb1dc4414610189578063d5f3948814610145578063dd62ed3e146100f55763fb7f21eb146100be575f80fd5b346100f1575f3660031901126100f1576100ed6100d96108a9565b604051918291602083526020830190610739565b0390f35b5f80fd5b346100f15760403660031901126100f15761010e61075d565b610116610773565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b346100f1575f3660031901126100f1576040517f000000000000000000000000f5fa184b3728e18b5588fce8a2566b532ef93d0e6001600160a01b03168152602090f35b346100f1575f3660031901126100f157606060806040516101a981610789565b828152826020820152826040820152828082015201526102236101ca6108a9565b6100ed6101d56107db565b6102316101e0610a0b565b9160405195869560018060a01b037f000000000000000000000000f5fa184b3728e18b5588fce8a2566b532ef93d0e168752608060208801526080870190610739565b908582036040870152610739565b8381036060850152608061028d61027b610269610257865160a0875260a0870190610739565b60208701518682036020880152610739565b60408601518582036040870152610739565b60608501518482036060860152610739565b920151906080818403910152610739565b346100f15760403660031901126100f1576102c46102ba61075d565b6024359033610a63565b602060405160018152f35b346100f1575f3660031901126100f1576040515f6004548060011c906001811680156103b9575b6020831081146103a5578285529081156103815750600114610323575b6100ed836100d9818503826107b8565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610367575090915081016020016100d9610313565b91926001816020925483858801015201910190929161034f565b60ff191660208086019190915291151560051b840190910191506100d99050610313565b634e487b7160e01b5f52602260045260245ffd5b91607f16916102f6565b346100f1575f3660031901126100f1576100ed6100d96107db565b346100f15760203660031901126100f1576001600160a01b036103ff61075d565b165f525f602052602060405f2054604051908152f35b346100f1575f3660031901126100f157610469610430610a0b565b6100ed81519161049360208201519161048560408201516104776080606085015194015195604051998a9960a08b5260a08b0190610739565b9089820360208b0152610739565b908782036040890152610739565b908582036060870152610739565b908382036080850152610739565b346100f1575f3660031901126100f1576040517f0000000000000000000000004271be655d27b8e4bb5ce4c98c6fef0678b450566001600160a01b03168152602090f35b346100f1575f3660031901126100f157602060405160128152f35b346100f15760603660031901126100f15761051961075d565b610521610773565b6001600160a01b0382165f818152600160209081526040808320338452909152902054909260443592915f19811061055f575b506102c49350610a63565b8381106105c45784156105b157331561059e576102c4945f52600160205260405f2060018060a01b0333165f526020528360405f209103905584610554565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b346100f1575f3660031901126100f1576020600254604051908152f35b346100f15760403660031901126100f15761061561075d565b6024359033156105b1576001600160a01b031690811561059e57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b346100f1575f3660031901126100f1576040515f6003548060011c9060018116801561072f575b6020831081146103a55782855290811561038157506001146106d1576100ed836100d9818503826107b8565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210610715575090915081016020016100d9610313565b9192600181602092548385880101520191019092916106fd565b91607f16916106a5565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036100f157565b602435906001600160a01b03821682036100f157565b60a081019081106001600160401b038211176107a457604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176107a457604052565b604051905f6006548060011c916001821691821561089f575b6020841083146103a55783865285929081156108805750600114610821575b61081f925003836107b8565b565b5060065f90815290917ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b81831061086457505090602061081f92820101610813565b602091935080600191548385890101520191019091849261084c565b6020925061081f94915060ff191682840152151560051b820101610813565b92607f16926107f4565b604051905f6005548060011c916001821691821561094b575b6020841083146103a557838652859290811561088057506001146108ec5761081f925003836107b8565b5060055f90815290917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b81831061092f57505090602061081f92820101610813565b6020919350806001915483858901015201910190918492610917565b92607f16926108c2565b90604051915f8154908160011c9260018316928315610a01575b6020851084146103a55784875286939081156109df575060011461099b575b5061081f925003836107b8565b90505f9291925260205f20905f915b8183106109c357505090602061081f928201015f61098e565b60209193508060019154838589010152019101909184926109aa565b90506020925061081f94915060ff191682840152151560051b8201015f61098e565b93607f169361096f565b60405190610a1882610789565b81610a236007610955565b8152610a2f6008610955565b6020820152610a3e6009610955565b6040820152610a4d600a610955565b60608201526080610a5e600b610955565b910152565b6001600160a01b0316908115610b0d576001600160a01b0316918215610afa57815f525f60205260405f2054818110610ae157817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffdfea2646970667358221220445ed3679316641fdd0d0af030f7914c2f3f2583d836d999b4d400d1ca9c87ce64736f6c634300081e0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xbef0b0…cd35d4 | 10 days agoFri, 07 Aug 2026 11:12:21 UTC | Transfer | [0] 0x000000000000…a48e6ce5 [1] 0x000000000000…43e40951 data: 0x000000000000000000…86581b25 |
| 0xbef0b0…cd35d4 | 10 days agoFri, 07 Aug 2026 11:12:21 UTC | Transfer | [0] 0x000000000000…2ef93d0e [1] 0x000000000000…a48e6ce5 data: 0x000000000000000000…86581b25 |
| 0xec77a6…9b17c4 | 10 days agoFri, 07 Aug 2026 11:11:12 UTC | Approval | [0] 0x000000000000…2ef93d0e [1] 0x000000000000…a48e6ce5 data: 0x000000000000000000…86581b25 |
| 0x4aad49…6f6593 | 30 days agoSat, 18 Jul 2026 11:40:15 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…2ef93d0e data: 0x000000000000000000…86581b25 |
| 0x2941e9…e72c3c | 30 days agoSat, 18 Jul 2026 11:01:05 UTC | Approval | [0] 0x000000000000…78b45056 [1] 0x000000000000…3ac78ba3 data: 0x000000000000000000…00000000 |
| 0x2941e9…e72c3c | 30 days agoSat, 18 Jul 2026 11:01:05 UTC | Transfer | [0] 0x000000000000…78b45056 [1] 0x000000000000…43e40951 data: 0x000000000000000000…e7ffd018 |
| 0x2941e9…e72c3c | 30 days agoSat, 18 Jul 2026 11:01:05 UTC | Approval | [0] 0x000000000000…78b45056 [1] 0x000000000000…3ac78ba3 data: 0x000000000000000000…e8000000 |
| 0x2941e9…e72c3c | 30 days agoSat, 18 Jul 2026 11:01:05 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…78b45056 data: 0x000000000000000000…e8000000 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xec77a6…9b17c4 | Approve | 30,164,857 | 10 days agoFri, 07 Aug 2026 11:11:12 UTC | 0xf5fa…3d0e | IN | Good Boy | $0.000 ETH | 0.00000139 |
| Rank | Holder | Balance | Percentage | USD Value |
|---|---|---|---|---|
| 1 | 0x8366…0951 | 999,999,999.999999 | 100.0000% | — |
| 2 | 0x4271…5056 | 0.000000 | 0.0000% | — |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 12,928,083 | 30 days agoSat, 18 Jul 2026 11:01:05 UTC | 0x2941e9…e72c3c | CREATE2 | 0xc6b09553 | 0x4271…5056 | IN | 0xda7f…a727 | 0 ETH |