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