public async Task <decimal> GetAmountAsync(string baseAssetId, string quotingAssetId, decimal amount, IRequestMarkup requestMarkup, IMarkup merchantMarkup) { var rate = await GetRateAsync(baseAssetId, quotingAssetId, requestMarkup.Percent, requestMarkup.Pips, merchantMarkup); _log.Info("Rate calculation", $"Calculation details: {new {baseAssetId, quotingAssetId, amount, requestMarkup, merchantMarkup, rate}.ToJson()}"); if (rate == decimal.Zero) { throw new ZeroRateException(); } decimal result = (amount + requestMarkup.FixedFee + merchantMarkup.FixedFee) / rate; Asset baseAsset = await _assetsLocalCache.GetAssetByIdAsync(baseAssetId); decimal roundedResult = decimal.Round(result, baseAsset.Accuracy, MidpointRounding.AwayFromZero); return(roundedResult); }
public async Task <decimal> GetAmountAsync(string baseAssetId, string quotingAssetId, decimal amount, IRequestMarkup requestMarkup, IMarkup merchantMarkup) { var rate = await GetRateAsync(baseAssetId, quotingAssetId, requestMarkup.Percent, requestMarkup.Pips, merchantMarkup); await _log.WriteInfoAsync(nameof(CalculationService), nameof(GetAmountAsync), new { baseAssetId, quotingAssetId, amount, requestMarkup, merchantMarkup, rate }.ToJson(), "Rate calculation"); decimal result = (amount + (decimal)requestMarkup.FixedFee + merchantMarkup.FixedFee) / rate; Asset baseAsset = await _assetsLocalCache.GetAssetByIdAsync(baseAssetId); decimal roundedResult = decimal.Round(result, baseAsset.Accuracy, MidpointRounding.AwayFromZero); return(roundedResult); }