Beispiel #1
0
        private async Task <IEnumerable <CryptoTransaction> > GetTransactions(BinanceClient client, Exchange exchange)
        {
            var transactions = new List <CryptoTransaction>();
            var deposits     = await client.GetDepositHistoryAsync();

            foreach (var deposit in deposits.Data.List)
            {
                transactions.Add(
                    CryptoTransaction.NewIn(deposit.InsertTime.ToFileTimeUtc().ToString(), deposit.InsertTime, exchange.Id, "Transfered " + deposit.Asset + " to Binance", deposit.Amount, deposit.Asset, string.Empty, string.Empty, string.Empty)
                    );
            }

            var withdraws = await client.GetWithdrawHistoryAsync();

            foreach (var withdrawal in withdraws.Data.List)
            {
                transactions.Add(
                    CryptoTransaction.NewOut(withdrawal.TransactionId, withdrawal.ApplyTime, exchange.Id, "Transfered " + withdrawal.Asset + " from Binance",
                                             withdrawal.Amount,
                                             withdrawal.Asset,
                                             0,
                                             string.Empty,
                                             string.Empty,
                                             withdrawal.Address,
                                             withdrawal.TransactionId
                                             )
                    );
            }


            return(transactions);
        }
        public ActionResult DeleteTransaction(int id)
        {
            var del = new CryptoTransaction().Delete(id);

            if (del)
            {
                return(Json(new { status = 200, message = "Delete Successful" }, JsonRequestBehavior.AllowGet));
            }
            return(Json(new { status = 400, message = "Something went wrong" }, JsonRequestBehavior.AllowGet));
        }
        private async Task <CryptoTransaction[]> MappTransaction(CoinbaseTransaction transaction, Guid exchangeId)
        {
            switch (transaction.Type)
            {
            case CoinbaseTransactionTypes.Buy:

                var transactions = new List <CryptoTransaction>()
                {
                    CryptoTransaction.NewTrade(transaction.Buy.User_Reference, transaction.Created_At, exchangeId, transaction.Details.Title + " " + transaction.Details.SubTitle,
                                               transaction.Buy.Amount.Amount,
                                               transaction.Buy.Amount.Currency,
                                               transaction.Buy.Fee.Amount,
                                               transaction.Buy.Fee.Currency,
                                               transaction.Buy.Subtotal.Amount,
                                               transaction.Buy.Subtotal.Currency,
                                               await _marketData.GetHistoricRate("CHF", transaction.Buy.Amount.Currency, transaction.Created_At))
                };

                if (await IsCreditcardPayment(transaction.Buy.Payment_Method.Id))
                {
                    // Add Second transaction for creditcard payment
                    transactions.Add(CryptoTransaction.NewIn("Creditcard in from buy " + transaction.Buy.User_Reference, transaction.Created_At.AddSeconds(-2), exchangeId, transaction.Details.Title + " " + transaction.Details.SubTitle,
                                                             transaction.Buy.Fee.Amount + transaction.Buy.Subtotal.Amount,
                                                             transaction.Buy.Subtotal.Currency,
                                                             transaction.Details.Payment_Method_Name,
                                                             "Coinbase",
                                                             string.Empty));
                }

                return(transactions.ToArray());

            //case CoinbaseTransactionTypes.Sell:
            //    crypto.SellAmount = transaction.Sell.Amount.Amount;
            //    crypto.SellCurrency= transaction.Sell.Amount.Currency;
            //    crypto.FeeAmount = transaction.Sell.Fee.Amount;
            //    crypto.FeeCurrency = transaction.Buy.Fee.Currency;
            //    break;

            //case CoinbaseTransactionTypes.Transfer:
            //    break;
            case CoinbaseTransactionTypes.Send:
                // Send or receive
                if (transaction.Network.Status == CoinbaseTransactionStatus.Off_Blockchain)
                {
                    // Is Coinbase gift
                    return new[] { CryptoTransaction.NewIn(transaction.Id, transaction.Created_At, exchangeId,
                                                           transaction.Details.Title + " " + transaction.Details.SubTitle,
                                                           transaction.Amount.Amount,
                                                           transaction.Amount.Currency,
                                                           "Coinbase",
                                                           string.Empty,
                                                           transaction.Network.Hash) }
                }
                ;

                if (transaction.To == null)
                {
                    // Is Receiving
                    return(new[] { CryptoTransaction.NewIn(transaction.Network.Hash, transaction.Created_At, exchangeId,
                                                           transaction.Details.Title + " " + transaction.Details.SubTitle,
                                                           transaction.Amount.Amount,
                                                           transaction.Amount.Currency,
                                                           string.Empty, // Todo: Get Network adress
                                                           string.Empty,
                                                           transaction.Network.Hash) });
                }
                else
                {
                    // Is Sending
                    return(new[] { CryptoTransaction.NewOut(transaction.Network.Hash, transaction.Created_At, exchangeId,
                                                            transaction.Details.Title + " " + transaction.Details.SubTitle,
                                                            transaction.Network.Transaction_Amount.Amount,
                                                            transaction.Network.Transaction_Amount.Currency,
                                                            transaction.Network.Transaction_Fee.Amount,
                                                            transaction.Network.Transaction_Fee.Currency,
                                                            string.Empty,
                                                            transaction.To.Address,
                                                            transaction.Network.Hash) });
                }

            case CoinbaseTransactionTypes.Fiat_Deposit:
                return(new[] { CryptoTransaction.NewIn(transaction.Fiat_Deposit.User_Reference, transaction.Created_At, exchangeId,
                                                       transaction.Details.Title + " " + transaction.Details.SubTitle,
                                                       transaction.Fiat_Deposit.Amount.Amount,
                                                       transaction.Fiat_Deposit.Amount.Currency,
                                                       string.Empty,
                                                       string.Empty,
                                                       string.Empty) });

            ////case CoinbaseTransactionTypes.Fiat_Withdrawal:
            ////    break;
            case CoinbaseTransactionTypes.Exchange_Deposit:
                //    // Moved to GDAX
                return(new[] { CryptoTransaction.NewOut(transaction.Id, transaction.Created_At, exchangeId,
                                                        transaction.Details.Title + " " + transaction.Details.SubTitle,
                                                        -1 * transaction.Amount.Amount,
                                                        transaction.Amount.Currency,
                                                        0,
                                                        string.Empty,
                                                        string.Empty,
                                                        transaction.Details.SubTitle,
                                                        string.Empty) });

            case CoinbaseTransactionTypes.Exchange_Withdrawal:
                // From GDAX
                return(new[] { CryptoTransaction.NewIn(transaction.Id, transaction.Created_At, exchangeId,
                                                       transaction.Details.Title + " " + transaction.Details.SubTitle,
                                                       transaction.Amount.Amount,
                                                       transaction.Amount.Currency,
                                                       transaction.Details.SubTitle,
                                                       string.Empty,
                                                       string.Empty) });

            default:
                Logger.Error("Transaction Type not handled: {0}", transaction.Type);
                throw new ArgumentOutOfRangeException();
            }
        }
