Dynamic AMM Launch Pool is a special pool type designed for new token launches with a fixed fee percentage.

It is based on Dynamic AMM v1 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.

Dynamic AMM Launch Pools can also be created with an Alpha Vault as part of the token launch process. This is optional.

Below we provide the steps to use Bun to configure and run sample scripts to conveniently set up a Dynamic AMM Launch Pool with Alpha Vault on your own.

Getting Started

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 Dynamic AMM liquidity pool with an Alpha Vault on Meteora.

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 Dynamic AMM Pool with Alpha Vault

1.1 Dynamic AMM Pool with Alpha Vault Pro Rata mode

Reference this example config: https://github.com/MeteoraAg/meteora-pool-setup/blob/main/config/create_dynamic_amm_pool_with_prorata_alpha_vault.json

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_dynamic_amm_pool_with_prorata_alpha_vault.json

1.2 Dynamic AMM Pool with Alpha Vault FCFS (First Come First Served) mode

Reference this example config: https://github.com/MeteoraAg/meteora-pool-setup/blob/main/config/create_dynamic_amm_pool_with_fcfs_alpha_vault.json

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_dynamic_amm_pool_with_fcfs_alpha_vault.json

1.3 Dynamic AMM Pool with Alpha Vault (Permissioned with authority whitelist)

Reference this example config: https://github.com/MeteoraAg/meteora-pool-setup/blob/main/config/create_dynamic_amm_pool_with_permissioned_authority_vault.json

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_dynamic_amm_pool_with_permissioned_authority_vault.json

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

Whitelist Modes

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

  • permission_with_merkle_proof: In this mode, only wallets that are whitelisted can deposit into the Alpha Vault. CSV file containing the list of whitelisted wallets needs to be provided by the project to Meteora, for the Merkle proof to be hosted by Meteora and shown on the UI. Alpha Vault deposits should not open until the Merkle proof is hosted by Meteora.

Important Notes:

  • If you do not want to use Alpha Vault, you can just Create a Dynamic AMM Pool.

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

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

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

3. Timing Configuration

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 Dynamic AMM pool: https://app.meteora.ag/pools/`POOL_ADDRESS`

When can you withdraw tokens from the pool?

CustomizablePermissionless Dynamic AMM: 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.

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.

  • dynamicAmm: Dynamic AMM pool configuration.

  • alphaVault: FCFS or Prorata Alpha Vault 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.

Dynamic AMM configuration

  • baseAmount: Base token amount.

  • quoteAmount: Quote token amount.

  • tradeFeeNumerator: Trade fee numerator, with fee denominator is set to 100_000.

  • activationType: To activate pool trading based on slot or timestamp.

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

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

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 Prorata 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

After creating the Alpha Vault for your pool, check out the Alpha Vault SDK 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.

For Testing Bun Scripts

First, run the localnet:

bun run start-test-validator

Then run the test:

bun test