Fix getbalance + fix get orders for bot
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System.Net.Http.Json;
|
||||
using System.Numerics;
|
||||
using Managing.Application.Abstractions;
|
||||
using Managing.Application.Abstractions.Repositories;
|
||||
using Managing.Common;
|
||||
using Managing.Core;
|
||||
@@ -29,6 +30,7 @@ using BalanceOfOutputDTO = Nethereum.Contracts.Standards.ERC20.ContractDefinitio
|
||||
using Chain = Managing.Domain.Evm.Chain;
|
||||
using TransferEventDTO = Nethereum.Contracts.Standards.ERC721.ContractDefinition.TransferEventDTO;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Managing.Infrastructure.Evm;
|
||||
|
||||
@@ -38,9 +40,9 @@ public class EvmManager : IEvmManager
|
||||
private readonly HttpClient _httpClient;
|
||||
private readonly string _password = "!StrongPassword94";
|
||||
private readonly IEnumerable<ISubgraphPrices> _subgraphs;
|
||||
private Dictionary<string, Dictionary<string, decimal>> _geckoPrices;
|
||||
private readonly GmxV2Service _gmxV2Service;
|
||||
private readonly IWeb3ProxyService _web3ProxyService;
|
||||
private readonly ICacheService _cacheService;
|
||||
|
||||
private readonly List<Ticker> _eligibleTickers = new List<Ticker>()
|
||||
{
|
||||
@@ -49,44 +51,15 @@ public class EvmManager : IEvmManager
|
||||
};
|
||||
|
||||
public EvmManager(IEnumerable<ISubgraphPrices> subgraphs,
|
||||
IWeb3ProxyService web3ProxyService)
|
||||
IWeb3ProxyService web3ProxyService, ICacheService cacheService)
|
||||
{
|
||||
var defaultChain = ChainService.GetEthereum();
|
||||
_web3 = new Web3(defaultChain.RpcUrl);
|
||||
_httpClient = new HttpClient();
|
||||
_subgraphs = subgraphs;
|
||||
_web3ProxyService = web3ProxyService;
|
||||
_geckoPrices = _geckoPrices != null && _geckoPrices.Any()
|
||||
? _geckoPrices
|
||||
: new Dictionary<string, Dictionary<string, decimal>>();
|
||||
_gmxV2Service = new GmxV2Service();
|
||||
SetupPrices();
|
||||
}
|
||||
|
||||
public void SetupPrices()
|
||||
{
|
||||
try
|
||||
{
|
||||
var geckoIds = new List<string>();
|
||||
|
||||
foreach (var ticker in Enum.GetValues<Ticker>())
|
||||
{
|
||||
var geckoId = TokenService.GetGeckoToken(ticker.ToString())?.Id;
|
||||
if (geckoId != null)
|
||||
{
|
||||
geckoIds.Add(geckoId);
|
||||
}
|
||||
}
|
||||
|
||||
if (geckoIds != null && geckoIds.Count > 0 && !_geckoPrices.Any())
|
||||
{
|
||||
_geckoPrices = GetPrices(geckoIds).Result;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// TODO : Handle error
|
||||
}
|
||||
_cacheService = cacheService;
|
||||
}
|
||||
|
||||
public async Task<decimal> GetAddressBalance(string address)
|
||||
@@ -208,16 +181,15 @@ public class EvmManager : IEvmManager
|
||||
{
|
||||
var web3 = new Web3(chain.RpcUrl);
|
||||
var etherBalance = Web3.Convert.FromWei(await web3.Eth.GetBalance.SendRequestAsync(account));
|
||||
var etherPrice = (await GetPrices(new List<string> { "ethereum" }))["ethereum"]["usd"];
|
||||
|
||||
var lastCandle = await GetCandle(Ticker.ETH);
|
||||
|
||||
return new EvmBalance()
|
||||
{ Balance = etherBalance, Price = etherPrice, TokenName = "ETH", Value = etherBalance * etherPrice };
|
||||
{ Balance = etherBalance, Price = lastCandle.Close, TokenName = "ETH", Value = etherBalance * lastCandle.Close };
|
||||
}
|
||||
|
||||
public async Task<List<EvmBalance>> GetAllBalances(Chain chain, string publicAddress)
|
||||
{
|
||||
var balances = new List<EvmBalance>();
|
||||
SetupPrices();
|
||||
foreach (var ticker in Enum.GetValues<Ticker>())
|
||||
{
|
||||
try
|
||||
@@ -259,12 +231,8 @@ public class EvmManager : IEvmManager
|
||||
.QueryAsync<BigInteger>(contractAddress, balanceOfMessage)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
var geckoId = TokenService.GetGeckoToken(ticker.ToString())?.Id;
|
||||
|
||||
if (geckoId == null)
|
||||
return null;
|
||||
|
||||
var tokenUsdPrice = _geckoPrices[geckoId][Constants.Stablecoins.Usd.ToLowerInvariant()];
|
||||
var lastCandle = await GetCandle(ticker);
|
||||
var tokenUsdPrice = lastCandle.Close;
|
||||
var tokenDecimal = TokenService.GetDecimal(ticker);
|
||||
var balanceFromWei = Web3.Convert.FromWei(balance, tokenDecimal);
|
||||
|
||||
@@ -374,7 +342,7 @@ public class EvmManager : IEvmManager
|
||||
return chainBalances;
|
||||
}
|
||||
|
||||
public async Task<List<Candle>> GetCandles(SubgraphProvider subgraphProvider, Ticker ticker, DateTime startDate,
|
||||
public async Task<List<Candle>> GetCandles(Ticker ticker, DateTime startDate,
|
||||
Timeframe timeframe)
|
||||
{
|
||||
string gmxTimeframe = GmxHelpers.GeTimeframe(timeframe);
|
||||
@@ -423,11 +391,21 @@ public class EvmManager : IEvmManager
|
||||
return GmxV2Mappers.Map(tokenList).Where(t => _eligibleTickers.Contains(t)).ToList();
|
||||
}
|
||||
|
||||
public async Task<Candle> GetCandle(SubgraphProvider subgraphProvider, Ticker ticker)
|
||||
public async Task<Candle> GetCandle(Ticker ticker)
|
||||
{
|
||||
var lastPrices = await GetCandles(subgraphProvider, ticker, DateTime.UtcNow.AddMinutes(-15),
|
||||
Timeframe.FiveMinutes);
|
||||
return lastPrices.Last();
|
||||
var key = $"lastcandle-{ticker}";
|
||||
var cachedCandle = _cacheService.GetValue<Candle>(key);
|
||||
|
||||
if (cachedCandle == null)
|
||||
{
|
||||
var lastCandles = await GetCandles(ticker, DateTime.UtcNow.AddMinutes(-5),
|
||||
Timeframe.OneMinute);
|
||||
cachedCandle = lastCandles.Last();
|
||||
|
||||
_cacheService.SaveValue(key, cachedCandle, TimeSpan.FromMinutes(5));
|
||||
}
|
||||
|
||||
return cachedCandle;
|
||||
}
|
||||
|
||||
public async Task<bool> InitAddress(string publicAddress)
|
||||
@@ -776,10 +754,10 @@ public class EvmManager : IEvmManager
|
||||
{
|
||||
if (account.IsPrivyWallet)
|
||||
{
|
||||
var orders = await _web3ProxyService.CallGmxServiceAsync<List<Trade>>("/get-orders",
|
||||
new { address = account.Key, walletId = account.Secret, ticker = ticker.ToString() });
|
||||
var result = await _web3ProxyService.GetGmxServiceAsync<GetGmxTradesResponse>("/trades",
|
||||
new { account = account.Key, ticker = ticker.ToString() });
|
||||
|
||||
return orders;
|
||||
return result.Trades;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user