// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
/**
* @title PonsV2LauncherToken
* @notice Fixed-supply ERC-20 deployed by PonsV2LaunchFactory for a v2 launch.
* The entire supply mints directly to the token's bonding curve instead of a
* Uniswap position. Anyone, the deployer included, may buy any amount from
* the curve at any time; the curve's own price impact and its reserved pool
* allocation are the only limits on a large buy. `deployer` is carried here
* as immutable reference data for off-chain attribution only, and confers no
* privileges over the token.
* `ERC20Burnable` lets any holder voluntarily burn their own balance; the
* protocol's buyback mechanism does not use it, bought-back tokens are
* locked into `PonsV2BuybackVault` for a five-year vest instead of being
* burned.
*/
contract PonsV2LauncherToken is ERC20, ERC20Burnable {
struct Socials {
string twitter;
string telegram;
string discord;
string website;
string farcaster;
}
error ZeroAddress();
address public immutable deployer;
address public immutable launchFactory;
address public immutable curve;
string public logo;
string public description;
Socials private _socials;
/**
* @notice Creates a v2 launch token and mints its entire supply to the bonding curve.
*/
constructor(
string memory name_,
string memory symbol_,
string memory logo_,
string memory description_,
Socials memory socials_,
address deployer_,
address curve_,
address launchFactory_,
uint256 supply_
) ERC20(name_, symbol_) {
if (deployer_ == address(0) || curve_ == address(0) || launchFactory_ == address(0)) {
revert ZeroAddress();
}
deployer = deployer_;
// Passed explicitly rather than read from msg.sender: PonsV2LaunchFactory
// deploys this token indirectly through PonsV2LaunchDeployer to keep its
// own bytecode under EIP-170's size limit, so msg.sender at construction
// time would otherwise resolve to that deployer helper, not the factory.
launchFactory = launchFactory_;
curve = curve_;
logo = logo_;
description = description_;
_socials = socials_;
_mint(curve_, 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 PonsV2LauncherToken.Socials"
},
{
"name": "deployer_",
"type": "address",
"internalType": "address"
},
{
"name": "curve_",
"type": "address",
"internalType": "address"
},
{
"name": "launchFactory_",
"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": "burn",
"type": "function",
"inputs": [
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "burnFrom",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "curve",
"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": "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 PonsV2LauncherToken.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"
}
]0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde03146106b1578063095ea7b31461060957806318160ddd146105ec57806323b872dd146105b4578063313ce5671461059957806342966c681461057c578063536dac9b1461053857806353cd512a146104ac57806370a08231146104755780637165485d146104315780637284e4161461041657806379cc6790146103e457806395d89b41146102f0578063a9059cbb146102bf578063abb1dc44146101aa578063d5f3948814610166578063dd62ed3e146101165763fb7f21eb146100df575f80fd5b34610112575f3660031901126101125761010e6100fa6108dc565b60405191829160208352602083019061076c565b0390f35b5f80fd5b346101125760403660031901126101125761012f610790565b6101376107a6565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b34610112575f366003190112610112576040517f000000000000000000000000a23fc721c211f8f31150bfe2efeb1f5de0a9cda56001600160a01b03168152602090f35b34610112575f36600319011261011257606060806040516101ca816107bc565b828152826020820152826040820152828082015201526102446101eb6108dc565b61010e6101f661080e565b610252610201610a3e565b9160405195869560018060a01b037f000000000000000000000000a23fc721c211f8f31150bfe2efeb1f5de0a9cda516875260806020880152608087019061076c565b90858203604087015261076c565b838103606085015260806102ae61029c61028a610278865160a0875260a087019061076c565b6020870151868203602088015261076c565b6040860151858203604087015261076c565b6060850151848203606086015261076c565b92015190608081840391015261076c565b34610112576040366003190112610112576102e56102db610790565b6024359033610b39565b602060405160018152f35b34610112575f366003190112610112576040515f6004548060011c906001811680156103da575b6020831081146103c6578285529081156103a25750600114610344575b61010e836100fa818503826107ec565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610388575090915081016020016100fa610334565b919260018160209254838588010152019101909291610370565b60ff191660208086019190915291151560051b840190910191506100fa9050610334565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610317565b3461011257604036600319011261011257610414610400610790565b6024359061040f823383610a96565b610bf6565b005b34610112575f3660031901126101125761010e6100fa61080e565b34610112575f366003190112610112576040517f00000000000000000000000096c2ae39ee860a9b4bc03daece473504993276436001600160a01b03168152602090f35b34610112576020366003190112610112576001600160a01b03610496610790565b165f525f602052602060405f2054604051908152f35b34610112575f366003190112610112576105006104c7610a3e565b61010e81519161052a60208201519161051c604082015161050e6080606085015194015195604051998a9960a08b5260a08b019061076c565b9089820360208b015261076c565b90878203604089015261076c565b90858203606087015261076c565b90838203608085015261076c565b34610112575f366003190112610112576040517f0000000000000000000000007ed598bcef8bd9edd8c97a195c6d13f40801ec7e6001600160a01b03168152602090f35b346101125760203660031901126101125761041460043533610bf6565b34610112575f36600319011261011257602060405160128152f35b34610112576060366003190112610112576102e56105d0610790565b6105d86107a6565b604435916105e7833383610a96565b610b39565b34610112575f366003190112610112576020600254604051908152f35b3461011257604036600319011261011257610622610790565b60243590331561069e576001600160a01b031690811561068b57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b34610112575f366003190112610112576040515f6003548060011c90600181168015610762575b6020831081146103c6578285529081156103a257506001146107045761010e836100fa818503826107ec565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210610748575090915081016020016100fa610334565b919260018160209254838588010152019101909291610730565b91607f16916106d8565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361011257565b602435906001600160a01b038216820361011257565b60a0810190811067ffffffffffffffff8211176107d857604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176107d857604052565b604051905f6006548060011c91600182169182156108d2575b6020841083146103c65783865285929081156108b35750600114610854575b610852925003836107ec565b565b5060065f90815290917ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b81831061089757505090602061085292820101610846565b602091935080600191548385890101520191019091849261087f565b6020925061085294915060ff191682840152151560051b820101610846565b92607f1692610827565b604051905f6005548060011c916001821691821561097e575b6020841083146103c65783865285929081156108b3575060011461091f57610852925003836107ec565b5060055f90815290917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b81831061096257505090602061085292820101610846565b602091935080600191548385890101520191019091849261094a565b92607f16926108f5565b90604051915f8154908160011c9260018316928315610a34575b6020851084146103c6578487528693908115610a1257506001146109ce575b50610852925003836107ec565b90505f9291925260205f20905f915b8183106109f6575050906020610852928201015f6109c1565b60209193508060019154838589010152019101909184926109dd565b90506020925061085294915060ff191682840152151560051b8201015f6109c1565b93607f16936109a2565b60405190610a4b826107bc565b81610a566007610988565b8152610a626008610988565b6020820152610a716009610988565b6040820152610a80600a610988565b60608201526080610a91600b610988565b910152565b6001600160a01b039081165f818152600160209081526040808320948616835293905291909120549291905f198410610ad0575b50505050565b828410610b1657801561069e576001600160a01b0382161561068b575f52600160205260405f209060018060a01b03165f5260205260405f20910390555f808080610aca565b508290637dc7a0d960e11b5f5260018060a01b031660045260245260445260645ffd5b6001600160a01b0316908115610be3576001600160a01b0316918215610bd057815f525f60205260405f2054818110610bb757817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b9091906001600160a01b03168015610be357805f525f60205260405f2054838110610c60576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587528684520360408620558060025403600255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffdfea2646970667358221220f8f8df1aef409554acec1774e66d855cbdc94f6a3e199a378f5ba9fe2a08326664736f6c63430008230033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| 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 | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xe91df9…e598cc | 4 days agoTue, 11 Aug 2026 17:50:48 UTC | Transfer | [0] 0x000000000000…60d123d4 [1] 0x000000000000…99327643 data: 0x000000000000000000…608dc2dc |
| 0xe91df9…e598cc | 4 days agoTue, 11 Aug 2026 17:50:48 UTC | Approval | [0] 0x000000000000…60d123d4 [1] 0x000000000000…99327643 data: 0xffffffffffffffffff…ffffffff |
| 0xe91df9…e598cc | 4 days agoTue, 11 Aug 2026 17:50:48 UTC | Approval | [0] 0x000000000000…60d123d4 [1] 0x000000000000…99327643 data: 0x000000000000000000…00000000 |
| 0xe91df9…e598cc | 4 days agoTue, 11 Aug 2026 17:50:48 UTC | Transfer | [0] 0x000000000000…d8742afc [1] 0x000000000000…60d123d4 data: 0x000000000000000000…608dc2dc |
| 0xa7f9a2…3529f6 | 4 days agoTue, 11 Aug 2026 17:45:37 UTC | Approval | [0] 0x000000000000…d8742afc [1] 0x000000000000…60d123d4 data: 0xffffffffffffffffff…ffffffff |
| 0x5c697c…15625f | 4 days agoTue, 11 Aug 2026 17:45:36 UTC | Transfer | [0] 0x000000000000…99327643 [1] 0x000000000000…d8742afc data: 0x000000000000000000…608dc2dc |
| 0x686b14…eecd7c | 4 days agoTue, 11 Aug 2026 17:45:33 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…99327643 data: 0x000000000000000000…e8000000 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 33,852,083 | 4 days agoTue, 11 Aug 2026 17:45:33 UTC | 0x686b14…eecd7c | CREATE2 | launchToken | 0x3711…1a42 | IN | 0xeaa5…c827 | 0 ETH |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xa7f9a2…3529f6 | Approve | 33,852,125 | 4 days agoTue, 11 Aug 2026 17:45:37 UTC | 0xbae6…2afc | IN | CHEESE COIN | $0.000 ETH | 0.00000132 |