All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
PositionFeesForwarderremoved; instant launch positions are permanently locked in theFeeSplittersingleton instead #192BuybackAndBurnPositionRecipientreplaced byBuybackAndBurnClaimRecipienton the callback-based claim recipient framework; periphery recipients exposeclaiminstead ofcollectFees#196, #207, #208
InstantLaunchStrategyfor fixed-supply, hookless native-ETH v4 pool launches with a single-sided LP position permanently locked in the fee splitter #184, #191, #192FeeSplittersingleton that permissionlessly collects and distributes native-ETH and token fees across immutable splits #192BeneficiaryVaultand transferable fee-beneficiary ERC721 for creator fee registration and claims #201- Callback-based claim recipients:
BaseClaimRecipient,BaseClaimRecipientWithCallback,CompoundingClaimRecipient, and singletonBuybackAndBurnClaimRecipient#196, #189 UERC20BeneficiaryVaultso UERC20 creators can register unregistered positions via graffiti proof #211UniversalRouterStrategyandLiquidityLauncher.distributeWithNativeto run a caller-supplied Universal Router route so a launch and buy fit in one transaction #223- Deployment scripts for instant launch, universal router, fee splitter, and periphery contracts #200
- Raised the compounding claim recipient floor to 1e20 #217
InstantLaunchStrategyuses tick spacing 25 to match the 25 bps LP fee, withMIN_LAUNCH_TICKat -160,100 andMAX_INITIAL_TICKat 251,325; deployed initial ticks must be multiples of 25 and the deployment script's tick moves from 198,060 to 198,050 #230- Deploy scripts read the
LiquidityLauncheraddress from env #232
- Added
receive()onInstantLaunchStrategyso stray ETH forwarded from the PositionManager does not brick the contract #197 - Enforced a verifiable, freely chosen fee beneficiary for launcher-created tokens #192
- Reverted
FeeSplitter.collectFeeswhen a recipient's fee notification fails #209 - Resolved OpenZeppelin audit notes N04–N09 and L-04 #218
- Fixed graffiti-based registration in
UERC20BeneficiaryVault#226 - Removed the approval check in
FeeSplitterdistribution #233
PositionFeesForwarder(superseded byFeeSplitter) #192BuybackAndBurnPositionRecipient(superseded byBuybackAndBurnClaimRecipient) #196
Token Launcher v3.0.0 is a major release with breaking changes. It is not backwards compatible with v2.0.0.
distributeTokennow uses a pull model: removed thepayerIsUserparameter and theIDistributionContractreturn value. Acquire tokens withcreateTokenor the newdepositToken, then batch withdistributeTokenin a singlemulticall. The launcher force-approves the strategy, which pulls the full amount viasafeTransferFrom, and reverts withAllowanceNotFullyConsumedif it does not. TheTokenDistributedevent'sdistributionContractargument is renamedstrategy#141, #160- Consolidated all LBP strategy variants (
LBPStrategyBase,AdvancedLBPStrategy,FullRangeLBPStrategy,GovernedLBPStrategy,VirtualGovernedLBPStrategy) into a singleLBPStrategy; removed all per-variant strategy factories and theStrategyFactorybase #141 - Interface renames:
IDistributionStrategy→IStrategy,IDistributionContract→IDistributor,ILBPStrategyBase→ILBPStrategy.IStrategy.initializeDistributionno longer returns a contract; the strategy is now responsible for pulling tokens from the caller #150, #152 MigratorParametersreworked and moved tosrc/libraries/MigratorParams.sol: replaced single full-range migration with a weightedpositionDefinitionsplan, a bracketedlpAllocationSchedulewith up to 32 brackets, and apositionRecipient(with optional per-positionoverridePositionRecipient) #160, #159, #171- Replaced the per-LBP
ProtocolFeeOperator(EIP-1167 clone) with a single governance-ownedProtocolFeeControllerexposing bracketed per-currency fees viaIProtocolFeeController#139, #146
Integrators should update to v3.0.0 as soon as possible.
migrate(initializer)best-effort migration: the public entrypoint wraps a self-call helper, emitsMigrationFailedon migration failure, and recovers raised currency plus reserved LP tokens to the configured recipient in the same transaction #151, #160, #174PositionPlannerlibrary for weighted, multi-position liquidity migration with a bracketed currency-to-LP allocation schedule #128, #160- Per-position LP NFT recipients via
overridePositionRecipient#159 - Pluggable migration hooks: new
InitializerHookbase (gates pool initialization) andIInitializerHook, plus an exampleGatedSwapHook. Caller-provided hooks MUST inheritInitializerHook, and dynamic-fee pools now require a hook #134, #155 - Hookless static-fee LBP migrations prefer the canonical hookless v4 pool and fall back to the strategy-hooked pool if the hookless pool has already been initialized #160, #164
depositToken(token, amount)to pull pre-existing tokens via Permit2 for batching withdistributeToken#160ILBPInitializer.sweepCurrency/sweepUnsoldTokens; the strategy enforces that swept currency equals the initializer's reportedcurrencyRaised#160IDistributorFactoryinterface for factories that deploy distributors, including sender-awaregetAddress(...)for factories whose deterministic address depends on the caller #150, #163TokenSplitterstrategy,ITokenSplitter, tests, and deployment script for direct split distributions that do not retain custody of funds in the strategy #166
- Raised the LP allocation schedule cap from 3 brackets to 32 brackets #171
ProtocolFeeLib.getProtocolFeeAmountnow returns zero if the configured protocol fee controller reverts #162
- Guard
LBPStrategyagainst hook reentrancy corrupting migration state #154 - Reserve target pool IDs during LBP initialization and clear them during migration to prevent pool-key conflicts and initializer replay #164
- Validate migration hooks against v4 hook address rules,
BEFORE_INITIALIZEpermission bits, strategy authorization, and target pool initialization state #167 - Force-send native-currency migration leftovers and
TAKE_PAIRdust to recipients so a reverting recipient cannot grief migration #161, #172 - Reject zero and PositionManager sentinel addresses as immutable
PositionFeesForwarderfee recipients #169 - Reject zero-weight positions and roll skipped allocation weight into the full-range fallback #158
- Bind the LBP initializer deployment salt to the migrator parameters #140
- Document the trusted-owner
MerkleClaimclaim/withdraw overlap at exactlyendTimewhile retaining upstream merkle-distributor behavior #170 - Reject migrations where the launched token and auction currency are the same asset
- Revert migration when no positions are created
- Strategy factory contracts (
StrategyFactory,AdvancedLBPStrategyFactory,FullRangeLBPStrategyFactory,GovernedLBPStrategyFactory) and the per-variant LBP strategies #141 ProtocolFeeOperator#139IDistributionContractandIStrategyFactoryinterfaces #150recoverFunds(superseded by inlinemigraterecovery) #160
Liquidity Launcher v2.0.0 is a major release with breaking changes. It is not backwards compatible with v1.0.0.
- Renaming of existing contracts (strategies and factories)
- Addition of
maxCurrencyAmountForLPparameter toMigratorParametersstruct ILBPInitializerinterface is used instead of the original direct integration withIContinuousClearingAuction- Significant directory structure changes
Integrators should update to v2.0.0 as soon as possible.
- Refactored strategies to be more extensible and reusable #84
- New base strategy contract: LBPStrategyBase
- New strategy contracts: FullRangeLBPStrategy, AdvancedLBPStrategy, GovernedLBPStrategy, VirtualLBPStrategy
- Refactored strategy contracts to inherit from StrategyFactory
- New strategy factory contracts: FullRangeLBPStrategyFactory, AdvancedLBPStrategyFactory, GovernedLBPStrategyFactory #87
maxCurrencyAmountForLPparameter to the strategy contracts #99- New
ILBPInitializerinterface for LBP initializers #83 - BTT unit testing suite #96
- Periphery position recipient contracts: TimeLockedPositionRecipient, PositionFeesForwarder, BuybackAndBurnPositionRecipient #82
- Documentation: Deployment Guide, Technical Reference #110
- Fixed missing
DistributionInitializedevent #94
- Old strategy contracts: LBPStrategyBasic, VirtualLBPStrategyBasic
- Local clone of uerc20-factory contracts repo #97
- Outdated OZ dependency #97
- Initial release of Liquidity Launcher.
N/A