fix: Update script to create meteora dlmm pool

This commit is contained in:
quangkeu95
2025-01-13 10:54:00 +07:00
parent 872427a44b
commit 4f72b557af
5 changed files with 52 additions and 10 deletions

View File

@@ -379,6 +379,7 @@ export class SolanaAgentKit {
activationType: number,
hasAlphaVault: boolean,
activationPoint: BN | undefined,
computeUnitMicroLamports: number = 100000,
): Promise<string> {
return createMeteoraDlmmPool(
this,
@@ -391,6 +392,7 @@ export class SolanaAgentKit {
activationType,
hasAlphaVault,
activationPoint,
computeUnitMicroLamports,
);
}

View File

@@ -1,5 +1,4 @@
import { PublicKey } from "@solana/web3.js";
import { BN } from "bn.js";
/**
* Common token addresses used across the toolkit

View File

@@ -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({

View File

@@ -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<string> {
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;
}

View File

@@ -32,6 +32,20 @@ export async function createMeteoraDynamicAMMPool(
customizableParams: CustomizableParams,
computeUnitMicroLamports: number,
): Promise<string> {
// 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;
}