Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .changeset/instant-launch-pool-shape-redeploy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
'@uniswap/liquidity-launcher-sdk': minor
---

Instant Launch: state the post-redeploy pool shape. The 2026-08-05 chain-4663 full redeploy did not re-pin the 3e05da8 InstantLaunchStrategy unchanged — it recompiled it with a new pool shape, which the SDK still described as "unchanged across deploys". All values below were read back from the deployed strategies' getters (`TICK_SPACING()` / `initialTick()` / `MIN_LAUNCH_TICK()`) on both current strategies and all eight pre-redeploy strategies.

- `INSTANT_LAUNCH_POOL_TICK_SPACING` → `25` (was 60). The current generation's compile-time `TICK_SPACING`; every pre-redeploy generation is 60. Confirmed against live `TokenLaunched` events: post-redeploy launches carry pool keys `(2500, 25, hookless)`.
- `INSTANT_LAUNCH_ALLOWED_POOL_TICK_SPACINGS` (new) → `[25, 60]`. The append-only grandfather set (same shape as `QUICK_LAUNCH_ALLOWED_POOL_TICK_SPACINGS`): pools are permanent, so routing/discovery consumers deriving a token's candidate launch pools must race a `(INSTANT_LAUNCH_POOL_LP_FEE, spacing)` key for every entry — the token address alone cannot say which generation minted its pool.
- `INSTANT_LAUNCH_INITIAL_TICK` → `198_050` (was 198,060) and `INSTANT_LAUNCH_MIN_LAUNCH_TICK` → `-160_100` (was -208,980): the current generation's launch-position bounds.
- `InstantLaunchDeployment.tickSpacing` / `.minLaunchTick` (new registry fields, beside the existing `initialTick`): the authoritative per-generation pool shape — 25 / 198,050 / -160,100 on the 2026-08-05 pair, 60 / 198,060 / -208,980 on every earlier generation. Consumers that know a launch's minting strategy resolve the exact pool key from here.
- `getInstantLaunchPoolKey` / `getInstantLaunchPoolId` now take an optional `tickSpacing` (default: the current generation) — pass the minting generation's spacing for pre-redeploy tokens. `getInstantLaunchPoolKeys` (new) returns one candidate key per grandfathered spacing, newest first, for consumers that must probe. `QuoteInstantLaunchBuyParams.tickSpacing` (new, optional) threads the same override through quoting.

`INSTANT_LAUNCH_POOL_LP_FEE` is genuinely unchanged (2500 on all ten deployed strategies). The quick-launch graduation-pool counterpart of this change (50 → 25) shipped in 1.9.0.
24 changes: 19 additions & 5 deletions sdks/liquidity-launcher-sdk/src/addresses.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,42 +149,53 @@ const FEES_OFF_SPLITTER_C3F9506 = '0xDF50f4ea2207F9D2A753a3DaE729B36FDEF13b23'
const FEES_OFF_SPLITTER_20260805 = '0x222D6d4f1ce59b0d48D5505114eC8Addc90A4359'

