Create: Memecoin Pool with Alpha Vault
Summary
Memecoin Pools are a subset of Dynamic AMM Pools. A Memecoin Pool is a Dynamic AMM Pool that has a fee scheduler, with liquidity permanently locked at pool creation.
Below we provide the code examples that can be used to initialize and seed a Memecoin Pool together with an Alpha Vault.
Memecoin Pool: A Dynamic AMM Pool created with a fee scheduler and with initial liquidity perma-locked.
Alpha Vault: Anti-sniper tool that allows depositors into the Alpha Vault to be the first to buy from the pool and be guaranteed a share of tokens at the same average price as all other depositors.
Getting Started
Dynamic AMM SDK: https://github.com/mercurial-finance/mercurial-dynamic-amm-sdk
Alpha Vault SDK: https://docs.meteora.ag/alpha-vault/alpha-vault-typescript-sdk
Alpha Vault Launch Calculation template: Copy this google sheet and adjust the numbers to help determine your preferred parameters.
Devnet: https://devnet.meteora.ag/
1. Install dependencies and initialize AmmImpl instance
1.1 Install dependencies
1.2 Initialize AmmImpl instance
2. Choose a suitable Pool and Fee Config
Before creating the pool, you need to choose a suitable pool and fee config.
What fee parameters to choose depends on your project's needs. You will need to look at the pool config list and choose a suitable pool_config_key
with your preferred fee parameters.
If you want to create an Alpha Vault along with your new pool, you also need to find a pool_config_key
that is mapped to a vault_config_key
that meets your requirements.
If none of the pool_config_key
in the list meet your requirements, please reach out to Meteora for a custom pool config key.
2.1 Public Pool Config List
Pool config list: https://amm-v2.meteora.ag/swagger-ui/#/pools/get_all_pool_configs
Devnet API: https://devnet-amm-v2.meteora.ag/pool-configs You can also get the list of config keys from devnet API
API endpoint to return the associated fee curve for each existing config: https://amm-v2.meteora.ag/swagger-ui/#/fee_config/get_config_associated_fee_configs
Using this endpoint, integrators can input the config pubkey, and it will return an array of fee update timings for the config, if there's any.
Integrators may choose a
pool_config_key
with a fee curve that suits your integration.
If there is no existing config in the list that fits your project's requirement, a new config needs to be created.
Only the Meteora team can create a new config to add it to the preset pool config list.
2.2 Default Pool Config used by Meteora Frontend
By default, Meteora's frontend is currently using this pool config key for Memecoin Pool creation:
FiENCCbPi3rFh5pW2AJ59HC53yM32eLaCjMKxRqanKFJ
For the
FiENCCbPi3rFh5pW2AJ59HC53yM32eLaCjMKxRqanKFJ
pool config, it doesn't allow creation of any Alpha Vault, therefore it's fieldvault_config_key
is1111111...
2.3 New Custom Pool Config and Fee Curve for Integrators / Launchpads
Custom Pool Config Key: Integrators such as launchpads or other partners may need to use their own unique custom pool config key, if they want custom pool_creator_authority
to prevent front-running of the token launch pool.
NOTE:
New dedicated config keys can only be created by Meteora. Please reach out to us if this is required.
The
pool_creator_authority
doesn't work with program address. It's not a program whitelist, it needs to be a PDA (program derived address) or normal account.
Custom Fee Curve: If you are an integrator, Meteora can also apply a custom fee curve/schedule for your pools, but we will need to create a dedicated config key for your team, where pool_creator_authority
is linked to your signer wallet for pool creation. You would need to send us your signer wallet that would be used to deploy the pools.
NOTE:
Even with a dedicated config key for your team, Meteora would need to customize the fee curve/schedule for you. You can't do it on your own.
Custom Pool Config and Fee Curve is used by integrators such as Moonshot by DEX Screener.
2.4 Custom Fee Curve for a Specific Pool
If required, Meteora can set a custom fee curve for a single, specific pool. This would override the fee curve used by the pool's config key, doesn't matter which config key is used.
Note: For more information about setting Pool and Fee Config for Memecoin Pools, please read here.
3. Create the Memecoin Pool
After selecting your pool_config_key
, reference this example in the Dynamic AMM SDK: https://github.com/MeteoraAg/dynamic-amm-sdk/blob/main/ts-client/src/examples/create_pool_and_lock_liquidity.ts
Using the example, update it with your pool config selected and other parameters in order to create a Memecoin Pool - which is a Dynamic AMM Pool with a fee scheduler and with liquidity (LP tokens) locked at creation.
How to assign which wallets can claim fees from the permanently-locked liquidity
Please refer to this example, in the section under let allocations = [
In the config file, you can specify different wallet addresses to receive fees from the locked liquidity, and the % to allocate to each wallet. Multiple wallets are possible, but their allocations must add up to 100%.
4. Create the Alpha Vault
After selecting your preferred pool config and creating a Memecoin Pool, please use this example to create the Alpha Vault:
Read the Alpha Vault SDK and code examples there for more information.
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 Vaultpermission_with_authority
: Only wallets that are whitelisted can deposit into the Alpha Vaultpermission_with_merkle_proof
: 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.
Important Notes
Currently, only SOL or USDC is accepted as the quote token when initializing a Memecoin Pool, Dynamic AMM Pool, 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 is a minimum ~1 hour 5 minutes period between the deposit close time and the pool activation time.
After deployment
To view pool on the UI, access the links below
For Dynamic AMM and Memecoin 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 thecreateBaseToken
field is not set.quoteSymbol
: Quote token symbol, onlySOL
orUSDC
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
andbaseMint
cannot be used together.dynamicAmm
anddlmm
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 onslot
ortimestamp
.activationPoint
: To activate pool trading at a point, either slot valut or timestamp value base onactivationType
.hasAlphaVault
: Whether alpha vault is enabled or not for this pool.
Alpha Vault configuration
poolType
:dynamic
ordlmm
pool type.alphaVaultType
: Alpha Vault type, could befcfs
orprorata
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. 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
orpermission_with_merkle_proof
orpermission_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. 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
orpermission_with_merkle_proof
orpermission_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.
Last updated