Beispiel #4
0
        public async Task <IEnumerable <CryptoTransaction> > GetTransactions(Exchange exchange)
        {
            var client = new RestClient("https://bity.com/");


            var authRequest = new RestRequest("o/token/", Method.POST);

            authRequest.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            authRequest.AddHeader("Accept", "application/json, text/plain, */*");
            authRequest.AddParameter("client_id", "QmaTkYI50XmCF18fupZgdAOptYqDzVix12RpqFYS");
            authRequest.AddParameter("grant_type", "password");
            authRequest.AddParameter("username", exchange.PublicKey);
            authRequest.AddParameter("password", exchange.Passphrase);

            var authResp = await client.Execute(authRequest);

            var token = JsonConvert.DeserializeObject <BityAuthResponse>(authResp.Content);


            var historyRequest = new RestRequest("/api/v1/order/?limit=100&offset=0&order_by=-timestamp_created", Method.GET);

            historyRequest.AddHeader("Authorization", token.Token_Type + " " + token.Access_Token);
            var historyResponse = await client.Execute(historyRequest);


            var data     = JsonConvert.DeserializeObject <Orders>(historyResponse.Content);
            var executed = data.Objects.Where(o => o.Status == "EXEC");

            var transactions = new List <CryptoTransaction>();

            foreach (var trade in executed)
            {
                var inputCurrency  = trade.Inputtransactions.First().Currency;
                var inputAmount    = trade.Inputtransactions.Sum(i => i.Amount);
                var outputCurrency = trade.Outputtransactions.First().Currency;
                var outputAmount   = trade.Outputtransactions.Sum(o => o.Amount);
                var fee            = trade.Outputtransactions.Sum(o => o.PaymentProcessorFee) +
                                     trade.Inputtransactions.Sum(i => i.PaymentProcessorFee);
                var date            = trade.TimestampCreated;
                var inputReference  = trade.Inputtransactions.First().Reference;
                var outputReference = trade.Outputtransactions.First().Reference;
                var fiatRate        = await _marketData.GetHistoricRate("CHF", outputCurrency, date);

                // Input Transaction
                transactions.Add(CryptoTransaction.NewIn(
                                     inputReference,
                                     date,
                                     exchange.Id,
                                     "Receving",
                                     inputAmount,
                                     inputCurrency,
                                     inputReference,
                                     string.Empty,
                                     string.Empty
                                     ));

                // Trade
                transactions.Add(CryptoTransaction.NewTrade(
                                     inputReference + " to " + outputReference,
                                     date,
                                     exchange.Id,
                                     "Trade", outputAmount,
                                     outputCurrency,
                                     (decimal)fee,
                                     "Unknown Currency",
                                     inputAmount,
                                     inputCurrency,
                                     fiatRate
                                     ));

                // Output Transaction
                transactions.Add(CryptoTransaction.NewOut(
                                     outputReference,
                                     date,
                                     exchange.Id,
                                     "Sending",
                                     outputAmount,
                                     outputCurrency,
                                     (decimal)fee,
                                     "Unknown Currency",
                                     string.Empty,
                                     string.Empty,
                                     outputReference
                                     ));
            }

            return(transactions);
        }
