diff --git a/src/agent/index.ts b/src/agent/index.ts index 8def1a8..b528320 100644 --- a/src/agent/index.ts +++ b/src/agent/index.ts @@ -379,6 +379,7 @@ export class SolanaAgentKit { activationType: number, hasAlphaVault: boolean, activationPoint: BN | undefined, + computeUnitMicroLamports: number = 100000, ): Promise { return createMeteoraDlmmPool( this, @@ -391,6 +392,7 @@ export class SolanaAgentKit { activationType, hasAlphaVault, activationPoint, + computeUnitMicroLamports, ); } diff --git a/src/constants/index.ts b/src/constants/index.ts index 53364ad..81e3c31 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -1,5 +1,4 @@ import { PublicKey } from "@solana/web3.js"; -import { BN } from "bn.js"; /** * Common token addresses used across the toolkit diff --git a/src/langchain/index.ts b/src/langchain/index.ts index a050e81..c192dee 100644 --- a/src/langchain/index.ts +++ b/src/langchain/index.ts @@ -15,7 +15,6 @@ import { CreateSingleOptions, StoreInitOptions, } from "@3land/listings-sdk/dist/types/implementation/implementationTypes"; -import { METEORA_DYNAMIC_FEE_DENOMINATOR, TOKENS } from "../constants"; export class SolanaBalanceTool extends Tool { name = "solana_balance"; @@ -1346,8 +1345,6 @@ export class SolanaMeteoraCreateDynamicPool extends Tool { } const inputFormat: CreateMeteoraDynamicAmmPoolInput = JSON.parse(input); - console.log(inputFormat); - const tokenAMint = new PublicKey(inputFormat.tokenAMint); const tokenBMint = new PublicKey(inputFormat.tokenBMint); const tokenAAmount = new BN(inputFormat.tokenAAmount.toString()); @@ -1400,11 +1397,12 @@ export class SolanaMeteoraCreateDlmmPool extends Tool { - tokenBMint: string, token B mint (required). - binStep: number, pool bin step, e.g., 20 (required). - initialPrice: number, pool initial price, e.g., 0.25 (required). - - fee: number, trade fee in percentage, e.g. 0.2 (required). + - feeBps: number, trade fee in percentage, e.g. 20 for 0.2% (required). - priceRoundingUp: boolean, whether the initial price should be rounded up or not, default is true (optional). - activationType: number, pool start trading time indicator. 0 is slot and 1 is timestamp, default is 1 for timestamp (optional). - activationPoint: number, pool start trading slot / timestamp, default is null means pool can start trading immediately (optional). - hasAlphaVault: boolean, whether the pool supports alpha vault, default is false (optional). + - computeUnitMicroLamports: number, the priority fee in micro-lamports unit, default is 100000 (optional). `; constructor(private solanaKit: SolanaAgentKit) { @@ -1418,27 +1416,28 @@ export class SolanaMeteoraCreateDlmmPool extends Tool { tokenBMint: string; binStep: number; initialPrice: number; - fee: number; + feeBps: number; priceRoundingUp?: boolean; activationType?: number; activationPoint?: number; hasAlphaVault?: boolean; + computeUnitMicroLamports?: number; } const inputFormat: CreateMeteoraDlmmPoolInput = JSON.parse(input); - console.log(inputFormat); - const tokenAMint = new PublicKey(inputFormat.tokenAMint); const tokenBMint = new PublicKey(inputFormat.tokenBMint); const binStep = inputFormat.binStep; const initialPrice = inputFormat.initialPrice; - const feeBps = inputFormat.fee * 10000; + const feeBps = inputFormat.feeBps; const priceRoundingUp = inputFormat.priceRoundingUp ?? true; const activationType = inputFormat.activationType ?? 1; const activationPoint = inputFormat.activationPoint ? new BN(inputFormat.activationPoint) : undefined; const hasAlphaVault = inputFormat.hasAlphaVault ?? false; + const computeUnitMicroLamports = + inputFormat.computeUnitMicroLamports ?? 100000; const txId = await this.solanaKit.meteoraCreateDlmmPool( tokenAMint, @@ -1450,6 +1449,7 @@ export class SolanaMeteoraCreateDlmmPool extends Tool { activationType, hasAlphaVault, activationPoint, + computeUnitMicroLamports, ); return JSON.stringify({ diff --git a/src/tools/create_meteora_dlmm_pool.ts b/src/tools/create_meteora_dlmm_pool.ts index 5439281..f9cf1a8 100644 --- a/src/tools/create_meteora_dlmm_pool.ts +++ b/src/tools/create_meteora_dlmm_pool.ts @@ -1,6 +1,10 @@ import { SolanaAgentKit } from "../agent"; import BN from "bn.js"; -import { PublicKey, sendAndConfirmTransaction } from "@solana/web3.js"; +import { + ComputeBudgetProgram, + PublicKey, + sendAndConfirmTransaction, +} from "@solana/web3.js"; import DLMM, { ActivationType } from "@meteora-ag/dlmm"; import { getMint } from "@solana/spl-token"; @@ -29,6 +33,7 @@ export async function createMeteoraDlmmPool( activationType: ActivationType, hasAlphaVault: boolean, activationPoint: BN | undefined, + computeUnitMicroLamports: number, ): Promise { const tokenAMintInfo = await getMint(agent.connection, tokenAMint); const tokenBMintInfo = await getMint(agent.connection, tokenBMint); @@ -45,6 +50,17 @@ export async function createMeteoraDlmmPool( !priceRoundingUp, ); + // console.log(`>>> Creating Meteora DLMM pool...`); + // console.log(`- Using tokenAMint: ${tokenAMint.toString()}`); + // console.log(`- Using tokenBMint: ${tokenBMint.toString()}`); + // console.log(`- Using binStep: ${binStep}`); + // console.log(`- Using initialPrice: ${initialPrice}`); + // console.log(`- Using priceRoundingUp: ${priceRoundingUp}`); + // console.log(`- Using feeBps ${feeBps}`); + // console.log(`- Using activationType: ${activationType}`); + // console.log(`- Using activationPoint: ${activationPoint?.toString()}`); + // console.log(`- Using hasAlphaVault: ${hasAlphaVault}`); + const initPoolTx = await DLMM.createCustomizablePermissionlessLbPair( agent.connection, new BN(binStep), @@ -56,6 +72,14 @@ export async function createMeteoraDlmmPool( hasAlphaVault, agent.wallet_address, activationPoint, + { + cluster: "mainnet-beta", + }, + ); + initPoolTx.add( + ComputeBudgetProgram.setComputeUnitPrice({ + microLamports: computeUnitMicroLamports, + }), ); const initPoolTxHash = await sendAndConfirmTransaction( @@ -67,5 +91,7 @@ export async function createMeteoraDlmmPool( throw err; }); + // console.log(`<<< Finished creating Meteora DLMM pool.`); + return initPoolTxHash; } diff --git a/src/tools/create_meteora_dynamic_amm_pool.ts b/src/tools/create_meteora_dynamic_amm_pool.ts index 0917da6..794d7e9 100644 --- a/src/tools/create_meteora_dynamic_amm_pool.ts +++ b/src/tools/create_meteora_dynamic_amm_pool.ts @@ -32,6 +32,20 @@ export async function createMeteoraDynamicAMMPool( customizableParams: CustomizableParams, computeUnitMicroLamports: number, ): Promise { + // console.log(`>>> Creating Meteora Dynamic Pool...`); + // console.log(`- Using tokenAMint: ${tokenAMint.toString()}`); + // console.log(`- Using tokenBMint: ${tokenBMint.toString()}`); + // console.log(`- Using tokenAAmount: ${tokenAAmount.toString()}`); + // console.log(`- Using tokenBAmount: ${tokenBAmount.toString()}`); + // console.log( + // `- Using tradeFeeNumerator ${customizableParams.tradeFeeNumerator}`, + // ); + // console.log(`- Using activationType: ${customizableParams.activationType}`); + // console.log( + // `- Using activationPoint: ${customizableParams.activationPoint?.toString()}`, + // ); + // console.log(`- Using hasAlphaVault: ${customizableParams.hasAlphaVault}`); + const initPoolTx = await AmmImpl.createCustomizablePermissionlessConstantProductPool( agent.connection, @@ -57,6 +71,7 @@ export async function createMeteoraDynamicAMMPool( console.error(err); throw err; }); + // console.log(`<<< Finished creating Meteora Dynamic Pool.`); return initPoolTxHash; }