Skip to content
Merged
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
32 changes: 13 additions & 19 deletions docs/contracts/liquidity-launchpad/01-introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,14 @@ The system is composable - it is not limited to the intial set of implementation
- **Permissionless** - Anyone can bootstrap liquidity or participate in price discovery without gatekeepers
- **Transparent** - All parameters are immutable after they are set
- **Composable** - Modular architecture supports multiple auction formats and distribution strategies
- **Gas Efficient** - Optimized implementations using Permit2, multicall, and efficient data structures

## Core Components
## Components

The Uniswap Liquidity Launchpad framework is built on three coordinated components that work together to bootstrap liquidity:

1. **[Liquidity Launcher →](https://github.com/Uniswap/liquidity-launcher)** Central orchestration contract that coordinates distribution and liquidity deployment
2. **[Token Factory →](https://github.com/Uniswap/uerc20-factory)** (Optional) Creates new ERC-20 tokens with metadata, or integrates existing tokens
3. **Liquidity Strategies** - Modular contracts for different price discovery and liquidity mechanisms (prebuilt [LBP Strategy](https://github.com/Uniswap/liquidity-launcher) or [custom strategies](quickstarts/building.md))
3. **Liquidity Strategies** - Modular contracts for different price discovery and liquidity mechanisms (prebuilt [LBP Strategy](https://github.com/Uniswap/liquidity-launcher) or [custom strategies](./05-strategies.md#writing-a-custom-strategy))

Each component is designed to be composable and extensible, allowing you to customize your liquidity bootstrapping while maintaining security and fairness guarantees.

Expand All @@ -43,39 +42,33 @@ Each component is designed to be composable and extensible, allowing you to cust

### Example Flow

The following is a high level overview of how the [LBP Strategy Basic](https://github.com/Uniswap/liquidity-launcher) contracts interface and work with the [Continuous Clearing Auction](https://github.com/Uniswap/continuous-clearing-auction/).
The following is a high level overview of how the provided [LBP Strategy](https://github.com/Uniswap/liquidity-launcher) contracts interface and work with the [Continuous Clearing Auction](https://github.com/Uniswap/continuous-clearing-auction/).

The following actions must be performed atomically within one transaction.
The following actions must be performed atomically in one transaction. `LiquidityLauncher` supports native multicall which is highly recommended.

1. **Prepare Token** (Optional)

Launch a new token using `LiquidityLauncher.createToken()` via the [UERC20Factory](https://github.com/Uniswap/liquidity-launcher/blob/96860d8239785e717cff1e4189643b9acee925ff/src/token-factories/uerc20-factory), which deploys a UERC20 or UERC20Superchain token and mints the initial supply to the launcher. Alternatively, use an existing token and approve the launcher to distribute it.
Launch a new token using `LiquidityLauncher.createToken()` via the [UERC20Factory](https://github.com/Uniswap/liquidity-launcher/blob/96860d8239785e717cff1e4189643b9acee925ff/src/token-factories/uerc20-factory), which deploys a UERC20 or UERC20Superchain token and mints the initial supply to the launcher. Alternatively, use an existing token and approve the launcher to transfer it via Permit2.

2. **Deploy Strategies**

Call `LiquidityLauncher.distributeToken()` to deploy a new LBPStrategy instance via factory. The strategy will validate that the auction parameters and eventual pool configuraiton are valid, and if so, it will deploy a CCA auction with the desired amount of tokens to sell. The `LiquidityLauncher` contract will transfer tokens to the LBPStrategy and then they will be transferred into the auction.
Call `LiquidityLauncher.distributeToken()` to deploy a new LBPStrategy instance via factory. The strategy will validate that the auction parameters and eventual pool configuration are valid, and if so, it will deploy a CCA auction with the desired amount of tokens to sell. The `LiquidityLauncher` contract will transfer tokens to the LBPStrategy and then they will be transferred into the auction.

We use an optimistic transfer then call pattern throughout the contracts to trigger an action after performing an ERC20 transfer.

3. **Auction Completion**

When the auction ends, all of the raised funds will be swept to a specified `fundsRecipient`. The LBPStrategy will ensure that it is the recipient of both the raised funds and any leftover unsold tokens.
When the auction ends, all of the raised funds will be swept to a specified `fundsRecipient`. The LBPStrategy will ensure that it is the recipient of both the raised funds and any leftover unsold tokens. The configured `initializer` on the LBPStrategy must implement the [ILBPInitializer](https://github.com/Uniswap/liquidity-launcher/blob/main/src/interfaces/ILBPInitializer.sol) interface to return the necessary data for the pool migration and liquidity creation.

The LBPStrategy will also read the following data from the `IAuction` interface:
```solidity
interface IContinuousClearingAuction {
function currencyRaised() external view returns (uint256);
function clearingPrice() external view returns (uint256);
}
```
The `initializer` returns parameters like the initial price, tokens sold, and currency raised which are used to initialize the pool.

4. **Seeding Liquidity**
4. **Migrating Liquidity**

Anyone can call the `migrate()` function on the `LBPStrategy` after the configured `migrationBlock`. This does the following:
- Initialize a new Uniswap V4 pool at the price from the auction
- Deploy a full-range LP position using the auction proceeds + reserve tokens
- Deploy a full-range LP position using the auction proceeds + reserved tokens
- (Optionally) deploy a one-sided position with remaining tokens
- Mint the LP NFT to the a specified `positionRecipient`
- Mint the NFT for the LP position to the a specified `positionRecipient`
- Sweep any leftover tokens or raised funds to a configured `operator`

5. **After Migration**
Expand All @@ -84,5 +77,6 @@ The following actions must be performed atomically within one transaction.

## Next Steps

- Learn about the [Continous Clearing Auction](./05-auction-mechanism.md) mechanism
- Learn about the [Continous Clearing Auction](./04-auction-mechanism.md) mechanism
- Read the <a href='/whitepaper_cca.pdf' target='_blank' rel='noopener noreferrer'>whitepaper</a> to learn more about the mechanism
- Review the Continuous Clearing Auction [Technical Reference](https://github.com/Uniswap/continuous-clearing-auction/blob/main/docs/TechnicalDocumentation.md)
22 changes: 11 additions & 11 deletions docs/contracts/liquidity-launchpad/02-deployments.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,30 +27,30 @@ The LiquidityLauncher is a singleton contract which is delployed to the same add
LBP strategies are deployed via factory contracts which are deployed to different addresses on different chains. Make sure to use the correct factory contract for the chain in question.

### FullRangeLBPStrategyFactory
The FullRangeLBPStrategyFactory is a factory contract for the [FullRangeLBPStrategy]().
The FullRangeLBPStrategyFactory is a factory contract for the [FullRangeLBPStrategy](https://github.com/Uniswap/liquidity-launcher/blob/main/src/strategies/lbp/FullRangeLBPStrategy.sol).

| Version | Chain | Address | Commit Hash |
|---------|-------|---------|------------|
| v2.0.0 | Mainnet | 0x65aF3B62EE79763c704f04238080fBADD005B332 | |
| v2.0.0 | Unichain | 0xAa56d4d68646B4858A5A3a99058169D0100b38e2 | |
| v2.0.0 | Base | 0x39E5eB34dD2c8082Ee1e556351ae660F33B04252 | |
| v2.0.0 | Sepolia | 0x89Dd5691e53Ea95d19ED2AbdEdCf4cBbE50da1ff | |
| v2.0.0 | Mainnet | 0x65aF3B62EE79763c704f04238080fBADD005B332 | 610603eed7c35ff504e23ec87cd18ec3f701e746 |
| v2.0.0 | Unichain | 0xAa56d4d68646B4858A5A3a99058169D0100b38e2 | 610603eed7c35ff504e23ec87cd18ec3f701e746 |
| v2.0.0 | Base | 0x39E5eB34dD2c8082Ee1e556351ae660F33B04252 | 610603eed7c35ff504e23ec87cd18ec3f701e746 |
| v2.0.0 | Sepolia | 0x89Dd5691e53Ea95d19ED2AbdEdCf4cBbE50da1ff | 610603eed7c35ff504e23ec87cd18ec3f701e746 |

### AdvancedLBPStrategyFactory
The AdvancedLBPStrategyFactory is a factory contract for the [AdvancedLBPStrategy]().
The AdvancedLBPStrategyFactory is a factory contract for the [AdvancedLBPStrategy](https://github.com/Uniswap/liquidity-launcher/blob/main/src/strategies/lbp/AdvancedLBPStrategy.sol).

| Version | Chain | Address | Commit Hash |
|---------|-------|---------|------------|
| v2.0.0 | Mainnet | 0x982DC187cbeB4E21431C735B01Ecbd8A606129C5 | |
| v2.0.0 | Unichain | 0xeB44195e1847F23D4ff411B7d501b726C7620529 | |
| v2.0.0 | Base | 0x9C5A6fb9B0D9A60e665d93a3e6923bDe428c389a | |
| v2.0.0 | Sepolia | 0xdC3553B7Cea1ad3DAB35cBE9d40728C4198BCBb6 | |
| v2.0.0 | Mainnet | 0x982DC187cbeB4E21431C735B01Ecbd8A606129C5 | 610603eed7c35ff504e23ec87cd18ec3f701e746 |
| v2.0.0 | Unichain | 0xeB44195e1847F23D4ff411B7d501b726C7620529 | 610603eed7c35ff504e23ec87cd18ec3f701e746 |
| v2.0.0 | Base | 0x9C5A6fb9B0D9A60e665d93a3e6923bDe428c389a | 610603eed7c35ff504e23ec87cd18ec3f701e746 |
| v2.0.0 | Sepolia | 0xdC3553B7Cea1ad3DAB35cBE9d40728C4198BCBb6 | 610603eed7c35ff504e23ec87cd18ec3f701e746 |

## Previous Deployments
The following contracts are deprecated and are not recommended for production use. See the [Changelog](https://github.com/Uniswap/liquidity-launcher/blob/main/CHANGELOG.md) for more details.

### LBPStrategyBasicFactory
The LBPStrategyBasicFactory is a factory contract for the [LBPStrategyBasic]().
The LBPStrategyBasicFactory is a factory contract for the [LBPStrategyBasic](https://github.com/Uniswap/liquidity-launcher/blob/v1.0.0-candidate/src/distributionContracts/LBPStrategyBasic.sol).

| Network | Address | Commit Hash | Version |
|---------|---------|------------|---------|
Expand Down
Loading