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)); } }
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; }
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()); } }
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.", ""); } }); }
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."; }
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.", ""); } }