mirror of
https://github.com/d0zingcat/solana-agent-kit.git
synced 2026-05-22 15:10:43 +00:00
66 lines
2.6 KiB
TypeScript
66 lines
2.6 KiB
TypeScript
import { PublicKey } from "@solana/web3.js";
|
|
import { Decimal } from "decimal.js";
|
|
import { FEE_TIERS } from "../../tools/orca";
|
|
import { Tool } from "langchain/tools";
|
|
import { SolanaAgentKit } from "../../agent";
|
|
|
|
export class SolanaOrcaCreateSingleSideLiquidityPool extends Tool {
|
|
name = "orca_create_single_sided_liquidity_pool";
|
|
description = `Create a single-sided liquidity pool on Orca, the most efficient and capital-optimized CLMM platform on Solana.
|
|
|
|
This function initializes a single-sided liquidity pool, ideal for community driven project, fair launches, and fundraising. Minimize price impact by setting a narrow price range.
|
|
|
|
Inputs (JSON string):
|
|
- depositTokenAmount: number, in units of the deposit token including decimals, e.g., 1000000000 (required).
|
|
- depositTokenMint: string, mint address of the deposit token, e.g., "DepositTokenMintAddress" (required).
|
|
- otherTokenMint: string, mint address of the other token, e.g., "OtherTokenMintAddress" (required).
|
|
- initialPrice: number, initial price of the deposit token in terms of the other token, e.g., 0.001 (required).
|
|
- maxPrice: number, maximum price at which liquidity is added, e.g., 5.0 (required).
|
|
- feeTier: number, fee tier for the pool in bps. Options: 1, 2, 4, 5, 16, 30, 65, 100, 200 (required).`;
|
|
|
|
constructor(private solanaKit: SolanaAgentKit) {
|
|
super();
|
|
}
|
|
|
|
async _call(input: string): Promise<string> {
|
|
try {
|
|
const inputFormat = JSON.parse(input);
|
|
const depositTokenAmount = inputFormat.depositTokenAmount;
|
|
const depositTokenMint = new PublicKey(inputFormat.depositTokenMint);
|
|
const otherTokenMint = new PublicKey(inputFormat.otherTokenMint);
|
|
const initialPrice = new Decimal(inputFormat.initialPrice);
|
|
const maxPrice = new Decimal(inputFormat.maxPrice);
|
|
const feeTier = inputFormat.feeTier;
|
|
|
|
if (!feeTier || !(feeTier in FEE_TIERS)) {
|
|
throw new Error(
|
|
`Invalid feeTier. Available options: ${Object.keys(FEE_TIERS).join(
|
|
", ",
|
|
)}`,
|
|
);
|
|
}
|
|
|
|
const txId = await this.solanaKit.orcaCreateSingleSidedLiquidityPool(
|
|
depositTokenAmount,
|
|
depositTokenMint,
|
|
otherTokenMint,
|
|
initialPrice,
|
|
maxPrice,
|
|
feeTier,
|
|
);
|
|
|
|
return JSON.stringify({
|
|
status: "success",
|
|
message: "Single-sided Whirlpool created successfully",
|
|
transaction: txId,
|
|
});
|
|
} catch (error: any) {
|
|
return JSON.stringify({
|
|
status: "error",
|
|
message: error.message,
|
|
code: error.code || "UNKNOWN_ERROR",
|
|
});
|
|
}
|
|
}
|
|
}
|