Create: Meteora Launch Pool
Summary
Meteora Launch Pool is a pool type designed for new token launches.
It is based on DLMM and comes fundamentally equipped with a feature set that makes it optimal for bootstrapping liquidity for new tokens and making the tokens accessible on Jupiter and other trading integrations.
Meteora Launch Pools can also be created with an Alpha Vault as part of the token launch process. This is optional.
Alpha Vault is a new anti-bot tool to guard against sniper bots and allow genuine supporters to be the first to buy tokens at launch.
Below we provide the steps to use Bun to configure and run sample scripts to conveniently set up a Meteora Launch Pool with Alpha Vault on your own.
Getting Started
DLMM SDK on github: https://github.com/MeteoraAg/dlmm-sdk
DLMM API endpoints: https://dlmm-api.meteora.ag/swagger-ui/#/
Alpha Vault SDK: https://docs.meteora.ag/alpha-vault/alpha-vault-typescript-sdk
Dependencies
Install Bun: You'll also need bun to run the scripts. Install it via bun installation. Then install the dependencies by running the command
bun install
Scripts
The following code examples can be used to initialize and seed a DLMM liquidity pool on Meteora using a customizable permissionless liquidity bin pair (LB pair). It allows you to configure parameters for the pool, including fees, pricing, curvature, and activation conditions, before executing initialization and seeding commands.
We also have code examples for interacting with the Alpha Vault program. Use these examples to create and manage vaults, handle deposits and withdrawals, manage permissioned and permissionless vault configurations, and interact with escrow accounts.
1. Create DLMM pool
Clone repo: https://github.com/MeteoraAg/meteora-pool-setup
Select an example config to reference and change the parameters inside according to your needs: https://github.com/MeteoraAg/meteora-pool-setup/tree/main/config
Run the script (check dependencies) with config file specified in the CLI.
Run:
bun run src/create_pool.ts --config <config.json>
Replace
<config.json>
with the path to your config file, after you have set your config parameters.
Important Notes:
The max bin step you can set for a DLMM pool is 400 bin step.
When creating a DLMM pool, there are 3 roles in position that you can config:
Position Owner: Wallet that owns the liquidity
Operator: Wallet that can deposit and withdraw tokens on behalf of the Position Owner
Fee Owner: Wallet that gets the fees from that position
During the initialization of the DLMM pool, pool creator needs to have at least 1 lamport worth of the base token in the wallet to prove ownership.
If you plan to use a multisig on the Meteora website, please make sure it is the SquadsX multisig, as that is the only type supported on Meteora website. Otherwise, you can't manage liquidity through the website.
2. Seed liquidity
Clone repo: https://github.com/MeteoraAg/dlmm-sdk
Pre-requisite
Set up cargo
if you're on silicon apple chip, you need to be in this rust config
rustup default 1.76.0-x86_64-apple-darwin
Run:
cargo build -p cli
cd command_list
Select the command you want from the command list and update the parameters according to your preference.
If you want to seed a DLMM pool where the Position Owner is a different wallet from the Fee Owner, you would have to use the command
ilm_curve_by_operator.sh
, orilm_single_bin_by_operator.sh
(if liquidity is being deposited into a single bin).You can use this ilm curve tool to determine the suitable parameters for your launch.
ilm_curve.sh
ilm_curve_by_operator.sh
ilm_single_bin.sh
ilm_single_bin_by_operator.sh
Next, run:
source <ilm_curve_by_operator.sh>
Replace
<ilm_curve_by_operator.sh>
with the command file you selected earlier from the above command list, with your parameters specified.
Important Notes:
When seeding liquidity using the endpoint, both Operator and Position Owner need to have base tokens to prove ownership. If the Position Owner doesn't have any base tokens, then the Operator will need to send 1 lamport worth of the base token to Position Owner. But the script will check if Position Owner has tokens and if not, it will bundle a transfer instruction to send 1 lamport worth of the base token from the Operator to the Position Owner.
The commands in the command list above only work before the pool is activated for trading. If the pool has already started trading, when you use a command, there would be an error message shown (e.g.
Error Message: Unauthorized access
).In the code example,
lock_release_point
refers to the time the liquidity position can be withdrawn. If it is set to zero, it means the position can be withdrawn immediately after trading starts.If you plan to use a multisig on the Meteora website, please make sure it is the SquadsX multisig, as that is the only type supported on Meteora website. Otherwise, you can't manage liquidity through the website.
After deployment
To view pool on the UI, access the link below
For DLMM pool:
https://app.meteora.ag/dlmm/<POOL_ADDRESS>
When can you withdraw tokens from the pool to the position owner?
CustomizablePermissionless DLMM: After pool activation point (trading starts)
CustomizablePermissionless Dynamic AMM: After pool activation point (trading starts)
Permissioned DLMM: Anytime
Permissioned Dynamic AMM: Doesn't support Alpha Vault
Other Configuration Details
There are various config files that can be found in the config
directory.
It contains all the configurations required to run the scripts. We also need to provide the keypair for the payer wallet in keypair.json
file.
DLMM Pool can also lock liquidity, so the lock_release_point
can be set to some indefinite time then it 'unlocks'
General configuration
rpcUrl
: Solana RPC URL to get data and send transactions.keypairFilePath
: Keypair file path to send transactions.dryRun
: Set to true to send transactions.createBaseToken
: Configuration to create base token.baseMint
: Base token address if thecreateBaseToken
field is not set.quoteSymbol
: Quote token symbol, onlySOL
orUSDC
is supported.baseDecimals
: Base token decimal.dynamicAmm
: Dynamic AMM pool configuration.dlmm
: DLMM pool configuration.alphaVault
: Fcfs or Prorata Alpha Vault configuration.
Some configuration constraints:
createBaseToken
andbaseMint
cannot be used together.dynamicAmm
anddlmm
cannot be used together.
Create Base Token configuration
mintBaseTokenAmount
: Base token amount to be minted.
DLMM configuration
binStep
: DLMM pool bin step.feeBps
: Fee bps for DLMM pool.initialPrice
: Initial pool price.activationType
: To activate pool trading base onslot
ortimestamp
.activationPoint
: To activate pool trading at a point, either slot valut or timestamp value base onactivationType
.priceRounding
: Should beup
ordown
.hasAlphaVault
: Whether alpha vault is enabled or not for this pool.
Note: When using the endpoint instruction initializeCustomizablePermissionlessLbPair
the purpose is for creating a launch pool for the token for the first time, so only one DLMM pool is meant to be created for that token pair. If you are using that instruction to create a new DLMM pool with the same base and quote tokens, but with different parameters, the transaction will fail. Pool creator must have at least 1 lamport worth of the base token in the wallet to prove ownership.
Last updated