Meteora
  • Meteora: The most dynamic and sustainable liquidity layer on Solana
  • PRODUCT OVERVIEW
    • Meteora Liquidity Pools
      • DLMM Overview
        • What is DLMM?
        • DLMM Program
        • Dynamic Fees
        • Strategies & Use Cases
        • DLMM Farming Rewards
      • DLMM Launch Pool Overview
      • Dynamic AMM Overview
        • What is a Dynamic AMM Pool?
        • Dynamic AMM LP Fee and APY Calculation
        • Creating a Dynamic AMM Pool via the UI
        • Claiming Fees from Permanently Locked Liquidity
        • Dynamic AMM Stable Pools
        • Dynamic LST Pools
        • Additional yield from Dynamic Vaults
        • Dynamic AMM Farm Overview
      • DAMM v2 Overview
      • Memecoin Pool Overview
        • Memecoin Pool v2
          • What is Memecoin Pool v2?
        • Memecoin Pool v1
          • What is Memecoin Pool v1?
          • Permanently Locking Liquidity
      • Stake2Earn Pool Overview
        • What is a Stake2Earn Pool?
        • Stake2Earn for Launchpads
      • Multi-Token Stable Pool Overview
    • Alpha Vault Overview
    • Dynamic Vault Overview
      • What is a Dynamic Vault?
      • Dynamic Vault Program
      • Hermes - Meteora's Keeper
        • Algorithm to find optimal yield allocations
        • Rebalance crank
        • Operation fee calculation
      • Design Goals
      • Security
      • Dynamic Vaults Whitepaper
      • Dynamic Vaults Community Explainers
      • Affiliate Program for Dynamic Vault
        • Become an Affiliate Partner (Dynamic Vaults)
    • Dynamic Bonding Curve (DBC) Overview
      • What is the Dynamic Bonding Curve?
      • Customizable Pool Configuration
      • Bonding Curve Formula
      • DBC Migrator Keeper
    • Meteora’s Anti-Sniper Suite
  • INTEGRATION
    • DLMM Integration
      • DLMM SDK
        • DLMM TypeScript SDK
        • CPI Examples
      • DLMM API
      • Fetching information on locked liquidity in a DLMM
    • Dynamic AMM Pool Integration
      • Dynamic AMM SDK
        • Dynamic AMM TypeScript SDK
        • CPI Examples
      • Dynamic AMM API
        • Pool Info
        • Pool State
      • Setting Pool and Fee Config for Dynamic AMM Pools
      • Create Dynamic Pool with Timestamp/Slot Activation
      • Dynamic AMM - Farm Integration
    • DAMM v2 Integration
      • DAMM v2 SDK
        • DAMM v2 TypeScript SDK
        • DAMM v2 Rust SDK
      • Setting Pool and Fee Config for DAMM v2
      • Technical FAQ
    • Memecoin Pool Integration
      • Memecoin Pool v2 Integration
        • Setting Pool and Fee Config for Memecoin Pool v2
      • Memecoin Pool v1 Integration
        • TypeScript Code Examples
        • CPI Examples
        • Setting Pool and Fee Config for Memecoin Pool v1
        • Track permanently-locked liquidity in Memecoin Pool v1
        • Track Protocol Fee from swaps in Memecoin Pool v1
    • Stake2Earn Pool Integration
    • Dynamic Vault Integration
      • Using TypeScript-Client
      • Using Rust-Client
      • Using CPI
      • Vault API
        • Vault Info
        • Vault State
      • Vault Developer Resources
    • Alpha Vault Integration
      • Alpha Vault TypeScript SDK
      • Alpha Vault without Whitelist Setup
      • Alpha Vault with Whitelist Setup
    • Dynamic Bonding Curve (DBC) Integration
      • DBC SDK
        • DBC TypeScript SDK
        • DBC Rust SDK
      • DBC Fee Scheduler Formula
      • Program Repo
      • Technical FAQ
  • TOKEN LAUNCH POOLS
    • Steps to Create a Pool for a Token Launch
      • Create: DLMM Launch Pool
      • Create: Dynamic AMM Pool
      • Create: Memecoin Pool v1
      • Create: Stake2Earn Pool
      • Create: Pools with Alpha Vault
        • Create: DLMM Launch Pool with Alpha Vault
        • Create: Dynamic AMM Pool with Alpha Vault
        • Create: Memecoin Pool with Alpha Vault
        • Create: Stake2Earn Pool with Alpha Vault
    • Anti-Sniper Fee Suite for a Token Launch
  • Resources
    • Audits
    • Meteora Program IDs
    • Meteora APIs
    • Devnet Testing
    • Community Data Dashboards & Tools
    • Meteora Brand Assets
    • THE MASSIVE METEORA STIMULUS PACKAGE
      • Overview
      • 1. Dynamic Liquidity Market Maker (DLMM)
      • 2. Formation Of An LP Army DAO
      • 3. The 10% Stimulus Proposal
  • USER FAQ
    • Getting Started LPing
      • Supported Wallets
      • Prepare SOL
      • SOL required for Rent
      • What is Wrapped SOL?
      • What is an AMM?
      • What does it mean to provide liquidity?
      • How to swap to the tokens required for adding liquidity to a pool
      • How to quickly check if a token has any risks
      • Viewing your transaction history
      • My wallet has been compromised. What should I do?
    • Differences between DLMM and Dynamic Pools
    • DLMM FAQ
    • Dynamic AMM FAQ
      • How is the pool price of the token calculated in a Dynamic AMM?
      • What is a Meteora LP token?
      • How do I see fees earned on a Dynamic AMM Pool?
      • How to track your earnings for a Dynamic Pool?
      • What is Virtual Price in a Dynamic Pool?
      • How do LP tokens, fees, and virtual price work for Dynamic Pools?
      • Why must I add liquidity in non-stable Dynamic Pools using a 50:50 value ratio?
      • What is AMP in a Dynamic Pool with stable coins?
      • Why is the USDT-USDC pool not 1:1 in ratio of assets?
      • Can I create an LST, FX, or Multi-token pool using the Dynamic Pool creation tool?
    • Alpha Vault FAQ
    • Why is the token sometimes not picked up and tradable on Jupiter?
    • How do I create a new farm?
    • Video Tutorials to Get Started
      • LP Army Boot Camp
      • DLMM Strategy Sessions / Jam Sessions
  • Security and Risks
    • Risk of Impermanent Loss (IL)
    • Risk of depositing into an imbalanced pool / pool with price out of sync
    • Smart contract risk
    • Risk of a stablecoin depeg
    • Operational risk for dynamic vaults and pools
    • Lending risk for dynamic vaults and pools
  • legal
    • Terms of Service
    • Stake2Earn Terms of Service
