private async Task OnConfirmAsync(BuildTransactionResult transaction)
        {
            var transactionAuthorizationInfo = new TransactionAuthorizationInfo(transaction);

            var authResult = await AuthorizeAsync(transactionAuthorizationInfo);

            if (authResult)
            {
                IsBusy = true;

                try
                {
                    var finalTransaction = await GetFinalTransactionAsync(transactionAuthorizationInfo.Transaction, _info);
                    await SendTransactionAsync(finalTransaction);

                    Navigate().To(new SendSuccessViewModel(_wallet, finalTransaction));
                }
                catch (Exception ex)
                {
                    await ShowErrorAsync("Transaction", ex.ToUserFriendlyString(), "Wasabi was unable to send your transaction.");
                }

                IsBusy = false;
            }
        }
 public static AuthorizationDialogBase GetAuthorizationDialog(Wallet wallet, TransactionAuthorizationInfo transactionAuthorizationInfo)
 {
     if (wallet.KeyManager.IsHardwareWallet)
     {
         return(new HardwareWalletAuthDialogViewModel(wallet, transactionAuthorizationInfo));
     }
     else
     {
         return(new PasswordAuthDialogViewModel(wallet));
     }
 }
Example #3
0
        public HardwareWalletAuthDialogViewModel(Wallet wallet, TransactionAuthorizationInfo transactionAuthorizationInfo)
        {
            if (!wallet.KeyManager.IsHardwareWallet)
            {
                throw new InvalidOperationException("Not a hardware wallet.");
            }

            _wallet = wallet;
            _transactionAuthorizationInfo = transactionAuthorizationInfo;
            WalletIcon = _wallet.KeyManager.Icon;
        }
Example #4
0
        private async Task OnNext(Wallet wallet, TransactionBroadcaster broadcaster, BuildTransactionResult transaction)
        {
            var transactionAuthorizationInfo = new TransactionAuthorizationInfo(transaction);

            var authResult = await AuthorizeAsync(wallet, transactionAuthorizationInfo);

            if (authResult)
            {
                await SendTransaction(wallet, broadcaster, transactionAuthorizationInfo.Transaction);

                Navigate().To(new SendSuccessViewModel());
            }
        }
Example #5
0
        public HardwareWalletAuthDialogViewModel(Wallet wallet, TransactionAuthorizationInfo transactionAuthorizationInfo)
        {
            if (!wallet.KeyManager.IsHardwareWallet)
            {
                throw new InvalidOperationException("Not a hardware wallet.");
            }

            _wallet = wallet;
            _transactionAuthorizationInfo = transactionAuthorizationInfo;
            WalletType = WalletHelpers.GetType(wallet.KeyManager);

            SetupCancel(enableCancel: true, enableCancelOnEscape: true, enableCancelOnPressed: true);

            EnableBack = false;
        }
        private async Task <bool> AuthorizeAsync(TransactionAuthorizationInfo transactionAuthorizationInfo)
        {
            if (!_wallet.KeyManager.IsHardwareWallet && string.IsNullOrEmpty(_wallet.Kitchen.SaltSoup()))             // Do not show auth dialog when password is empty
            {
                return(true);
            }

            var authDialog       = AuthorizationHelpers.GetAuthorizationDialog(_wallet, transactionAuthorizationInfo);
            var authDialogResult = await NavigateDialogAsync(authDialog, authDialog.DefaultTarget);

            if (!authDialogResult.Result && authDialogResult.Kind == DialogResultKind.Normal)
            {
                await ShowErrorAsync("Authorization", "The Authorization has failed, please try again.", "");
            }

            return(authDialogResult.Result);
        }
        public TransactionPreviewViewModel(Wallet wallet, TransactionInfo info, TransactionBroadcaster broadcaster,
                                           BuildTransactionResult transaction)
        {
            var destinationAmount = transaction.CalculateDestinationAmount().ToDecimal(MoneyUnit.BTC);

            var fee = transaction.Fee;

            BtcAmountText = $"{destinationAmount} bitcoins ";

            FiatAmountText = $"(≈{(destinationAmount * wallet.Synchronizer.UsdExchangeRate).FormattedFiat()} USD) ";

            Labels = info.Labels.Labels.ToArray();

            AddressText = info.Address.ToString();

            ConfirmationTimeText = $"Approximately {TextHelpers.TimeSpanToFriendlyString(info.ConfirmationTimeSpan)} ";

            BtcFeeText = $"{fee.ToDecimal(MoneyUnit.Satoshi)} satoshis ";

            FiatFeeText =
                $"(≈{(fee.ToDecimal(MoneyUnit.BTC) * wallet.Synchronizer.UsdExchangeRate).FormattedFiat()} USD)";

            NextCommand = ReactiveCommand.CreateFromTask(async() =>
            {
                var transactionAuthorizationInfo = new TransactionAuthorizationInfo(transaction);
                var authDialog       = AuthorizationHelpers.GetAuthorizationDialog(wallet, transactionAuthorizationInfo);
                var authDialogResult = await NavigateDialog(authDialog, authDialog.DefaultTarget);

                if (authDialogResult.Result)
                {
                    IsBusy = true;

                    // Dequeue any coin-joining coins.
                    await wallet.ChaumianClient.DequeueAllCoinsFromMixAsync(DequeueReason.TransactionBuilding);

                    await broadcaster.SendTransactionAsync(transactionAuthorizationInfo.Transaction);
                    Navigate().Clear();

                    IsBusy = false;
                }
                else if (authDialogResult.Kind == DialogResultKind.Normal)
                {
                    await ShowErrorAsync("Authorization", "The Authorization has failed, please try again.", "");
                }
            });
        }
Example #8
0
    public HardwareWalletAuthDialogViewModel(Wallet wallet, TransactionAuthorizationInfo transactionAuthorizationInfo)
    {
        if (!wallet.KeyManager.IsHardwareWallet)
        {
            throw new InvalidOperationException("Not a hardware wallet.");
        }

        _wallet = wallet;
        _transactionAuthorizationInfo = transactionAuthorizationInfo;
        WalletType = WalletHelpers.GetType(wallet.KeyManager);

        SetupCancel(enableCancel: true, enableCancelOnEscape: true, enableCancelOnPressed: true);

        EnableBack = false;

        AuthorizationFailedMessage = $"Authorization failed.{Environment.NewLine}Please, check your device and try again.";
    }
Example #9
0
        private async Task OnNext(Wallet wallet, TransactionBroadcaster broadcaster, BuildTransactionResult transaction)
        {
            var transactionAuthorizationInfo = new TransactionAuthorizationInfo(transaction);
            var authDialog       = AuthorizationHelpers.GetAuthorizationDialog(wallet, transactionAuthorizationInfo);
            var authDialogResult = await NavigateDialog(authDialog, authDialog.DefaultTarget);

            if (authDialogResult.Result)
            {
                IsBusy = true;

                // Dequeue any coin-joining coins.
                await wallet.ChaumianClient.DequeueAllCoinsFromMixAsync(DequeueReason.TransactionBuilding);

                await broadcaster.SendTransactionAsync(transactionAuthorizationInfo.Transaction);

                Navigate().Clear();

                IsBusy = false;
            }
            else if (authDialogResult.Kind == DialogResultKind.Normal)
            {
                await ShowErrorAsync("Authorization", "The Authorization has failed, please try again.", "");
            }
        }