Beispiel #5
0
        public ActionResult SecuredPayment(double cryptoamount)
        {
            var transaction = new CryptoTransaction();
            var account     = new CryptoAccount();
            var accountId   = AccountId();

            transaction.Create(new TransactionVm()
            {
                Status             = TransactionStatus.PENDING,
                Amount             = Convert.ToDecimal(cryptoamount),
                accountId          = AccountId(),
                CurrencyDomination = "BTC",
                TransactionType    = TransactionTypeStatus.Credit
            });
            OptionsModel options = new OptionsModel()
            {
                public_key  = GoUrlKeys.PublicKey,
                private_key = GoUrlKeys.PrivateKey,
                webdev_key  = "",
                orderID     = transaction.savedId.ToString(),
                userID      = UserId(),
                userFormat  = "COOKIE",
                //amount = 0,
                amountUSD = Convert.ToDecimal(cryptoamount),
                period    = "2 HOUR",
                language  = "en"
            };

            ViewBag.transId = transaction.savedId.ToString();
            using (Cryptobox cryptobox = new Cryptobox(options))
            {
                ViewBag.JsonUrl = cryptobox.cryptobox_json_url();
                ViewBag.Message = "";
                DisplayCryptoboxModel model = cryptobox.GetDisplayCryptoboxModel();
                if (HttpContext.Request.Form["cryptobox_refresh_"] != null)
                {
                    ViewBag.Message = "<div class='gourl_msg'>";
                    if (cryptobox.is_paid())
                    {
                        ViewBag.Message +=
                            "<div style=\"margin:50px\" class=\"well\"><i class=\"fa fa-info-circle fa-3x fa-pull-left fa-border\" aria-hidden=\"true\"></i> " +
                            Controls.localisation[model.language].MsgNotReceived.Replace("%coinName%", model.coinName)
                            .Replace("%coinNames%",
                                     model.coinLabel == "BCH" || model.coinLabel == "DASH"
                                        ? model.coinName
                                        : model.coinName + "s")
                            .Replace("%coinLabel%", model.coinLabel) + "</div>";
                        transaction.SetStatus(transaction.savedId, TransactionStatus.INPROGESS);
                    }
                    else if (cryptobox.is_processed())
                    {
                        ViewBag.Message += "<div style=\"margin:70px\" class=\"alert alert-success\" role=\"alert\"> " +
                                           (model.boxType == "paymentbox"
                                               ? Controls.localisation[model.language].MsgReceived
                                               : Controls.localisation[model.language].MsgReceived2)
                                           .Replace("%coinName%", model.coinName)
                                           .Replace("%coinLabel%", model.coinLabel)
                                           .Replace("%amountPaid%", model.amoutnPaid.ToString()) + "</div>";
                        cryptobox.set_status_processed();
                        transaction.SetStatus(transaction.savedId, TransactionStatus.SUCCESSFUL);
                    }

                    ViewBag.Message = "</div>";
                }



                return(View(model));
            }
        }