Powered by GitBook
On this page
  • Summary
  • Getting Started
  • Dependencies
  • Scripts
  • 1. Create DLMM Launch Pool
  • 2. Seed liquidity
  • 3. Set DLMM Launch Pool status
  • 4. Create Alpha Vault
  • After deployment
  • When can you withdraw tokens from the pool to the position owner?
  • Other Configuration Details
  • General configuration
  • Some configuration constraints:
  • Create Base Token configuration
  • DLMM configuration
  • Alpha Vault configuration
  • Alpha Vault Pro rata configuration
  • Alpha Vault Key Components
  • Alpha Vault TypeScript SDK
  • For Testing Bun Scripts
  • Other Alpha Vault Considerations
  • What is the general process if you want to use a Launch Pool with Alpha Vault, then later use the USDC or SOL funds raised from the Launch Pool to redeploy the liquidity to another new pool?
  • FAQ
  1. TOKEN LAUNCH POOLS
  2. Steps to Create a Pool for a Token Launch
  3. Create: Pools with Alpha Vault

Create: DLMM Launch Pool with Alpha Vault

PreviousCreate: Pools with Alpha VaultNextCreate: Dynamic AMM Pool with Alpha Vault

Last updated 3 days ago

Summary

is a special 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.

DLMM 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 DLMM Launch Pool with Alpha Vault on your own.