// The five canonical Robinhood strategy generations from the liquidity-launcher dev README, in
// registry (append) order. Every generation opens at initialTick 198,060.
// registry (append) order. Pool shape is per-generation: every generation up to and including
// v3.1.1 is (spacing 60, initialTick 198,060, minLaunchTick -208,980); the 2026-08-05 full-redeploy
// pair was recompiled to (25, 198,050, -160,100) — all values read back on-chain from the deployed
// strategies' getters (2026-08-05).
const LEGACY_POOL_SHAPE = { tickSpacing: 60, initialTick: 198060, minLaunchTick: -208980 } as const
const REDEPLOY_POOL_SHAPE = { tickSpacing: 25, initialTick: 198050, minLaunchTick: -160100 } as const
const ROBINHOOD_STRATEGY_GENERATIONS = [
// c3f9506 (2026-07-29)
{
on: '0x60D73b21cDf2EA846ab3d58699BBbb8F29d72491',
off: '0xFCe92C70f1fc017b72f6DD7a00D9E38725C7fBd1',
onSplitter: FEES_ON_SPLITTER_C3F9506,
offSplitter: FEES_OFF_SPLITTER_C3F9506,
poolShape: LEGACY_POOL_SHAPE,
},
// 8e40a35 (2026-07-30, initial-tick cap)
{
on: '0xcE57498D3474DCC244dFb6710fFbE6D4441cD2b2',
off: '0x583a7903152b95831e82ffF534448Dee081754ec',
onSplitter: FEES_ON_SPLITTER_C3F9506,
offSplitter: FEES_OFF_SPLITTER_C3F9506,
poolShape: LEGACY_POOL_SHAPE,
},
// 3e05da8 (2026-07-30)
{
on: '0x9F67B864B565966dfCc2E0C6bA2483b2D5fF4b00',
off: '0x16b63f1c8415FD68591c31FB3c6796a333DD640C',
onSplitter: FEES_ON_SPLITTER_C3F9506,
offSplitter: FEES_OFF_SPLITTER_C3F9506,
poolShape: LEGACY_POOL_SHAPE,
},
// v3.1.1 launcher redeploy (2026-08-05) — new strategy pair AND a new fees-on splitter
{
on: '0x3f556B542105D5EFBBefe7C766a4919C76B960Fb',
off: '0x36bdB859518C89F764337cd5C24762d2Aa650f3C',
onSplitter: FEES_ON_SPLITTER_V311,
offSplitter: FEES_OFF_SPLITTER_C3F9506,
poolShape: LEGACY_POOL_SHAPE,
},
// 2026-08-05 full 4663 stack redeploy (current) — new strategies and new splitters on both sides
// 2026-08-05 full 4663 stack redeploy (current) — new strategies, new splitters on both sides,
// and a recompiled pool shape (TICK_SPACING 25, initialTick 198,050, MIN_LAUNCH_TICK -160,100)
{
on: '0x23f8209572b4a1C2AD88A42749E830791Fb027f1',
off: '0xAD44D55E7f8337C3cE113fBb591486E85be104b2',
onSplitter: FEES_ON_SPLITTER_20260805,
offSplitter: FEES_OFF_SPLITTER_20260805,
poolShape: REDEPLOY_POOL_SHAPE,
},
] as const

Expand All @@ -205,9 +216,12 @@ describe('Instant Launch deployment registry', () => {
expect(off!.creatorFeesEnabled).toBe(false)
expect(off!.creatorFeeNativeBps).toBe(0)
expect(off!.creatorFeeTokenBps).toBe(0)
// Every generation opens at the same immutable initial tick.
expect(on!.initialTick).toBe(198060)
expect(off!.initialTick).toBe(198060)
// Pool shape is per-generation (the 2026-08-05 redeploy recompiled all three values).
for (const variant of [on!, off!]) {
expect(variant.tickSpacing).toBe(generation.poolShape.tickSpacing)
expect(variant.initialTick).toBe(generation.poolShape.initialTick)
expect(variant.minLaunchTick).toBe(generation.poolShape.minLaunchTick)
}
})
})

