From 93653d4554697d28f16572f89ef1203f90c9601d Mon Sep 17 00:00:00 2001 From: M Date: Thu, 3 Dec 2020 21:34:56 +0200 Subject: [PATCH] Added validation for bitcoin seed. Changed transaction properties for bitcoin wallet type. Added special text after sending for bitcoin. --- ...tcoin_mnemonic_is_incorrect_exception.dart | 5 ++++ lib/bitcoin/bitcoin_wallet_service.dart | 5 ++++ lib/entities/transaction_priority.dart | 17 +++++++++++++ lib/generated/i18n.dart | 24 +++++++++---------- .../exchange_trade/exchange_trade_page.dart | 9 +++++-- lib/src/screens/send/send_page.dart | 7 ++++-- lib/view_model/send/send_view_model.dart | 1 + .../settings/settings_view_model.dart | 17 +------------ 8 files changed, 53 insertions(+), 32 deletions(-) create mode 100644 lib/bitcoin/bitcoin_mnemonic_is_incorrect_exception.dart diff --git a/lib/bitcoin/bitcoin_mnemonic_is_incorrect_exception.dart b/lib/bitcoin/bitcoin_mnemonic_is_incorrect_exception.dart new file mode 100644 index 000000000..761b02601 --- /dev/null +++ b/lib/bitcoin/bitcoin_mnemonic_is_incorrect_exception.dart @@ -0,0 +1,5 @@ +class BitcoinMnemonicIsIncorrectException implements Exception { + @override + String toString() => + 'Bitcoin mnemonic has incorrect format. Mnemonic should contain 12 words separated by space.'; +} diff --git a/lib/bitcoin/bitcoin_wallet_service.dart b/lib/bitcoin/bitcoin_wallet_service.dart index 429a4e2ea..205abdcca 100644 --- a/lib/bitcoin/bitcoin_wallet_service.dart +++ b/lib/bitcoin/bitcoin_wallet_service.dart @@ -1,5 +1,6 @@ import 'dart:io'; import 'package:cake_wallet/bitcoin/bitcoin_mnemonic.dart'; +import 'package:cake_wallet/bitcoin/bitcoin_mnemonic_is_incorrect_exception.dart'; import 'package:cake_wallet/bitcoin/file.dart'; import 'package:cake_wallet/bitcoin/bitcoin_wallet_creation_credentials.dart'; import 'package:cake_wallet/core/wallet_base.dart'; @@ -74,6 +75,10 @@ class BitcoinWalletService extends WalletService< @override Future restoreFromSeed( BitcoinRestoreWalletFromSeedCredentials credentials) async { + if (!validateMnemonic(credentials.mnemonic)) { + throw BitcoinMnemonicIsIncorrectException(); + } + final dirPath = await pathForWalletDir( type: WalletType.bitcoin, name: credentials.name); final wallet = BitcoinWalletBase.build( diff --git a/lib/entities/transaction_priority.dart b/lib/entities/transaction_priority.dart index 9bad84c9f..08ea41951 100644 --- a/lib/entities/transaction_priority.dart +++ b/lib/entities/transaction_priority.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/entities/wallet_type.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/entities/enumerable_item.dart'; @@ -19,6 +20,22 @@ class TransactionPriority extends EnumerableItem with Serializable { static const fastest = TransactionPriority(title: 'Fastest', raw: 4); static const standart = slow; + + static List forWalletType(WalletType type) { + switch (type) { + case WalletType.monero: + return TransactionPriority.all; + case WalletType.bitcoin: + return [ + TransactionPriority.slow, + TransactionPriority.regular, + TransactionPriority.fast + ]; + default: + return []; + } + } + static TransactionPriority deserialize({int raw}) { switch (raw) { case 0: diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 48bff842c..7b1ceecc3 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -206,7 +206,7 @@ class S implements WidgetsLocalizations { String get send_new => "New"; String get send_payment_id => "Payment ID (optional)"; String get send_sending => "Sending..."; - String get send_success => "Your Monero was successfully sent"; + String send_success(String crypto) => "Your ${crypto} was successfully sent"; String get send_templates => "Templates"; String get send_title => "Send"; String get send_xmr => "Send XMR"; @@ -612,7 +612,7 @@ class $de extends S { @override String get trade_details_created_at => "Hergestellt in"; @override - String get send_success => "Ihr Monero wurde erfolgreich gesendet"; + String send_success(String crypto) => "Ihr ${crypto} wurde erfolgreich gesendet"; @override String get settings_wallets => "Brieftaschen"; @override @@ -1280,7 +1280,7 @@ class $hi extends S { @override String get trade_details_created_at => "पर बनाया गया"; @override - String get send_success => "आपका Monero सफलतापूर्वक भेजा गया"; + String send_success(String crypto) => "आपका ${crypto} सफलतापूर्वक भेजा गया"; @override String get settings_wallets => "पर्स"; @override @@ -1948,7 +1948,7 @@ class $ru extends S { @override String get trade_details_created_at => "Создано"; @override - String get send_success => "Ваш Monero был успешно отправлен"; + String send_success(String crypto) => "Ваш ${crypto} был успешно отправлен"; @override String get settings_wallets => "Кошельки"; @override @@ -2616,7 +2616,7 @@ class $ko extends S { @override String get trade_details_created_at => "에 작성"; @override - String get send_success => "Monero가 성공적으로 전송되었습니다"; + String send_success(String crypto) => "${crypto}가 성공적으로 전송되었습니다"; @override String get settings_wallets => "지갑"; @override @@ -3284,7 +3284,7 @@ class $pt extends S { @override String get trade_details_created_at => "Criada em"; @override - String get send_success => "Seu Monero foi enviado com sucesso"; + String send_success(String crypto) => "Seu ${crypto} foi enviado com sucesso"; @override String get settings_wallets => "Carteiras"; @override @@ -3952,7 +3952,7 @@ class $uk extends S { @override String get trade_details_created_at => "Створено"; @override - String get send_success => "Ваш Monero успішно надісланий"; + String send_success(String crypto) => "Ваш ${crypto} успішно надісланий"; @override String get settings_wallets => "Гаманці"; @override @@ -4620,7 +4620,7 @@ class $ja extends S { @override String get trade_details_created_at => "で作成"; @override - String get send_success => "Moneroが送信されました"; + String send_success(String crypto) => "${crypto}が送信されました"; @override String get settings_wallets => "財布"; @override @@ -5292,7 +5292,7 @@ class $pl extends S { @override String get trade_details_created_at => "Utworzono w"; @override - String get send_success => "Twoje Monero zostało pomyślnie wysłane"; + String send_success(String crypto) => "Twoje ${crypto} zostało pomyślnie wysłane"; @override String get settings_wallets => "Portfele"; @override @@ -5960,7 +5960,7 @@ class $es extends S { @override String get trade_details_created_at => "Creado en"; @override - String get send_success => "Su Monero fue enviado con éxito"; + String send_success(String crypto) => "Su ${crypto} fue enviado con éxito"; @override String get settings_wallets => "Carteras"; @override @@ -6628,7 +6628,7 @@ class $nl extends S { @override String get trade_details_created_at => "Gemaakt bij"; @override - String get send_success => "Uw Monero is succesvol verzonden"; + String send_success(String crypto) => "Uw ${crypto} is succesvol verzonden"; @override String get settings_wallets => "Portemonnee"; @override @@ -7296,7 +7296,7 @@ class $zh extends S { @override String get trade_details_created_at => "创建于"; @override - String get send_success => "你Monero已成功發送"; + String send_success(String crypto) => "你${crypto}已成功發送"; @override String get settings_wallets => "皮夹"; @override diff --git a/lib/src/screens/exchange_trade/exchange_trade_page.dart b/lib/src/screens/exchange_trade/exchange_trade_page.dart index aced6304a..26851d248 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_page.dart @@ -227,7 +227,8 @@ class ExchangeTradeState extends State { final sendingState = widget.exchangeTradeViewModel.sendViewModel.state; - return trade.from == CryptoCurrency.xmr && !(sendingState is TransactionCommitted) + return trade.from == CryptoCurrency.xmr && + !(sendingState is TransactionCommitted) ? LoadingPrimaryButton( isDisabled: trade.inputAddress == null || trade.inputAddress.isEmpty, @@ -306,7 +307,11 @@ class ExchangeTradeState extends State { padding: EdgeInsets.only( top: 220, left: 24, right: 24), child: Text( - S.of(context).send_success, + S.of(context).send_success(widget + .exchangeTradeViewModel + .wallet + .currency + .toString()), textAlign: TextAlign.center, style: TextStyle( fontSize: 22, diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index cd4c5b06d..26955c13c 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -634,7 +634,9 @@ class SendPage extends BasePage { padding: EdgeInsets.only( top: 220, left: 24, right: 24), child: Text( - S.of(context).send_success, + S.of(context).send_success( + sendViewModel.currency + .toString()), textAlign: TextAlign.center, style: TextStyle( fontSize: 22, @@ -748,7 +750,8 @@ class SendPage extends BasePage { } Future _setTransactionPriority(BuildContext context) async { - final items = TransactionPriority.all; + final items = + TransactionPriority.forWalletType(sendViewModel.walletType); final selectedItem = items.indexOf(sendViewModel.transactionPriority); await showPopUp( diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart index 483d40131..cd49c97d0 100644 --- a/lib/view_model/send/send_view_model.dart +++ b/lib/view_model/send/send_view_model.dart @@ -97,6 +97,7 @@ abstract class SendViewModelBase with Store { @computed ObservableList