// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
/**
* @title Uniswapv4agregatorToken
* @notice The token an Uniswapv4agregator deploys, one fresh instance per launch, so a
* test launch is a different contract at a different address from the real
* one. Fixed supply of 1B, minted exactly once in the constructor and split
* by a ratio CHOSEN AT LAUNCH:
* - `reserveBps` (0 to 5000, i.e. at most 50% of supply) is sent STRAIGHT to
* the reserve wallet chosen at launch. It is never held by this contract,
* so there is no withdraw function to call and no creator role to
* compromise later.
* - everything else goes to the launcher, which seeds the single-sided
* Uniswap V4 pool in the same transaction and locks that liquidity.
*
* @dev Deliberately admin-less: no owner, no mint, no burn-from, no pause, no
* blacklist, no upgrade path, no transfer tax. The trade fee lives in the V4 hook
* on the pool (hard capped at 5%), so buys and sells behave like a plain ERC-20.
* Metadata is written once at construction and is immutable afterwards, and so is
* the split: `reserveBps` can never change.
*/
contract Uniswapv4agregatorToken is ERC20 {
/// @notice Identifies the contract family, so an indexer can pick these out
/// without matching bytecode.
string public constant STACK_ID = "imortal-quant-v1";
/// @notice Total supply, minted once in the constructor. 1,000,000,000 tokens.
uint256 public constant TOTAL_SUPPLY = 1_000_000_000 * 1e18;
/// @notice Hard cap on the reserve share: at most 50% of supply may leave the pool
/// for a wallet. The launcher enforces the same bound.
uint256 public constant MAX_RESERVE_BPS = 5000;
/// @notice Share of supply (in bps of 10000) sent to the reserve at launch.
uint256 public immutable reserveBps;
/// @notice Address that received the reserve share at launch. Informational only.
address public immutable reserve;
/// @notice Deployer of the pool that holds the rest of supply. Informational only.
/// The fee hook also reads this to decide who may register this token's
/// pool, which is what keeps one pad from touching another pad's market.
address public immutable launcher;
string public imageURI;
string public bio;
string public socialX;
string public socialWebsite;
uint256 public immutable deployedAt;
constructor(
string memory _name,
string memory _symbol,
address _reserve,
uint256 _reserveBps,
string memory _imageURI,
string memory _bio,
string memory _socialX,
string memory _socialWebsite
) ERC20(_name, _symbol) {
require(_reserve != address(0), "zero reserve");
require(_reserveBps <= MAX_RESERVE_BPS, "reserve too big");
reserve = _reserve;
reserveBps = _reserveBps;
launcher = msg.sender;
imageURI = _imageURI;
bio = _bio;
socialX = _socialX;
socialWebsite = _socialWebsite;
deployedAt = block.timestamp;
uint256 reserveAmount = (TOTAL_SUPPLY * _reserveBps) / 10000;
_mint(msg.sender, TOTAL_SUPPLY - reserveAmount); // pool share -> launcher -> locked pool
if (reserveAmount > 0) {
_mint(_reserve, reserveAmount); // reserve share -> wallet, immediately
}
}
/// @notice Convenience read for the site and explorers.
function getTokenInfo()
external
view
returns (
string memory _name,
string memory _symbol,
string memory _image,
string memory _bio,
address _reserve,
uint256 _reserveBps,
uint256 _deployedAt
)
{
return (name(), symbol(), imageURI, bio, reserve, reserveBps, deployedAt);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "_name",
"type": "string",
"internalType": "string"
},
{
"name": "_symbol",
"type": "string",
"internalType": "string"
},
{
"name": "_reserve",
"type": "address",
"internalType": "address"
},
{
"name": "_reserveBps",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_imageURI",
"type": "string",
"internalType": "string"
},
{
"name": "_bio",
"type": "string",
"internalType": "string"
},
{
"name": "_socialX",
"type": "string",
"internalType": "string"
},
{
"name": "_socialWebsite",
"type": "string",
"internalType": "string"
}
],
"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": "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": "MAX_RESERVE_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "STACK_ID",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "TOTAL_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"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": "bio",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "deployedAt",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getTokenInfo",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "_name",
"type": "string",
"internalType": "string"
},
{
"name": "_symbol",
"type": "string",
"internalType": "string"
},
{
"name": "_image",
"type": "string",
"internalType": "string"
},
{
"name": "_bio",
"type": "string",
"internalType": "string"
},
{
"name": "_reserve",
"type": "address",
"internalType": "address"
},
{
"name": "_reserveBps",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_deployedAt",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "imageURI",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"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": "reserve",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "reserveBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "socialWebsite",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "socialX",
"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": "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"
}
]0x60806040526004361015610011575f80fd5b5f3560e01c806306fdde031461081d578063095ea7b31461079b578063135d088d1461078057806316eebd1e1461073c57806318160ddd1461071f57806323b872dd1461063f578063313ce5671461062457806331ff215f14610569578063389254491461052f57806370a08231146104f8578063902d55a5146104d257806395d89b41146104b7578063a9059cbb14610486578063abb1dc441461038c578063b29b86af14610315578063cd3293de146102d1578063d8f3e26d146102b5578063dd62ed3e14610265578063df9ce79414610171578063eae4c19f146101375763f516b42214610100575f80fd5b34610133575f3660031901126101335761012f61011b610ad0565b604051918291602083526020830190610838565b0390f35b5f80fd5b34610133575f3660031901126101335760206040517f000000000000000000000000000000000000000000000000000000006a832b358152f35b34610133575f366003190112610133576040515f6008548060011c9060018116801561025b575b6020831081146102475782855290811561022357506001146101c5575b61012f8361011b81850382610888565b60085f9081527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3939250905b8082106102095750909150810160200161011b6101b5565b9192600181602092548385880101520191019092916101f1565b60ff191660208086019190915291151560051b8401909101915061011b90506101b5565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610198565b346101335760403660031901126101335761027e61085c565b610286610872565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b34610133575f3660031901126101335760206040516113888152f35b34610133575f366003190112610133576040517f0000000000000000000000007bdacc0aa5d7863abf464d975b8e1361c0d17ed86001600160a01b03168152602090f35b34610133575f36600319011261013357604051604081019080821067ffffffffffffffff8311176103785761012f91604052601081526f696d6f7274616c2d7175616e742d763160801b6020820152604051918291602083526020830190610838565b634e487b7160e01b5f52604160045260245ffd5b34610133575f366003190112610133576103dd6103a76108aa565b6104076103b2610a24565b6103f96103bd610978565b6103eb6103c8610ad0565b9360405197889760e0895260e0890190610838565b908782036020890152610838565b908582036040870152610838565b908382036060850152610838565b7f0000000000000000000000007bdacc0aa5d7863abf464d975b8e1361c0d17ed86001600160a01b031660808301527f00000000000000000000000000000000000000000000000000000000000007d060a08301527f000000000000000000000000000000000000000000000000000000006a832b3560c08301520390f35b34610133576040366003190112610133576104ac6104a261085c565b6024359033610b7c565b602060405160018152f35b34610133575f3660031901126101335761012f61011b610a24565b34610133575f3660031901126101335760206040516b033b2e3c9fd0803ce80000008152f35b34610133576020366003190112610133576001600160a01b0361051961085c565b165f525f602052602060405f2054604051908152f35b34610133575f3660031901126101335760206040517f00000000000000000000000000000000000000000000000000000000000007d08152f35b34610133575f366003190112610133576040515f6007548060011c9060018116801561061a575b6020831081146102475782855290811561022357506001146105bc5761012f8361011b81850382610888565b60075f9081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688939250905b8082106106005750909150810160200161011b6101b5565b9192600181602092548385880101520191019092916105e8565b91607f1691610590565b34610133575f36600319011261013357602060405160128152f35b346101335760603660031901126101335761065861085c565b610660610872565b6001600160a01b0382165f81815260016020818152604080842033855290915290912054919360443593929091810161069f575b506104ac9350610b7c565b8381106107045784156106f15733156106de576104ac945f52600160205260405f2060018060a01b0333165f526020528360405f209103905584610694565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b34610133575f366003190112610133576020600254604051908152f35b34610133575f366003190112610133576040517f0000000000000000000000001bb0e7a099eb2ffb0f68484b6bd0c23f3d23d3636001600160a01b03168152602090f35b34610133575f3660031901126101335761012f61011b610978565b34610133576040366003190112610133576107b461085c565b6024359033156106f1576001600160a01b03169081156106de57335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610133575f3660031901126101335761012f61011b6108aa565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361013357565b602435906001600160a01b038216820361013357565b90601f8019910116810190811067ffffffffffffffff82111761037857604052565b604051905f6003548060011c916001821691821561096e575b60208410831461024757838652859290811561094f57506001146108f0575b6108ee92500383610888565b565b5060035f90815290917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8183106109335750509060206108ee928201016108e2565b602091935080600191548385890101520191019091849261091b565b602092506108ee94915060ff191682840152151560051b8201016108e2565b92607f16926108c3565b604051905f6005548060011c9160018216918215610a1a575b60208410831461024757838652859290811561094f57506001146109bb576108ee92500383610888565b5060055f90815290917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8183106109fe5750509060206108ee928201016108e2565b60209193508060019154838589010152019101909184926109e6565b92607f1692610991565b604051905f6004548060011c9160018216918215610ac6575b60208410831461024757838652859290811561094f5750600114610a67576108ee92500383610888565b5060045f90815290917f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b818310610aaa5750509060206108ee928201016108e2565b6020919350806001915483858901015201910190918492610a92565b92607f1692610a3d565b604051905f6006548060011c9160018216918215610b72575b60208410831461024757838652859290811561094f5750600114610b13576108ee92500383610888565b5060065f90815290917ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b818310610b565750509060206108ee928201016108e2565b6020919350806001915483858901015201910190918492610b3e565b92607f1692610ae9565b6001600160a01b0316908115610c26576001600160a01b0316918215610c1357815f525f60205260405f2054818110610bfa57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffdfea2646970667358221220bc66d0e22c046480b906ae0c46e81c511fb24c1d59742e83b51c3c01490e074964736f6c634300081c0033
| 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 |
|---|---|---|---|
| 0x3efcf8…7dc9d8 | 17 hrs agoMon, 17 Aug 2026 15:39:33 UTC | Transfer | [0] 0x000000000000…3d23d363 [1] 0x000000000000…c0d17ed8 data: 0x000000000000000000…000052e6 |
| 0x3efcf8…7dc9d8 | 17 hrs agoMon, 17 Aug 2026 15:39:33 UTC | Transfer | [0] 0x000000000000…3d23d363 [1] 0x000000000000…43e40951 data: 0x000000000000000000…1fffad1a |
| 0x3efcf8…7dc9d8 | 17 hrs agoMon, 17 Aug 2026 15:39:33 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…c0d17ed8 data: 0x000000000000000000…c8000000 |
| 0x3efcf8…7dc9d8 | 17 hrs agoMon, 17 Aug 2026 15:39:33 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…3d23d363 data: 0x000000000000000000…20000000 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| 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 | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| no transactions indexed for this address yet | |||||||||