From 6dba73a1d5b627a8bb4566f273aec63111a90cb3 Mon Sep 17 00:00:00 2001 From: Omar Hatem Date: Fri, 4 Oct 2024 23:00:36 +0300 Subject: [PATCH] Generic fixes (#1716) * reset brightness after using * set default qr to auto detect * minor safety enhancement * close socket after checking connectivity * fix incorrect parent exception class * pump medium and fast priorities even if they are equal to slow * Add Ton to exchange * fix silent payments add Seth bitcoin node * deselect quantex add seth node for existing users * fix node uri --- assets/bitcoin_electrum_server_list.yml | 3 + assets/images/ton_icon.png | Bin 0 -> 14318 bytes cw_bitcoin/lib/electrum_wallet.dart | 48 +++++++++------- cw_bitcoin/pubspec.lock | 39 +++++++++---- cw_core/lib/crypto_currency.dart | 2 + cw_core/lib/node.dart | 7 ++- lib/entities/default_settings_migration.dart | 52 ++++++++++++++++-- lib/main.dart | 2 +- lib/reactions/check_connection.dart | 2 + lib/src/screens/receive/widgets/qr_image.dart | 2 +- lib/utils/brightness_util.dart | 5 +- 11 files changed, 119 insertions(+), 43 deletions(-) create mode 100644 assets/images/ton_icon.png diff --git a/assets/bitcoin_electrum_server_list.yml b/assets/bitcoin_electrum_server_list.yml index 8b734a7bb..305db38f5 100644 --- a/assets/bitcoin_electrum_server_list.yml +++ b/assets/bitcoin_electrum_server_list.yml @@ -6,3 +6,6 @@ isDefault: true - uri: electrs.cakewallet.com:50001 +- + uri: fulcrum.sethforprivacy.com:50002 + useSSL: true diff --git a/assets/images/ton_icon.png b/assets/images/ton_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..90f9968cccff796368b266a6f497fdd7403091b3 GIT binary patch literal 14318 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 YCEguol^6iv2LH6xZ{B!+9TWcl0QGAZ7ytkO literal 0 HcmV?d00001 diff --git a/cw_bitcoin/lib/electrum_wallet.dart b/cw_bitcoin/lib/electrum_wallet.dart index 4f8f3eab5..877b108b7 100644 --- a/cw_bitcoin/lib/electrum_wallet.dart +++ b/cw_bitcoin/lib/electrum_wallet.dart @@ -479,8 +479,14 @@ abstract class ElectrumWalletBase final result = json.decode(response.body) as Map; final slowFee = result['economyFee']?.toInt() ?? 0; - final mediumFee = result['hourFee']?.toInt() ?? 0; - final fastFee = result['fastestFee']?.toInt() ?? 0; + int mediumFee = result['hourFee']?.toInt() ?? 0; + int fastFee = result['fastestFee']?.toInt() ?? 0; + if (slowFee == mediumFee) { + mediumFee++; + } + while (fastFee <= mediumFee) { + fastFee++; + } _feeRates = [slowFee, mediumFee, fastFee]; return; } catch (_) {} @@ -813,6 +819,8 @@ abstract class ElectrumWalletBase network: network, memo: memo, feeRate: feeRate, + inputPrivKeyInfos: utxoDetails.inputPrivKeyInfos, + vinOutpoints: utxoDetails.vinOutpoints, ); if (fee == 0) { @@ -1639,27 +1647,29 @@ abstract class ElectrumWalletBase if (verboseTransaction.isEmpty) { transactionHex = await electrumClient.getTransactionHex(hash: hash); - if (height != null && await checkIfMempoolAPIIsEnabled()) { - final blockHash = await http.get( - Uri.parse( - "http://mempool.cakewallet.com:8999/api/v1/block-height/$height", - ), - ); - - if (blockHash.statusCode == 200 && - blockHash.body.isNotEmpty && - jsonDecode(blockHash.body) != null) { - final blockResponse = await http.get( + if (height != null && height > 0 && await checkIfMempoolAPIIsEnabled()) { + try { + final blockHash = await http.get( Uri.parse( - "http://mempool.cakewallet.com:8999/api/v1/block/${blockHash.body}", + "http://mempool.cakewallet.com:8999/api/v1/block-height/$height", ), ); - if (blockResponse.statusCode == 200 && - blockResponse.body.isNotEmpty && - jsonDecode(blockResponse.body)['timestamp'] != null) { - time = int.parse(jsonDecode(blockResponse.body)['timestamp'].toString()); + + if (blockHash.statusCode == 200 && + blockHash.body.isNotEmpty && + jsonDecode(blockHash.body) != null) { + final blockResponse = await http.get( + Uri.parse( + "http://mempool.cakewallet.com:8999/api/v1/block/${blockHash.body}", + ), + ); + if (blockResponse.statusCode == 200 && + blockResponse.body.isNotEmpty && + jsonDecode(blockResponse.body)['timestamp'] != null) { + time = int.parse(jsonDecode(blockResponse.body)['timestamp'].toString()); + } } - } + } catch (_) {} } } else { transactionHex = verboseTransaction['hex'] as String; diff --git a/cw_bitcoin/pubspec.lock b/cw_bitcoin/pubspec.lock index f741230a5..4c7c49a9e 100644 --- a/cw_bitcoin/pubspec.lock +++ b/cw_bitcoin/pubspec.lock @@ -49,6 +49,15 @@ packages: url: "https://pub.dev" source: hosted version: "2.11.0" + bech32: + dependency: "direct main" + description: + path: "." + ref: HEAD + resolved-ref: "05755063b593aa6cca0a4820a318e0ce17de6192" + url: "https://github.com/cake-tech/bech32.git" + source: git + version: "0.2.2" bip32: dependency: transitive description: @@ -78,8 +87,8 @@ packages: dependency: "direct overridden" description: path: "." - ref: cake-update-v7 - resolved-ref: f577e83fe78766b2655ea0602baa9299b953a31b + ref: cake-update-v8 + resolved-ref: fc045a11db3d85d806ca67f75e8b916c706745a2 url: "https://github.com/cake-tech/bitcoin_base" source: git version: "4.7.0" @@ -308,13 +317,13 @@ packages: source: hosted version: "1.3.1" ffi: - dependency: transitive + dependency: "direct overridden" description: name: ffi - sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.0" ffigen: dependency: transitive description: @@ -450,6 +459,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.2" + http2: + dependency: transitive + description: + name: http2 + sha256: "9ced024a160b77aba8fb8674e38f70875e321d319e6f303ec18e87bd5a4b0c1d" + url: "https://pub.dev" + source: hosted + version: "2.3.0" http_multi_server: dependency: transitive description: @@ -693,13 +710,13 @@ packages: source: hosted version: "2.1.8" pointycastle: - dependency: transitive + dependency: "direct overridden" description: name: pointycastle - sha256: "4be0097fcf3fd3e8449e53730c631200ebc7b88016acecab2b0da2f0149222fe" + sha256: "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29" url: "https://pub.dev" source: hosted - version: "3.9.1" + version: "3.7.4" pool: dependency: transitive description: @@ -709,13 +726,13 @@ packages: source: hosted version: "1.5.1" protobuf: - dependency: transitive + dependency: "direct overridden" description: name: protobuf - sha256: "01dd9bd0fa02548bf2ceee13545d4a0ec6046459d847b6b061d8a27237108a08" + sha256: "68645b24e0716782e58948f8467fd42a880f255096a821f9e7d0ec625b00c84d" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "3.1.0" provider: dependency: transitive description: diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index 4f9b5d835..0280bb45a 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -106,6 +106,7 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen CryptoCurrency.usdcTrc20, CryptoCurrency.tbtc, CryptoCurrency.wow, + CryptoCurrency.ton, ]; static const havenCurrencies = [ @@ -223,6 +224,7 @@ class CryptoCurrency extends EnumerableItem with Serializable implemen static const usdcTrc20 = CryptoCurrency(title: 'USDC', tag: 'TRX', fullName: 'USDC Coin', raw: 92, name: 'usdctrc20', iconPath: 'assets/images/usdc_icon.png', decimals: 6); static const tbtc = CryptoCurrency(title: 'tBTC', fullName: 'Testnet Bitcoin', raw: 93, name: 'tbtc', iconPath: 'assets/images/tbtc.png', decimals: 8); static const wow = CryptoCurrency(title: 'WOW', fullName: 'Wownero', raw: 94, name: 'wow', iconPath: 'assets/images/wownero_icon.png', decimals: 11); + static const ton = CryptoCurrency(title: 'TON', fullName: 'Toncoin', raw: 95, name: 'ton', iconPath: 'assets/images/ton_icon.png', decimals: 8); static final Map _rawCurrencyMap = diff --git a/cw_core/lib/node.dart b/cw_core/lib/node.dart index 85c61de15..e19d2a54b 100644 --- a/cw_core/lib/node.dart +++ b/cw_core/lib/node.dart @@ -239,12 +239,15 @@ class Node extends HiveObject with Keyable { // you try to communicate with it Future requestElectrumServer() async { try { + final Socket socket; if (useSSL == true) { - await SecureSocket.connect(uri.host, uri.port, + socket = await SecureSocket.connect(uri.host, uri.port, timeout: Duration(seconds: 5), onBadCertificate: (_) => true); } else { - await Socket.connect(uri.host, uri.port, timeout: Duration(seconds: 5)); + socket = await Socket.connect(uri.host, uri.port, timeout: Duration(seconds: 5)); } + + socket.destroy(); return true; } catch (_) { return false; diff --git a/lib/entities/default_settings_migration.dart b/lib/entities/default_settings_migration.dart index 802ad0184..1c46cd605 100644 --- a/lib/entities/default_settings_migration.dart +++ b/lib/entities/default_settings_migration.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'dart:io' show Directory, File, Platform; import 'package:cake_wallet/bitcoin/bitcoin.dart'; import 'package:cake_wallet/core/secure_storage.dart'; @@ -234,7 +235,8 @@ Future defaultSettingsMigration( break; case 36: await addWowneroNodeList(nodes: nodes); - await changeWowneroCurrentNodeToDefault(sharedPreferences: sharedPreferences, nodes: nodes); + await changeWowneroCurrentNodeToDefault( + sharedPreferences: sharedPreferences, nodes: nodes); break; case 37: await replaceTronDefaultNode(sharedPreferences: sharedPreferences, nodes: nodes); @@ -249,6 +251,10 @@ Future defaultSettingsMigration( case 40: await removeMoneroWorld(sharedPreferences: sharedPreferences, nodes: nodes); break; + case 41: + _deselectQuantex(sharedPreferences); + await _addSethNode(nodes, sharedPreferences); + break; default: break; } @@ -263,6 +269,19 @@ Future defaultSettingsMigration( await sharedPreferences.setInt(PreferencesKey.currentDefaultSettingsMigrationVersion, version); } +void _deselectQuantex(SharedPreferences sharedPreferences) { + final Map exchangeProvidersSelection = + json.decode(sharedPreferences.getString(PreferencesKey.exchangeProvidersSelection) ?? "{}") + as Map; + + exchangeProvidersSelection['Quantex'] = false; + + sharedPreferences.setString( + PreferencesKey.exchangeProvidersSelection, + json.encode(exchangeProvidersSelection), + ); +} + void _fixNodesUseSSLFlag(Box nodes) { for (Node node in nodes.values) { switch (node.uriRaw) { @@ -887,7 +906,30 @@ Future changeDefaultBitcoinNode( } } +Future _addSethNode(Box nodeSource, SharedPreferences sharedPreferences) async { + _addBitcoinNode( + nodeSource: nodeSource, + sharedPreferences: sharedPreferences, + nodeUri: "fulcrum.sethforprivacy.com:50002", + useSSL: false, + ); +} + Future _addElectRsNode(Box nodeSource, SharedPreferences sharedPreferences) async { + _addBitcoinNode( + nodeSource: nodeSource, + sharedPreferences: sharedPreferences, + nodeUri: cakeWalletSilentPaymentsElectrsUri, + ); +} + +Future _addBitcoinNode({ + required Box nodeSource, + required SharedPreferences sharedPreferences, + required String nodeUri, + bool replaceExisting = false, + bool useSSL = false, +}) async { const cakeWalletBitcoinNodeUriPattern = '.cakewallet.com'; final currentBitcoinNodeId = sharedPreferences.getInt(PreferencesKey.currentBitcoinElectrumSererIdKey); @@ -896,12 +938,11 @@ Future _addElectRsNode(Box nodeSource, SharedPreferences sharedPrefe final needToReplaceCurrentBitcoinNode = currentBitcoinNode.uri.toString().contains(cakeWalletBitcoinNodeUriPattern); - final newElectRsBitcoinNode = - Node(uri: cakeWalletSilentPaymentsElectrsUri, type: WalletType.bitcoin, useSSL: false); + final newElectRsBitcoinNode = Node(uri: nodeUri, type: WalletType.bitcoin, useSSL: useSSL); await nodeSource.add(newElectRsBitcoinNode); - if (needToReplaceCurrentBitcoinNode) { + if (needToReplaceCurrentBitcoinNode && replaceExisting) { await sharedPreferences.setInt( PreferencesKey.currentBitcoinElectrumSererIdKey, newElectRsBitcoinNode.key as int); } @@ -1262,7 +1303,8 @@ Future removeMoneroWorld( const cakeWalletMoneroNodeUriPattern = '.moneroworld.com'; final currentMoneroNodeId = sharedPreferences.getInt(PreferencesKey.currentNodeIdKey); final currentMoneroNode = nodes.values.firstWhere((node) => node.key == currentMoneroNodeId); - final needToReplaceCurrentMoneroNode = currentMoneroNode.uri.toString().contains(cakeWalletMoneroNodeUriPattern); + final needToReplaceCurrentMoneroNode = + currentMoneroNode.uri.toString().contains(cakeWalletMoneroNodeUriPattern); nodes.values.forEach((node) async { if (node.type == WalletType.monero && diff --git a/lib/main.dart b/lib/main.dart index dcfd8d0da..7237de8b9 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -192,7 +192,7 @@ Future initializeAppConfigs() async { transactionDescriptions: transactionDescriptions, secureStorage: secureStorage, anonpayInvoiceInfo: anonpayInvoiceInfo, - initialMigrationVersion: 40, + initialMigrationVersion: 41, ); } diff --git a/lib/reactions/check_connection.dart b/lib/reactions/check_connection.dart index 812fa9fcd..570b96864 100644 --- a/lib/reactions/check_connection.dart +++ b/lib/reactions/check_connection.dart @@ -11,6 +11,8 @@ Timer? _checkConnectionTimer; void startCheckConnectionReaction(WalletBase wallet, SettingsStore settingsStore, {int timeInterval = 5}) { _checkConnectionTimer?.cancel(); + // TODO: check the validity of this code, and if it's working fine, then no need for + // having the connect function in electrum.dart when the syncstatus is lost or failed and add the not connected state _checkConnectionTimer = Timer.periodic(Duration(seconds: timeInterval), (_) async { if (wallet.type == WalletType.bitcoin && wallet.syncStatus is SyncingSyncStatus) { return; diff --git a/lib/src/screens/receive/widgets/qr_image.dart b/lib/src/screens/receive/widgets/qr_image.dart index f388fdd0b..043958ef4 100644 --- a/lib/src/screens/receive/widgets/qr_image.dart +++ b/lib/src/screens/receive/widgets/qr_image.dart @@ -23,7 +23,7 @@ class QrImage extends StatelessWidget { return qr.QrImageView( data: data, errorCorrectionLevel: errorCorrectionLevel, - version: version ?? 9, // Previous value: 7 something happened after flutter upgrade monero wallets addresses are longer than ver. 7 ??? + version: version ?? qr.QrVersions.auto, size: size, foregroundColor: foregroundColor, backgroundColor: backgroundColor, diff --git a/lib/utils/brightness_util.dart b/lib/utils/brightness_util.dart index 5afe065e5..1b34bceac 100644 --- a/lib/utils/brightness_util.dart +++ b/lib/utils/brightness_util.dart @@ -9,15 +9,12 @@ class BrightnessUtil { return; } - // Get the current brightness: - final brightness = await DeviceDisplayBrightness.getBrightness(); - // ignore: unawaited_futures DeviceDisplayBrightness.setBrightness(1.0); await func(); // ignore: unawaited_futures - DeviceDisplayBrightness.setBrightness(brightness); + DeviceDisplayBrightness.resetBrightness(); } } \ No newline at end of file