Swap tokens
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
using Managing.Application.Abstractions.Repositories;
|
||||
using Managing.Application.Abstractions.Services;
|
||||
using Managing.Common;
|
||||
using Managing.Domain.Accounts;
|
||||
using Managing.Domain.Users;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using static Managing.Common.Enums;
|
||||
|
||||
namespace Managing.Application.Accounts;
|
||||
|
||||
@@ -47,15 +47,15 @@ public class AccountService : IAccountService
|
||||
{
|
||||
request.User = user;
|
||||
|
||||
if (request.Exchange == Enums.TradingExchanges.Evm
|
||||
&& request.Type == Enums.AccountType.Trader)
|
||||
if (request.Exchange == TradingExchanges.Evm
|
||||
&& request.Type == AccountType.Trader)
|
||||
{
|
||||
var keys = _evmManager.GenerateAddress();
|
||||
request.Key = keys.Key;
|
||||
request.Secret = keys.Secret;
|
||||
}
|
||||
else if (request.Exchange == Enums.TradingExchanges.Evm
|
||||
&& request.Type == Enums.AccountType.Privy)
|
||||
else if (request.Exchange == TradingExchanges.Evm
|
||||
&& request.Type == AccountType.Privy)
|
||||
{
|
||||
if (string.IsNullOrEmpty(request.Key))
|
||||
{
|
||||
@@ -200,6 +200,45 @@ public class AccountService : IAccountService
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<SwapInfos> SwapGmxTokensAsync(User user, string accountName, Ticker fromTicker, Ticker toTicker, double amount, string orderType = "market", double? triggerRatio = null, double allowedSlippage = 0.5)
|
||||
{
|
||||
// Get the account for the user
|
||||
var account = await GetAccountByUser(user, accountName, true, false);
|
||||
|
||||
if (account == null)
|
||||
{
|
||||
throw new ArgumentException($"Account '{accountName}' not found for user '{user.Name}'");
|
||||
}
|
||||
|
||||
// Ensure the account has a valid address/key
|
||||
if (string.IsNullOrEmpty(account.Key))
|
||||
{
|
||||
throw new ArgumentException($"Account '{accountName}' does not have a valid address");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Call the Web3ProxyService to swap GMX tokens
|
||||
var swapInfos = await _web3ProxyService.SwapGmxTokensAsync(
|
||||
account.Key,
|
||||
fromTicker,
|
||||
toTicker,
|
||||
amount,
|
||||
orderType,
|
||||
triggerRatio,
|
||||
allowedSlippage
|
||||
);
|
||||
|
||||
return swapInfos;
|
||||
}
|
||||
catch (Exception ex) when (!(ex is ArgumentException || ex is InvalidOperationException))
|
||||
{
|
||||
_logger.LogError(ex, "Error swapping GMX tokens for account {AccountName} and user {UserName}",
|
||||
accountName, user.Name);
|
||||
throw new InvalidOperationException($"Failed to swap GMX tokens: {ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
private void ManageProperties(bool hideSecrets, bool getBalance, Account account)
|
||||
{
|
||||
if (account != null)
|
||||
|
||||
Reference in New Issue
Block a user