flash open and close position

This commit is contained in:
UjjwalGupta49
2025-01-06 10:07:58 +05:30
parent d90ee517d6
commit 6f85cbddcd
28 changed files with 97 additions and 88 deletions

View File

@@ -776,13 +776,15 @@ export class SolanaGetWalletAddressTool extends Tool {
export class SolanaFlashOpenTrade extends Tool {
name = "solana_flash_open_trade";
description = `Opens a new leveraged trading position on Flash.Trade exchange.
description = `This tool can be used to open a new leveraged trading position on Flash.Trade exchange.
Inputs (input is a JSON string):
token: string, one of ["SOL", "BTC", "ETH"] (required)
side: string, either "long" or "short" (required)
collateralUsd: number, amount in USD for collateral eg 10 (required)
leverage: number, eg 5 for 5 times the leverage on collateral amount (required)`;
Inputs ( input is a JSON string ):
token: string, eg "SOL", "BTC", "ETH" (required)
type: string, eg "long", "short" (required)
collateral: number, eg 10, 100, 1000 (required)
leverage: number, eg 5, 10, 20 (required)
Example prompt is Open a 20x leveraged trade for SOL on long side using flash trade with 500 USD as collateral`;
constructor(private solanaKit: SolanaAgentKit) {
super();
@@ -792,29 +794,40 @@ export class SolanaFlashOpenTrade extends Tool {
try {
const parsedInput = JSON.parse(input);
console.log(parsedInput);
// Validate input parameters
if (!parsedInput.token) {
throw new Error("Token is required");
throw new Error("Token is required, received: " + parsedInput.token);
}
if (!["SOL", "BTC", "ETH"].includes(parsedInput.token)) {
throw new Error('Token must be one of ["SOL", "BTC", "ETH"]');
if (!["SOL", "BTC", "ETH", "USDC"].includes(parsedInput.token)) {
throw new Error(
'Token must be one of ["SOL", "BTC", "ETH", "USDC"], received: ' +
parsedInput.token,
);
}
if (!["long", "short"].includes(parsedInput.side)) {
throw new Error('Side must be either "long" or "short"');
if (!["long", "short"].includes(parsedInput.type)) {
throw new Error(
'Type must be either "long" or "short", received: ' +
parsedInput.type,
);
}
if (!parsedInput.collateralUsd || parsedInput.collateralUsd <= 0) {
throw new Error("Collateral USD amount must be positive");
if (!parsedInput.collateral || parsedInput.collateral <= 0) {
throw new Error(
"Collateral amount must be positive, received: " +
parsedInput.collateral,
);
}
if (!parsedInput.leverage || parsedInput.leverage <= 0) {
throw new Error("Leverage must be positive");
throw new Error(
"Leverage must be positive, received: " + parsedInput.leverage,
);
}
console.log(parsedInput);
const tx = await this.solanaKit.flashOpenTrade({
token: parsedInput.token,
side: parsedInput.side,
collateralUsd: parsedInput.collateralUsd,
side: parsedInput.type,
collateralUsd: parsedInput.collateral,
leverage: parsedInput.leverage,
});
@@ -823,8 +836,8 @@ export class SolanaFlashOpenTrade extends Tool {
message: "Flash trade position opened successfully",
transaction: tx,
token: parsedInput.token,
side: parsedInput.side,
collateralUsd: parsedInput.collateralUsd,
side: parsedInput.type,
collateral: parsedInput.collateral,
leverage: parsedInput.leverage,
});
} catch (error: any) {
@@ -839,17 +852,13 @@ export class SolanaFlashOpenTrade extends Tool {
export class SolanaFlashCloseTrade extends Tool {
name = "solana_flash_close_trade";
description = `Closes an existing leveraged trading position on Flash.Trade exchange.
description = `Close an existing leveraged trading position on Flash.Trade exchange.
Inputs (input is a JSON string):
token: string, one of ["SOL", "BTC", "ETH"] (required)
side: string, either "long" or "short" (required)
Example:
{
"token": "SOL",
"side": "long"
}`;
Inputs ( input is a JSON string ):
token: string, eg "SOL", "BTC", "ETH" (required)
side: string, eg "long", "short" (required)
Example prompt is Close a 20x leveraged trade for SOL on long side`;
constructor(private solanaKit: SolanaAgentKit) {
super();