| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
/// @notice The slice of every launchpad's ABI that a token needs to render its
/// own metadata. `Launchpad` (V3), `LaunchpadV4`, `PairLaunchpad` and
/// `StockLaunchpad` all declare an identical `TokenMetadata` struct and
/// an identical `getMetadata(address)` selector, so one interface reads
/// all four.
interface ILaunchpadMetadata {
struct TokenMetadata {
string imageURI;
string description;
string website;
string twitter;
string telegram;
}
function getMetadata(address token) external view returns (TokenMetadata memory);
}
/// @title LaunchToken
/// @notice Fixed-supply ERC-20 created by the Launchpad. The entire supply is
/// minted in the constructor (curve + LP reserve to the launchpad,
/// insider allocations directly to their wallets). There is no owner,
/// no mint function, and no transfer restrictions — insider
/// allocations are liquid from the moment of creation.
///
/// The token also exposes `contractURI()` / `tokenURI()`. Aggregators
/// and explorers read a project's logo and socials from the TOKEN, not
/// from whatever launchpad happened to create it, so the token reads
/// its own record back out of its launchpad on demand and renders it as
/// a `data:application/json;utf8,` document. Nothing is copied into the
/// token's storage: the logo alone can be a 20 KB data URI and storing
/// it twice would make every launch dramatically more expensive.
///
/// That document is a URI, not a bare string, so it passes through TWO
/// decoders on the way to a consumer's JSON parser — the URI layer
/// first, the JSON parser second — and creator text has to survive both.
/// See {_escapeField}.
contract LaunchToken is ERC20 {
/// @notice The launchpad that created this token.
address public immutable launchpad;
bytes16 private constant _HEX = "0123456789abcdef";
constructor(
string memory name_,
string memory symbol_,
uint256 poolSupply,
address[] memory insiderWallets,
uint256[] memory insiderAmounts
) ERC20(name_, symbol_) {
launchpad = msg.sender;
_mint(msg.sender, poolSupply);
uint256 n = insiderWallets.length;
for (uint256 i; i < n; ++i) {
_mint(insiderWallets[i], insiderAmounts[i]);
}
}
// ------------------------------------------------------------- metadata
/// @notice On-chain, self-describing metadata document for this token:
/// `data:application/json;utf8,{...}`.
/// @dev Keys, in order: name, symbol, decimals (always present), then
/// description, external_link, external_url, twitter, telegram and
/// image — each emitted only when the creator actually set it, so a
/// token launched without socials advertises no blank fields. The
/// website is published under BOTH `external_link` and
/// `external_url` because different indexers read different keys.
///
/// Creator-supplied strings are arbitrary bytes, so every one of
/// them goes through {_escapeField} before interpolation —
/// otherwise a description could close its own value and forge a
/// `twitter` key belonging to somebody else, or cut the document in
/// half with a `#`.
///
/// Never reverts: if the launchpad cannot answer, the document
/// degrades to the name/symbol/decimals the token knows by itself.
function contractURI() public view returns (string memory) {
ILaunchpadMetadata.TokenMetadata memory md;
// Deliberately low-level. A high-level `try ILaunchpadMetadata(...)`
// would cover a reverting launchpad but NOT two other ways this can
// fail: Solidity's code-size check (a launchpad that is an EOA) reverts
// before the call, and decoding of the returned data happens in THIS
// frame, so malformed return data reverts uncatchably. A raw staticcall
// never reverts, and the decode below is pushed into its own frame so
// that it can be caught.
(bool ok, bytes memory raw) =
launchpad.staticcall(abi.encodeCall(ILaunchpadMetadata.getMetadata, (address(this))));
if (ok && raw.length != 0) {
try this.decodeLaunchpadMetadata(raw) returns (ILaunchpadMetadata.TokenMetadata memory m) {
md = m;
} catch {
// Leave `md` zero-valued: every field renders as absent.
}
}
bytes memory j = abi.encodePacked(
'data:application/json;utf8,{"name":"',
_escapeField(name()),
'","symbol":"',
_escapeField(symbol()),
'","decimals":',
Strings.toString(uint256(decimals()))
);
if (bytes(md.description).length != 0) {
j = abi.encodePacked(j, ',"description":"', _escapeField(md.description), '"');
}
if (bytes(md.website).length != 0) {
string memory site = _escapeField(md.website);
j = abi.encodePacked(j, ',"external_link":"', site, '","external_url":"', site, '"');
}
if (bytes(md.twitter).length != 0) {
j = abi.encodePacked(j, ',"twitter":"', _escapeField(md.twitter), '"');
}
if (bytes(md.telegram).length != 0) {
j = abi.encodePacked(j, ',"telegram":"', _escapeField(md.telegram), '"');
}
if (bytes(md.imageURI).length != 0) {
j = abi.encodePacked(j, ',"image":"', _escapeField(md.imageURI), '"');
}
return string(abi.encodePacked(j, "}"));
}
/// @notice Alias of {contractURI}. Some indexers probe `tokenURI()` on
/// fungible tokens; both return the identical document.
function tokenURI() external view returns (string memory) {
return contractURI();
}
/// @notice Internal plumbing for {contractURI}, reachable externally only
/// because Solidity can catch a failed decode solely when it
/// happens in a separate call frame. Pure, stateless, and of no
/// consequence to anything else in the token.
function decodeLaunchpadMetadata(bytes calldata raw)
external
pure
returns (ILaunchpadMetadata.TokenMetadata memory)
{
return abi.decode(raw, (ILaunchpadMetadata.TokenMetadata));
}
/// @dev Make `s` safe to interpolate into the JSON document that
/// {contractURI} hands back as a `data:` URI. The result travels
/// through two decoders, in this order, and has to survive both:
///
/// 1. THE URI LAYER. A consumer resolves the string as a URI before
/// it is ever JSON: it drops everything from the first `#` (the
/// fragment delimiter) and then percent-decodes the body. So `#`
/// is encoded as `%23`, and `%` as `%25` so that a creator's own
/// `%22` decodes back to the three characters they typed instead
/// of manufacturing a `"` that never existed on chain. `?` is
/// encoded as `%3F` too: a compliant consumer keeps the query
/// string, but a consumer that reaches for `URL.pathname` would
/// truncate there exactly like a fragment, and encoding it costs
/// nothing because it decodes straight back.
///
/// 2. THE JSON PARSER. Backslash and double quote are
/// backslash-prefixed; C0 control bytes become their short form
/// (\n \r \t \b \f) or `\u00XX`. (The URI layer also *deletes*
/// raw tab/LF/CR wherever it finds them, so escaping them serves
/// both layers at once.)
///
/// Both layers are applied in a single pass, one input byte at a time,
/// which is what makes the ordering safe: the `\` and `"` this
/// function EMITS are structural and are never re-scanned, so they
/// cannot be percent-encoded by accident, and a creator's `%` is
/// encoded before it can be mistaken for an escape introducer.
///
/// Every other byte — including the whole 0x80..0xFF range where UTF-8
/// continuation bytes live — passes through untouched: the URI layer
/// percent-encodes non-ASCII on the way in and decodes it on the way
/// out, so multi-byte text arrives byte for byte.
function _escapeField(string memory s) internal pure returns (string memory) {
bytes memory b = bytes(s);
uint256 n = b.length;
// First pass: how many extra bytes does escaping cost? Overwhelmingly
// the answer is zero (base64 image URIs, plain URLs — the base64
// alphabet contains none of these bytes), and then the input can be
// returned as-is with no allocation at all.
uint256 extra;
for (uint256 i; i < n; ++i) {
uint8 c = uint8(b[i]);
if (c == 0x22 || c == 0x5c) {
extra += 1;
} else if (c == 0x25 || c == 0x23 || c == 0x3f) {
extra += 2; // one byte becomes a three-byte percent-triplet
} else if (c < 0x20) {
extra += (c == 0x0a || c == 0x0d || c == 0x09 || c == 0x08 || c == 0x0c) ? 1 : 5;
}
}
if (extra == 0) return s;
bytes memory out = new bytes(n + extra);
uint256 k;
for (uint256 i; i < n; ++i) {
uint8 c = uint8(b[i]);
if (c == 0x22) {
out[k++] = "\\";
out[k++] = '"';
} else if (c == 0x5c) {
out[k++] = "\\";
out[k++] = "\\";
} else if (c == 0x25) {
// '%' — the escape introducer of the URI layer. Encoding it
// first is what stops `%22` from becoming a bare quote.
out[k++] = "%";
out[k++] = "2";
out[k++] = "5";
} else if (c == 0x23) {
// '#' — would otherwise truncate the document at the fragment.
out[k++] = "%";
out[k++] = "2";
out[k++] = "3";
} else if (c == 0x3f) {
// '?' — would otherwise open a query string.
out[k++] = "%";
out[k++] = "3";
out[k++] = "F";
} else if (c == 0x0a) {
out[k++] = "\\";
out[k++] = "n";
} else if (c == 0x0d) {
out[k++] = "\\";
out[k++] = "r";
} else if (c == 0x09) {
out[k++] = "\\";
out[k++] = "t";
} else if (c == 0x08) {
out[k++] = "\\";
out[k++] = "b";
} else if (c == 0x0c) {
out[k++] = "\\";
out[k++] = "f";
} else if (c < 0x20) {
out[k++] = "\\";
out[k++] = "u";
out[k++] = "0";
out[k++] = "0";
out[k++] = _HEX[c >> 4];
out[k++] = _HEX[c & 0x0f];
} else {
out[k++] = b[i];
}
}
return string(out);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "poolSupply",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "insiderWallets",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "insiderAmounts",
"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": "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": "contractURI",
"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": "decodeLaunchpadMetadata",
"type": "function",
"inputs": [
{
"name": "raw",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "tuple",
"components": [
{
"name": "imageURI",
"type": "string",
"internalType": "string"
},
{
"name": "description",
"type": "string",
"internalType": "string"
},
{
"name": "website",
"type": "string",
"internalType": "string"
},
{
"name": "twitter",
"type": "string",
"internalType": "string"
},
{
"name": "telegram",
"type": "string",
"internalType": "string"
}
],
"internalType": "struct ILaunchpadMetadata.TokenMetadata"
}
],
"stateMutability": "pure"
},
{
"name": "launchpad",
"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"
}
]0x6080806040526004361015610012575f80fd5b5f3560e01c90816302669b521461069f5750806306fdde03146105e4578063095ea7b31461056257806318160ddd1461054557806323b872dd14610465578063313ce5671461044a5780633c130d90146100ab57806370a082311461041357806395d89b411461030b578063a9059cbb146102da578063aa3cebef14610104578063dd62ed3e146100b05763e8a3d485146100ab575f80fd5b610730565b34610100576040366003190112610100576100c9610704565b6100d161071a565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b5f80fd5b34610100576020366003190112610100576004356001600160401b03811161010057366023820112156101005780600401356001600160401b03811161010057810160248101913683116101005761015a610ee5565b50602081830312610100576024810135906001600160401b03821161010057019060a09082900312610100576040519061019382610e95565b60248101356001600160401b038111610100578360246101b592840101610f2a565b825260448101356001600160401b038111610100578360246101d992840101610f2a565b6020830190815260648201356001600160401b0381116101005784602461020292850101610f2a565b936040840194855260848301356001600160401b0381116101005781602461022c92860101610f2a565b6060850190815260a4840135916001600160401b0383116101005761028a9661029d6102666102b09360246102c3976102d69a0101610f2a565b9560808901968752604051998a9960208b525160a060208c015260c08b01906106e0565b9051898203601f190160408b01526106e0565b9051878203601f190160608901526106e0565b9051858203601f190160808701526106e0565b9051838203601f190160a08501526106e0565b0390f35b34610100576040366003190112610100576103006102f6610704565b6024359033610fb6565b602060405160018152f35b34610100575f366003190112610100576040515f6004548060011c90600181168015610409575b6020831081146103f5578285529081156103d15750600114610373575b6102d68361035f81850382610ec4565b6040519182916020835260208301906106e0565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b8082106103b75750909150810160200161035f61034f565b91926001816020925483858801015201910190929161039f565b60ff191660208086019190915291151560051b8401909101915061035f905061034f565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610332565b34610100576020366003190112610100576001600160a01b03610434610704565b165f525f602052602060405f2054604051908152f35b34610100575f36600319011261010057602060405160128152f35b346101005760603660031901126101005761047e610704565b61048661071a565b6001600160a01b0382165f8181526001602081815260408084203385529091529091205491936044359392909181016104c5575b506103009350610fb6565b83811061052a57841561051757331561050457610300945f52600160205260405f2060018060a01b0333165f526020528360405f2091039055846104ba565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b34610100575f366003190112610100576020600254604051908152f35b346101005760403660031901126101005761057b610704565b602435903315610517576001600160a01b031690811561050457335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610100575f366003190112610100576040515f6003548060011c90600181168015610695575b6020831081146103f5578285529081156103d15750600114610637576102d68361035f81850382610ec4565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b80821061067b5750909150810160200161035f61034f565b919260018160209254838588010152019101909291610663565b91607f169161060b565b34610100575f366003190112610100577f000000000000000000000000ba017e49aafad481bdf702e8b6c3d2fbad104a1f6001600160a01b03168152602090f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361010057565b602435906001600160a01b038216820361010057565b34610100575f36600319011261010057610748610ee5565b5f80604051602081019063152860a360e11b825230602482015260248152610771604482610ec4565b51907f000000000000000000000000ba017e49aafad481bdf702e8b6c3d2fbad104a1f5afa3d15610e8d573d906107a782610f0f565b916107b56040519384610ec4565b82523d5f602084013e5b80610e83575b610d46575b506040515f6003548060011c90600181168015610d3c575b6020831081146103f557828552908115610d185750600114610cba575b509061081081610815930382610ec4565b6110c7565b906040515f6004548060011c90600181168015610cb0575b6020831081146103f557828552908115610c8c5750600114610c2e575b50906108108161085b930382610ec4565b60019290601261086b6002610f0f565b6108786040519182610ec4565b600281526108866002610f0f565b602082019290601f190136843760228201875b610bfa575b50508560209561035f95610957600d6102d69a97600c8b98899860446040519a8b95818088019a7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c7b226e616d8c526332911d1160e11b60408a0152805191829101858a015e8701906b11161139bcb6b137b6111d1160a11b84830152805192839101605083015e0101906c1116113232b1b4b6b0b639911d60991b84830152518092601983015e01015f838201520301601f198101865285610ec4565b83858301518051610b8d575b50505060408101518051610af8575b5060608101518051610a90575b5060808101518051610a27575b505180516109c2575b50506040519481869251918291018484015e8101607d60f81b838201520301601e19810184520182610ec4565b90600a849384806109d5610a20966110c7565b6040519784899551918291018487015e84019069161134b6b0b3b2911d1160b11b83830152805192839101602a83015e0101601160f91b838201520301601e19810184520182610ec4565b825f610995565b82600d8693958480610a3b610a89966110c7565b6040519784899551918291018487015e8401906c16113a32b632b3b930b6911d1160991b83830152805192839101602d83015e0101601160f91b838201520301601e19810184520182610ec4565b915f61098c565b82600c8693958480610aa4610af1966110c7565b6040519784899551918291018487015e8401906b16113a3bb4ba3a32b9111d1160a11b83830152805192839101602c83015e0101601160f91b838201520301601e19810184520182610ec4565b915f61097f565b82601286939581610b0b610b86956110c7565b6040519683889451918291018c86015e83019071161132bc3a32b93730b62fb634b735911d1160711b8b8301528a8151818301938185603283015e0101907111161132bc3a32b93730b62fbab936111d1160711b84830152518092602483015e0101601160f91b838201520301601e19810184520182610ec4565b915f610972565b610bf19293955084918780610ba36010946110c7565b6040519788945180918487015e8401906f16113232b9b1b934b83a34b7b7111d1160811b83830152805192839101603083015e0101601160f91b838201520301601e19810184520182610ec4565b915f8080610963565b5f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304908115610c295787610899565b61089e565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b808210610c725750909150810160200161081061084a565b919260018160209254838588010152019101909291610c5a565b60ff191660208086019190915291151560051b84019091019150610810905061084a565b91607f169161082d565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210610cfe575090915081016020016108106107ff565b919260018160209254838588010152019101909291610ce6565b60ff191660208086019190915291151560051b8401909101915061081090506107ff565b91607f16916107e2565b5f610d6d916040518093819263aa3cebef60e01b83526020600484015260248301906106e0565b0381305afa5f9181610d88575b50156107ca5790505f6107ca565b9091503d805f833e610d9a8183610ec4565b810190602081830312610100578051906001600160401b038211610100570160a0818303126101005760405191610dd083610e95565b81516001600160401b0381116101005781610dec918401610f70565b835260208201516001600160401b0381116101005781610e0d918401610f70565b602084015260408201516001600160401b0381116101005781610e31918401610f70565b604084015260608201516001600160401b0381116101005781610e55918401610f70565b606084015260808201516001600160401b03811161010057610e779201610f70565b6080820152905f610d7a565b50805115156107c5565b6060906107bf565b60a081019081106001600160401b03821117610eb057604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b03821117610eb057604052565b60405190610ef282610e95565b606060808382815282602082015282604082015282808201520152565b6001600160401b038111610eb057601f01601f191660200190565b81601f8201121561010057803590610f4182610f0f565b92610f4f6040519485610ec4565b8284526020838301011161010057815f926020809301838601378301015290565b81601f8201121561010057805190610f8782610f0f565b92610f956040519485610ec4565b8284526020838301011161010057815f9260208093018386015e8301015290565b6001600160a01b0316908115611060576001600160a01b031691821561104d57815f525f60205260405f205481811061103457817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b908151811015611084570160200190565b634e487b7160e01b5f52603260045260245ffd5b919082018092116110a557565b634e487b7160e01b5f52601160045260245ffd5b5f1981146110a55760010190565b8051905f805b83811061141857508015611412576110e59083611098565b916110ef83610f0f565b926110fd6040519485610ec4565b80845261110c601f1991610f0f565b013660208501375f915f5b828110611125575050505090565b61112f8183611073565b518060f81c90602282145f14611170575050600190605c611159611152876110b9565b9688611073565b536022611168611152876110b9565b535b01611117565b605c82036111a0575050600190605c61118b611152876110b9565b53605c61119a611152876110b9565b5361116a565b602582036111d957505060019060256111bb611152876110b9565b5360326111ca611152876110b9565b53603561119a611152876110b9565b6023820361121257505060019060256111f4611152876110b9565b536032611203611152876110b9565b53603361119a611152876110b9565b603f820361124b575050600190602561122d611152876110b9565b53603361123c611152876110b9565b53604661119a611152876110b9565b600a8203611275575050600190605c611266611152876110b9565b53606e61119a611152876110b9565b600d820361129f575050600190605c611290611152876110b9565b53607261119a611152876110b9565b600982036112c9575050600190605c6112ba611152876110b9565b53607461119a611152876110b9565b600882036112f3575050600190605c6112e4611152876110b9565b53606261119a611152876110b9565b600c820361131d575050600190605c61130e611152876110b9565b53606661119a611152876110b9565b602082939692105f146113e057605c61133f611338846110b9565b9389611073565b53607561134e611338846110b9565b53603061135d611338846110b9565b53603061136c611338846110b9565b5360fc1c91601083101561108457816113a7611389600f946110b9565b946f181899199a1a9b1b9c1cb0b131b232b360811b901a9189611073565b5316936010851015611084578161119a6113c26001946110b9565b966f181899199a1a9b1b9c1cb0b131b232b360811b901a9188611073565b5093600191506001600160f81b03196113f98285611073565b51169461119a611408826110b9565b965f1a9188611073565b50905090565b6114228184611073565b5160f81c602281148015611517575b1561144e575090600181018091116110a557600190915b016110cd565b60258114801561150d575b8015611503575b1561147b575090600281018091116110a55760019091611448565b6020811061148d575b50600190611448565b6001919281600a6114c793149081156114f8575b81156114ed575b81156114e2575b81156114d7575b50156114ce5760ff835b1690611098565b9190611484565b60ff60056114c0565b600c9150145f6114b6565b6008811491506114af565b6009811491506114a8565b600d811491506114a1565b50603f8114611460565b5060238114611459565b50605c811461143156fea2646970667358221220c0c24e834d7568e8ee2c4d31325046b15ee7ea2ac377db3b8405dd6cdc5d799264736f6c634300081a0033
| 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 | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x50d5dc…7ab361 | 12 days agoTue, 04 Aug 2026 20:01:52 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…335f0fbc data: 0x000000000000000000…fca861f5 |
| 0xb584fd…622c47 | 20 days agoMon, 27 Jul 2026 21:08:27 UTC | Transfer | [0] 0x000000000000…2e5fb996 [1] 0x000000000000…7360bd5c data: 0x000000000000000000…c239bc05 |
| 0xb584fd…622c47 | 20 days agoMon, 27 Jul 2026 21:08:27 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…2e5fb996 data: 0x000000000000000000…c239bc05 |
| 0xb584fd…622c47 | 20 days agoMon, 27 Jul 2026 21:08:27 UTC | Transfer | [0] 0x000000000000…db8c0904 [1] 0x000000000000…43e40951 data: 0x000000000000000000…74000000 |
| 0xb584fd…622c47 | 20 days agoMon, 27 Jul 2026 21:08:27 UTC | Transfer | [0] 0x000000000000…7360bd5c [1] 0x000000000000…db8c0904 data: 0x000000000000000000…74000000 |
| 0xf66bf0…020821 | 20 days agoMon, 27 Jul 2026 21:08:24 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…40627184 data: 0x000000000000000000…793751f2 |
| 0x66ce9b…17288d | 20 days agoMon, 27 Jul 2026 21:08:24 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…82829226 data: 0x000000000000000000…556c2902 |
| 0x7f5010…527ce0 | 20 days agoMon, 27 Jul 2026 21:08:24 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…b1130df2 data: 0x000000000000000000…ffcd04b4 |
| 0x4a1417…ad6ec6 | 20 days agoMon, 27 Jul 2026 21:08:24 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…5ee8b081 data: 0x000000000000000000…b27751c5 |
| 0x16b5b9…d5457f | 20 days agoMon, 27 Jul 2026 21:08:15 UTC | Approval | [0] 0x000000000000…da469da4 [1] 0x000000000000…2e5fb996 data: 0xffffffffffffffffff…ffffffff |
| 0xff8f62…99dd2b | 20 days agoMon, 27 Jul 2026 21:08:14 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…da469da4 data: 0x000000000000000000…bb5ae922 |
| 0x836a17…591e05 | 20 days agoMon, 27 Jul 2026 21:08:12 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…1104079f data: 0x000000000000000000…3022396d |
| 0x6fc21f…445716 | 20 days agoMon, 27 Jul 2026 21:08:09 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…1104079f data: 0x000000000000000000…4ff67964 |
| 0x8dcbb6…e409b9 | 20 days agoMon, 27 Jul 2026 21:07:34 UTC | Approval | [0] 0x000000000000…ddd87425 [1] 0x000000000000…2e5fb996 data: 0xffffffffffffffffff…ffffffff |
| 0x50e947…963b7d | 20 days agoMon, 27 Jul 2026 21:07:33 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…ddd87425 data: 0x000000000000000000…995cef25 |
| 0xcaa7b4…953d21 | 20 days agoMon, 27 Jul 2026 21:06:17 UTC | Approval | [0] 0x000000000000…1104079f [1] 0x000000000000…2e5fb996 data: 0xffffffffffffffffff…ffffffff |
| 0x275c07…f39791 | 20 days agoMon, 27 Jul 2026 21:06:17 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…1104079f data: 0x000000000000000000…395f6aa0 |
| 0x59143e…e3376c | 20 days agoMon, 27 Jul 2026 21:06:13 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…83678821 data: 0x000000000000000000…b42490d9 |
| 0x131782…597da3 | 20 days agoMon, 27 Jul 2026 21:06:13 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…7675499e data: 0x000000000000000000…e5b06f95 |
| 0x5dd3cd…604546 | 20 days agoMon, 27 Jul 2026 21:06:13 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…4593e377 data: 0x000000000000000000…9bbb526a |
| 0x65abe2…c3c1fb | 20 days agoMon, 27 Jul 2026 21:06:13 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…8ca7b965 data: 0x000000000000000000…e6c35e84 |
| 0xdeb3e7…36e59b | 20 days agoMon, 27 Jul 2026 21:06:13 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…235c4c5f data: 0x000000000000000000…477ccbc5 |
| 0xe27d29…a654fd | 20 days agoMon, 27 Jul 2026 21:06:13 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…e5315364 data: 0x000000000000000000…1c9b37f1 |
| 0x042201…711467 | 20 days agoMon, 27 Jul 2026 21:06:13 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…db87214f data: 0x000000000000000000…eda7500b |
| 0x2e0e9f…d13969 | 20 days agoMon, 27 Jul 2026 21:06:11 UTC | Approval | [0] 0x000000000000…4593e377 [1] 0x000000000000…2e5fb996 data: 0xffffffffffffffffff…ffffffff |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x16b5b9…d5457f | Approve | 21,041,968 | 20 days agoMon, 27 Jul 2026 21:08:15 UTC | 0x7f7a…9da4 | IN | liquid protocol | $0.000 ETH | 0.00000172 | |
| 0x8dcbb6…e409b9 | Approve | 21,041,561 | 20 days agoMon, 27 Jul 2026 21:07:34 UTC | 0x2036…7425 | IN | liquid protocol | $0.000 ETH | 0.00000172 | |
| 0xcaa7b4…953d21 | Approve | 21,040,800 | 20 days agoMon, 27 Jul 2026 21:06:17 UTC | 0x4eb3…079f | IN | liquid protocol | $0.000 ETH | 0.00000174 | |
| 0x2e0e9f…d13969 | Approve | 21,040,734 | 20 days agoMon, 27 Jul 2026 21:06:11 UTC | 0xb924…e377 | IN | liquid protocol | $0.000 ETH | 0.00000172 | |
| 0x59d341…0d4b98 | Approve | 21,040,734 | 20 days agoMon, 27 Jul 2026 21:06:11 UTC | 0xd687…4c5f | IN | liquid protocol | $0.000 ETH | 0.00000172 | |
| 0x2fd1b0…8cf8a5 | Approve | 21,040,734 | 20 days agoMon, 27 Jul 2026 21:06:11 UTC | 0xa088…8821 | IN | liquid protocol | $0.000 ETH | 0.00000172 | |
| 0x1c6296…fd4742 | Approve | 21,040,734 | 20 days agoMon, 27 Jul 2026 21:06:11 UTC | 0x2740…ccef | IN | liquid protocol | $0.000 ETH | 0.00000172 | |
| 0x88438d…5be096 | Approve | 21,040,732 | 20 days agoMon, 27 Jul 2026 21:06:10 UTC | 0x67fc…499e | IN | liquid protocol | $0.000 ETH | 0.00000175 | |
| 0x7ee067…dfa42d | Approve | 21,040,732 | 20 days agoMon, 27 Jul 2026 21:06:10 UTC | 0x5819…b965 | IN | liquid protocol | $0.000 ETH | 0.00000175 | |
| 0x59855c…f64c26 | Approve | 21,040,732 | 20 days agoMon, 27 Jul 2026 21:06:10 UTC | 0xbe51…214f | IN | liquid protocol | $0.000 ETH | 0.00000175 | |
| 0x507ee6…cc5726 | Approve | 21,040,732 | 20 days agoMon, 27 Jul 2026 21:06:10 UTC | 0x356a…5364 | IN | liquid protocol | $0.000 ETH | 0.00000175 | |
| 0xf51475…9689c3 | Approve | 21,040,703 | 20 days agoMon, 27 Jul 2026 21:06:08 UTC | 0xe567…b7be | IN | liquid protocol | $0.000 ETH | 0.00000175 | |
| 0xf3538c…8b89c2 | Approve | 21,040,701 | 20 days agoMon, 27 Jul 2026 21:06:07 UTC | 0x6f2e…bd5c | IN | liquid protocol | $0.000 ETH | 0.00000173 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 21,040,645 | 20 days agoMon, 27 Jul 2026 21:06:02 UTC | 0xdbd11b…26f011 | CREATE2 | createToken | 0xba01…4a1f | IN | 0x2d26…1ee3 | 0 ETH |