Enhance bot command handlers with GMX wallet initialization
- Updated RestartBotCommandHandler, StartBotCommandHandler, and StartCopyTradingCommandHandler to include ITradingService for GMX wallet initialization. - Added checks for GMX account initialization status and implemented wallet initialization logic where necessary. - Improved error handling for wallet initialization failures.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using Managing.Application.Abstractions;
|
||||
using Managing.Application.Abstractions.Services;
|
||||
using Managing.Application.ManageBot.Commands;
|
||||
using MediatR;
|
||||
using static Managing.Common.Enums;
|
||||
@@ -8,10 +9,14 @@ namespace Managing.Application.ManageBot
|
||||
public class RestartBotCommandHandler : IRequestHandler<RestartBotCommand, BotStatus>
|
||||
{
|
||||
private readonly IBotService _botService;
|
||||
private readonly IAccountService _accountService;
|
||||
private readonly ITradingService _tradingService;
|
||||
|
||||
public RestartBotCommandHandler(IBotService botService)
|
||||
public RestartBotCommandHandler(IBotService botService, IAccountService accountService, ITradingService tradingService)
|
||||
{
|
||||
_botService = botService;
|
||||
_accountService = accountService;
|
||||
_tradingService = tradingService;
|
||||
}
|
||||
|
||||
public async Task<BotStatus> Handle(RestartBotCommand request, CancellationToken cancellationToken)
|
||||
@@ -37,6 +42,24 @@ namespace Managing.Application.ManageBot
|
||||
"You cannot restart this bot while you have multiple strategies on the same ticker.");
|
||||
}
|
||||
|
||||
// Get bot configuration to check account initialization status
|
||||
var botConfig = await _botService.GetBotConfig(request.Identifier);
|
||||
if (botConfig == null)
|
||||
{
|
||||
throw new InvalidOperationException($"Could not retrieve configuration for bot {request.Identifier}");
|
||||
}
|
||||
|
||||
// Get account to check GMX initialization status
|
||||
var account = await _accountService.GetAccount(botConfig.AccountName, true, true);
|
||||
if (account.Exchange == TradingExchanges.GmxV2 && !account.IsGmxInitialized)
|
||||
{
|
||||
var initResult = await _tradingService.InitPrivyWallet(account.Key, TradingExchanges.GmxV2);
|
||||
if (!initResult.Success)
|
||||
{
|
||||
throw new InvalidOperationException($"Failed to initialize GMX wallet: {initResult.Error}");
|
||||
}
|
||||
}
|
||||
|
||||
return await _botService.RestartBot(request.Identifier);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,13 +14,15 @@ namespace Managing.Application.ManageBot
|
||||
private readonly IAccountService _accountService;
|
||||
private readonly IGrainFactory _grainFactory;
|
||||
private readonly IBotService _botService;
|
||||
private readonly ITradingService _tradingService;
|
||||
|
||||
public StartBotCommandHandler(
|
||||
IAccountService accountService, IGrainFactory grainFactory, IBotService botService)
|
||||
IAccountService accountService, IGrainFactory grainFactory, IBotService botService, ITradingService tradingService)
|
||||
{
|
||||
_accountService = accountService;
|
||||
_grainFactory = grainFactory;
|
||||
_botService = botService;
|
||||
_tradingService = tradingService;
|
||||
}
|
||||
|
||||
public async Task<BotStatus> Handle(StartBotCommand request, CancellationToken cancellationToken)
|
||||
@@ -79,6 +81,16 @@ namespace Managing.Application.ManageBot
|
||||
}
|
||||
}
|
||||
|
||||
// Check GMX initialization status for GMX V2 accounts
|
||||
if (account.Exchange == TradingExchanges.GmxV2 && !account.IsGmxInitialized)
|
||||
{
|
||||
var initResult = await _tradingService.InitPrivyWallet(account.Key, TradingExchanges.GmxV2);
|
||||
if (!initResult.Success)
|
||||
{
|
||||
throw new InvalidOperationException($"Failed to initialize GMX wallet: {initResult.Error}");
|
||||
}
|
||||
}
|
||||
|
||||
Balance usdcBalance = null;
|
||||
// For other exchanges, keep the original USDC balance check
|
||||
if (account.Exchange != TradingExchanges.Evm && account.Exchange != TradingExchanges.GmxV2)
|
||||
|
||||
@@ -19,16 +19,18 @@ namespace Managing.Application.ManageBot
|
||||
private readonly IBotService _botService;
|
||||
private readonly IKaigenService _kaigenService;
|
||||
private readonly IEvmManager _evmManager;
|
||||
private readonly ITradingService _tradingService;
|
||||
|
||||
public StartCopyTradingCommandHandler(
|
||||
IAccountService accountService, IGrainFactory grainFactory, IBotService botService,
|
||||
IKaigenService kaigenService, IEvmManager evmManager)
|
||||
IKaigenService kaigenService, IEvmManager evmManager, ITradingService tradingService)
|
||||
{
|
||||
_accountService = accountService;
|
||||
_grainFactory = grainFactory;
|
||||
_botService = botService;
|
||||
_kaigenService = kaigenService;
|
||||
_evmManager = evmManager;
|
||||
_tradingService = tradingService;
|
||||
}
|
||||
|
||||
public async Task<string> Handle(StartCopyTradingCommand request, CancellationToken cancellationToken)
|
||||
@@ -113,6 +115,16 @@ namespace Managing.Application.ManageBot
|
||||
}
|
||||
}
|
||||
|
||||
// Check GMX initialization status for GMX V2 accounts
|
||||
if (account.Exchange == TradingExchanges.GmxV2 && !account.IsGmxInitialized)
|
||||
{
|
||||
var initResult = await _tradingService.InitPrivyWallet(account.Key, TradingExchanges.GmxV2);
|
||||
if (!initResult.Success)
|
||||
{
|
||||
throw new InvalidOperationException($"Failed to initialize GMX wallet: {initResult.Error}");
|
||||
}
|
||||
}
|
||||
|
||||
Balance usdcBalance = null;
|
||||
// For other exchanges, keep the original USDC balance check
|
||||
if (account.Exchange != TradingExchanges.Evm && account.Exchange != TradingExchanges.GmxV2)
|
||||
|
||||
@@ -109,15 +109,15 @@ public class InsufficientFundsException : Exception
|
||||
"Your wallet doesn't have enough ETH to pay for transaction gas fees.\n" +
|
||||
"Please add ETH to your wallet and try again.",
|
||||
|
||||
// InsufficientFundsType.InsufficientAllowance =>
|
||||
// "❌ Insufficient Token Allowance\n" +
|
||||
// "The trading contract doesn't have permission to spend your tokens.\n" +
|
||||
// "Please approve token spending in your wallet and try again.",
|
||||
|
||||
InsufficientFundsType.InsufficientAllowance =>
|
||||
"❌ High Network Fee\n" +
|
||||
"The gas fee for this position is too high.\n" +
|
||||
"Position opening rejected.",
|
||||
"❌ Insufficient Token Allowance\n" +
|
||||
"The trading contract doesn't have permission to spend your tokens, or you don't have enough ETH in your wallet to cover the required amount when using GMX SDK.\n" +
|
||||
"Please approve token spending in your wallet and ensure you have sufficient ETH for the transaction, then try again.",
|
||||
|
||||
// InsufficientFundsType.InsufficientAllowance =>
|
||||
// "❌ High Network Fee\n" +
|
||||
// "The gas fee for this position is too high.\n" +
|
||||
// "Position opening rejected.",
|
||||
|
||||
InsufficientFundsType.InsufficientBalance =>
|
||||
"❌ Insufficient Token Balance\n" +
|
||||
|
||||
Reference in New Issue
Block a user