Getting Started

  • Readme:

  • DLMM SDK on github:

  • DLMM API endpoints:

  • Alpha Vault SDK:

  • Devnet:

Dependencies

  • Install Bun: You'll also need to run the scripts. Install it via . 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 Launch Pool

  • Run the script with the config file which is updated with your preferred parameters.

  • For example, run:

    • bun run src/create_pool.ts --config <./config/create_dlmm_pool.json>

    • Replace <./config/create_dlmm_pool.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

2.1 Seed liquidity using ilm curve distribution strategy

This is the standard type of token launch liquidity distribution used by past LFG projects such as JUP, WEN, CLOUD etc.

  • Run the script with the config file which is set with your preferred parameters.

  • For example, run:

    • bun run src/seed_liquidity_lfg.ts --config <./config/seed_liquidity_lfg.json>

    • Replace <./config/seed_liquidity_lfg.json> with the path to your config file, after you have set your config parameters.

2.2 Seed liquidity using single bin strategy

This is a unique token launch strategy where all liquidity is allocated into a single bin.

  • Run the script with the config file which is set with your preferred parameters.

  • For example, run:

    • bun run src/seed_liquidity_single_bin.ts --config <./config/seed_liquidity_single_bin.json>

    • Replace <./config/seed_liquidity_single_bin.json> with the path to your config file, after you have set your config parameters.

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.

  • 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.

3. Set DLMM Launch Pool status

You are able to disable the pool prior to pool activation time (before trading starts) and enable it later before or after pool activation time. After pool activation time, once enabled the pool cannot be disabled by you again.

  • Run the script with the config file which is set with your preferred parameters.

  • For example, run:

    • bun run src/set_dlmm_pool_status.ts --config <./config/set_dlmm_pool_status.json>

    • Replace <./config/set_dlmm_pool_status.json> with the path to your config file, after you have set your config parameters.

4. Create Alpha Vault

DLMM Launch Pool with Alpha Vault Pro Rata mode

  • Change the parameters in the config according to your needs.

  • Run the config after it has been updated with your parameters:

    bun run src/create_alpha_vault.ts --config ./config/create_dlmm_pool_with_prorata_alpha_vault.json

DLMM Launch Pool with Alpha Vault FCFS (First Come First Served) mode

  • Change the parameters in the config according to your needs.

  • Run the config after it has been updated with your parameters:

    bun run src/create_alpha_vault.ts --config ./config/create_dlmm_pool_with_fcfs_alpha_vault.json

DLMM Launch Pool with Alpha Vault Pro Rata mode (with Whitelist)

  • Change the parameters in the config according to your needs.

  • Use

    • "whitelistMode": "permissioned_with_authority"

    • "whitelistFilepath": "./config/whitelist_wallet.csv"

  • Run the config after it has been updated with your parameters:

    bun run src/create_alpha_vault.ts --config ./config/create_dlmm_pool_with_prorata_alpha_vault.json

Alpha Vault with Whitelist

For some launches, the project may want to restrict which wallet addresses are allowed to deposit funds into the Alpha Vault, so in the config file used in the script to create the Alpha Vault, the whitelistMode needs to be specified.

  • permissionless: No whitelist, anyone can deposit into the Alpha Vault

  • permission_with_authority: In this mode, only the Alpha Vault creator can create escrow account with max_cap. This allows the creator to use a permissioned (with whitelist) setup without having to use the merkle tree. Creator needs to pay SOL rent for each escrow account for the whitelisted wallets, so this Alpha Vault whitelist mode is suitable for scenarios where there are very few whitelisted addresses (e.g. =<100). If they need to support a lot more whitelisted addresses, they should still use the merkle tree (PermissionWithMerkleProof whitelist mode).