Beispiel #6
0
        public ActionResult MakePayment(double cryptoamount)
        {
            var transaction = new CryptoTransaction();
            var account     = new CryptoAccount();
            var accountId   = AccountId();

            transaction.Create(new TransactionVm()
            {
                Status             = TransactionStatus.PENDING,
                Amount             = Convert.ToDecimal(cryptoamount),
                accountId          = accountId,
                CurrencyDomination = "BTC",
                TransactionType    = TransactionTypeStatus.Credit
            });
            OptionsModel options = new OptionsModel()
            {
                public_key  = GoUrlKeys.PublicKey,
                private_key = GoUrlKeys.PrivateKey,
                webdev_key  = "",
                orderID     = transaction.savedId.ToString(),
                userID      = UserId(),
                userFormat  = "COOKIE",
                //amount = 0,
                amountUSD = Convert.ToDecimal(cryptoamount),
                period    = "2 HOUR",
                language  = "en"
            };

            using (Cryptobox cryptobox = new Cryptobox(options))
            {
                if (cryptobox.is_paid())
                {
                    //initiate a pendint transaction

                    if (!cryptobox.is_confirmed())
                    {
                        ViewBag.message = "Thank you for order (order #" + options.orderID + ", payment #" + cryptobox.payment_id() +
                                          "). Awaiting transaction/payment confirmation";
                    }
                    else
                    {
                        if (!cryptobox.is_processed())
                        {
                            ViewBag.message = "Thank you for order (order #" + options.orderID + ", payment #" + cryptobox.payment_id() + "). Payment Confirmed<br/> (User will see this message one time after payment has been made)";
                            cryptobox.set_status_processed();
                            transaction.SetStatus(transaction.savedId, TransactionStatus.SUCCESSFUL);
                        }
                        else
                        {
                            ViewBag.message = "Thank you for order (order #" + options.orderID + ", payment #" + cryptobox.payment_id() + "). Payment Confirmed<br/> (User will see this message during " + options.period + " period after payment has been made)";
                            transaction.SetStatus(transaction.savedId, TransactionStatus.INPROGESS);
                        }
                    }
                }
                else
                {
                    ViewBag.message = "This invoice has not been paid yet";
                    transaction.SetStatus(transaction.savedId, TransactionStatus.PENDING);
                }

                DisplayCryptoboxModel model = cryptobox.GetDisplayCryptoboxModel();

                return(View(model));
            }
        }
