revert subaddress fix (#1656)
add show/hide passphrase
Omar Hatem committed
Aug 29, 2024 at 00:52 UTC
82f64a42642516d1abed58c12be4018129c6e813
13 files changed
+51
-126
cw_monero/lib/api/transaction_history.dart
+5
-22
@@ -45,8 +45,6 @@ List<Transaction> getAllTransactions() {
45
confirmations: 0,
46
blockheight: 0,
47
accountIndex: i,
48
- addressIndex: 0,
49
- addressIndexList: [0],
48
paymentId: "",
49
amount: fullBalance - availBalance,
50
isSpend: false,
@@ -247,30 +245,19 @@ Future<PendingTransactionDescription> createTransactionMultDest(
245
246
class Transaction {
247
final String displayLabel;
250
- String get subaddressLabel => monero.Wallet_getSubaddressLabel(
248
+ String subaddressLabel = monero.Wallet_getSubaddressLabel(wptr!, accountIndex: 0, addressIndex: 0);
249
+ late final String address = monero.Wallet_address(
250
wptr!,
252
- accountIndex: accountIndex,
253
- addressIndex: addressIndex,
251
+ accountIndex: 0,
252
+ addressIndex: 0,
253
);
255
- String get address => monero.Wallet_address(
256
- wptr!,
257
- accountIndex: accountIndex,
258
- addressIndex: addressIndex,
259
- );
260
- List<String> get addressList => List.generate(addressIndexList.length, (index) =>
261
- monero.Wallet_address(
262
- wptr!,
263
- accountIndex: accountIndex,
264
- addressIndex: addressIndexList[index],
265
- ));
254
final String description;
255
final int fee;
256
final int confirmations;
257
late final bool isPending = confirmations < 10;
258
final int blockheight;
271
- final int addressIndex;
259
+ final int addressIndex = 0;
260
final int accountIndex;
273
- final List<int> addressIndexList;
261
final String paymentId;
262
final int amount;
263
final bool isSpend;
@@ -316,8 +303,6 @@ class Transaction {
303
amount = monero.TransactionInfo_amount(txInfo),
304
paymentId = monero.TransactionInfo_paymentId(txInfo),
305
accountIndex = monero.TransactionInfo_subaddrAccount(txInfo),
319
- addressIndex = int.tryParse(monero.TransactionInfo_subaddrIndex(txInfo).split(", ")[0]) ?? 0,
320
- addressIndexList = monero.TransactionInfo_subaddrIndex(txInfo).split(", ").map((e) => int.tryParse(e) ?? 0).toList(),
306
blockheight = monero.TransactionInfo_blockHeight(txInfo),
307
confirmations = monero.TransactionInfo_confirmations(txInfo),
308
fee = monero.TransactionInfo_fee(txInfo),
@@ -331,8 +316,6 @@ class Transaction {
316
required this.confirmations,
317
required this.blockheight,
318
required this.accountIndex,
334
- required this.addressIndexList,
335
- required this.addressIndex,
319
required this.paymentId,
320
required this.amount,
321
required this.isSpend,
cw_monero/lib/monero_subaddress_list.dart
+3
-6
@@ -1,7 +1,6 @@
1
import 'package:cw_core/subaddress.dart';
2
import 'package:cw_monero/api/coins_info.dart';
3
import 'package:cw_monero/api/subaddress_list.dart' as subaddress_list;
4
-import 'package:cw_monero/api/wallet.dart';
4
import 'package:flutter/services.dart';
5
import 'package:mobx/mobx.dart';
6
@@ -104,9 +103,6 @@ abstract class MoneroSubaddressListBase with Store {
103
required List<String> usedAddresses,
104
}) async {
105
_usedAddresses.addAll(usedAddresses);
107
- final _all = _usedAddresses.toSet().toList();
108
- _usedAddresses.clear();
109
- _usedAddresses.addAll(_all);
106
if (_isUpdating) {
107
return;
108
}
@@ -128,7 +124,7 @@ abstract class MoneroSubaddressListBase with Store {
124
Future<List<Subaddress>> _getAllUnusedAddresses(
125
{required int accountIndex, required String label}) async {
126
final allAddresses = subaddress_list.getAllSubaddresses();
131
- if (allAddresses.isEmpty || _usedAddresses.contains(allAddresses.first.address)) {
127
+ if (allAddresses.isEmpty || _usedAddresses.contains(allAddresses.last)) {
128
final isAddressUnused = await _newSubaddress(accountIndex: accountIndex, label: label);
129
if (!isAddressUnused) {
130
return await _getAllUnusedAddresses(accountIndex: accountIndex, label: label);
@@ -147,7 +143,8 @@ abstract class MoneroSubaddressListBase with Store {
143
label.toLowerCase() == 'Primary account'.toLowerCase()
144
? 'Primary address'
145
: label);
150
- }).toList().reversed.toList();
146
+ })
147
+ .toList();
148
}
149
150
Future<bool> _newSubaddress({required int accountIndex, required String label}) async {
cw_monero/lib/monero_wallet.dart
-5
@@ -86,9 +86,6 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
86
reaction((_) => isEnabledAutoGenerateSubaddress, (bool enabled) {
87
_updateSubAddress(enabled, account: walletAddresses.account);
88
});
89
- _onTxHistoryChangeReaction = reaction((_) => transactionHistory, (__) {
90
- _updateSubAddress(isEnabledAutoGenerateSubaddress, account: walletAddresses.account);
91
- });
89
}
90
91
static const int _autoSaveInterval = 30;
@@ -131,7 +128,6 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
128
129
monero_wallet.SyncListener? _listener;
130
ReactionDisposer? _onAccountChangeReaction;
134
- ReactionDisposer? _onTxHistoryChangeReaction;
131
bool _isTransactionUpdating;
132
bool _hasSyncAfterStartup;
133
Timer? _autoSaveTimer;
@@ -171,7 +167,6 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
167
void close() async {
168
_listener?.stop();
169
_onAccountChangeReaction?.reaction.dispose();
174
- _onTxHistoryChangeReaction?.reaction.dispose();
170
_autoSaveTimer?.cancel();
171
}
172
cw_monero/lib/monero_wallet_addresses.dart
-20
@@ -3,7 +3,6 @@ import 'package:cw_core/address_info.dart';
3
import 'package:cw_core/subaddress.dart';
4
import 'package:cw_core/wallet_addresses.dart';
5
import 'package:cw_core/wallet_info.dart';
6
-import 'package:cw_monero/api/transaction_history.dart';
6
import 'package:cw_monero/api/wallet.dart';
7
import 'package:cw_monero/monero_account_list.dart';
8
import 'package:cw_monero/monero_subaddress_list.dart';
@@ -38,25 +37,6 @@ abstract class MoneroWalletAddressesBase extends WalletAddresses with Store {
37
38
MoneroAccountList accountList;
39
41
- @override
42
- Set<String> get usedAddresses {
43
- final txs = getAllTransactions();
44
- final adds = _originalUsedAddresses.toList();
45
- for (var i = 0; i < txs.length; i++) {
46
- for (var j = 0; j < txs[i].addressList.length; j++) {
47
- adds.add(txs[i].addressList[j]);
48
- }
49
- }
50
- return adds.toSet();
51
- }
52
-
53
- Set<String> _originalUsedAddresses = Set();
54
-
55
- @override
56
- set usedAddresses(Set<String> _usedAddresses) {
57
- _originalUsedAddresses = _usedAddresses;
58
- }
59
-
40
@override
41
Future<void> init() async {
42
accountList.update();
cw_wownero/lib/api/transaction_history.dart
+5
-18
@@ -45,8 +45,6 @@ List<Transaction> getAllTransactions() {
45
confirmations: 0,
46
blockheight: 0,
47
accountIndex: i,
48
- addressIndex: 0,
49
- addressIndexList: [0],
48
paymentId: "",
49
amount: fullBalance - availBalance,
50
isSpend: false,
@@ -245,26 +243,19 @@ Future<PendingTransactionDescription> createTransactionMultDest(
243
244
class Transaction {
245
final String displayLabel;
248
- String get subaddressLabel => wownero.Wallet_getSubaddressLabel(wptr!, accountIndex: 0, addressIndex: 0);
249
- String get address => wownero.Wallet_address(
246
+ String subaddressLabel = wownero.Wallet_getSubaddressLabel(wptr!, accountIndex: 0, addressIndex: 0);
247
+ late final String address = wownero.Wallet_address(
248
wptr!,
251
- accountIndex: accountIndex,
252
- addressIndex: addressIndex,
249
+ accountIndex: 0,
250
+ addressIndex: 0,
251
);
254
- List<String> get addressList => List.generate(addressIndexList.length, (index) =>
255
- wownero.Wallet_address(
256
- wptr!,
257
- accountIndex: accountIndex,
258
- addressIndex: addressIndexList[index],
259
- ));
252
final String description;
253
final int fee;
254
final int confirmations;
255
late final bool isPending = confirmations < 3;
256
final int blockheight;
265
- final int addressIndex;
257
+ final int addressIndex = 0;
258
final int accountIndex;
267
- final List<int> addressIndexList;
259
final String paymentId;
260
final int amount;
261
final bool isSpend;
@@ -310,8 +301,6 @@ class Transaction {
301
amount = wownero.TransactionInfo_amount(txInfo),
302
paymentId = wownero.TransactionInfo_paymentId(txInfo),
303
accountIndex = wownero.TransactionInfo_subaddrAccount(txInfo),
313
- addressIndex = int.tryParse(wownero.TransactionInfo_subaddrIndex(txInfo).split(", ")[0]) ?? 0,
314
- addressIndexList = wownero.TransactionInfo_subaddrIndex(txInfo).split(", ").map((e) => int.tryParse(e) ?? 0).toList(),
304
blockheight = wownero.TransactionInfo_blockHeight(txInfo),
305
confirmations = wownero.TransactionInfo_confirmations(txInfo),
306
fee = wownero.TransactionInfo_fee(txInfo),
@@ -325,8 +314,6 @@ class Transaction {
314
required this.confirmations,
315
required this.blockheight,
316
required this.accountIndex,
328
- required this.addressIndex,
329
- required this.addressIndexList,
317
required this.paymentId,
318
required this.amount,
319
required this.isSpend,
cw_wownero/lib/wownero_subaddress_list.dart
-4
@@ -1,7 +1,6 @@
1
import 'package:cw_core/subaddress.dart';
2
import 'package:cw_wownero/api/coins_info.dart';
3
import 'package:cw_wownero/api/subaddress_list.dart' as subaddress_list;
4
-import 'package:cw_wownero/api/wallet.dart';
4
import 'package:flutter/services.dart';
5
import 'package:mobx/mobx.dart';
6
@@ -104,9 +103,6 @@ abstract class WowneroSubaddressListBase with Store {
103
required List<String> usedAddresses,
104
}) async {
105
_usedAddresses.addAll(usedAddresses);
107
- final _all = _usedAddresses.toSet().toList();
108
- _usedAddresses.clear();
109
- _usedAddresses.addAll(_all);
106
if (_isUpdating) {
107
return;
108
}
cw_wownero/lib/wownero_wallet.dart
-6
@@ -82,10 +82,6 @@ abstract class WowneroWalletBase
82
reaction((_) => isEnabledAutoGenerateSubaddress, (bool enabled) {
83
_updateSubAddress(enabled, account: walletAddresses.account);
84
});
85
-
86
- _onTxHistoryChangeReaction = reaction((_) => transactionHistory, (__) {
87
- _updateSubAddress(isEnabledAutoGenerateSubaddress, account: walletAddresses.account);
88
- });
85
}
86
87
static const int _autoSaveInterval = 30;
@@ -127,7 +123,6 @@ abstract class WowneroWalletBase
123
124
wownero_wallet.SyncListener? _listener;
125
ReactionDisposer? _onAccountChangeReaction;
130
- ReactionDisposer? _onTxHistoryChangeReaction;
126
bool _isTransactionUpdating;
127
bool _hasSyncAfterStartup;
128
Timer? _autoSaveTimer;
@@ -163,7 +158,6 @@ abstract class WowneroWalletBase
158
void close() async {
159
_listener?.stop();
160
_onAccountChangeReaction?.reaction.dispose();
166
- _onTxHistoryChangeReaction?.reaction.dispose();
161
_autoSaveTimer?.cancel();
162
}
163
cw_wownero/lib/wownero_wallet_addresses.dart
-18
@@ -3,7 +3,6 @@ import 'package:cw_core/address_info.dart';
3
import 'package:cw_core/subaddress.dart';
4
import 'package:cw_core/wallet_addresses.dart';
5
import 'package:cw_core/wallet_info.dart';
6
-import 'package:cw_wownero/api/transaction_history.dart';
6
import 'package:cw_wownero/api/wallet.dart';
7
import 'package:cw_wownero/wownero_account_list.dart';
8
import 'package:cw_wownero/wownero_subaddress_list.dart';
@@ -37,24 +36,7 @@ abstract class WowneroWalletAddressesBase extends WalletAddresses with Store {
36
WowneroSubaddressList subaddressList;
37
38
WowneroAccountList accountList;
40
- @override
41
- Set<String> get usedAddresses {
42
- final txs = getAllTransactions();
43
- final adds = _originalUsedAddresses.toList();
44
- for (var i = 0; i < txs.length; i++) {
45
- for (var j = 0; j < txs[i].addressList.length; j++) {
46
- adds.add(txs[i].addressList[j]);
47
- }
48
- }
49
- return adds.toSet();
50
- }
39
52
- Set<String> _originalUsedAddresses = Set();
53
-
54
- @override
55
- set usedAddresses(Set<String> _usedAddresses) {
56
- _originalUsedAddresses = _usedAddresses;
57
- }
40
@override
41
Future<void> init() async {
42
accountList.update();
lib/src/screens/new_wallet/advanced_privacy_settings_page.dart
+31
-20
@@ -70,6 +70,8 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
70
final _formKey = GlobalKey<FormState>();
71
bool? testnetValue;
72
73
+ bool obscurePassphrase = true;
74
+
75
@override
76
void initState() {
77
passphraseController.text = widget.seedTypeViewModel.passphrase ?? '';
@@ -138,27 +140,36 @@ class _AdvancedPrivacySettingsBodyState extends State<_AdvancedPrivacySettingsBo
140
);
141
}),
142
if (!widget.isFromRestore) ...[
141
- Observer(builder: (_) {
142
- if (widget.privacySettingsViewModel.hasSeedPhraseLengthOption)
143
- return SettingsPickerCell<SeedPhraseLength>(
144
- title: S.current.seed_phrase_length,
145
- items: SeedPhraseLength.values,
146
- selectedItem: widget.privacySettingsViewModel.seedPhraseLength,
147
- onItemSelected: (SeedPhraseLength length) {
148
- widget.privacySettingsViewModel.setSeedPhraseLength(length);
149
- },
150
- );
151
- return Container();
152
- }),
153
- if (widget.privacySettingsViewModel.hasPassphraseOption)
154
- Padding(
155
- padding: EdgeInsets.all(24),
156
- child: BaseTextFormField(
157
- hintText: S.current.passphrase,
158
- controller: passphraseController,
159
- obscureText: true,
143
+ Observer(builder: (_) {
144
+ if (widget.privacySettingsViewModel.hasSeedPhraseLengthOption)
145
+ return SettingsPickerCell<SeedPhraseLength>(
146
+ title: S.current.seed_phrase_length,
147
+ items: SeedPhraseLength.values,
148
+ selectedItem: widget.privacySettingsViewModel.seedPhraseLength,
149
+ onItemSelected: (SeedPhraseLength length) {
150
+ widget.privacySettingsViewModel.setSeedPhraseLength(length);
151
+ },
152
+ );
153
+ return Container();
154
+ }),
155
+ if (widget.privacySettingsViewModel.hasPassphraseOption)
156
+ Padding(
157
+ padding: EdgeInsets.all(24),
158
+ child: BaseTextFormField(
159
+ hintText: S.current.passphrase,
160
+ controller: passphraseController,
161
+ obscureText: obscurePassphrase,
162
+ suffixIcon: GestureDetector(
163
+ onTap: () => setState(() {
164
+ obscurePassphrase = !obscurePassphrase;
165
+ }),
166
+ child: Icon(
167
+ Icons.remove_red_eye,
168
+ color: obscurePassphrase ? Colors.black54 : Colors.black26,
169
+ ),
170
+ ),
171
+ ),
172
),
161
- ),
173
],
174
Observer(builder: (_) {
175
return Column(
scripts/android/app_env.sh
+2
-2
@@ -16,14 +16,14 @@ APP_ANDROID_TYPE=$1
16
17
MONERO_COM_NAME="Monero.com"
18
MONERO_COM_VERSION="1.16.5"
19
-MONERO_COM_BUILD_NUMBER=99
19
+MONERO_COM_BUILD_NUMBER=100
20
MONERO_COM_BUNDLE_ID="com.monero.app"
21
MONERO_COM_PACKAGE="com.monero.app"
22
MONERO_COM_SCHEME="monero.com"
23
24
CAKEWALLET_NAME="Cake Wallet"
25
CAKEWALLET_VERSION="4.19.5"
26
-CAKEWALLET_BUILD_NUMBER=226
26
+CAKEWALLET_BUILD_NUMBER=227
27
CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet"
28
CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet"
29
CAKEWALLET_SCHEME="cakewallet"
scripts/ios/app_env.sh
+2
-2
@@ -14,12 +14,12 @@ APP_IOS_TYPE=$1
14
15
MONERO_COM_NAME="Monero.com"
16
MONERO_COM_VERSION="1.16.5"
17
-MONERO_COM_BUILD_NUMBER=97
17
+MONERO_COM_BUILD_NUMBER=98
18
MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
19
20
CAKEWALLET_NAME="Cake Wallet"
21
CAKEWALLET_VERSION="4.19.5"
22
-CAKEWALLET_BUILD_NUMBER=264
22
+CAKEWALLET_BUILD_NUMBER=266
23
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
24
25
HAVEN_NAME="Haven"
scripts/linux/app_env.sh
+1
-1
@@ -15,7 +15,7 @@ fi
15
16
CAKEWALLET_NAME="Cake Wallet"
17
CAKEWALLET_VERSION="1.9.5"
18
-CAKEWALLET_BUILD_NUMBER=32
18
+CAKEWALLET_BUILD_NUMBER=33
19
20
if ! [[ " ${TYPES[*]} " =~ " ${APP_LINUX_TYPE} " ]]; then
21
echo "Wrong app type."
scripts/macos/app_env.sh
+2
-2
@@ -17,12 +17,12 @@ fi
17
18
MONERO_COM_NAME="Monero.com"
19
MONERO_COM_VERSION="1.6.5"
20
-MONERO_COM_BUILD_NUMBER=30
20
+MONERO_COM_BUILD_NUMBER=31
21
MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
22
23
CAKEWALLET_NAME="Cake Wallet"
24
CAKEWALLET_VERSION="1.12.5"
25
-CAKEWALLET_BUILD_NUMBER=86
25
+CAKEWALLET_BUILD_NUMBER=88
26
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
27
28
if ! [[ " ${TYPES[*]} " =~ " ${APP_MACOS_TYPE} " ]]; then