Added displaying of transaction key.

M committed Sep 24, 2020 at 18:11 UTC 9eb74f7155b531696cdc6bb5491a95a5553dca6b
6 files changed +42 -4
cw_monero/ios/Classes/monero_api.cpp
+6 -1
@@ -5,8 +5,8 @@
5 #include <iostream>
6 #include <unistd.h>
7 #include "thread"
8 -#include "../External/android/monero/include/wallet2_api.h"
8 #include "CwWalletListener.h"
9 +#include "../External/android/monero/include/wallet2_api.h"
10
11 using namespace std::chrono_literals;
12
@@ -684,6 +684,11 @@ extern "C"
684 m_wallet->rescanBlockchainAsync();
685 }
686
687 + char * get_tx_key(char * txId)
688 + {
689 + return strdup(m_wallet->getTxKey(std::string(txId)).c_str());
690 + }
691 +
692 #ifdef __cplusplus
693 }
694 #endif
cw_monero/lib/signatures.dart
+3 -1
@@ -76,7 +76,9 @@ typedef account_add_new = Void Function(Pointer<Utf8> label);
76 typedef account_set_label = Void Function(
77 Int32 accountIndex, Pointer<Utf8> label);
78
79 - typedef transactions_refresh = Void Function();
79 +typedef transactions_refresh = Void Function();
80 +
81 +typedef get_tx_key = Pointer<Utf8> Function(Pointer<Utf8> txId);
82
83 typedef transactions_count = Int64 Function();
84
cw_monero/lib/transaction_history.dart
+18
@@ -1,4 +1,5 @@
1 import 'dart:ffi';
2 +import 'package:cw_monero/convert_utf8_to_string.dart';
3 import 'package:cw_monero/structs/ut8_box.dart';
4 import 'package:ffi/ffi.dart';
5 import 'package:flutter/foundation.dart';
@@ -29,6 +30,23 @@ final transactionCommitNative = moneroApi
30 .lookup<NativeFunction<transaction_commit>>('transaction_commit')
31 .asFunction<TransactionCommit>();
32
33 +final getTxKeyNative = moneroApi
34 + .lookup<NativeFunction<get_tx_key>>('get_tx_key')
35 + .asFunction<GetTxKey>();
36 +
37 +String getTxKey(String txId) {
38 + final txIdPointer = Utf8.toUtf8(txId);
39 + final keyPointer = getTxKeyNative(txIdPointer);
40 +
41 + free(txIdPointer);
42 +
43 + if (keyPointer != null) {
44 + return convertUTF8ToString(pointer: keyPointer);
45 + }
46 +
47 + return null;
48 +}
49 +
50 void refreshTransactions() => transactionsRefreshNative();
51
52 int countOfTransactions() => transactionsCountNative();
cw_monero/lib/types.dart
+2
@@ -76,6 +76,8 @@ typedef AccountSetLabel = void Function(int accountIndex, Pointer<Utf8> label);
76
77 typedef TransactionsRefresh = void Function();
78
79 +typedef GetTxKey = Pointer<Utf8> Function(Pointer<Utf8> txId);
80 +
81 typedef TransactionsCount = int Function();
82
83 typedef TransactionsGetAll = Pointer<Int64> Function();
lib/monero/monero_transaction_info.dart
+8 -2
@@ -4,6 +4,7 @@ import 'package:cw_monero/structs/transaction_info_row.dart';
4 import 'package:cake_wallet/entities/parseBoolFromString.dart';
5 import 'package:cake_wallet/entities/transaction_direction.dart';
6 import 'package:cake_wallet/entities/format_amount.dart';
7 +import 'package:cw_monero/transaction_history.dart';
8
9 class MoneroTransactionInfo extends TransactionInfo {
10 MoneroTransactionInfo(this.id, this.height, this.direction, this.date,
@@ -19,7 +20,8 @@ class MoneroTransactionInfo extends TransactionInfo {
20 (int.parse(map['timestamp'] as String) ?? 0) * 1000),
21 isPending = parseBoolFromString(map['isPending'] as String),
22 amount = map['amount'] as int,
22 - accountIndex = int.parse(map['accountIndex'] as String);
23 + accountIndex = int.parse(map['accountIndex'] as String),
24 + key = getTxKey((map['hash'] ?? '') as String);
25
26 MoneroTransactionInfo.fromRow(TransactionInfoRow row)
27 : id = row.getHash(),
@@ -29,7 +31,8 @@ class MoneroTransactionInfo extends TransactionInfo {
31 date = DateTime.fromMillisecondsSinceEpoch(row.getDatetime() * 1000),
32 isPending = row.isPending != 0,
33 amount = row.getAmount(),
32 - accountIndex = row.subaddrAccount;
34 + accountIndex = row.subaddrAccount,
35 + key = getTxKey(row.getHash());
36
37 final String id;
38 final int height;
@@ -39,11 +42,14 @@ class MoneroTransactionInfo extends TransactionInfo {
42 final bool isPending;
43 final int amount;
44 String recipientAddress;
45 + String key;
46
47 String _fiatAmount;
48
49 + @override
50 String amountFormatted() => '${formatAmount(moneroAmountToString(amount: amount))} XMR';
51
52 + @override
53 String fiatAmount() => _fiatAmount ?? '';
54
55 void changeFiatAmount(String amount) => _fiatAmount = formatAmount(amount);
lib/src/screens/transaction_details/transaction_details_page.dart
+5
@@ -35,6 +35,11 @@ class TransactionDetailsPage extends BasePage {
35 // value: tx.recipientAddress));
36 // }
37
38 + if (tx.key?.isNotEmpty) {
39 + // FIXME: add translation
40 + items.add(StandartListItem(title: 'Transaction Key', value: tx.key));
41 + }
42 +
43 _items.addAll(items);
44 }
45