Beispiel #7
0
        public ActionResult Transactions()
        {
            var trans = new CryptoTransaction().Transactions(AccountId());

            return(View(trans));
        }
Beispiel #8
0
        public async Task <IEnumerable <CryptoTransaction> > GetTransactionsAsync(Exchange exchange)
        {
            var authenticator = new Authenticator(exchange.PublicKey, exchange.PrivateKey, exchange.Passphrase);
            var client        = new GDAXClient.GDAXClient(authenticator);
            var transactions  = new List <CryptoTransaction>();
            var fills         = await client.FillsService.GetAllFillsAsync();

            foreach (var fill in fills)
            {
                foreach (var fillResponse in fill)
                {
                    var buyCurrency = fillResponse.Side == "buy"
                        ? fillResponse.Product_id.Split('-')[0]
                        : fillResponse.Product_id.Split('-')[1];
                    var sellCurrency = fillResponse.Side == "buy"
                        ? fillResponse.Product_id.Split('-')[1]
                        : fillResponse.Product_id.Split('-')[0];

                    var buyAmount = fillResponse.Side == "buy"
                        ? fillResponse.Size
                        : fillResponse.Size * fillResponse.Price;

                    var sellAmount = fillResponse.Side == "buy"
                        ? fillResponse.Size * fillResponse.Price
                        : fillResponse.Size;

                    transactions.Add(CryptoTransaction.NewTrade(fillResponse.Trade_id.ToString(), fillResponse.Created_at,
                                                                exchange.Id,
                                                                "",
                                                                buyAmount,
                                                                buyCurrency,
                                                                fillResponse.Fee,
                                                                "EUR",
                                                                sellAmount,
                                                                sellCurrency,
                                                                await _marketData.GetHistoricRate("CHF", buyCurrency, fillResponse.Created_at)

                                                                ));
                }
            }

            await Task.Delay(200);

            var accounts = await client.AccountsService.GetAllAccountsAsync();

            await Task.Delay(200);

            foreach (var account in accounts)
            {
                var histories = await client.AccountsService.GetAccountHistoryAsync(account.Id.ToString());

                await Task.Delay(200);

                foreach (var history in histories)
                {
                    var transfers = history.Where(h => h.Type == "transfer");

                    foreach (var transfer in transfers)
                    {
                        if (transfer.Amount > 0)
                        {
                            transactions.Add(CryptoTransaction.NewIn(
                                                 transfer.Id,
                                                 transfer.Created_at,
                                                 exchange.Id,
                                                 "Transfer from Coinbase",
                                                 transfer.Amount,
                                                 account.Currency,
                                                 "Coinbase",
                                                 "GDAX",
                                                 transfer.Id
                                                 ));
                        }
                        else
                        {
                            transactions.Add(CryptoTransaction.NewOut(
                                                 transfer.Id,
                                                 transfer.Created_at,
                                                 exchange.Id,
                                                 "To Coinbase",
                                                 transfer.Amount * -1,
                                                 account.Currency,
                                                 0,
                                                 account.Currency,
                                                 "GDAX",
                                                 "Coinbase",
                                                 transfer.Id
                                                 ));
                        }
                    }
                }
            }

            return(transactions);
        }
        public async Task <IEnumerable <CryptoTransaction> > GetTransactionsAsync(Exchange exchange)
        {
            var list = new List <CryptoTransaction>();

            var client  = new RestClient("https://blockchain.info/");
            var request = new RestRequest("multiaddr", Method.GET);

            request.AddParameter("active", exchange.PublicKey);
            Logger.Trace("GET blockchain.info for xPub");

            var res = await client.Execute(request);

            if (res.IsSuccess)
            {
                var response = JsonConvert.DeserializeObject <BlockchainResponse>(res.Content);
                foreach (var transaction in response.Txs)
                {
                    if (transaction.Result > 0)
                    {
                        // Is Input
                        list.Add(
                            CryptoTransaction.NewIn(
                                transaction.Hash,
                                Helpers.UnixTimeStampToDateTime(transaction.Time),
                                exchange.Id,
                                "Receive",
                                transaction.Result / 100000000,
                                "BTC",
                                transaction.Inputs.First().Prev_Out.Addr,
                                transaction.Out.First(o => o.XPub.M == exchange.PublicKey).Addr,
                                transaction.Hash
                                ));
                    }
                    else
                    {
                        // Is Output
                        var amount = (-1 * transaction.Result - transaction.Fee) / 100000000;
                        var fee    = transaction.Fee / 100000000;
                        list.Add(
                            CryptoTransaction.NewOut(
                                transaction.Hash,
                                Helpers.UnixTimeStampToDateTime(transaction.Time),
                                exchange.Id,
                                "Sent",
                                amount,
                                "BTC",
                                fee,
                                "BTC",
                                transaction.Inputs.First().Prev_Out.Addr,
                                transaction.Out.First(o => o.XPub == null || o.XPub.M != exchange.PublicKey).Addr,
                                transaction.Hash
                                ));
                    }
                }
            }
            else
            {
                Logger.Error(res.StatusDescription);
                Logger.Error(res.Content);
                throw new Exception(res.StatusDescription);
            }

            return(list);
        }
