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);
        }
示例#2
0
        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);
        }