Important Notes:

  • If you do not want to use Alpha Vault, skip this step.

  • Currently, only SOL or USDC is accepted as the quote token when initializing a Dynamic AMM or DLMM Pool with Alpha Vault in a permissionless setup. Since the Alpha Vault can't tell what the quote token would be, the quote token is limited to SOL or USDC. However, any quote token can be used if you use a config key that doesn't have Alpha Vault.

  • There is a minimum ~1 hour 5 minutes period between the deposit close time and the pool activation time.

  • Crank start point (time when vault buys tokens from the pool):

    • Timestamp-based Crank start point = activationPoint - 3600

    • Slot-based Crank start point = activationPoint - 9000

  • Vault deposit close point (time when vault deposits close):

    • Timestamp-based Vault, Deposit close point = Crank start point - 5 min

    • Slot-based Vault, Deposit close point = Crank start point - 750

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)

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.

  • computeUnitPriceMicroLamports: CU price in micro lamports unit. For example: 100000.

  • createBaseToken: Configuration to create base token.

  • baseMint: Base token address if the createBaseToken field is not set.

  • quoteSymbol: Quote token symbol, only SOL or USDC is supported.

  • quoteMint: Quote token mint, in case the user wants to create a DLMM launch pool with a token other than SOL or USDC.

  • dlmm: DLMM pool configuration.

Some configuration constraints:

  • createBaseToken and baseMint cannot be used together.

  • dynamicAmm and dlmm 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 based on slot or timestamp.

  • activationPoint: To activate pool trading at a point, either slot valut or timestamp value based on activationType.

  • priceRounding: Should be up or down.

  • hasAlphaVault: Whether alpha vault is enabled or not for this pool.

  • creatorPoolOnOffControl: Allow creator to turn on/off pool control.

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.

Alpha Vault configuration

  • poolType: dynamic or dlmm pool type.

  • alphaVaultType: Alpha Vault type, could be fcfs or prorata

  • depositingPoint: Absolute value that, the slot or timestamp that allows deposit depend on the pool activation type.

  • startVestingPoint: Absolute value, the slot or timestamp that start vesting depend on the pool activation type. If no vesting is required, you should put this as 1 sec after the pool's activationPoint

  • endVestingPoint: Absolute value, the slot or timestamp that end vesting depend on the pool activation type. If no vesting is required, this should be the same as startVestingPoint

  • maxDepositCap: Maximum deposit cap.

  • individualDepositingCap: Individual deposit cap.

  • escrowFee: Fee to create stake escrow account. If this fee is added, it will be a one-time fee charged when users create a stake escrow account. This acts as a tax and makes it prohibitively expensive for users to attempt to use multiple wallets to bypass the individual deposit cap. It's charged in native SOL (non-wrapped version) and will be sent to the Meteora treasury.

  • whitelistMode: permissionless or permission_with_merkle_proof or permission_with_authority.

Alpha Vault Pro rata configuration

  • depositingPoint: Absolute value that, the slot or timestamp that allows deposit depend on the pool activation type.

  • startVestingPoint: Absolute value, the slot or timestamp that start vesting depend on the pool activation type. If no vesting is required, you should put this as 1 sec after the pool's activationPoint

  • endVestingPoint: Absolute value, the slot or timestamp that end vesting depend on the pool activation type. If no vesting is required, this should be the same as startVestingPoint

  • maxBuyingCap: Maximum buying cap.

  • escrowFee: Fee to create stake escrow account. If this fee is added, it will be a one-time fee charged when users create a stake escrow account. This acts as a tax and makes it prohibitively expensive for users to attempt to use multiple wallets to bypass the individual deposit cap. It's charged in native SOL (non-wrapped version) and will be sent to the Meteora treasury.

  • whitelistMode: permissionless or permission_with_merkle_proof or permission_with_authority.

Alpha Vault Key Components

  • Vault Types: Supports both permissionless (without whitelist) and permissioned (with whitelist) Alpha Vaults.

  • Whitelist Modes:

    • Without whitelist:

      • Permissionless

    • With whitelist:

      • PermissionWithMerkleProof

      • PermissionWithAuthority

  • alphaVaultType (Vault Mode):

    • Pro-rata

    • FCFS (First-Come, First-Served)

  • Individual Deposit Cap:

    • Global individual deposit cap without whitelist only possible on FCFS vault mode, not possible on Pro rata vault mode.