Beispiel #10
0
        private async Task <IEnumerable <CryptoTransaction> > GetTrades(BinanceClient client, Exchange exchange)
        {
            var trades = new List <CryptoTransaction>();
            var prices = await client.GetAllPricesAsync();

            var counter = 0;

            foreach (var binancePrice in prices.Data)
            {
                var symbol = binancePrice.Symbol;
                Logger.Debug("Ask " + symbol + " (" + counter++ + "/" + prices.Data.Length + ")");
                string currency1 = null, currency2 = null;

                if (symbol.EndsWith("BTC"))
                {
                    // Is BTC
                    currency1 = "BTC";
                    currency2 = symbol.Replace("BTC", "");
                }

                if (symbol.EndsWith("ETH"))
                {
                    // Is ETH
                    currency1 = "ETH";
                    currency2 = symbol.Replace("ETH", "");
                }

                if (symbol.EndsWith("BNB"))
                {
                    // Is BNB
                    currency1 = "BNB";
                    currency2 = symbol.Replace("BNB", "");
                }

                if (symbol.EndsWith("USDT"))
                {
                    // Is USDT
                    currency1 = "USDT";
                    currency2 = symbol.Replace("USDT", "");
                }

                if (currency1 == null || currency2 == null)
                {
                    if (symbol == "123456")
                    {
                        Logger.Warn("{0} symbol is not supported", symbol);
                        continue;
                    }

                    Logger.Error("Unknown symbol: {0}. Aborting!", symbol);

                    throw new ArgumentOutOfRangeException("Unknown symbol: " + symbol);
                }

                // Rename Bitcoin cash
                if (currency2 == "BCC")
                {
                    currency2 = "BCH";
                }

                var binanceApiResult = await client.GetMyTradesAsync(symbol);

                if (binanceApiResult.Success)
                {
                    foreach (var trade in binanceApiResult.Data)
                    {
                        if (trade.IsBuyer)
                        {
                            // Buy
                            trades.Add(
                                CryptoTransaction.NewTrade(trade.Id.ToString(), trade.Time, exchange.Id, "Binance Buy",
                                                           trade.Quantity, currency2, trade.Commission, trade.CommissionAsset,
                                                           trade.Price * trade.Quantity,
                                                           currency1, await _marketData.GetHistoricRate("CHF", currency2, trade.Time))
                                );
                        }
                        else
                        {
                            // Sell
                            trades.Add(
                                CryptoTransaction.NewTrade(trade.Id.ToString(), trade.Time, exchange.Id, "Binance Sell",
                                                           trade.Price * trade.Quantity, currency1, trade.Commission, trade.CommissionAsset,
                                                           trade.Quantity,
                                                           currency2, await _marketData.GetHistoricRate("CHF", currency1, trade.Time))
                                );
                        }
                    }
                }
                else
                {
                    Logger.Error(binanceApiResult.Error.Code + " " + binanceApiResult.Error.Message);
                }
            }
            return(trades);
        }
        public ActionResult ApproveTransaction(int id)
        {
            var app = new CryptoTransaction().SetStatus(id, TransactionStatus.APPROVED);

            return(RedirectToAction(nameof(Transactions)));
        }
        public ActionResult SuccessTransactions()
        {
            var trans = new CryptoTransaction().Transactions().Where(a => a.Status == TransactionStatus.SUCCESSFUL.ToString()).OrderBy(a => a.DateCreated).ToList();

            return(PartialView("_SuccessTransaction", trans));
        }
        public ActionResult Transactions()
        {
            var trans = new CryptoTransaction().Transactions().OrderBy(a => a.DateCreated).ToList();

            return(View(trans));
        }
