fix: Allow input normal token amounts

This commit is contained in:
quangkeu95
2025-01-17 15:20:57 +07:00
parent 0ef7fbf74f
commit 15172ee8c6

View File

@@ -2,6 +2,8 @@ import { PublicKey } from "@solana/web3.js";
import { Tool } from "langchain/tools";
import { SolanaAgentKit } from "../../agent";
import { BN } from "bn.js";
import { MintLayout } from "@solana/spl-token";
import Decimal from "decimal.js";
export class SolanaMeteoraCreateDynamicPool extends Tool {
name = "meteora_create_dynamic_pool";
@@ -10,8 +12,8 @@ export class SolanaMeteoraCreateDynamicPool extends Tool {
Inputs (JSON string):
- tokenAMint: string, token A mint (required).
- tokenBMint: string, token B mint (required).
- tokenAAmount: number, token A amount including decimals, e.g., 1000000000 (required).
- tokenBAmount: number, token B amount including decimals, e.g., 1000000000 (required).
- tokenAAmount: number, token A amount not including decimals, e.g., 1 (required).
- tokenBAmount: number, token B amount not including decimals, e.g., 0.2 (required).
- tradeFeeNumerator: number, trade fee numerator, e.g., 2500 for 2.5% (required).
- 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).
@@ -38,8 +40,40 @@ export class SolanaMeteoraCreateDynamicPool extends Tool {
const tokenAMint = new PublicKey(inputFormat.tokenAMint);
const tokenBMint = new PublicKey(inputFormat.tokenBMint);
const tokenAAmount = new BN(inputFormat.tokenAAmount.toString());
const tokenBAmount = new BN(inputFormat.tokenBAmount.toString());
const tokenAMintInfo =
await this.solanaKit.connection.getAccountInfo(tokenAMint);
const tokenBMintInfo =
await this.solanaKit.connection.getAccountInfo(tokenBMint);
if (!tokenAMintInfo) {
return JSON.stringify({
status: "error",
message: "failed to fetch tokenAMint info",
code: "UNKNOWN_ERROR",
});
}
if (!tokenBMintInfo) {
return JSON.stringify({
status: "error",
message: "failed to fetch tokenBMint info",
code: "UNKNOWN_ERROR",
});
}
const tokenADecimals = MintLayout.decode(tokenAMintInfo.data).decimals;
const tokenBDecimals = MintLayout.decode(tokenBMintInfo.data).decimals;
const tokenAAmount = new BN(
new Decimal(inputFormat.tokenAAmount)
.mul(10 ** tokenADecimals)
.toString(),
);
const tokenBAmount = new BN(
new Decimal(inputFormat.tokenBAmount)
.mul(10 ** tokenBDecimals)
.toString(),
);
const tradeFeeNumerator = new BN(
inputFormat.tradeFeeNumerator.toString(),