Expand Down
53 changes: 44 additions & 9 deletions sdks/liquidity-launcher-sdk/src/addresses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -270,8 +270,7 @@ export function getTickDataLensForFactory(factoryAddress: string): Address | und
// immutable at construction.
//
// Five strategy generations are registered (append-only — indexed launches permanently reference
// the strategy that created them; see {@link INSTANT_LAUNCH_DEPLOYMENTS}), all identical strategy
// logic — the generations differ only in constructor immutables:
// the strategy that created them; see {@link INSTANT_LAUNCH_DEPLOYMENTS}):
// - c3f9506 pair (2026-07-29): OZ notes/L-04 round + the 1e20 compounding floor; still carries
// the OZ H01 fix flooring launch positions at tick -208,980. Has indexed launches, so it stays.
// - 8e40a35 pair (2026-07-30): caps the instant-launch initial tick at 251,340 — a deploy-script/
Expand All @@ -286,15 +285,19 @@ export function getTickDataLensForFactory(factoryAddress: string): Address | und
// the c3f9506 splitters and vault.
// - 2026-08-05 full-redeploy pair (current): the whole 4663 stack was redeployed the same day —
// launcher (re-mined `0x0000FffF…`), strategies, both FeeSplitters, UERC20BeneficiaryVault,
// CompoundingClaimRecipient, TokenSplitter and UniversalRouterStrategy. Same strategy logic,
// re-pinned to the final LIQUIDITY_LAUNCHER_ROBINHOOD.
// CompoundingClaimRecipient, TokenSplitter and UniversalRouterStrategy. NOT a pure re-pin,
// unlike v3.1.1: the strategy was recompiled with a new pool shape — TICK_SPACING 60 → 25,
// initialTick 198,060 → 198,050, MIN_LAUNCH_TICK -208,980 → -160,100 (all read back from the
// deployed contracts' getters, 2026-08-05).
//
// The v3.1.0 dev pair (`0xF0C0a0f3…` / `0x3fe607E7…`) that shipped in 1.6.0 is **removed rather than
// retained**: it was mis-pinned to the previous launcher, was never launched against, and therefore
// has no indexed launches for the append-only rule to protect. Every generation that does have
// indexed launches is still registered below.
//
// Every generation opens pools at initialTick 198,060.
// Every generation up to and including v3.1.1 opens pools at initialTick 198,060 (spacing 60); the
// 2026-08-05 full-redeploy pair opens at 198,050 (spacing 25). Pools are permanent, so BOTH pool
// shapes trade forever — see the per-entry `tickSpacing` / `initialTick` / `minLaunchTick` fields.
const INSTANT_LAUNCH_STRATEGY_FEES_ON_ROBINHOOD_C3F9506 = getAddress('0x60D73b21cDf2EA846ab3d58699BBbb8F29d72491')
const INSTANT_LAUNCH_STRATEGY_FEES_OFF_ROBINHOOD_C3F9506 = getAddress('0xFCe92C70f1fc017b72f6DD7a00D9E38725C7fBd1')
const INSTANT_LAUNCH_STRATEGY_FEES_ON_ROBINHOOD_8E40A35 = getAddress('0xcE57498D3474DCC244dFb6710fFbE6D4441cD2b2')
Expand Down Expand Up @@ -360,8 +363,20 @@ export interface InstantLaunchDeployment {
creatorFeeNativeBps: number
/** Share of each `FeesCollected` **token** amount forwarded to the vault, in bps (0 on every current deploy). */
creatorFeeTokenBps: number
/**
* The strategy's compile-time pool tick spacing (`TICK_SPACING`) — the spacing every pool this
* generation minted has forever. 25 on the 2026-08-05 full-redeploy pair, 60 on every earlier
* generation.
*/
tickSpacing: number
/** The strategy's immutable `initialTick` — the aligned tick the launch pool opens at. */
initialTick: number
/**
* The strategy's compile-time lower tick of every launch position (`MIN_LAUNCH_TICK`).
* -160,100 on the 2026-08-05 full-redeploy pair, -208,980 (the OZ H01 floor) on every earlier
* generation.
*/
minLaunchTick: number
/** Human-readable deployment tag (not an on-chain value). */
description: string
/** Block the strategy was deployed at, when recorded (indexer start height). */
Expand Down Expand Up @@ -403,7 +418,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
creatorFeesEnabled: true,
creatorFeeNativeBps: 4000,
creatorFeeTokenBps: 0,
tickSpacing: 60,
initialTick: 198060,
minLaunchTick: -208980,
description:
'Instant Launch with creator fees (2026-07-29, liquidity-launcher c3f9506): splitter forwards 40% of native fees to the UERC20BeneficiaryVault, 60% native + 100% token to the CompoundingClaimRecipient',
},
Expand All @@ -414,7 +431,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
creatorFeesEnabled: false,
creatorFeeNativeBps: 0,
creatorFeeTokenBps: 0,
tickSpacing: 60,
initialTick: 198060,
minLaunchTick: -208980,
description:
'Instant Launch without creator fees (2026-07-29, liquidity-launcher c3f9506): zero beneficiary vault; splitter forwards 100% of both fee sides to the CompoundingClaimRecipient',
},
Expand All @@ -425,7 +444,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
creatorFeesEnabled: true,
creatorFeeNativeBps: 4000,
creatorFeeTokenBps: 0,
tickSpacing: 60,
initialTick: 198060,
minLaunchTick: -208980,
description:
'Instant Launch with creator fees (2026-07-30, liquidity-launcher 8e40a35 — initial-tick cap): same c3f9506 FeeSplitter; splitter forwards 40% of native fees to the UERC20BeneficiaryVault, 60% native + 100% token to the CompoundingClaimRecipient',
},
Expand All @@ -436,7 +457,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
creatorFeesEnabled: false,
creatorFeeNativeBps: 0,
creatorFeeTokenBps: 0,
tickSpacing: 60,
initialTick: 198060,
minLaunchTick: -208980,
description:
'Instant Launch without creator fees (2026-07-30, liquidity-launcher 8e40a35 — initial-tick cap): zero beneficiary vault; same c3f9506 FeeSplitter forwarding 100% of both fee sides to the CompoundingClaimRecipient',
},
Expand All @@ -447,7 +470,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
creatorFeesEnabled: true,
creatorFeeNativeBps: 4000,
creatorFeeTokenBps: 0,
tickSpacing: 60,
initialTick: 198060,
minLaunchTick: -208980,
description:
'Instant Launch with creator fees (2026-07-30, liquidity-launcher 3e05da8): same c3f9506 FeeSplitter; splitter forwards 40% of native fees to the UERC20BeneficiaryVault, 60% native + 100% token to the CompoundingClaimRecipient',
},
Expand All @@ -458,7 +483,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
creatorFeesEnabled: false,
creatorFeeNativeBps: 0,
creatorFeeTokenBps: 0,
tickSpacing: 60,
initialTick: 198060,
minLaunchTick: -208980,
description:
'Instant Launch without creator fees (2026-07-30, liquidity-launcher 3e05da8): zero beneficiary vault; same c3f9506 FeeSplitter forwarding 100% of both fee sides to the CompoundingClaimRecipient',
},
Expand All @@ -469,7 +496,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
creatorFeesEnabled: true,
creatorFeeNativeBps: 4000,
creatorFeeTokenBps: 0,
tickSpacing: 60,
initialTick: 198060,
minLaunchTick: -208980,
description:
'Instant Launch with creator fees (2026-08-05, liquidity-launcher v3.1.1): unchanged 3e05da8 logic re-pinned to the interim v3.1.1 LiquidityLauncher; own FeeSplitter forwarding 40% of native fees to the v3.1.1 UERC20BeneficiaryVault, 60% native + 100% token to the CompoundingClaimRecipient',
},
Expand All @@ -480,7 +509,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
creatorFeesEnabled: false,
creatorFeeNativeBps: 0,
creatorFeeTokenBps: 0,
tickSpacing: 60,
initialTick: 198060,
minLaunchTick: -208980,
description:
'Instant Launch without creator fees (2026-08-05, liquidity-launcher v3.1.1): unchanged 3e05da8 logic re-pinned to the interim v3.1.1 LiquidityLauncher; zero beneficiary vault; same c3f9506 FeeSplitter forwarding 100% of both fee sides to the CompoundingClaimRecipient',
},
Expand All @@ -491,9 +522,11 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
creatorFeesEnabled: true,
creatorFeeNativeBps: 4000,
creatorFeeTokenBps: 0,
initialTick: 198060,
tickSpacing: 25,
initialTick: 198050,
minLaunchTick: -160100,
description:
'Instant Launch with creator fees (2026-08-05, full 4663 stack redeploy, current): unchanged strategy logic re-pinned to the final re-mined LiquidityLauncher; new FeeSplitter forwarding 40% of native fees to the new UERC20BeneficiaryVault, 60% native + 100% token to the new CompoundingClaimRecipient',
'Instant Launch with creator fees (2026-08-05, full 4663 stack redeploy, current): recompiled with the new pool shape (TICK_SPACING 25, initialTick 198,050, MIN_LAUNCH_TICK -160,100) and pinned to the final re-mined LiquidityLauncher; new FeeSplitter forwarding 40% of native fees to the new UERC20BeneficiaryVault, 60% native + 100% token to the new CompoundingClaimRecipient',
},
{
chainId: SupportedChainId.ROBINHOOD,
Expand All @@ -502,9 +535,11 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
creatorFeesEnabled: false,
creatorFeeNativeBps: 0,
creatorFeeTokenBps: 0,
initialTick: 198060,
tickSpacing: 25,
initialTick: 198050,
minLaunchTick: -160100,
description:
'Instant Launch without creator fees (2026-08-05, full 4663 stack redeploy, current): unchanged strategy logic re-pinned to the final re-mined LiquidityLauncher; zero beneficiary vault; new FeeSplitter forwarding 100% of both fee sides to the new CompoundingClaimRecipient',
'Instant Launch without creator fees (2026-08-05, full 4663 stack redeploy, current): recompiled with the new pool shape (TICK_SPACING 25, initialTick 198,050, MIN_LAUNCH_TICK -160,100) and pinned to the final re-mined LiquidityLauncher; zero beneficiary vault; new FeeSplitter forwarding 100% of both fee sides to the new CompoundingClaimRecipient',
},
]

Expand Down
Loading
Loading