Beispiel #14
0
        /// <summary>
        /// Gets the transactions.
        /// </summary>
        /// <param name="exchange">The exchange.</param>
        /// <returns>The transactions.</returns>
        /// <exception cref="NotImplementedException">On incorrect trade type.</exception>
        public async Task <IEnumerable <CryptoTransaction> > GetTransactionsAsync(Model.DbModels.Exchange exchange)
        {
            var api = new Kraken(exchange.PublicKey, exchange.PrivateKey);

            if (assetsCache == null)
            {
                BuildPairCache(api);
                await Task.Delay(2000);
            }

            var transactions = new List <CryptoTransaction>();

            var deposits = api.GetLedgers(null, null, "deposit");

            foreach (var deposit in deposits.Ledger)
            {
                var d        = deposit.Value;
                var key      = d.Refid;
                var dateTime = Helpers.UnixTimeStampToDateTime(d.Time);
                var amount   = d.Amount;
                var currency = assetsCache[d.Asset];
                transactions.Add(CryptoTransaction.NewIn(key, dateTime, exchange.Id, "In", amount, currency, string.Empty, string.Empty, string.Empty));
            }

            await Task.Delay(2000);

            var withdrawals = api.GetLedgers(null, null, "withdrawal");

            foreach (var withdrwaw in withdrawals.Ledger)
            {
                var w        = withdrwaw.Value;
                var key      = w.Refid;
                var dateTime = Helpers.UnixTimeStampToDateTime(w.Time);
                var amount   = -1 * w.Amount;
                var currency = assetsCache[w.Asset];
                var fee      = w.Fee;
                transactions.Add(CryptoTransaction.NewOut(key, dateTime, exchange.Id, "Out", amount, currency, fee, currency, string.Empty, string.Empty, string.Empty));
            }

            await Task.Delay(2000);

            var trades = api.GetTradesHistory(null, true);

            foreach (var trade in trades.Trades)
            {
                var currency1 = assetsCache[trade.Value.Pair.Split('Z').First()];
                var currency2 = assetsCache[trade.Value.Pair.Split('Z').Last()];
                var fee       = trade.Value.Fee;
                var cost      = trade.Value.Cost;
                var volume    = trade.Value.Vol;
                var dateTime  = Helpers.UnixTimeStampToDateTime(trade.Value.Time);
                var fiatRate  = await _marketData.GetHistoricRate("CHF", currency1, dateTime);

                switch (trade.Value.Type)
                {
                case "buy":
                    transactions.Add(
                        CryptoTransaction.NewTrade(
                            trade.Key, dateTime, exchange.Id, "Kraken Buy", volume, currency1, fee, currency2, cost,
                            currency2, fiatRate));

                    break;

                case "sell":
                    transactions.Add(
                        CryptoTransaction.NewTrade(
                            trade.Key, dateTime, exchange.Id, "Kraken Sell", cost, currency2, fee, currency2, volume,
                            currency1, fiatRate));

                    break;

                default: throw new NotImplementedException();
                }
            }

            return(transactions);
        }