public InOutTransactionViewModel(
            IInOutTransaction tx,
            IDictionary <string, ITxOutput> indexedOutputs)
        {
            var currencyViewModel = CurrencyViewModelCreator.CreateViewModel(tx.Currency, false);

            var txInputs  = tx.Inputs;
            var txOutputs = tx.Outputs;

            var ownInputs = txInputs
                            .Where(i => indexedOutputs.ContainsKey($"{i.Hash}:{i.Index}"))
                            .Select(i => indexedOutputs[$"{i.Hash}:{i.Index}"])
                            .ToList();

            var ownOutputs = txOutputs
                             .Where(o => indexedOutputs.ContainsKey($"{o.TxId}:{o.Index}"))
                             .ToList();

            Id           = tx.Id;
            AmountFormat = currencyViewModel.CurrencyFormat;
            CurrencyCode = currencyViewModel.CurrencyCode;
            State        = tx.IsConfirmed()
                ? TransactionState.Confirmed
                : TransactionState.Unconfirmed;
            Time = tx.BlockInfo.FirstSeen;
            Fee  = tx.BlockInfo.Fees / (decimal)tx.Currency.DigitsMultiplier;

            if (ownInputs.Count == 0 && ownOutputs.Count > 0) // receive coins or swap refund or swap redeem
            {
                var receivedAmount = ownOutputs.Sum(o => o.Value) / (decimal)tx.Currency.DigitsMultiplier;

                if (txInputs.Length == 1) // try to resolve one input
                {
                    // todo: try to resolve by swaps data firstly
                }

                Amount      = receivedAmount;
                Type        = TransactionType.Received;
                Description = $"Received {receivedAmount.ToString(CultureInfo.InvariantCulture)} {tx.Currency.Name}";
            }

            if (ownInputs.Count > 0 && ownOutputs.Count >= 0) // send coins or swap payment
            {
                var usedAmount     = ownInputs.Sum(i => i.Value) / (decimal)tx.Currency.DigitsMultiplier;
                var receivedAmount = ownOutputs.Sum(o => o.Value) / (decimal)tx.Currency.DigitsMultiplier;
                var sentAmount     = receivedAmount - usedAmount;

                // todo: try to resolve by swaps data firstly

                Amount      = sentAmount;
                Type        = TransactionType.Sent;
                Description = $"Sent {Math.Abs(sentAmount).ToString(CultureInfo.InvariantCulture)} {tx.Currency.Name}";
            }

            if (ownInputs.Count == 0 && ownOutputs.Count == 0) // unknown
            {
                Type        = TransactionType.Unknown;
                Description = "Unknown transaction";
            }
        }
        // private void BackToConfirmation()
        // {
        //     DialogViewer.Back(Dialogs.Convert); // to sending view
        //     DialogViewer.Back(Dialogs.Convert); // to confirmation view
        // }

        private void DesignerMode()
        {
            var currencies = DesignTime.Currencies.ToList();

            FromCurrency          = currencies[0];
            ToCurrency            = currencies[1];
            FromCurrencyViewModel = CurrencyViewModelCreator.CreateViewModel(FromCurrency, false);
            ToCurrencyViewModel   = CurrencyViewModelCreator.CreateViewModel(ToCurrency, false);

            PriceFormat          = $"F{FromCurrency.Digits}";
            CurrencyCode         = FromCurrencyViewModel.CurrencyCode;
            CurrencyFormat       = FromCurrencyViewModel.CurrencyFormat;
            TargetCurrencyCode   = ToCurrencyViewModel.CurrencyCode;
            TargetCurrencyFormat = ToCurrencyViewModel.CurrencyFormat;
            BaseCurrencyCode     = FromCurrencyViewModel.BaseCurrencyCode;
            BaseCurrencyFormat   = FromCurrencyViewModel.BaseCurrencyFormat;

            EstimatedPrice = 0.003m;

            Amount       = 0.00001234m;
            AmountInBase = 10.23m;

            TargetAmount       = Amount / EstimatedPrice;
            TargetAmountInBase = AmountInBase;

            EstimatedPaymentFee       = 0.0001904m;
            EstimatedPaymentFeeInBase = 0.22m;

            EstimatedRedeemFee       = 0.001m;
            EstimatedRedeemFeeInBase = 0.11m;
        }
