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;