// SPDX-License-Identifier: MIT
pragma solidity 0.8.30;
import {IPoolManager} from "@uniswap/v4-core/src/interfaces/IPoolManager.sol";
import {IUnlockCallback} from "@uniswap/v4-core/src/interfaces/callback/IUnlockCallback.sol";
import {PoolKey} from "@uniswap/v4-core/src/types/PoolKey.sol";
import {PoolId} from "@uniswap/v4-core/src/types/PoolId.sol";
import {Currency} from "@uniswap/v4-core/src/types/Currency.sol";
import {BalanceDelta} from "@uniswap/v4-core/src/types/BalanceDelta.sol";
import {SwapParams, ModifyLiquidityParams} from "@uniswap/v4-core/src/types/PoolOperation.sol";
import {TickMath} from "@uniswap/v4-core/src/libraries/TickMath.sol";
import {Pool} from "@uniswap/v4-core/src/libraries/Pool.sol";
import {FullMath} from "@uniswap/v4-core/src/libraries/FullMath.sol";
import {StateLibrary} from "@uniswap/v4-core/src/libraries/StateLibrary.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {CurrencySettler} from "@openzeppelin/uniswap-hooks/src/utils/CurrencySettler.sol";
import {LunchImmutableBase} from "./base/LunchImmutableBase.sol";
/**
* @title LunchV4PairLpLockerImmutable
* @notice Non-upgradeable, non-proxy sibling of {LunchV4PairLpLocker}. IDENTICAL seed/compound logic —
* no removal path exists anywhere (ADD-only modifyLiquidity calls), and with no upgrade mechanism
* at all, that guarantee is permanent rather than a property of the current implementation.
*/
contract LunchV4PairLpLockerImmutable is IUnlockCallback, LunchImmutableBase {
using CurrencySettler for Currency;
using StateLibrary for IPoolManager;
using SafeERC20 for IERC20;
uint256 private constant Q96 = 0x1000000000000000000000000;
IPoolManager public immutable poolManager;
address public launcher;
struct PoolInfo {
int24 tickLower;
int24 tickUpper;
bool seeded;
}
mapping(PoolId => PoolInfo) public poolInfo;
mapping(PoolId => uint256) public carried0;
mapping(PoolId => uint256) public carried1;
/// @notice Pull-based fallback for a dev-buy leftover-quote refund whose push (a plain ERC20 transfer)
/// reverted (e.g. the quote token is a compliance-gated/pausable stock or stablecoin token and `creator`
/// is paused/blacklisted at that moment). Keyed by (creator, quote token). Populated by {_seed};
/// withdraw via {withdrawQuoteRefund}. Mirrors {LunchLpLockerImmutable.pendingEthRefund}'s rationale.
mapping(address => mapping(address => uint256)) public pendingQuoteRefund;
event LauncherSet(address indexed launcher);
event Seeded(PoolId indexed poolId, uint128 liquidity, int24 tickLower, int24 tickUpper);
event Compounded(PoolId indexed poolId, uint128 addedLiquidity, uint256 used0, uint256 used1);
event QuoteRefundQueued(address indexed creator, address indexed quote, uint256 amount);
event QuoteRefundWithdrawn(address indexed creator, address indexed quote, uint256 amount);
/// @notice See {LunchLpLockerImmutable.CompoundClamped} — identical rationale, fired whenever
/// {_compound} clamps the amount it would otherwise add because the shared per-tick liquidity ceiling
/// at this pool's seed-tick boundaries is close to full (including third-party griefing liquidity added
/// deliberately at those ticks), making the degradation observable on-chain instead of silent.
event CompoundClamped(PoolId indexed poolId, uint128 desiredLiquidity, uint128 clampedLiquidity, uint128 headroom);
error NotLauncher();
error ZeroAddress();
error LauncherAlreadySet();
error LauncherNotSet();
error AlreadySeeded();
error NotSeeded();
error NotPoolManager();
error BadLiquidity();
error NothingToWithdraw();
error SeedNotSingleSided();
enum Op { SEED, COMPOUND }
struct SeedData {
PoolKey key;
uint128 liquidity;
int24 tickLower;
int24 tickUpper;
address creator;
bool quoteIsC0;
uint256 devBuyQuote;
}
constructor(IPoolManager pm, address owner_) LunchImmutableBase(owner_) {
// See LunchLpLockerImmutable: immutable, no setter, non-upgradeable => a zero is unrecoverable.
if (address(pm) == address(0)) revert ZeroAddress();
poolManager = pm;
}
function setLauncher(address launcher_) external onlyOwner {
if (launcher != address(0)) revert LauncherAlreadySet();
if (launcher_ == address(0)) revert NotLauncher();
launcher = launcher_;
emit LauncherSet(launcher_);
}
/// @dev Blocks {renounceOwnership} until {setLauncher} has actually run — otherwise a renounce-before-wire
/// would permanently strand `launcher` at address(0) with no way to ever set it (onlyOwner is now
/// unreachable), bricking launch()/compound() forever.
function _requireRenounceReady() internal view override {
if (launcher == address(0)) revert LauncherNotSet();
}
function launch(
PoolKey calldata key, uint128 liquidity, int24 tickLower, int24 tickUpper,
address creator, bool quoteIsC0, uint256 devBuyQuote
) external nonReentrant {
if (msg.sender != launcher) revert NotLauncher();
PoolId id = key.toId();
if (poolInfo[id].seeded) revert AlreadySeeded();
if (liquidity == 0) revert BadLiquidity();
poolInfo[id] = PoolInfo({tickLower: tickLower, tickUpper: tickUpper, seeded: true});
poolManager.unlock(
abi.encode(
uint8(Op.SEED),
SeedData({key: key, liquidity: liquidity, tickLower: tickLower, tickUpper: tickUpper,
creator: creator, quoteIsC0: quoteIsC0, devBuyQuote: devBuyQuote})
)
);
emit Seeded(id, liquidity, tickLower, tickUpper);
}
function compound(PoolKey calldata key) external nonReentrant {
PoolId id = key.toId();
if (!poolInfo[id].seeded) revert NotSeeded();
poolManager.unlock(abi.encode(uint8(Op.COMPOUND), key));
}
function unlockCallback(bytes calldata data) external override returns (bytes memory) {
if (msg.sender != address(poolManager)) revert NotPoolManager();
uint8 op = abi.decode(data[:32], (uint8));
if (op == uint8(Op.SEED)) {
_seed(abi.decode(data[32:], (SeedData)));
} else {
_compound(abi.decode(data[32:], (PoolKey)));
}
return "";
}
// ───────────────────────────── seed ─────────────────────────────
function _seed(SeedData memory s) internal {
(BalanceDelta delta,) = poolManager.modifyLiquidity(
s.key,
ModifyLiquidityParams({tickLower: s.tickLower, tickUpper: s.tickUpper, liquidityDelta: int256(uint256(s.liquidity)), salt: 0}),
""
);
int128 owed0 = delta.amount0();
int128 owed1 = delta.amount1();
// Single-sided by construction -- see {LunchLpLockerImmutable._seed}. The QUOTE side must be
// exactly zero; being asked for it means the pool price moved between initialize() and the seed
// (the launcher's ethQuotePath zap hands control to an arbitrary intermediate hop token while the
// pool is initialised but unseeded), or that `quoteIsC0` disagrees with the key's real ordering.
// Either way, settling would spend this locker's SHARED quote balance, which backs every other
// pool's carried fees and every pendingQuoteRefund entry. Refuse rather than drain.
if (s.quoteIsC0 ? owed0 != 0 : owed1 != 0) revert SeedNotSingleSided();
if (owed0 < 0) s.key.currency0.settle(poolManager, address(this), uint256(uint128(-owed0)), false);
if (owed1 < 0) s.key.currency1.settle(poolManager, address(this), uint256(uint128(-owed1)), false);
if (s.devBuyQuote > 0) {
bool zeroForOne = s.quoteIsC0;
uint160 limit = zeroForOne ? TickMath.MIN_SQRT_PRICE + 1 : TickMath.MAX_SQRT_PRICE - 1;
BalanceDelta d = poolManager.swap(
s.key,
SwapParams({zeroForOne: zeroForOne, amountSpecified: -int256(s.devBuyQuote), sqrtPriceLimitX96: limit}),
""
);
(Currency quoteCur, Currency coinCur) = zeroForOne
? (s.key.currency0, s.key.currency1)
: (s.key.currency1, s.key.currency0);
int128 quoteDelta = zeroForOne ? d.amount0() : d.amount1();
int128 coinDelta = zeroForOne ? d.amount1() : d.amount0();
uint256 quoteSpent = quoteDelta < 0 ? uint256(uint128(-quoteDelta)) : 0;
if (quoteSpent > 0) quoteCur.settle(poolManager, address(this), quoteSpent, false);
if (coinDelta > 0) poolManager.take(coinCur, s.creator, uint256(uint128(coinDelta)));
if (quoteSpent < s.devBuyQuote) {
uint256 refundAmount = s.devBuyQuote - quoteSpent;
// Non-reverting push-then-fallback-to-pull, mirroring {LunchLpLockerImmutable}'s ETH-side
// fix: an uncapped dev-buy can legitimately partial-fill against the just-seeded
// single-sided range (no other liquidity exists in this brand-new pool yet), so a nonzero
// refund here is an expected, protocol-permitted outcome -- not just a rare edge case. The
// quote token can be any owner-allowlisted ERC20 (stock/stablecoin quotes are this
// platform's core use case), including ones with transfer-time restrictions (pause,
// compliance/KYC blacklist, transfer caps) that can revert for a specific recipient. A hard
// `safeTransfer` here would revert the ENTIRE launch (token deploy + pool init + seed),
// permanently DoS-ing that creator's ability to launch with that dev-buy size against that
// quote token. Instead: try the push once via a plain, non-reverting low-level call (so a
// reverting or malformed-return-data token can never unwind this frame), and if it fails,
// credit a pull-based mapping the creator (or anyone, on their behalf) can withdraw from
// later -- the launch always completes.
address quoteAddr = Currency.unwrap(quoteCur);
(bool ok, bytes memory ret) =
quoteAddr.call(abi.encodeCall(IERC20.transfer, (s.creator, refundAmount)));
// Compare the raw word rather than abi.decode(ret,(bool)): the decoder REVERTS on a
// word that is neither 0 nor 1, which would unwind the whole launch from inside the very
// raw-call construct chosen to make malformed return data survivable.
bool success = ok && (ret.length == 0 || (ret.length >= 32 && uint256(bytes32(ret)) != 0));
if (!success) {
pendingQuoteRefund[s.creator][quoteAddr] += refundAmount;
emit QuoteRefundQueued(s.creator, quoteAddr, refundAmount);
}
}
}
address coin = s.quoteIsC0 ? Currency.unwrap(s.key.currency1) : Currency.unwrap(s.key.currency0);
uint256 coinBal = IERC20(coin).balanceOf(address(this));
if (s.quoteIsC0) carried1[s.key.toId()] = coinBal; else carried0[s.key.toId()] = coinBal;
}
/// @notice Pull any leftover dev-buy quote-token refund(s) queued for `creator` (quote token `quote`).
/// Callable by anyone (funds always go to `creator`, never the caller) so a relayer/keeper can sweep it
/// on the creator's behalf. Uses SafeERC20 here (unlike the try-push in {_seed}) since a revert on
/// withdrawal simply reverts this standalone call, not an entire launch transaction.
function withdrawQuoteRefund(address creator, address quote) external nonReentrant {
uint256 amount = pendingQuoteRefund[creator][quote];
if (amount == 0) revert NothingToWithdraw();
pendingQuoteRefund[creator][quote] = 0;
IERC20(quote).safeTransfer(creator, amount);
emit QuoteRefundWithdrawn(creator, quote, amount);
}
// ─────────────────────────── compound ───────────────────────────
function _compound(PoolKey memory key) internal {
PoolId id = key.toId();
PoolInfo memory p = poolInfo[id];
(, BalanceDelta fees) = poolManager.modifyLiquidity(
key,
ModifyLiquidityParams({tickLower: p.tickLower, tickUpper: p.tickUpper, liquidityDelta: 0, salt: 0}),
""
);
uint256 fee0 = fees.amount0() > 0 ? uint256(uint128(fees.amount0())) : 0;
uint256 fee1 = fees.amount1() > 0 ? uint256(uint128(fees.amount1())) : 0;
if (fee0 > 0) key.currency0.take(poolManager, address(this), fee0, false);
if (fee1 > 0) key.currency1.take(poolManager, address(this), fee1, false);
uint256 total0 = carried0[id] + fee0;
uint256 total1 = carried1[id] + fee1;
(uint160 sqrtP,,,) = poolManager.getSlot0(id);
uint128 liq = _liquidityForAmounts(
sqrtP, TickMath.getSqrtPriceAtTick(p.tickLower), TickMath.getSqrtPriceAtTick(p.tickUpper), total0, total1
);
// Mirror the launchers' own seed-time cap (Pool.tickSpacingToMaxLiquidityPerTick) here too: without
// this, a sufficiently fee-rich pool could compute a `liq` that makes modifyLiquidity revert
// unconditionally, and since carried0/carried1 are only written AFTER a successful add, that revert
// would repeat forever on every future compound() call, permanently bricking compounding and
// stranding all accrued fees (this contract has no removal/withdrawal path). Clamping instead lets
// the add proceed at the max allowed size; the un-added remainder simply stays carried for next time.
// The cap is PER-TICK and cumulative across every position touching that tick (including this
// pool's own existing seed liquidity), so we clamp to the REMAINING headroom at each tick boundary
// this position touches, not just the absolute ceiling -- otherwise a position that already holds
// liquidity at tickLower/tickUpper could still overflow when adding only `maxLiq` more on top.
uint128 maxLiq = Pool.tickSpacingToMaxLiquidityPerTick(key.tickSpacing);
(uint128 grossLower,) = poolManager.getTickLiquidity(id, p.tickLower);
(uint128 grossUpper,) = poolManager.getTickLiquidity(id, p.tickUpper);
uint128 headroom = maxLiq - (grossLower > grossUpper ? grossLower : grossUpper);
if (liq > headroom) {
emit CompoundClamped(id, liq, headroom, headroom);
liq = headroom;
}
if (liq == 0) {
carried0[id] = total0;
carried1[id] = total1;
return;
}
(BalanceDelta d,) = poolManager.modifyLiquidity(
key,
ModifyLiquidityParams({tickLower: p.tickLower, tickUpper: p.tickUpper, liquidityDelta: int256(uint256(liq)), salt: 0}),
""
);
uint256 used0 = d.amount0() < 0 ? uint256(uint128(-d.amount0())) : 0;
uint256 used1 = d.amount1() < 0 ? uint256(uint128(-d.amount1())) : 0;
if (used0 > 0) key.currency0.settle(poolManager, address(this), used0, false);
if (used1 > 0) key.currency1.settle(poolManager, address(this), used1, false);
carried0[id] = total0 - used0;
carried1[id] = total1 - used1;
emit Compounded(id, liq, used0, used1);
}
// ─────────────────── vendored LiquidityAmounts (subset) ───────────────────
function _liquidityForAmount0(uint160 sqrtA, uint160 sqrtB, uint256 amount0) private pure returns (uint128) {
if (sqrtA > sqrtB) (sqrtA, sqrtB) = (sqrtB, sqrtA);
uint256 intermediate = FullMath.mulDiv(sqrtA, sqrtB, Q96);
uint256 l0 = FullMath.mulDiv(amount0, intermediate, sqrtB - sqrtA);
// SATURATE rather than truncate. A bare uint256 -> uint128 cast wraps silently in 0.8.x, which
// would size the position from the low 128 bits -- arbitrarily and undetectably wrong. Reverting is
// also wrong here: this feeds _compound, where a revert is permanent (carried* is only written
// after a successful add, so the same inputs recur forever and compounding bricks). Clamping is
// safe because every caller bounds the result again afterwards -- _compound against the per-tick
// headroom, the launchers against tickSpacingToMaxLiquidityPerTick.
return l0 > type(uint128).max ? type(uint128).max : uint128(l0);
}
function _liquidityForAmount1(uint160 sqrtA, uint160 sqrtB, uint256 amount1) private pure returns (uint128) {
if (sqrtA > sqrtB) (sqrtA, sqrtB) = (sqrtB, sqrtA);
uint256 l1 = FullMath.mulDiv(amount1, Q96, sqrtB - sqrtA);
return l1 > type(uint128).max ? type(uint128).max : uint128(l1);
}
function _liquidityForAmounts(uint160 sqrtP, uint160 sqrtA, uint160 sqrtB, uint256 amount0, uint256 amount1)
private pure returns (uint128 liquidity)
{
if (sqrtA > sqrtB) (sqrtA, sqrtB) = (sqrtB, sqrtA);
if (sqrtP <= sqrtA) {
liquidity = _liquidityForAmount0(sqrtA, sqrtB, amount0);
} else if (sqrtP < sqrtB) {
uint128 l0 = _liquidityForAmount0(sqrtP, sqrtB, amount0);
uint128 l1 = _liquidityForAmount1(sqrtA, sqrtP, amount1);
liquidity = l0 < l1 ? l0 : l1;
} else {
liquidity = _liquidityForAmount1(sqrtA, sqrtB, amount1);
}
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "pm",
"type": "address",
"internalType": "contract IPoolManager"
},
{
"name": "owner_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadySeeded",
"type": "error",
"inputs": []
},
{
"name": "BadLiquidity",
"type": "error",
"inputs": []
},
{
"name": "LauncherAlreadySet",
"type": "error",
"inputs": []
},
{
"name": "LauncherNotSet",
"type": "error",
"inputs": []
},
{
"name": "NotLauncher",
"type": "error",
"inputs": []
},
{
"name": "NotOwner",
"type": "error",
"inputs": []
},
{
"name": "NotPendingOwner",
"type": "error",
"inputs": []
},
{
"name": "NotPoolManager",
"type": "error",
"inputs": []
},
{
"name": "NotSeeded",
"type": "error",
"inputs": []
},
{
"name": "NothingToWithdraw",
"type": "error",
"inputs": []
},
{
"name": "ReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "SeedNotSingleSided",
"type": "error",
"inputs": []
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "ZeroOwner",
"type": "error",
"inputs": []
},
{
"name": "CompoundClamped",
"type": "event",
"inputs": [
{
"name": "poolId",
"type": "bytes32",
"indexed": true,
"internalType": "PoolId"
},
{
"name": "desiredLiquidity",
"type": "uint128",
"indexed": false,
"internalType": "uint128"
},
{
"name": "clampedLiquidity",
"type": "uint128",
"indexed": false,
"internalType": "uint128"
},
{
"name": "headroom",
"type": "uint128",
"indexed": false,
"internalType": "uint128"
}
],
"anonymous": false
},
{
"name": "Compounded",
"type": "event",
"inputs": [
{
"name": "poolId",
"type": "bytes32",
"indexed": true,
"internalType": "PoolId"
},
{
"name": "addedLiquidity",
"type": "uint128",
"indexed": false,
"internalType": "uint128"
},
{
"name": "used0",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "used1",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "LauncherSet",
"type": "event",
"inputs": [
{
"name": "launcher",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferStarted",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "QuoteRefundQueued",
"type": "event",
"inputs": [
{
"name": "creator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "quote",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "QuoteRefundWithdrawn",
"type": "event",
"inputs": [
{
"name": "creator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "quote",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Seeded",
"type": "event",
"inputs": [
{
"name": "poolId",
"type": "bytes32",
"indexed": true,
"internalType": "PoolId"
},
{
"name": "liquidity",
"type": "uint128",
"indexed": false,
"internalType": "uint128"
},
{
"name": "tickLower",
"type": "int24",
"indexed": false,
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"indexed": false,
"internalType": "int24"
}
],
"anonymous": false
},
{
"name": "acceptOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "carried0",
"type": "function",
"inputs": [
{
"name": "",
"type": "bytes32",
"internalType": "PoolId"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "carried1",
"type": "function",
"inputs": [
{
"name": "",
"type": "bytes32",
"internalType": "PoolId"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "compound",
"type": "function",
"inputs": [
{
"name": "key",
"type": "tuple",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
],
"internalType": "struct PoolKey"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "launch",
"type": "function",
"inputs": [
{
"name": "key",
"type": "tuple",
"components": [
{
"name": "currency0",
"type": "address",
"internalType": "Currency"
},
{
"name": "currency1",
"type": "address",
"internalType": "Currency"
},
{
"name": "fee",
"type": "uint24",
"internalType": "uint24"
},
{
"name": "tickSpacing",
"type": "int24",
"internalType": "int24"
},
{
"name": "hooks",
"type": "address",
"internalType": "contract IHooks"
}
],
"internalType": "struct PoolKey"
},
{
"name": "liquidity",
"type": "uint128",
"internalType": "uint128"
},
{
"name": "tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "creator",
"type": "address",
"internalType": "address"
},
{
"name": "quoteIsC0",
"type": "bool",
"internalType": "bool"
},
{
"name": "devBuyQuote",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "launcher",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pendingOwner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pendingQuoteRefund",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "poolInfo",
"type": "function",
"inputs": [
{
"name": "",
"type": "bytes32",
"internalType": "PoolId"
}
],
"outputs": [
{
"name": "tickLower",
"type": "int24",
"internalType": "int24"
},
{
"name": "tickUpper",
"type": "int24",
"internalType": "int24"
},
{
"name": "seeded",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "poolManager",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IPoolManager"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setLauncher",
"type": "function",
"inputs": [
{
"name": "launcher_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "unlockCallback",
"type": "function",
"inputs": [
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"stateMutability": "nonpayable"
},
{
"name": "withdrawQuoteRefund",
"type": "function",
"inputs": [
{
"name": "creator",
"type": "address",
"internalType": "address"
},
{
"name": "quote",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x60a03461010457601f61249638819003918201601f19168301916001600160401b038311848410176101085780849260409485528339810103126101045780516001600160a01b0381169182820361010457602001516001600160a01b03811692908390036101045782156100f5575f80546001600160a01b03191684178155600160025560405193907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3156100e657608052612379908161011d82396080518181816102430152818161046d015281816105ce01528181610e5d01526115a60152f35b63d92e233d60e01b5f5260045ffd5b639905827b60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816316eebd1e14611141575080631a47d3f7146110f15780634f77746f14611020578063715018a614610f7b57806372b3ffae14610f5157806379ba509714610ed15780637eb75e5014610d705780638cebd94214610d295780638da5cb5b14610d0257806391dd73461461057b578063937477ce14610551578063d0836e2d14610272578063dc4c90d31461022d578063e30c397814610204578063f2fde38b146101805763f4c094c8146100ce575f80fd5b3461017d57602036600319011261017d576100e7611164565b81546001600160a01b0316330361016e57600354906001600160a01b03821661015f576001600160a01b0316908115610150576001600160a01b03191681176003557f1a5fd50023d8e6487319f2afbf672c5e7b46c48d30a560cb77ab4c328db29f568280a280f35b639e6ff73960e01b8352600483fd5b634d4ee9e760e01b8352600483fd5b6330cd747160e01b8252600482fd5b80fd5b503461017d57602036600319011261017d5761019a611164565b81546001600160a01b031690338290036101f557600180546001600160a01b0319166001600160a01b03929092169182179055907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b6330cd747160e01b8352600483fd5b503461017d578060031936011261017d576001546040516001600160a01b039091168152602090f35b503461017d578060031936011261017d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b503461017d573660031901610160811261054d5760a01361017d5760a435906001600160801b0382168092036105495760c435918260020b8093036105495760e435928360020b80940361054957610104356001600160a01b038116929083900361054957610124359485151580960361054957600280541461053a57600280556003546001600160a01b0316330361052b5760a061031036611282565b2093848652600460205260ff604087205460301c1661051c57821561050d57948096610468959660405161034381611228565b8681526020810185815260408201600181528a865260046020526040862092519162ffffff66ff0000000000008554925160181b9351151560301b1693169066ffffffffffffff1916179065ffffff0000001617179055604051916103a7836111dc565b6103b036611282565b835260208301918683526040840188815260608501908782526080860192835260a086019384526001600160801b0360c0870195610144358752610402604051988a60208b015260408a0190516113f9565b511660e08701525160020b6101008601525160020b61012085015260018060a01b0390511661014084015251151561016083015251610180820152610180815261044e6101a082611260565b604051809681926348c8949160e01b8352600483016111a4565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1928315610502577f1657bda50ff559ccf0f81e5d7ee5fa32acf936fdba6b1cf362bab0c22b9a6350946060946104e2575b5060405192835260208301526040820152a2600160025580f35b6104fd903d808a833e6104f58183611260565b810190611396565b6104c8565b6040513d88823e3d90fd5b63ea554ba360e01b8652600486fd5b6308627e3960e31b8652600486fd5b639e6ff73960e01b8552600485fd5b6306fda65d60e31b8552600485fd5b5f80fd5b5080fd5b503461017d57602036600319011261017d5760406020916004358152600583522054604051908152f35b346105495760203660031901126105495760043567ffffffffffffffff811161054957366023820112156105495780600401359067ffffffffffffffff82116105495781810160248101368111610549577f00000000000000000000000000000000000000000000000000000000000000009160018060a01b03831694853303610cf3576020118061054957602485013560ff811680910361054957610cc25761054957610160906024856043199203010112610549575f9161064d60405192610644846111dc565b60448601611309565b9485835260e4850135916001600160801b0383169283810361054957602085015261067b61010487016111ce565b9283604086015261068f61012488016111ce565b8060608701526106a26101448901611190565b9460808701958652610164890135998a15158b03610549576107119360409360a08a019c8d5261018460c08b019c01358c528451936106e08561120c565b600290810b85520b6020840152838301525f60608301528251632d35e7ed60e11b81529384928392600484016114d3565b03815f875af1908115610b5e575f91610c92575b508751600f82900b9160801d9015610c8a5780600f0b15155b610c7b575f81600f0b12610c4b575b505f8112610c18575b508551610855575b50508451602494501590506108415780516020908101516001600160a01b03165b6040516370a0823160e01b815230600482015294859182906001600160a01b03165afa928315610836578293610801575b5060a090604093945115155f146107f15751208152600660205220555b6107ed6040516107de602082611260565b5f8152604051918291826111a4565b0390f35b51208152600560205220556107cd565b9092506020813d60201161082e575b8161081d60209383611260565b8101031261054957519160a06107b0565b3d9150610810565b6040513d84823e3d90fd5b8051516020906001600160a01b031661077f565b86511580159690610bfd576401000276a4965b8551978251600160ff1b8114610be95760405161088481611228565b83815260208101915f038252604081019260018060a01b031683526108ba6040519b633cf3645360e21b8d5260048d01906113f9565b51151560a48b01525160c48a015260018060a01b0390511660e48901526101206101048901525f610124890152602088610144815f885af1978815610b5e575f98610bb5575b508015610b9757855180516020909101516001600160a01b0390811699911694905b8215610b8d578060801d925b15610b8457600f0b915b5f81600f0b125f14610b7c576109556001600160801b039161152e565b16935b8480610b69575b50505f82600f0b13610adc575b5050602496505190818110610982575b5061075e565b61098b9161154e565b825160405163a9059cbb60e01b602082019081526001600160a01b03928316898301526044808301859052825291909316939192869182916109ce606482611260565b519082875af13d15610ad5573d6109e48161137a565b906109f26040519283611260565b81523d87602083013e5b81610a7f575b5015610a0f575b8061097c565b60207f55fa7d6dca64f08e35250b5cd60450c266019da89bbcc418beb78ff671c9eb729160018060a01b038151168752600782526040872060018060a01b0386165f52825260405f20610a63858254611521565b9055516040519384526001600160a01b031692a3848080610a09565b8051801592508215610a94575b505088610a02565b60208110801593509183610aad575b5050508880610a8c565b60200151925090610ac4575b501515888080610aa3565b5f199060200360031b1b1688610ab9565b60606109fc565b85516001600160a01b031690803b1561054957604051630b0d9c0960e01b81526001600160a01b039a8b1660048201529190991660248201526001600160801b03919091166044820152965f908890606490829084905af1968715610b5e57602497610b49575b8061096c565b610b569196505f90611260565b5f9488610b43565b6040513d5f823e3d90fd5b610b7591309088611f3e565b8a8461095f565b505f93610958565b60801d91610938565b80600f0b9261092e565b8551602081015190516001600160a01b039081169991169490610922565b9097506020813d602011610be1575b81610bd160209383611260565b8101031261054957519689610900565b3d9150610bc4565b634e487b7160e01b5f52601160045260245ffd5b73fffd8963efd1fc6a506488495d951d5263988d2596610868565b610c45906001600160801b03610c3b60018060a01b03602089510151169261152e565b1690833091611f3e565b87610756565b610c75906001600160801b03610c6b60018060a01b03895151169261152e565b1690843091611f3e565b8861074d565b636529083d60e11b5f5260045ffd5b81151561073e565b610cb4915060403d604011610cbb575b610cac8183611260565b8101906114bd565b5088610725565b503d610ca2565b5090935060a09150602483604319920301011261054957610cee916044610ce99201611309565b61155b565b6107cd565b63570c108560e11b5f5260045ffd5b34610549575f366003190112610549575f546040516001600160a01b039091168152602090f35b34610549576020366003190112610549576004355f526004602052606060405f205460ff604051918060020b83528060181c60020b602084015260301c1615156040820152f35b346105495760a0366003190112610549576002805414610ec2576002805560a0610d9936611282565b205f52600460205260ff60405f205460301c1615610eb357604051600160208201526001600160a01b03610dcb611164565b1660408201526001600160a01b03610de161117a565b16606082015260443562ffffff81168091036105495760808201526064358060020b8091036105495760a08201526084356001600160a01b0381169081900361054957815f9160c0610e5894015260c08152610e3e60e082611260565b604051809381926348c8949160e01b8352600483016111a4565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610b5e57610e99575b6001600255005b610eac903d805f833e6104f58183611260565b5080610e92565b630f473f7560e01b5f5260045ffd5b6306fda65d60e31b5f5260045ffd5b34610549575f366003190112610549576001546001600160a01b0381169033829003610f42575f80546001600160a01b0319808216851783559092166001556001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b630614e5c760e21b5f5260045ffd5b34610549576020366003190112610549576004355f526006602052602060405f2054604051908152f35b34610549575f366003190112610549575f546001600160a01b03811633819003611011576003546001600160a01b031615611002575f916bffffffffffffffffffffffff60a01b1682556bffffffffffffffffffffffff60a01b600154166001557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b63126381b760e21b5f5260045ffd5b6330cd747160e01b5f5260045ffd5b3461054957604036600319011261054957611039611164565b61104161117a565b6002805414610ec257600280556001600160a01b038281165f81815260076020908152604080832094861683529390529190912054909181156110e257816110d47f775003743dab4fff2879582a1f8861d1cbe2dc65e12cb2d21ceae3fc6db3f3d693602093865f526007855260405f2060018060a01b0382165f5285525f604081205560018060a01b0316968761143c565b604051908152a36001600255005b630686827b60e51b5f5260045ffd5b346105495760403660031901126105495761110a611164565b61111261117a565b6001600160a01b039182165f908152600760209081526040808320949093168252928352819020549051908152f35b34610549575f366003190112610549576003546001600160a01b03168152602090f35b600435906001600160a01b038216820361054957565b602435906001600160a01b038216820361054957565b35906001600160a01b038216820361054957565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b35908160020b820361054957565b60e0810190811067ffffffffffffffff8211176111f857604052565b634e487b7160e01b5f52604160045260245ffd5b6080810190811067ffffffffffffffff8211176111f857604052565b6060810190811067ffffffffffffffff8211176111f857604052565b60a0810190811067ffffffffffffffff8211176111f857604052565b90601f8019910116810190811067ffffffffffffffff8211176111f857604052565b60a0906003190112610549576040519061129b82611244565b816004356001600160a01b03811681036105495781526024356001600160a01b038116810361054957602082015260443562ffffff811681036105495760408201526064358060020b8103610549576060820152608435906001600160a01b03821682036105495760800152565b91908260a09103126105495760405161132181611244565b809261132c81611190565b825261133a60208201611190565b602083015260408101359062ffffff82168203610549576080611375918193604086015261136a606082016111ce565b606086015201611190565b910152565b67ffffffffffffffff81116111f857601f01601f191660200190565b6020818303126105495780519067ffffffffffffffff8211610549570181601f82011215610549578051906113ca8261137a565b926113d86040519485611260565b8284526020838301011161054957815f9260208093018386015e8301015290565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f511482161561149c575b6040521561147c5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b9060018115166114b457823b15153d15161690611471565b503d5f823e3d90fd5b9190826040910312610549576020825192015190565b90610160926114e4836060936113f9565b805160020b60a0840152602081015160020b60c0840152604081015160e084015201516101008201526101406101208201525f6101408201520190565b91908201809211610be957565b600f0b6f7fffffffffffffffffffffffffffffff198114610be9575f0390565b91908203918211610be957565b60a08120805f52600460205260405f206040519061157882611228565b54908160020b938482526116088360181c60020b9560ff602085019588875260301c161515604085015260407f00000000000000000000000000000000000000000000000000000000000000009160018060a01b038316988251916115dc8361120c565b825260208201525f828201525f6060820152815180948192632d35e7ed60e11b835287600484016114d3565b03815f8b5af1918215610b5e575f92611a9e575b508160801d5f81600f0b135f14611a96576001600160801b0316915b5f81600f0b135f14611a88576116746001600160801b036116879216935b80611a69575b84611a47575b885f52600560205260405f2054611521565b92875f52600660205260405f2054611521565b946116918761211b565b60405190631e2eaeaf60e01b825260048201526020816024818c5afa908115610b5e575f91611a15575b5060018060a01b0316836116d2875160020b611b59565b91886116e1855160020b611b59565b9182856001600160a01b0380831690821611611a09575b50506001600160a01b03851681116119a9575050611715926121a2565b80606086015160020b6001600160801b036001818c61174a61173c8d5160020b838c611e86565b5091895160020b908b611e86565b5080831682841611156119a257505b16925f81620d89e719071281620d89e719050390620d89e8050301810416036001600160801b038111610be9576001600160801b03928a90841682851680821161195e575b505050501694851561193b575f9697986040926117f8925160020b905160020b8451916117ca8361120c565b8252602082015287848201528860608201528351988980948193632d35e7ed60e11b83528a600484016114d3565b03925af1908115610b5e577f34c416f797ee1290098844ca787450a1ad2f018db3142a9a017e3fb69bed738d966118936118a5936060985f9161191b575b508060801d5f81600f0b125f14611911576118586001600160801b039161152e565b169586915b600f0b5f811215611906576118796001600160801b039161152e565b16978880965b846118e7575b816118c5575b50505061154e565b895f52600560205260405f205561154e565b865f52600660205260405f205560405192835260208301526040820152a2565b6020909201516118df9230916001600160a01b0316611f3e565b5f858161188b565b8251611901908690309084906001600160a01b0316611f3e565b611885565b505f9788809661187f565b505f95869161185d565b611934915060403d604011610cbb57610cac8183611260565b505f611836565b5050509294505050815f52600560205260405f20555f52600660205260405f2055565b7fef85a8305615df5895e94925ff3c67fe78a5b4e51c6e509a6a785de786dd92db92939450906060916040519182528060208301526040820152a25f89818061179e565b9050611759565b909290916001600160a01b0381168310156119fd5782916119ce916119d495946121a2565b93612141565b6001600160801b0381166001600160801b038316105f146119f657505b611715565b9050611715565b9150506119f192612141565b90955092505f806116f8565b90506020813d602011611a3f575b81611a3060209383611260565b8101031261054957515f6116bb565b3d9150611a23565b6020860151611a64908690309087906001600160a01b0316611ae9565b611662565b8551611a83908290309087906001600160a01b0316611ae9565b61165c565b506116876116745f93611656565b505f91611638565b611ab891925060403d604011610cbb57610cac8183611260565b9050905f61161c565b6001600160a01b039182169082160391908211610be957565b90816020910312610549575190565b9192908115611b53576001600160a01b0316803b1561054957604051630b0d9c0960e01b81526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af18015610b5e57611b475750565b5f611b5191611260565b565b50505050565b60020b908160ff1d82810118620d89e88111611e735763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116611e57575b60048116611e3b575b60088116611e1f575b60108116611e03575b60208116611de7575b60408116611dcb575b60808116611daf575b6101008116611d93575b6102008116611d77575b6104008116611d5b575b6108008116611d3f575b6110008116611d23575b6120008116611d07575b6140008116611ceb575b6180008116611ccf575b620100008116611cb3575b620200008116611c98575b620400008116611c7d575b6208000016611c64575b5f12611c5c575b0160201c90565b5f1904611c55565b6b048a170391f7dc42444e8fa290910260801c90611c4e565b6d2216e584f5fa1ea926041bedfe9890920260801c91611c44565b916e5d6af8dedb81196699c329225ee6040260801c91611c39565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91611c2e565b916f31be135f97d08fd981231505542fcfa60260801c91611c23565b916f70d869a156d2a1b890bb3df62baf32f70260801c91611c19565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91611c0f565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91611c05565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91611bfb565b916ff3392b0822b70005940c7a398e4b70f30260801c91611bf1565b916ff987a7253ac413176f2b074cf7815e540260801c91611be7565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91611bdd565b916ffe5dee046a99a2a811c461f1969c30530260801c91611bd3565b916fff2ea16466c96a3843ec78b326b528610260801c91611bca565b916fff973b41fa98c081472e6896dfb254c00260801c91611bc1565b916fffcb9843d60f6159c9db58835c9266440260801c91611bb8565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91611baf565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91611ba6565b916ffff97272373d413259a46990580e213a0260801c91611b9d565b826345c3193d60e11b5f5260045260245ffd5b9190611e919061211b565b9060048201809211610be957602091604051908382019260020b8352604082015260408152611ec1606082611260565b519020604051631e2eaeaf60e01b8152600481019190915291829060249082906001600160a01b03165afa908115610b5e575f91611f0c575b506001600160801b038160801d911691565b90506020813d602011611f36575b81611f2760209383611260565b8101031261054957515f611efa565b3d9150611f1a565b8315611b53576001600160a01b0316918261200357506001600160a01b0316803b156105495760405191632961046560e21b835260048301525a915f8160248183868198f18015610b5e57611fed575b50602090600460405180958193630476982d60e21b83525af1908115611fe15750611fb65750565b611fd79060203d602011611fda575b611fcf8183611260565b810190611ada565b50565b503d611fc5565b604051903d90823e3d90fd5b611ffa9192505f90611260565b5f906020611f8e565b926001600160a01b039091169190823b1561054957604051632961046560e21b815260048101839052935a945f816024818389819bf18015610b5e57612106575b506001600160a01b031690843083146120f15750604051916323b872dd60e01b86526004528360245260445260208460648180865af19060018551148216156120d0575b60405283606052156120be5750602082915b600460405180958193630476982d60e21b83525af1908115611fe15750611fb65750565b635274afe760e01b8352600452602482fd5b9060018115166120e857823b15153d15161690612088565b503d84823e3d90fd5b939150612101908260209461143c565b61209a565b6121139195505f90611260565b5f935f612044565b60405160208101918252600660408201526040815261213b606082611260565b51902090565b6121759291906001600160a01b038083169082161161219c575b6001600160a01b039161216e9190611ac1565b16906121f0565b6001600160801b0381111561219057506001600160801b0390565b6001600160801b031690565b9061215b565b61217592916001600160a01b03808216908316116121ea575b6121e36121d46001600160a01b0383811690851661227a565b926001600160a01b0392611ac1565b16916122c3565b906121bb565b90606082901b905f19600160601b8409928280851094039380850394858411156105495714612273578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b111561054957146122ba57600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f1981850993838086109503948086039586851115610549571461233b579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50509150049056fea2646970667358221220156ae0287e4fc190a4b4943eec9e1bc941b519a87939eecd42b6bfeab076e7aa64736f6c634300081e00330000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409510000000000000000000000007b2daf7f696bb844c7786693062d6619d1858cc9
0x6080806040526004361015610012575f80fd5b5f905f3560e01c90816316eebd1e14611141575080631a47d3f7146110f15780634f77746f14611020578063715018a614610f7b57806372b3ffae14610f5157806379ba509714610ed15780637eb75e5014610d705780638cebd94214610d295780638da5cb5b14610d0257806391dd73461461057b578063937477ce14610551578063d0836e2d14610272578063dc4c90d31461022d578063e30c397814610204578063f2fde38b146101805763f4c094c8146100ce575f80fd5b3461017d57602036600319011261017d576100e7611164565b81546001600160a01b0316330361016e57600354906001600160a01b03821661015f576001600160a01b0316908115610150576001600160a01b03191681176003557f1a5fd50023d8e6487319f2afbf672c5e7b46c48d30a560cb77ab4c328db29f568280a280f35b639e6ff73960e01b8352600483fd5b634d4ee9e760e01b8352600483fd5b6330cd747160e01b8252600482fd5b80fd5b503461017d57602036600319011261017d5761019a611164565b81546001600160a01b031690338290036101f557600180546001600160a01b0319166001600160a01b03929092169182179055907f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b6330cd747160e01b8352600483fd5b503461017d578060031936011261017d576001546040516001600160a01b039091168152602090f35b503461017d578060031936011261017d576040517f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b03168152602090f35b503461017d573660031901610160811261054d5760a01361017d5760a435906001600160801b0382168092036105495760c435918260020b8093036105495760e435928360020b80940361054957610104356001600160a01b038116929083900361054957610124359485151580960361054957600280541461053a57600280556003546001600160a01b0316330361052b5760a061031036611282565b2093848652600460205260ff604087205460301c1661051c57821561050d57948096610468959660405161034381611228565b8681526020810185815260408201600181528a865260046020526040862092519162ffffff66ff0000000000008554925160181b9351151560301b1693169066ffffffffffffff1916179065ffffff0000001617179055604051916103a7836111dc565b6103b036611282565b835260208301918683526040840188815260608501908782526080860192835260a086019384526001600160801b0360c0870195610144358752610402604051988a60208b015260408a0190516113f9565b511660e08701525160020b6101008601525160020b61012085015260018060a01b0390511661014084015251151561016083015251610180820152610180815261044e6101a082611260565b604051809681926348c8949160e01b8352600483016111a4565b0381837f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b03165af1928315610502577f1657bda50ff559ccf0f81e5d7ee5fa32acf936fdba6b1cf362bab0c22b9a6350946060946104e2575b5060405192835260208301526040820152a2600160025580f35b6104fd903d808a833e6104f58183611260565b810190611396565b6104c8565b6040513d88823e3d90fd5b63ea554ba360e01b8652600486fd5b6308627e3960e31b8652600486fd5b639e6ff73960e01b8552600485fd5b6306fda65d60e31b8552600485fd5b5f80fd5b5080fd5b503461017d57602036600319011261017d5760406020916004358152600583522054604051908152f35b346105495760203660031901126105495760043567ffffffffffffffff811161054957366023820112156105495780600401359067ffffffffffffffff82116105495781810160248101368111610549577f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409519160018060a01b03831694853303610cf3576020118061054957602485013560ff811680910361054957610cc25761054957610160906024856043199203010112610549575f9161064d60405192610644846111dc565b60448601611309565b9485835260e4850135916001600160801b0383169283810361054957602085015261067b61010487016111ce565b9283604086015261068f61012488016111ce565b8060608701526106a26101448901611190565b9460808701958652610164890135998a15158b03610549576107119360409360a08a019c8d5261018460c08b019c01358c528451936106e08561120c565b600290810b85520b6020840152838301525f60608301528251632d35e7ed60e11b81529384928392600484016114d3565b03815f875af1908115610b5e575f91610c92575b508751600f82900b9160801d9015610c8a5780600f0b15155b610c7b575f81600f0b12610c4b575b505f8112610c18575b508551610855575b50508451602494501590506108415780516020908101516001600160a01b03165b6040516370a0823160e01b815230600482015294859182906001600160a01b03165afa928315610836578293610801575b5060a090604093945115155f146107f15751208152600660205220555b6107ed6040516107de602082611260565b5f8152604051918291826111a4565b0390f35b51208152600560205220556107cd565b9092506020813d60201161082e575b8161081d60209383611260565b8101031261054957519160a06107b0565b3d9150610810565b6040513d84823e3d90fd5b8051516020906001600160a01b031661077f565b86511580159690610bfd576401000276a4965b8551978251600160ff1b8114610be95760405161088481611228565b83815260208101915f038252604081019260018060a01b031683526108ba6040519b633cf3645360e21b8d5260048d01906113f9565b51151560a48b01525160c48a015260018060a01b0390511660e48901526101206101048901525f610124890152602088610144815f885af1978815610b5e575f98610bb5575b508015610b9757855180516020909101516001600160a01b0390811699911694905b8215610b8d578060801d925b15610b8457600f0b915b5f81600f0b125f14610b7c576109556001600160801b039161152e565b16935b8480610b69575b50505f82600f0b13610adc575b5050602496505190818110610982575b5061075e565b61098b9161154e565b825160405163a9059cbb60e01b602082019081526001600160a01b03928316898301526044808301859052825291909316939192869182916109ce606482611260565b519082875af13d15610ad5573d6109e48161137a565b906109f26040519283611260565b81523d87602083013e5b81610a7f575b5015610a0f575b8061097c565b60207f55fa7d6dca64f08e35250b5cd60450c266019da89bbcc418beb78ff671c9eb729160018060a01b038151168752600782526040872060018060a01b0386165f52825260405f20610a63858254611521565b9055516040519384526001600160a01b031692a3848080610a09565b8051801592508215610a94575b505088610a02565b60208110801593509183610aad575b5050508880610a8c565b60200151925090610ac4575b501515888080610aa3565b5f199060200360031b1b1688610ab9565b60606109fc565b85516001600160a01b031690803b1561054957604051630b0d9c0960e01b81526001600160a01b039a8b1660048201529190991660248201526001600160801b03919091166044820152965f908890606490829084905af1968715610b5e57602497610b49575b8061096c565b610b569196505f90611260565b5f9488610b43565b6040513d5f823e3d90fd5b610b7591309088611f3e565b8a8461095f565b505f93610958565b60801d91610938565b80600f0b9261092e565b8551602081015190516001600160a01b039081169991169490610922565b9097506020813d602011610be1575b81610bd160209383611260565b8101031261054957519689610900565b3d9150610bc4565b634e487b7160e01b5f52601160045260245ffd5b73fffd8963efd1fc6a506488495d951d5263988d2596610868565b610c45906001600160801b03610c3b60018060a01b03602089510151169261152e565b1690833091611f3e565b87610756565b610c75906001600160801b03610c6b60018060a01b03895151169261152e565b1690843091611f3e565b8861074d565b636529083d60e11b5f5260045ffd5b81151561073e565b610cb4915060403d604011610cbb575b610cac8183611260565b8101906114bd565b5088610725565b503d610ca2565b5090935060a09150602483604319920301011261054957610cee916044610ce99201611309565b61155b565b6107cd565b63570c108560e11b5f5260045ffd5b34610549575f366003190112610549575f546040516001600160a01b039091168152602090f35b34610549576020366003190112610549576004355f526004602052606060405f205460ff604051918060020b83528060181c60020b602084015260301c1615156040820152f35b346105495760a0366003190112610549576002805414610ec2576002805560a0610d9936611282565b205f52600460205260ff60405f205460301c1615610eb357604051600160208201526001600160a01b03610dcb611164565b1660408201526001600160a01b03610de161117a565b16606082015260443562ffffff81168091036105495760808201526064358060020b8091036105495760a08201526084356001600160a01b0381169081900361054957815f9160c0610e5894015260c08152610e3e60e082611260565b604051809381926348c8949160e01b8352600483016111a4565b0381837f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b03165af18015610b5e57610e99575b6001600255005b610eac903d805f833e6104f58183611260565b5080610e92565b630f473f7560e01b5f5260045ffd5b6306fda65d60e31b5f5260045ffd5b34610549575f366003190112610549576001546001600160a01b0381169033829003610f42575f80546001600160a01b0319808216851783559092166001556001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b630614e5c760e21b5f5260045ffd5b34610549576020366003190112610549576004355f526006602052602060405f2054604051908152f35b34610549575f366003190112610549575f546001600160a01b03811633819003611011576003546001600160a01b031615611002575f916bffffffffffffffffffffffff60a01b1682556bffffffffffffffffffffffff60a01b600154166001557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b63126381b760e21b5f5260045ffd5b6330cd747160e01b5f5260045ffd5b3461054957604036600319011261054957611039611164565b61104161117a565b6002805414610ec257600280556001600160a01b038281165f81815260076020908152604080832094861683529390529190912054909181156110e257816110d47f775003743dab4fff2879582a1f8861d1cbe2dc65e12cb2d21ceae3fc6db3f3d693602093865f526007855260405f2060018060a01b0382165f5285525f604081205560018060a01b0316968761143c565b604051908152a36001600255005b630686827b60e51b5f5260045ffd5b346105495760403660031901126105495761110a611164565b61111261117a565b6001600160a01b039182165f908152600760209081526040808320949093168252928352819020549051908152f35b34610549575f366003190112610549576003546001600160a01b03168152602090f35b600435906001600160a01b038216820361054957565b602435906001600160a01b038216820361054957565b35906001600160a01b038216820361054957565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b35908160020b820361054957565b60e0810190811067ffffffffffffffff8211176111f857604052565b634e487b7160e01b5f52604160045260245ffd5b6080810190811067ffffffffffffffff8211176111f857604052565b6060810190811067ffffffffffffffff8211176111f857604052565b60a0810190811067ffffffffffffffff8211176111f857604052565b90601f8019910116810190811067ffffffffffffffff8211176111f857604052565b60a0906003190112610549576040519061129b82611244565b816004356001600160a01b03811681036105495781526024356001600160a01b038116810361054957602082015260443562ffffff811681036105495760408201526064358060020b8103610549576060820152608435906001600160a01b03821682036105495760800152565b91908260a09103126105495760405161132181611244565b809261132c81611190565b825261133a60208201611190565b602083015260408101359062ffffff82168203610549576080611375918193604086015261136a606082016111ce565b606086015201611190565b910152565b67ffffffffffffffff81116111f857601f01601f191660200190565b6020818303126105495780519067ffffffffffffffff8211610549570181601f82011215610549578051906113ca8261137a565b926113d86040519485611260565b8284526020838301011161054957815f9260208093018386015e8301015290565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f511482161561149c575b6040521561147c5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b9060018115166114b457823b15153d15161690611471565b503d5f823e3d90fd5b9190826040910312610549576020825192015190565b90610160926114e4836060936113f9565b805160020b60a0840152602081015160020b60c0840152604081015160e084015201516101008201526101406101208201525f6101408201520190565b91908201809211610be957565b600f0b6f7fffffffffffffffffffffffffffffff198114610be9575f0390565b91908203918211610be957565b60a08120805f52600460205260405f206040519061157882611228565b54908160020b938482526116088360181c60020b9560ff602085019588875260301c161515604085015260407f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409519160018060a01b038316988251916115dc8361120c565b825260208201525f828201525f6060820152815180948192632d35e7ed60e11b835287600484016114d3565b03815f8b5af1918215610b5e575f92611a9e575b508160801d5f81600f0b135f14611a96576001600160801b0316915b5f81600f0b135f14611a88576116746001600160801b036116879216935b80611a69575b84611a47575b885f52600560205260405f2054611521565b92875f52600660205260405f2054611521565b946116918761211b565b60405190631e2eaeaf60e01b825260048201526020816024818c5afa908115610b5e575f91611a15575b5060018060a01b0316836116d2875160020b611b59565b91886116e1855160020b611b59565b9182856001600160a01b0380831690821611611a09575b50506001600160a01b03851681116119a9575050611715926121a2565b80606086015160020b6001600160801b036001818c61174a61173c8d5160020b838c611e86565b5091895160020b908b611e86565b5080831682841611156119a257505b16925f81620d89e719071281620d89e719050390620d89e8050301810416036001600160801b038111610be9576001600160801b03928a90841682851680821161195e575b505050501694851561193b575f9697986040926117f8925160020b905160020b8451916117ca8361120c565b8252602082015287848201528860608201528351988980948193632d35e7ed60e11b83528a600484016114d3565b03925af1908115610b5e577f34c416f797ee1290098844ca787450a1ad2f018db3142a9a017e3fb69bed738d966118936118a5936060985f9161191b575b508060801d5f81600f0b125f14611911576118586001600160801b039161152e565b169586915b600f0b5f811215611906576118796001600160801b039161152e565b16978880965b846118e7575b816118c5575b50505061154e565b895f52600560205260405f205561154e565b865f52600660205260405f205560405192835260208301526040820152a2565b6020909201516118df9230916001600160a01b0316611f3e565b5f858161188b565b8251611901908690309084906001600160a01b0316611f3e565b611885565b505f9788809661187f565b505f95869161185d565b611934915060403d604011610cbb57610cac8183611260565b505f611836565b5050509294505050815f52600560205260405f20555f52600660205260405f2055565b7fef85a8305615df5895e94925ff3c67fe78a5b4e51c6e509a6a785de786dd92db92939450906060916040519182528060208301526040820152a25f89818061179e565b9050611759565b909290916001600160a01b0381168310156119fd5782916119ce916119d495946121a2565b93612141565b6001600160801b0381166001600160801b038316105f146119f657505b611715565b9050611715565b9150506119f192612141565b90955092505f806116f8565b90506020813d602011611a3f575b81611a3060209383611260565b8101031261054957515f6116bb565b3d9150611a23565b6020860151611a64908690309087906001600160a01b0316611ae9565b611662565b8551611a83908290309087906001600160a01b0316611ae9565b61165c565b506116876116745f93611656565b505f91611638565b611ab891925060403d604011610cbb57610cac8183611260565b9050905f61161c565b6001600160a01b039182169082160391908211610be957565b90816020910312610549575190565b9192908115611b53576001600160a01b0316803b1561054957604051630b0d9c0960e01b81526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af18015610b5e57611b475750565b5f611b5191611260565b565b50505050565b60020b908160ff1d82810118620d89e88111611e735763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102600160801b189160028116611e57575b60048116611e3b575b60088116611e1f575b60108116611e03575b60208116611de7575b60408116611dcb575b60808116611daf575b6101008116611d93575b6102008116611d77575b6104008116611d5b575b6108008116611d3f575b6110008116611d23575b6120008116611d07575b6140008116611ceb575b6180008116611ccf575b620100008116611cb3575b620200008116611c98575b620400008116611c7d575b6208000016611c64575b5f12611c5c575b0160201c90565b5f1904611c55565b6b048a170391f7dc42444e8fa290910260801c90611c4e565b6d2216e584f5fa1ea926041bedfe9890920260801c91611c44565b916e5d6af8dedb81196699c329225ee6040260801c91611c39565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c91611c2e565b916f31be135f97d08fd981231505542fcfa60260801c91611c23565b916f70d869a156d2a1b890bb3df62baf32f70260801c91611c19565b916fa9f746462d870fdf8a65dc1f90e061e50260801c91611c0f565b916fd097f3bdfd2022b8845ad8f792aa58250260801c91611c05565b916fe7159475a2c29b7443b29c7fa6e889d90260801c91611bfb565b916ff3392b0822b70005940c7a398e4b70f30260801c91611bf1565b916ff987a7253ac413176f2b074cf7815e540260801c91611be7565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c91611bdd565b916ffe5dee046a99a2a811c461f1969c30530260801c91611bd3565b916fff2ea16466c96a3843ec78b326b528610260801c91611bca565b916fff973b41fa98c081472e6896dfb254c00260801c91611bc1565b916fffcb9843d60f6159c9db58835c9266440260801c91611bb8565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91611baf565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91611ba6565b916ffff97272373d413259a46990580e213a0260801c91611b9d565b826345c3193d60e11b5f5260045260245ffd5b9190611e919061211b565b9060048201809211610be957602091604051908382019260020b8352604082015260408152611ec1606082611260565b519020604051631e2eaeaf60e01b8152600481019190915291829060249082906001600160a01b03165afa908115610b5e575f91611f0c575b506001600160801b038160801d911691565b90506020813d602011611f36575b81611f2760209383611260565b8101031261054957515f611efa565b3d9150611f1a565b8315611b53576001600160a01b0316918261200357506001600160a01b0316803b156105495760405191632961046560e21b835260048301525a915f8160248183868198f18015610b5e57611fed575b50602090600460405180958193630476982d60e21b83525af1908115611fe15750611fb65750565b611fd79060203d602011611fda575b611fcf8183611260565b810190611ada565b50565b503d611fc5565b604051903d90823e3d90fd5b611ffa9192505f90611260565b5f906020611f8e565b926001600160a01b039091169190823b1561054957604051632961046560e21b815260048101839052935a945f816024818389819bf18015610b5e57612106575b506001600160a01b031690843083146120f15750604051916323b872dd60e01b86526004528360245260445260208460648180865af19060018551148216156120d0575b60405283606052156120be5750602082915b600460405180958193630476982d60e21b83525af1908115611fe15750611fb65750565b635274afe760e01b8352600452602482fd5b9060018115166120e857823b15153d15161690612088565b503d84823e3d90fd5b939150612101908260209461143c565b61209a565b6121139195505f90611260565b5f935f612044565b60405160208101918252600660408201526040815261213b606082611260565b51902090565b6121759291906001600160a01b038083169082161161219c575b6001600160a01b039161216e9190611ac1565b16906121f0565b6001600160801b0381111561219057506001600160801b0390565b6001600160801b031690565b9061215b565b61217592916001600160a01b03808216908316116121ea575b6121e36121d46001600160a01b0383811690851661227a565b926001600160a01b0392611ac1565b16916122c3565b906121bb565b90606082901b905f19600160601b8409928280851094039380850394858411156105495714612273578190600160601b900981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b81810291905f1982820991838084109303928084039384600160601b111561054957146122ba57600160601b910990828211900360a01b910360601c1790565b50505060601c90565b91818302915f1981850993838086109503948086039586851115610549571461233b579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50509150049056fea2646970667358221220156ae0287e4fc190a4b4943eec9e1bc941b519a87939eecd42b6bfeab076e7aa64736f6c634300081e0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| 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 | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xb0e745…d62133 | 12 days agoTue, 04 Aug 2026 00:25:24 UTC | 0x1a5fd5…9f56 | [0] 0x000000000000…7e4faf71 |
| 0xf44a64…fdbcb1 | 12 days agoTue, 04 Aug 2026 00:25:17 UTC | 0x8be007…57e0 | [0] 0x000000000000…00000000 [1] 0x000000000000…d1858cc9 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xb0e745…d62133 | setLauncher | 27,191,674 | 12 days agoTue, 04 Aug 2026 00:25:24 UTC | 0x7b2d…8cc9 | IN | LunchV4PairLpLockerImmutable | $0.000 ETH | 0.00000097 |