Permissionless Dynamic AMM with Alpha Vault Setup

Summary

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 on Meteora.

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 Dynamic AMM Pool

Examples:

A) Create a standard Dynamic AMM Pool

Run:

bun run src/create_pool.ts --config ./config/create_dynamic_amm_pool.json

B) Create a Dynamic AMM Pool with new token mint

Run:

bun run src/create_pool.ts --config ./config/create_dynamic_amm_pool_with_new_token.json

C) Lock Liquidity for Dynamic AMM Pool

bun run src/lock_liquidity.ts --config ./config/lock_liquidity.json

2. Create a Dynamic AMM Pool with Alpha Vault

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.

  • The Meteora website only works with SquadsX multisig. If you are using multisig, make sure your multisig is using SquadsX, otherwise you can't manage liquidity through the website.

After deployment

To view pool on the UI, access the link below

  • For Dynamic AMM pool: https://app.meteora.ag/pools/<POOL_ADDRESS>

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.

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

  • baseDecimals: Base token decimal.

  • dynamicAmm: Dynamic AMM pool configuration.

  • dlmm: DLMM 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 base on slot or timestamp.

  • activationPoint: To activate pool trading at a point, either slot valut or timestamp value base 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.

  • endVestingPoint: Absolute value, the slot or timestamp that end vesting depend on the pool activation type.

  • maxDepositCap: Maximum deposit cap.

  • individualDepositingCap: Individual deposit cap.

  • escrowFee: Fee to create stake escrow account.

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

  • endVestingPoint: Absolute value, the slot or timestamp that end vesting depend on the pool activation type.

  • maxBuyingCap: Maximum buying cap.

  • escrowFee: Fee to create stake escrow account.

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

Last updated