Alpha Vault TypeScript SDK

For Testing Bun Scripts

First, run the localnet

bun run start-test-validator

Then run the test: bun test

Other Alpha Vault Considerations

What is the general process if you want to use a Launch Pool with Alpha Vault, then later use the USDC or SOL funds raised from the Launch Pool to redeploy the liquidity to another new pool?

  1. When setting up the Launch Pool with Alpha Vault, the token deployer should set token claim unlock from Alpha Vault to be sometime after pool activation time (after pool starts trading). The token deployer must set enough buffer time after pool activation to withdraw liquidity from the Launch Pool first to redeploy to another pool, BEFORE users can claim tokens from the Alpha Vault.

  2. Optional: Once the Launch Pool and Alpha Vault are set up, Meteora can help the team disable the Launch Pool from trading. This is a special requirement if you want the Launch Pool to be used only by the Alpha Vault to buy tokens for depositors, but not for public trading by everyone else.

  3. It is important to note that you should not allow users to claim tokens from the Alpha Vault before the token starts trading anywhere. If not users can use the tokens to create a secondary market immediately and skew the initial token price.

  4. After the Launch Pool activation time, liquidity can be withdrawn from the Launch Pool and redeployed to another pool that starts trading immediately or with another activation time. If the second pool has another activation time, it should be set earlier than the token claim unlock time from the Alpha Vault.

  • Once the second pool activates for trading, the token is tradable for everyone, and users can start claiming from the Alpha Vault after that.

FAQ

Clone repo:

Select an example config to reference and change the parameters inside according to your needs:

You can first use this to determine the suitable parameters for your launch.

Reference this config file and set your preferred parameters.

Reference this config file and set your preferred parameters.

Reference this config file and set your preferred parameters.

Reference this example config:

Reference this example config:

Reference this example config:

Replace ./config/whitelist_wallet.csv with your .

permission_with_merkle_proof: In this mode, only wallets that are whitelisted can deposit into the Alpha Vault. needs to be provided by the project to Meteora, for the Merkle proof to be hosted by Meteora. Alpha Vault deposits should not open until the Merkle proof is hosted by Meteora.

After creating the Alpha Vault for your pool, check out the for different ways to interact with it. For example, depositing funds into the Alpha Vault, cranking the Alpha Vault to buy tokens from the pool, or claiming purchased tokens from the Alpha Vault.

Please read our .

DLMM Launch Pool
https://github.com/MeteoraAg/meteora-pool-setup/blob/main/README.md
https://github.com/MeteoraAg/dlmm-sdk
https://dlmm-api.meteora.ag/swagger-ui/#/
https://docs.meteora.ag/alpha-vault/alpha-vault-typescript-sdk
https://devnet.meteora.ag/
bun
bun installation
https://github.com/MeteoraAg/meteora-pool-setup
https://github.com/MeteoraAg/meteora-pool-setup/tree/main/config
ilm curve tool
https://github.com/MeteoraAg/meteora-pool-setup/blob/main/config/seed_liquidity_lfg.json
https://github.com/MeteoraAg/meteora-pool-setup/blob/main/config/seed_liquidity_single_bin.json
https://github.com/MeteoraAg/meteora-pool-setup/blob/main/config/set_dlmm_pool_status.json
https://github.com/MeteoraAg/meteora-pool-setup/blob/main/config/create_dlmm_pool_with_prorata_alpha_vault.json
https://github.com/MeteoraAg/meteora-pool-setup/blob/main/config/create_dlmm_pool_with_fcfs_alpha_vault.json
https://github.com/MeteoraAg/meteora-pool-setup/blob/main/config/create_dlmm_pool_with_prorata_alpha_vault.json
csv file containing your list of whitelisted addresses
Csv file containing the list of whitelisted wallets
Alpha Vault SDK
Alpha Vault FAQ