CAKE-297 | applied subaddress for incoming transaction
OleksandrSobol committed
May 10, 2021 at 19:10 UTC
7bbd530319b6dd43114695a89ba774b29b2a481e
4 files changed
+41
-5
lib/di.dart
+8
-4
@@ -482,10 +482,14 @@ Future setup(
482
483
getIt
484
.registerFactoryParam<TransactionDetailsViewModel, TransactionInfo, void>(
485
- (TransactionInfo transactionInfo, _) => TransactionDetailsViewModel(
486
- transactionInfo: transactionInfo,
487
- transactionDescriptionBox: _transactionDescriptionBox,
488
- settingsStore: getIt.get<SettingsStore>()));
485
+ (TransactionInfo transactionInfo, _) {
486
+ final wallet = getIt.get<AppStore>().wallet;
487
+ return TransactionDetailsViewModel(
488
+ transactionInfo: transactionInfo,
489
+ transactionDescriptionBox: _transactionDescriptionBox,
490
+ wallet: wallet,
491
+ settingsStore: getIt.get<SettingsStore>());
492
+ });
493
494
getIt.registerFactoryParam<TransactionDetailsPage, TransactionInfo, void>(
495
(TransactionInfo transactionInfo, _) => TransactionDetailsPage(
lib/monero/monero_transaction_info.dart
+4
-1
@@ -8,7 +8,7 @@ import 'package:cw_monero/transaction_history.dart';
8
9
class MoneroTransactionInfo extends TransactionInfo {
10
MoneroTransactionInfo(this.id, this.height, this.direction, this.date,
11
- this.isPending, this.amount, this.accountIndex, this.fee);
11
+ this.isPending, this.amount, this.accountIndex, this.addressIndex, this.fee);
12
13
MoneroTransactionInfo.fromMap(Map map)
14
: id = (map['hash'] ?? '') as String,
@@ -21,6 +21,7 @@ class MoneroTransactionInfo extends TransactionInfo {
21
isPending = parseBoolFromString(map['isPending'] as String),
22
amount = map['amount'] as int,
23
accountIndex = int.parse(map['accountIndex'] as String),
24
+ addressIndex = map['addressIndex'] as List<int>,
25
key = getTxKey((map['hash'] ?? '') as String),
26
fee = map['fee'] as int ?? 0;
27
@@ -33,6 +34,7 @@ class MoneroTransactionInfo extends TransactionInfo {
34
isPending = row.isPending != 0,
35
amount = row.getAmount(),
36
accountIndex = row.subaddrAccount,
37
+ addressIndex = row.getSubaddrIndex(),
38
key = getTxKey(row.getHash()),
39
fee = row.fee;
40
@@ -44,6 +46,7 @@ class MoneroTransactionInfo extends TransactionInfo {
46
final bool isPending;
47
final int amount;
48
final int fee;
49
+ final List<int> addressIndex;
50
String recipientAddress;
51
String key;
52
lib/monero/monero_wallet.dart
+5
@@ -262,6 +262,11 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance> with Store {
262
await walletInfo.save();
263
}
264
265
+ String getTransactionAddress(int accountIndex, int addressIndex) =>
266
+ monero_wallet.getAddress(
267
+ accountIndex: accountIndex,
268
+ addressIndex: addressIndex);
269
+
270
void _setListeners() {
271
_listener?.stop();
272
_listener = monero_wallet.setListeners(_onNewBlock, _onNewTransaction);
lib/view_model/transaction_details_view_model.dart
+24
@@ -1,10 +1,13 @@
1
import 'package:cake_wallet/bitcoin/bitcoin_transaction_info.dart';
2
+import 'package:cake_wallet/core/wallet_base.dart';
3
import 'package:cake_wallet/entities/transaction_info.dart';
4
import 'package:cake_wallet/monero/monero_transaction_info.dart';
5
+import 'package:cake_wallet/monero/monero_wallet.dart';
6
import 'package:cake_wallet/src/screens/transaction_details/standart_list_item.dart';
7
import 'package:cake_wallet/src/screens/transaction_details/textfield_list_item.dart';
8
import 'package:cake_wallet/src/screens/transaction_details/transaction_details_list_item.dart';
9
import 'package:cake_wallet/src/screens/transaction_details/blockexplorer_list_item.dart';
10
+import 'package:cake_wallet/entities/transaction_direction.dart';
11
import 'package:cake_wallet/utils/date_formatter.dart';
12
import 'package:cake_wallet/entities/transaction_description.dart';
13
import 'package:hive/hive.dart';
@@ -22,6 +25,7 @@ abstract class TransactionDetailsViewModelBase with Store {
25
TransactionDetailsViewModelBase(
26
{this.transactionInfo,
27
this.transactionDescriptionBox,
28
+ this.wallet,
29
this.settingsStore})
30
: items = [] {
31
showRecipientAddress = settingsStore?.shouldSaveRecipientAddress ?? false;
@@ -56,6 +60,25 @@ abstract class TransactionDetailsViewModelBase with Store {
60
StandartListItem(title: S.current.transaction_key, value: tx.key));
61
}
62
63
+ if ((tx.direction == TransactionDirection.incoming)&&
64
+ (wallet is MoneroWallet)) {
65
+ try {
66
+ final accountIndex = tx.accountIndex;
67
+ final addressIndex = tx.addressIndex;
68
+ final _wallet = wallet as MoneroWallet;
69
+
70
+ for (var index in addressIndex) {
71
+ final address = _wallet.getTransactionAddress(accountIndex, index);
72
+ _items.add(
73
+ StandartListItem(
74
+ title: S.current.transaction_details_recipient_address,
75
+ value: address));
76
+ }
77
+ } catch (e) {
78
+ print(e.toString());
79
+ }
80
+ }
81
+
82
items.addAll(_items);
83
}
84
@@ -122,6 +145,7 @@ abstract class TransactionDetailsViewModelBase with Store {
145
final TransactionInfo transactionInfo;
146
final Box<TransactionDescription> transactionDescriptionBox;
147
final SettingsStore settingsStore;
148
+ final WalletBase wallet;
149
150
final List<TransactionDetailsListItem> items;
151
bool showRecipientAddress;