Skip to content

Commit 3a3a79c

Browse files
marktodaclaude
andcommitted
feat(liquidity-launcher-sdk): instant-launch pool shape — the 2026-08-05 redeploy mints at tick spacing 25
The full redeploy recompiled InstantLaunchStrategy (TICK_SPACING 60 -> 25, initialTick 198,060 -> 198,050, MIN_LAUNCH_TICK -208,980 -> -160,100); the SDK still described all three as unchanged across deploys. All values read back on-chain from all ten deployed strategies' getters. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 6542e89 commit 3a3a79c

5 files changed

Lines changed: 209 additions & 50 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
'@uniswap/liquidity-launcher-sdk': minor
3+
---
4+
5+
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.
6+
7+
- `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)`.
8+
- `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.
9+
- `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.
10+
- `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.
11+
- `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.
12+
13+
`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.

sdks/liquidity-launcher-sdk/src/addresses.test.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,42 +149,53 @@ const FEES_OFF_SPLITTER_C3F9506 = '0xDF50f4ea2207F9D2A753a3DaE729B36FDEF13b23'
149149
const FEES_OFF_SPLITTER_20260805 = '0x222D6d4f1ce59b0d48D5505114eC8Addc90A4359'
150150

151151
// The five canonical Robinhood strategy generations from the liquidity-launcher dev README, in
152-
// registry (append) order. Every generation opens at initialTick 198,060.
152+
// registry (append) order. Pool shape is per-generation: every generation up to and including
153+
// v3.1.1 is (spacing 60, initialTick 198,060, minLaunchTick -208,980); the 2026-08-05 full-redeploy
154+
// pair was recompiled to (25, 198,050, -160,100) — all values read back on-chain from the deployed
155+
// strategies' getters (2026-08-05).
156+
const LEGACY_POOL_SHAPE = { tickSpacing: 60, initialTick: 198060, minLaunchTick: -208980 } as const
157+
const REDEPLOY_POOL_SHAPE = { tickSpacing: 25, initialTick: 198050, minLaunchTick: -160100 } as const
153158
const ROBINHOOD_STRATEGY_GENERATIONS = [
154159
// c3f9506 (2026-07-29)
155160
{
156161
on: '0x60D73b21cDf2EA846ab3d58699BBbb8F29d72491',
157162
off: '0xFCe92C70f1fc017b72f6DD7a00D9E38725C7fBd1',
158163
onSplitter: FEES_ON_SPLITTER_C3F9506,
159164
offSplitter: FEES_OFF_SPLITTER_C3F9506,
165+
poolShape: LEGACY_POOL_SHAPE,
160166
},
161167
// 8e40a35 (2026-07-30, initial-tick cap)
162168
{
163169
on: '0xcE57498D3474DCC244dFb6710fFbE6D4441cD2b2',
164170
off: '0x583a7903152b95831e82ffF534448Dee081754ec',
165171
onSplitter: FEES_ON_SPLITTER_C3F9506,
166172
offSplitter: FEES_OFF_SPLITTER_C3F9506,
173+
poolShape: LEGACY_POOL_SHAPE,
167174
},
168175
// 3e05da8 (2026-07-30)
169176
{
170177
on: '0x9F67B864B565966dfCc2E0C6bA2483b2D5fF4b00',
171178
off: '0x16b63f1c8415FD68591c31FB3c6796a333DD640C',
172179
onSplitter: FEES_ON_SPLITTER_C3F9506,
173180
offSplitter: FEES_OFF_SPLITTER_C3F9506,
181+
poolShape: LEGACY_POOL_SHAPE,
174182
},
175183
// v3.1.1 launcher redeploy (2026-08-05) — new strategy pair AND a new fees-on splitter
176184
{
177185
on: '0x3f556B542105D5EFBBefe7C766a4919C76B960Fb',
178186
off: '0x36bdB859518C89F764337cd5C24762d2Aa650f3C',
179187
onSplitter: FEES_ON_SPLITTER_V311,
180188
offSplitter: FEES_OFF_SPLITTER_C3F9506,
189+
poolShape: LEGACY_POOL_SHAPE,
181190
},
182-
// 2026-08-05 full 4663 stack redeploy (current) — new strategies and new splitters on both sides
191+
// 2026-08-05 full 4663 stack redeploy (current) — new strategies, new splitters on both sides,
192+
// and a recompiled pool shape (TICK_SPACING 25, initialTick 198,050, MIN_LAUNCH_TICK -160,100)
183193
{
184194
on: '0x23f8209572b4a1C2AD88A42749E830791Fb027f1',
185195
off: '0xAD44D55E7f8337C3cE113fBb591486E85be104b2',
186196
onSplitter: FEES_ON_SPLITTER_20260805,
187197
offSplitter: FEES_OFF_SPLITTER_20260805,
198+
poolShape: REDEPLOY_POOL_SHAPE,
188199
},
189200
] as const
190201

@@ -205,9 +216,12 @@ describe('Instant Launch deployment registry', () => {
205216
expect(off!.creatorFeesEnabled).toBe(false)
206217
expect(off!.creatorFeeNativeBps).toBe(0)
207218
expect(off!.creatorFeeTokenBps).toBe(0)
208-
// Every generation opens at the same immutable initial tick.
209-
expect(on!.initialTick).toBe(198060)
210-
expect(off!.initialTick).toBe(198060)
219+
// Pool shape is per-generation (the 2026-08-05 redeploy recompiled all three values).
220+
for (const variant of [on!, off!]) {
221+
expect(variant.tickSpacing).toBe(generation.poolShape.tickSpacing)
222+
expect(variant.initialTick).toBe(generation.poolShape.initialTick)
223+
expect(variant.minLaunchTick).toBe(generation.poolShape.minLaunchTick)
224+
}
211225
})
212226
})
213227

sdks/liquidity-launcher-sdk/src/addresses.ts

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,7 @@ export function getTickDataLensForFactory(factoryAddress: string): Address | und
270270
// immutable at construction.
271271
//
272272
// Five strategy generations are registered (append-only — indexed launches permanently reference
273-
// the strategy that created them; see {@link INSTANT_LAUNCH_DEPLOYMENTS}), all identical strategy
274-
// logic — the generations differ only in constructor immutables:
273+
// the strategy that created them; see {@link INSTANT_LAUNCH_DEPLOYMENTS}):
275274
// - c3f9506 pair (2026-07-29): OZ notes/L-04 round + the 1e20 compounding floor; still carries
276275
// the OZ H01 fix flooring launch positions at tick -208,980. Has indexed launches, so it stays.
277276
// - 8e40a35 pair (2026-07-30): caps the instant-launch initial tick at 251,340 — a deploy-script/
@@ -286,15 +285,19 @@ export function getTickDataLensForFactory(factoryAddress: string): Address | und
286285
// the c3f9506 splitters and vault.
287286
// - 2026-08-05 full-redeploy pair (current): the whole 4663 stack was redeployed the same day —
288287
// launcher (re-mined `0x0000FffF…`), strategies, both FeeSplitters, UERC20BeneficiaryVault,
289-
// CompoundingClaimRecipient, TokenSplitter and UniversalRouterStrategy. Same strategy logic,
290-
// re-pinned to the final LIQUIDITY_LAUNCHER_ROBINHOOD.
288+
// CompoundingClaimRecipient, TokenSplitter and UniversalRouterStrategy. NOT a pure re-pin,
289+
// unlike v3.1.1: the strategy was recompiled with a new pool shape — TICK_SPACING 60 → 25,
290+
// initialTick 198,060 → 198,050, MIN_LAUNCH_TICK -208,980 → -160,100 (all read back from the
291+
// deployed contracts' getters, 2026-08-05).
291292
//
292293
// The v3.1.0 dev pair (`0xF0C0a0f3…` / `0x3fe607E7…`) that shipped in 1.6.0 is **removed rather than
293294
// retained**: it was mis-pinned to the previous launcher, was never launched against, and therefore
294295
// has no indexed launches for the append-only rule to protect. Every generation that does have
295296
// indexed launches is still registered below.
296297
//
297-
// Every generation opens pools at initialTick 198,060.
298+
// Every generation up to and including v3.1.1 opens pools at initialTick 198,060 (spacing 60); the
299+
// 2026-08-05 full-redeploy pair opens at 198,050 (spacing 25). Pools are permanent, so BOTH pool
300+
// shapes trade forever — see the per-entry `tickSpacing` / `initialTick` / `minLaunchTick` fields.
298301
const INSTANT_LAUNCH_STRATEGY_FEES_ON_ROBINHOOD_C3F9506 = getAddress('0x60D73b21cDf2EA846ab3d58699BBbb8F29d72491')
299302
const INSTANT_LAUNCH_STRATEGY_FEES_OFF_ROBINHOOD_C3F9506 = getAddress('0xFCe92C70f1fc017b72f6DD7a00D9E38725C7fBd1')
300303
const INSTANT_LAUNCH_STRATEGY_FEES_ON_ROBINHOOD_8E40A35 = getAddress('0xcE57498D3474DCC244dFb6710fFbE6D4441cD2b2')
@@ -360,8 +363,20 @@ export interface InstantLaunchDeployment {
360363
creatorFeeNativeBps: number
361364
/** Share of each `FeesCollected` **token** amount forwarded to the vault, in bps (0 on every current deploy). */
362365
creatorFeeTokenBps: number
366+
/**
367+
* The strategy's compile-time pool tick spacing (`TICK_SPACING`) — the spacing every pool this
368+
* generation minted has forever. 25 on the 2026-08-05 full-redeploy pair, 60 on every earlier
369+
* generation.
370+
*/
371+
tickSpacing: number
363372
/** The strategy's immutable `initialTick` — the aligned tick the launch pool opens at. */
364373
initialTick: number
374+
/**
375+
* The strategy's compile-time lower tick of every launch position (`MIN_LAUNCH_TICK`).
376+
* -160,100 on the 2026-08-05 full-redeploy pair, -208,980 (the OZ H01 floor) on every earlier
377+
* generation.
378+
*/
379+
minLaunchTick: number
365380
/** Human-readable deployment tag (not an on-chain value). */
366381
description: string
367382
/** Block the strategy was deployed at, when recorded (indexer start height). */
@@ -403,7 +418,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
403418
creatorFeesEnabled: true,
404419
creatorFeeNativeBps: 4000,
405420
creatorFeeTokenBps: 0,
421+
tickSpacing: 60,
406422
initialTick: 198060,
423+
minLaunchTick: -208980,
407424
description:
408425
'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',
409426
},
@@ -414,7 +431,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
414431
creatorFeesEnabled: false,
415432
creatorFeeNativeBps: 0,
416433
creatorFeeTokenBps: 0,
434+
tickSpacing: 60,
417435
initialTick: 198060,
436+
minLaunchTick: -208980,
418437
description:
419438
'Instant Launch without creator fees (2026-07-29, liquidity-launcher c3f9506): zero beneficiary vault; splitter forwards 100% of both fee sides to the CompoundingClaimRecipient',
420439
},
@@ -425,7 +444,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
425444
creatorFeesEnabled: true,
426445
creatorFeeNativeBps: 4000,
427446
creatorFeeTokenBps: 0,
447+
tickSpacing: 60,
428448
initialTick: 198060,
449+
minLaunchTick: -208980,
429450
description:
430451
'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',
431452
},
@@ -436,7 +457,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
436457
creatorFeesEnabled: false,
437458
creatorFeeNativeBps: 0,
438459
creatorFeeTokenBps: 0,
460+
tickSpacing: 60,
439461
initialTick: 198060,
462+
minLaunchTick: -208980,
440463
description:
441464
'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',
442465
},
@@ -447,7 +470,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
447470
creatorFeesEnabled: true,
448471
creatorFeeNativeBps: 4000,
449472
creatorFeeTokenBps: 0,
473+
tickSpacing: 60,
450474
initialTick: 198060,
475+
minLaunchTick: -208980,
451476
description:
452477
'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',
453478
},
@@ -458,7 +483,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
458483
creatorFeesEnabled: false,
459484
creatorFeeNativeBps: 0,
460485
creatorFeeTokenBps: 0,
486+
tickSpacing: 60,
461487
initialTick: 198060,
488+
minLaunchTick: -208980,
462489
description:
463490
'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',
464491
},
@@ -469,7 +496,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
469496
creatorFeesEnabled: true,
470497
creatorFeeNativeBps: 4000,
471498
creatorFeeTokenBps: 0,
499+
tickSpacing: 60,
472500
initialTick: 198060,
501+
minLaunchTick: -208980,
473502
description:
474503
'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',
475504
},
@@ -480,7 +509,9 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
480509
creatorFeesEnabled: false,
481510
creatorFeeNativeBps: 0,
482511
creatorFeeTokenBps: 0,
512+
tickSpacing: 60,
483513
initialTick: 198060,
514+
minLaunchTick: -208980,
484515
description:
485516
'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',
486517
},
@@ -491,9 +522,11 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
491522
creatorFeesEnabled: true,
492523
creatorFeeNativeBps: 4000,
493524
creatorFeeTokenBps: 0,
494-
initialTick: 198060,
525+
tickSpacing: 25,
526+
initialTick: 198050,
527+
minLaunchTick: -160100,
495528
description:
496-
'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',
529+
'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',
497530
},
498531
{
499532
chainId: SupportedChainId.ROBINHOOD,
@@ -502,9 +535,11 @@ export const INSTANT_LAUNCH_DEPLOYMENTS: readonly InstantLaunchDeployment[] = [
502535
creatorFeesEnabled: false,
503536
creatorFeeNativeBps: 0,
504537
creatorFeeTokenBps: 0,
505-
initialTick: 198060,
538+
tickSpacing: 25,
539+
initialTick: 198050,
540+
minLaunchTick: -160100,
506541
description:
507-
'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',
542+
'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',
508543
},
509544
]
510545

0 commit comments

Comments
 (0)