Beispiel #3
0
        public static SwapViewModel CreateSwapViewModel(Swap swap, ICurrencies currencies)
        {
            try
            {
                var soldCurrency      = currencies.GetByName(swap.SoldCurrency);
                var purchasedCurrency = currencies.GetByName(swap.PurchasedCurrency);

                var fromCurrencyViewModel = CurrencyViewModelCreator.CreateViewModel(
                    currencyConfig: soldCurrency,
                    subscribeToUpdates: false);

                var toCurrencyViewModel = CurrencyViewModelCreator.CreateViewModel(
                    currencyConfig: purchasedCurrency,
                    subscribeToUpdates: false);

                var fromAmount = AmountHelper.QtyToAmount(swap.Side, swap.Qty, swap.Price, soldCurrency.DigitsMultiplier);
                var toAmount   = AmountHelper.QtyToAmount(swap.Side.Opposite(), swap.Qty, swap.Price, purchasedCurrency.DigitsMultiplier);

                var quoteCurrency = swap.Symbol.QuoteCurrency() == swap.SoldCurrency
                    ? soldCurrency
                    : purchasedCurrency;

                return(new SwapViewModel
                {
                    Id = swap.Id.ToString(),
                    CompactState = CompactStateBySwap(swap),
                    Mode = ModeBySwap(swap),
                    Time = swap.TimeStamp,

                    FromBrush = new SolidColorBrush(fromCurrencyViewModel.AmountColor),
                    FromAmount = fromAmount,
                    FromAmountFormat = fromCurrencyViewModel.CurrencyFormat,
                    FromCurrencyCode = fromCurrencyViewModel.CurrencyCode,

                    ToBrush = new SolidColorBrush(toCurrencyViewModel.AmountColor),
                    ToAmount = toAmount,
                    ToAmountFormat = toCurrencyViewModel.CurrencyFormat,
                    ToCurrencyCode = toCurrencyViewModel.CurrencyCode,

                    Price = swap.Price,
                    PriceFormat = $"F{quoteCurrency.Digits}"
                });
            }
            catch (Exception e)
            {
                Log.Error(e, $"Error while create SwapViewModel for {swap.Symbol} swap with id {swap.Id}");

                return(null);
            }
        }
Beispiel #4
0
        public AddressBasedTransactionViewModel(
            IAddressBasedTransaction tx)
        {
            var currencyViewModel = CurrencyViewModelCreator.CreateViewModel(tx.Currency, false);
            var amount            = GetAmount(tx);
            var type = GetType(tx);

            string description;

            switch (type)
            {
            case TransactionType.Unknown:
                description = "Unknown transaction";
                break;

            case TransactionType.Sent:
                description = $"Sent {amount.ToString(CultureInfo.InvariantCulture)} {tx.Currency.Name}";
                break;

            case TransactionType.Received:
                description = $"Received {amount.ToString(CultureInfo.InvariantCulture)} {tx.Currency.Name}";
                break;

            case TransactionType.Self:
                description = $"Self transfer {amount.ToString(CultureInfo.InvariantCulture)} {tx.Currency.Name}";
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            Id           = tx.Id;
            Amount       = amount;
            AmountFormat = currencyViewModel.CurrencyFormat;
            CurrencyCode = currencyViewModel.CurrencyCode;
            Type         = type;
            Description  = description;
            State        = tx.IsConfirmed()
                ? TransactionState.Confirmed
                : TransactionState.Unconfirmed;
            Time = tx.BlockInfo.FirstSeen;
            Fee  = tx.BlockInfo.Fees;
        }
 private void DesignerMode()
 {
     CurrencyViewModel = CurrencyViewModelCreator.CreateViewModel(
         currency: DesignTime.Currencies.Get <Bitcoin>(),
         subscribeToUpdates: false);
 }