private async Task UpdatePairs() { var response = await _client.GetAsync( $"https://api.blocklytics.org/uniswap/v1/exchanges?key={_blocklyticsApiKey}"); var dtoString = await response.Content.ReadAsStringAsync(); var blocklyticsPairs = JsonConvert.DeserializeObject <List <BlocklyticsUniswapPairsDTO> >(dtoString); _pairs = blocklyticsPairs .Where(pair => pair.Price != null && pair.Price.ToString() != "0") .Select(pair => { var uniswapPair = new UniswapPair { Timestamp = pair.Timestamp.ToUnixTimeMilliseconds(), Pair = $"{pair.TokenSymbol}/ETH", Price = (1 / (double)pair.Price).ToString(DecimalFormatter), EthLiquidity = pair.EthLiquidity.ToString(DecimalFormatter), TokenLiquidity = pair.TokenLiquidity.ToString(DecimalFormatter), Volume24HrEth = pair.EthVolume.ToString(DecimalFormatter) }; if (pair.TokenSymbol.Equals("hex", StringComparison.CurrentCultureIgnoreCase)) { uniswapPair = UpdateHexUniswapPair(uniswapPair).Result; } return(uniswapPair); }) .Where(IsActive); _lastUpdated = DateTime.UtcNow; }
public void Test1() { // Arrange var pair = new UniswapPair { EthLiquidity = "49.82815291", TokenLiquidity = "48745.233764732" }; var orderBook = _factory.CreateOrderBook(pair); // Act Console.WriteLine("EthLiquidity: 10ETH"); Console.WriteLine("TokenLiquidity: 100TOKEN"); Console.WriteLine("Asks:"); orderBook.Asks.Reverse(); orderBook.Asks.ForEach(ask => Console.WriteLine($"{ask.PriceEth}\t\t{ask.TokenAmount}TOKEN")); Console.WriteLine("Bids:"); orderBook.Bids.ForEach(bid => Console.WriteLine($"{bid.PriceEth}\t\t{bid.EthAmount}ETH")); // Assert }
// Temp fix for blocklytics liquidity pool flakiness private async Task <UniswapPair> UpdateHexUniswapPair(UniswapPair hexPair) { var heartBalanceResponse = await _hexContract.GetFunction("balanceOf").CallDecodingToDefaultAsync(HexUniswapAddress); var heartBalance = (BigInteger)heartBalanceResponse.First().Result; var hexBalance = (decimal) new BigDecimal(heartBalance, 8 * -1); var ethBalanceResponse = await _web3.Eth.GetBalance.SendRequestAsync(HexUniswapAddress); var ethBalance = Web3.Convert.FromWei(ethBalanceResponse.Value); if (ethBalance.Equals(0) || hexBalance.Equals(0)) { return(hexPair); } hexPair.Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); hexPair.Price = (ethBalance / hexBalance).ToString(DecimalFormatter); hexPair.EthLiquidity = ethBalance.ToString(DecimalFormatter); hexPair.TokenLiquidity = hexBalance.ToString(DecimalFormatter); return(hexPair); }
private static bool IsActive(UniswapPair pair) => pair.Price != "0" && pair.EthLiquidity != "0" && pair.TokenLiquidity != "0" && pair.Volume24HrEth != "0";