summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/depends/Makefile2
-rw-r--r--impls/monero.dart/lib/monero.dart14
-rw-r--r--impls/monero.dart/lib/src/generated_bindings_monero.g.dart36
-rw-r--r--impls/monero.dart/lib/src/monero.dart1032
-rw-r--r--impls/monero.dart/lib/src/wallet2.dart248
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.cpp16
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.h2
-rw-r--r--patches/monero/0021-trezor-import-export-sign-functions.patch245
8 files changed, 1033 insertions, 562 deletions
diff --git a/contrib/depends/Makefile b/contrib/depends/Makefile
index 1a7ad47..34dc333 100644
--- a/contrib/depends/Makefile
+++ b/contrib/depends/Makefile
@@ -4,7 +4,7 @@ HOST ?=
BOOST_VERSION ?= 1_90_0
PACKAGES = native/protobuf,native/cmake,native/python@3.14,native/git,native/_,native/make,native/cmake-toolchain,icu4c,boost@$(BOOST_VERSION),zeromq,unbound,sodium,openssl,libiconv,zlib,protobuf
-SIMPLYBS_HASH = 8621f898aada59d15095a63e6b6746c69c2c5b76
+SIMPLYBS_HASH = 2091e0883265ad13cc9506ec1e7c0fb3c09ca646
all: simplybs $(if $(HOST),sbs-build-$(HOST),)
@if [ -z "$(HOST)" ]; then \
diff --git a/impls/monero.dart/lib/monero.dart b/impls/monero.dart/lib/monero.dart
index 9057f18..ef1da28 100644
--- a/impls/monero.dart/lib/monero.dart
+++ b/impls/monero.dart/lib/monero.dart
@@ -570,21 +570,21 @@ String UnsignedTransaction_signUR(
}
@Deprecated("TODO")
-String UnsignedTransaction_commitTrezor(
+String PendingTransaction_commitTrezor(
PendingTransaction ptr, int tx_index) {
- debugStart?.call('MONERO_UnsignedTransaction_commitTrezor');
+ debugStart?.call('MONERO_PendingTransaction_commitTrezor');
lib ??= MoneroC(DynamicLibrary.open(libPath));
- final txid = lib!.MONERO_UnsignedTransaction_commitTrezor(ptr, tx_index);
- debugEnd?.call('MONERO_UnsignedTransaction_commitTrezor');
+ final txid = lib!.MONERO_PendingTransaction_commitTrezor(ptr, tx_index);
+ debugEnd?.call('MONERO_PendingTransaction_commitTrezor');
try {
final strPtr = txid.cast<Utf8>();
final str = strPtr.toDartString();
MONERO_free(strPtr.cast());
- debugEnd?.call('MONERO_UnsignedTransaction_commitTrezor');
+ debugEnd?.call('MONERO_PendingTransaction_commitTrezor');
return str;
} catch (e) {
- errorHandler?.call('MONERO_UnsignedTransaction_commitTrezor', e);
- debugEnd?.call('MONERO_UnsignedTransaction_commitTrezor');
+ errorHandler?.call('MONERO_PendingTransaction_commitTrezor', e);
+ debugEnd?.call('MONERO_PendingTransaction_commitTrezor');
return "";
}
}
diff --git a/impls/monero.dart/lib/src/generated_bindings_monero.g.dart b/impls/monero.dart/lib/src/generated_bindings_monero.g.dart
index adf04da..36736d3 100644
--- a/impls/monero.dart/lib/src/generated_bindings_monero.g.dart
+++ b/impls/monero.dart/lib/src/generated_bindings_monero.g.dart
@@ -88,6 +88,24 @@ class MoneroC {
_MONERO_PendingTransaction_commitURPtr.asFunction<
ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Void>, int)>();
+ ffi.Pointer<ffi.Char> MONERO_PendingTransaction_commitTrezor(
+ ffi.Pointer<ffi.Void> pendingTx_ptr,
+ int tx_index,
+ ) {
+ return _MONERO_PendingTransaction_commitTrezor(
+ pendingTx_ptr,
+ tx_index,
+ );
+ }
+
+ late final _MONERO_PendingTransaction_commitTrezorPtr = _lookup<
+ ffi.NativeFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Void>,
+ ffi.Int)>>('MONERO_PendingTransaction_commitTrezor');
+ late final _MONERO_PendingTransaction_commitTrezor =
+ _MONERO_PendingTransaction_commitTrezorPtr.asFunction<
+ ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Void>, int)>();
+
int MONERO_PendingTransaction_amount(
ffi.Pointer<ffi.Void> pendingTx_ptr,
) {
@@ -484,24 +502,6 @@ class MoneroC {
_MONERO_UnsignedTransaction_signURPtr.asFunction<
ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Void>, int)>();
- ffi.Pointer<ffi.Char> MONERO_UnsignedTransaction_commitTrezor(
- ffi.Pointer<ffi.Void> unsignedTx_ptr,
- int tx_index,
- ) {
- return _MONERO_UnsignedTransaction_commitTrezor(
- unsignedTx_ptr,
- tx_index,
- );
- }
-
- late final _MONERO_UnsignedTransaction_commitTrezorPtr = _lookup<
- ffi.NativeFunction<
- ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Void>,
- ffi.Int)>>('MONERO_UnsignedTransaction_commitTrezor');
- late final _MONERO_UnsignedTransaction_commitTrezor =
- _MONERO_UnsignedTransaction_commitTrezorPtr.asFunction<
- ffi.Pointer<ffi.Char> Function(ffi.Pointer<ffi.Void>, int)>();
-
int MONERO_TransactionInfo_direction(
ffi.Pointer<ffi.Void> txInfo_ptr,
) {
diff --git a/impls/monero.dart/lib/src/monero.dart b/impls/monero.dart/lib/src/monero.dart
index 717d59f..d227bef 100644
--- a/impls/monero.dart/lib/src/monero.dart
+++ b/impls/monero.dart/lib/src/monero.dart
@@ -11,7 +11,7 @@ class Monero implements Wallet2 {
Wallet2WalletManagerFactory walletManagerFactory() {
return MoneroWalletManagerFactory();
}
-
+
@override
int ffiAddress() => 0;
}
@@ -20,48 +20,54 @@ class MoneroAddressBook implements Wallet2AddressBook {
MoneroAddressBook(this.addressBookPtr);
final monero.AddressBook addressBookPtr;
-
+
@override
- bool addRow({required String dstAddr, required String paymentId, required String description}) {
- return monero.AddressBook_addRow(addressBookPtr, dstAddr: dstAddr, paymentId: paymentId, description: description);
+ bool addRow(
+ {required String dstAddr,
+ required String paymentId,
+ required String description}) {
+ return monero.AddressBook_addRow(addressBookPtr,
+ dstAddr: dstAddr, paymentId: paymentId, description: description);
}
-
+
@override
bool deleteRow({required int rowId}) {
return monero.AddressBook_deleteRow(addressBookPtr, rowId: rowId);
}
-
+
@override
int errorCode() {
return monero.AddressBook_errorCode(addressBookPtr);
}
-
+
@override
Wallet2AddressBookRow getAll_byIndex(int index) {
final row = monero.AddressBook_getAll_byIndex(addressBookPtr, index: index);
return MoneroAddressBookRow(row);
}
-
+
@override
int getAll_size() {
return monero.AddressBook_getAll_size(addressBookPtr);
}
-
+
@override
int lookupPaymentID({required String paymentId}) {
- return monero.AddressBook_lookupPaymentID(addressBookPtr, paymentId: paymentId);
+ return monero.AddressBook_lookupPaymentID(addressBookPtr,
+ paymentId: paymentId);
}
-
+
@override
void refresh() {
monero.AddressBook_refresh(addressBookPtr);
}
-
+
@override
bool setDescription({required int rowId, required String description}) {
- return monero.AddressBook_setDescription(addressBookPtr, rowId: rowId, description: description);
+ return monero.AddressBook_setDescription(addressBookPtr,
+ rowId: rowId, description: description);
}
-
+
@override
int ffiAddress() => addressBookPtr.address;
}
@@ -70,27 +76,27 @@ class MoneroAddressBookRow implements Wallet2AddressBookRow {
MoneroAddressBookRow(this.addressBookRowPtr);
final monero.AddressBookRow addressBookRowPtr;
-
+
@override
String extra() {
return monero.AddressBookRow_extra(addressBookRowPtr);
}
-
+
@override
String getAddress() {
return monero.AddressBookRow_getAddress(addressBookRowPtr);
}
-
+
@override
String getDescription() {
return monero.AddressBookRow_getDescription(addressBookRowPtr);
}
-
+
@override
String getPaymentId() {
return monero.AddressBookRow_getPaymentId(addressBookRowPtr);
}
-
+
@override
int getRowId() {
return monero.AddressBookRow_getRowId(addressBookRowPtr);
@@ -104,54 +110,55 @@ class MoneroCoins implements Wallet2Coins {
MoneroCoins(this.coinsPtr);
final monero.Coins coinsPtr;
-
+
@override
Wallet2CoinsInfo coin(int index) {
final coin = monero.Coins_coin(coinsPtr, index);
return MoneroCoinsInfo(coin);
}
-
+
@override
int count() {
return monero.Coins_count(coinsPtr);
}
-
+
@override
Wallet2CoinsInfo getAll_byIndex(int index) {
final coin = monero.Coins_getAll_byIndex(coinsPtr, index);
return MoneroCoinsInfo(coin);
}
-
+
@override
int getAll_size() {
return monero.Coins_getAll_size(coinsPtr);
}
-
+
@override
bool isTransferUnlocked({required int unlockTime, required int blockHeight}) {
- return monero.Coins_isTransferUnlocked(coinsPtr, unlockTime: unlockTime, blockHeight: blockHeight);
+ return monero.Coins_isTransferUnlocked(coinsPtr,
+ unlockTime: unlockTime, blockHeight: blockHeight);
}
-
+
@override
void refresh() {
monero.Coins_refresh(coinsPtr);
}
-
+
@override
void setFrozen({required int index}) {
monero.Coins_setFrozen(coinsPtr, index: index);
}
-
+
@override
void setFrozenByPublicKey({required String publicKey}) {
monero.Coins_setFrozenByPublicKey(coinsPtr, publicKey: publicKey);
}
-
+
@override
void thaw({required int index}) {
monero.Coins_thaw(coinsPtr, index: index);
}
-
+
@override
void thawByPublicKey({required String publicKey}) {
monero.Coins_thawByPublicKey(coinsPtr, publicKey: publicKey);
@@ -165,107 +172,107 @@ class MoneroCoinsInfo implements Wallet2CoinsInfo {
MoneroCoinsInfo(this.coinsInfoPtr);
final monero.CoinsInfo coinsInfoPtr;
-
+
@override
String address() {
return monero.CoinsInfo_address(coinsInfoPtr);
}
-
+
@override
String addressLabel() {
return monero.CoinsInfo_addressLabel(coinsInfoPtr);
}
-
+
@override
int amount() {
return monero.CoinsInfo_amount(coinsInfoPtr);
}
-
+
@override
int blockHeight() {
return monero.CoinsInfo_blockHeight(coinsInfoPtr);
}
-
+
@override
bool coinbase() {
return monero.CoinsInfo_coinbase(coinsInfoPtr);
}
-
+
@override
String description() {
return monero.CoinsInfo_description(coinsInfoPtr);
}
-
+
@override
bool frozen() {
return monero.CoinsInfo_frozen(coinsInfoPtr);
}
-
+
@override
int globalOutputIndex() {
return monero.CoinsInfo_globalOutputIndex(coinsInfoPtr);
}
-
+
@override
String hash() {
return monero.CoinsInfo_hash(coinsInfoPtr);
}
-
+
@override
int internalOutputIndex() {
return monero.CoinsInfo_internalOutputIndex(coinsInfoPtr);
}
-
+
@override
String keyImage() {
return monero.CoinsInfo_keyImage(coinsInfoPtr);
}
-
+
@override
bool keyImageKnown() {
return monero.CoinsInfo_keyImageKnown(coinsInfoPtr);
}
-
+
@override
int pkIndex() {
return monero.CoinsInfo_pkIndex(coinsInfoPtr);
}
-
+
@override
String pubKey() {
return monero.CoinsInfo_pubKey(coinsInfoPtr);
}
-
+
@override
bool rct() {
return monero.CoinsInfo_rct(coinsInfoPtr);
}
-
+
@override
bool spent() {
return monero.CoinsInfo_spent(coinsInfoPtr);
}
-
+
@override
int spentHeight() {
return monero.CoinsInfo_spentHeight(coinsInfoPtr);
}
-
+
@override
int subaddrAccount() {
return monero.CoinsInfo_subaddrAccount(coinsInfoPtr);
}
-
+
@override
int subaddrIndex() {
return monero.CoinsInfo_subaddrIndex(coinsInfoPtr);
}
-
+
@override
int unlockTime() {
return monero.CoinsInfo_unlockTime(coinsInfoPtr);
}
-
+
@override
bool unlocked() {
return monero.CoinsInfo_unlocked(coinsInfoPtr);
@@ -279,12 +286,12 @@ class MoneroDeviceProgress implements Wallet2DeviceProgress {
MoneroDeviceProgress(this.deviceProgressPtr);
final monero.DeviceProgress deviceProgressPtr;
-
+
@override
bool indeterminate() {
return monero.DeviceProgress_indeterminate(deviceProgressPtr);
}
-
+
@override
bool progress() {
return monero.DeviceProgress_progress(deviceProgressPtr);
@@ -298,27 +305,29 @@ class MoneroWalletListener implements Wallet2WalletListener {
MoneroWalletListener(this.walletListenerPtr);
final monero.WalletListener walletListenerPtr;
-
+
@override
int height() {
return monero.MONERO_cw_WalletListener_height(walletListenerPtr);
}
-
+
@override
bool isNeedToRefresh() {
return monero.MONERO_cw_WalletListener_isNeedToRefresh(walletListenerPtr);
}
-
+
@override
bool isNewTransactionExist() {
- return monero.MONERO_cw_WalletListener_isNewTransactionExist(walletListenerPtr);
+ return monero.MONERO_cw_WalletListener_isNewTransactionExist(
+ walletListenerPtr);
}
-
+
@override
void resetIsNewTransactionExist() {
- monero.MONERO_cw_WalletListener_resetIsNewTransactionExist(walletListenerPtr);
+ monero.MONERO_cw_WalletListener_resetIsNewTransactionExist(
+ walletListenerPtr);
}
-
+
@override
void resetNeedToRefresh() {
monero.MONERO_cw_WalletListener_resetNeedToRefresh(walletListenerPtr);
@@ -335,12 +344,12 @@ class MoneroWalletChecksum implements Wallet2Checksum {
String checksum_wallet2_api_c_cpp() {
return monero.MONERO_checksum_wallet2_api_c_cpp();
}
-
+
@override
String checksum_wallet2_api_c_exp() {
return monero.MONERO_checksum_wallet2_api_c_exp();
}
-
+
@override
String checksum_wallet2_api_c_h() {
return monero.MONERO_checksum_wallet2_api_c_h();
@@ -366,22 +375,22 @@ class MoneroMultisigState implements Wallet2MultisigState {
MoneroMultisigState(this.multisigStatePtr);
final monero.MultisigState multisigStatePtr;
-
+
@override
bool isMultisig(Pointer<Void> ptr) {
return monero.MultisigState_isMultisig(multisigStatePtr);
}
-
+
@override
bool isReady(Pointer<Void> ptr) {
return monero.MultisigState_isReady(multisigStatePtr);
}
-
+
@override
int threshold(Pointer<Void> ptr) {
return monero.MultisigState_threshold(multisigStatePtr);
}
-
+
@override
int total(Pointer<Void> ptr) {
return monero.MultisigState_total(multisigStatePtr);
@@ -395,77 +404,82 @@ class MoneroPendingTransaction implements Wallet2PendingTransaction {
MoneroPendingTransaction(this.pendingTransactionPtr);
final monero.PendingTransaction pendingTransactionPtr;
-
+
@override
int amount() {
return monero.PendingTransaction_amount(pendingTransactionPtr);
}
-
+
@override
bool commit({required String filename, required bool overwrite}) {
- return monero.PendingTransaction_commit(pendingTransactionPtr, filename: filename, overwrite: overwrite);
+ return monero.PendingTransaction_commit(pendingTransactionPtr,
+ filename: filename, overwrite: overwrite);
}
-
+
@override
String commitUR(int max_fragment_length) {
- return monero.PendingTransaction_commitUR(pendingTransactionPtr, max_fragment_length);
+ return monero.PendingTransaction_commitUR(
+ pendingTransactionPtr, max_fragment_length);
}
-
+
@override
int dust() {
return monero.PendingTransaction_dust(pendingTransactionPtr);
}
-
+
@override
String errorString() {
return monero.PendingTransaction_errorString(pendingTransactionPtr);
}
-
+
@override
int fee() {
return monero.PendingTransaction_fee(pendingTransactionPtr);
}
-
+
@override
String hex(String separator) {
return monero.PendingTransaction_hex(pendingTransactionPtr, separator);
}
-
+
@override
String multisigSignData() {
return monero.PendingTransaction_multisigSignData(pendingTransactionPtr);
}
-
+
@override
void signMultisigTx() {
monero.PendingTransaction_signMultisigTx(pendingTransactionPtr);
}
-
+
@override
String signersKeys(String separator) {
- return monero.PendingTransaction_signersKeys(pendingTransactionPtr, separator);
+ return monero.PendingTransaction_signersKeys(
+ pendingTransactionPtr, separator);
}
-
+
@override
int status() {
return monero.PendingTransaction_status(pendingTransactionPtr);
}
-
+
@override
String subaddrAccount(String separator) {
- return monero.PendingTransaction_subaddrAccount(pendingTransactionPtr, separator);
+ return monero.PendingTransaction_subaddrAccount(
+ pendingTransactionPtr, separator);
}
-
+
@override
String subaddrIndices(String separator) {
- return monero.PendingTransaction_subaddrIndices(pendingTransactionPtr, separator);
+ return monero.PendingTransaction_subaddrIndices(
+ pendingTransactionPtr, separator);
}
-
+
@override
int txCount() {
return monero.PendingTransaction_txCount(pendingTransactionPtr);
}
-
+
@override
String txid(String separator) {
return monero.PendingTransaction_txid(pendingTransactionPtr, separator);
@@ -479,31 +493,37 @@ class MoneroSubaddress implements Wallet2Subaddress {
MoneroSubaddress(this.subaddressPtr);
final monero.Subaddress subaddressPtr;
-
+
@override
void addRow({required int accountIndex, required String label}) {
- monero.Subaddress_addRow(subaddressPtr, accountIndex: accountIndex, label: label);
+ monero.Subaddress_addRow(subaddressPtr,
+ accountIndex: accountIndex, label: label);
}
-
+
@override
Wallet2SubaddressRow getAll_byIndex(int index) {
final row = monero.Subaddress_getAll_byIndex(subaddressPtr, index: index);
return MoneroSubaddressRow(row);
}
-
+
@override
int getAll_size() {
return monero.Subaddress_getAll_size(subaddressPtr);
}
-
+
@override
void refresh({required int accountIndex, required String label}) {
- monero.Subaddress_refresh(subaddressPtr, accountIndex: accountIndex, label: label);
+ monero.Subaddress_refresh(subaddressPtr,
+ accountIndex: accountIndex, label: label);
}
-
+
@override
- void setLabel({required int accountIndex, required int addressIndex, required String label}) {
- monero.Subaddress_setLabel(subaddressPtr, accountIndex: accountIndex, addressIndex: addressIndex, label: label);
+ void setLabel(
+ {required int accountIndex,
+ required int addressIndex,
+ required String label}) {
+ monero.Subaddress_setLabel(subaddressPtr,
+ accountIndex: accountIndex, addressIndex: addressIndex, label: label);
}
@override
@@ -514,31 +534,33 @@ class MoneroSubaddressAccount implements Wallet2SubaddressAccount {
MoneroSubaddressAccount(this.subaddressAccountPtr);
final monero.SubaddressAccount subaddressAccountPtr;
-
+
@override
void addRow({required String label}) {
monero.SubaddressAccount_addRow(subaddressAccountPtr, label: label);
}
-
+
@override
Wallet2SubaddressAccountRow getAll_byIndex(int index) {
- final row = monero.SubaddressAccount_getAll_byIndex(subaddressAccountPtr, index: index);
+ final row = monero.SubaddressAccount_getAll_byIndex(subaddressAccountPtr,
+ index: index);
return MoneroSubaddressAccountRow(row);
}
-
+
@override
int getAll_size() {
return monero.SubaddressAccount_getAll_size(subaddressAccountPtr);
}
-
+
@override
void refresh() {
monero.SubaddressAccount_refresh(subaddressAccountPtr);
}
-
+
@override
void setLabel({required int accountIndex, required String label}) {
- monero.SubaddressAccount_setLabel(subaddressAccountPtr, accountIndex: accountIndex, label: label);
+ monero.SubaddressAccount_setLabel(subaddressAccountPtr,
+ accountIndex: accountIndex, label: label);
}
@override
@@ -549,35 +571,36 @@ class MoneroSubaddressAccountRow implements Wallet2SubaddressAccountRow {
MoneroSubaddressAccountRow(this.subaddressAccountRowPtr);
final monero.SubaddressAccountRow subaddressAccountRowPtr;
-
+
@override
String extra() {
return monero.SubaddressAccountRow_extra(subaddressAccountRowPtr);
}
-
+
@override
String getAddress() {
return monero.SubaddressAccountRow_getAddress(subaddressAccountRowPtr);
}
-
+
@override
String getBalance() {
return monero.SubaddressAccountRow_getBalance(subaddressAccountRowPtr);
}
-
+
@override
String getLabel() {
return monero.SubaddressAccountRow_getLabel(subaddressAccountRowPtr);
}
-
+
@override
int getRowId() {
return monero.SubaddressAccountRow_getRowId(subaddressAccountRowPtr);
}
-
+
@override
String getUnlockedBalance() {
- return monero.SubaddressAccountRow_getUnlockedBalance(subaddressAccountRowPtr);
+ return monero.SubaddressAccountRow_getUnlockedBalance(
+ subaddressAccountRowPtr);
}
@override
@@ -588,22 +611,22 @@ class MoneroSubaddressRow implements Wallet2SubaddressRow {
MoneroSubaddressRow(this.subaddressRowPtr);
final monero.SubaddressRow subaddressRowPtr;
-
+
@override
String extra() {
return monero.SubaddressRow_extra(subaddressRowPtr);
}
-
+
@override
String getAddress() {
return monero.SubaddressRow_getAddress(subaddressRowPtr);
}
-
+
@override
String getLabel() {
return monero.SubaddressRow_getLabel(subaddressRowPtr);
}
-
+
@override
int getRowId() {
return monero.SubaddressRow_getRowId(subaddressRowPtr);
@@ -617,31 +640,34 @@ class MoneroTransactionHistory implements Wallet2TransactionHistory {
MoneroTransactionHistory(this.transactionHistoryPtr);
final monero.TransactionHistory transactionHistoryPtr;
-
+
@override
int count() {
return monero.TransactionHistory_count(transactionHistoryPtr);
}
-
+
@override
void refresh() {
monero.TransactionHistory_refresh(transactionHistoryPtr);
}
-
+
@override
void setTxNote({required String txid, required String note}) {
- monero.TransactionHistory_setTxNote(transactionHistoryPtr, txid: txid, note: note);
+ monero.TransactionHistory_setTxNote(transactionHistoryPtr,
+ txid: txid, note: note);
}
-
+
@override
Wallet2TransactionInfo transaction(int index) {
- final tx = monero.TransactionHistory_transaction(transactionHistoryPtr, index: index);
+ final tx = monero.TransactionHistory_transaction(transactionHistoryPtr,
+ index: index);
return MoneroTransactionInfo(tx);
}
-
+
@override
Wallet2TransactionInfo transactionById(String txid) {
- final tx = monero.TransactionHistory_transactionById(transactionHistoryPtr, txid: txid);
+ final tx = monero.TransactionHistory_transactionById(transactionHistoryPtr,
+ txid: txid);
return MoneroTransactionInfo(tx);
}
@@ -653,102 +679,102 @@ class MoneroTransactionInfo implements Wallet2TransactionInfo {
MoneroTransactionInfo(this.transactionInfoPtr);
final monero.TransactionInfo transactionInfoPtr;
-
+
@override
int amount() {
return monero.TransactionInfo_amount(transactionInfoPtr);
}
-
+
@override
int blockHeight() {
return monero.TransactionInfo_blockHeight(transactionInfoPtr);
}
-
+
@override
int confirmations() {
return monero.TransactionInfo_confirmations(transactionInfoPtr);
}
-
+
@override
String description() {
return monero.TransactionInfo_description(transactionInfoPtr);
}
-
+
@override
int direction() {
return monero.TransactionInfo_direction(transactionInfoPtr).index;
}
-
+
@override
int fee() {
return monero.TransactionInfo_fee(transactionInfoPtr);
}
-
+
@override
String hash() {
return monero.TransactionInfo_hash(transactionInfoPtr);
}
-
+
@override
bool isCoinbase() {
return monero.TransactionInfo_isCoinbase(transactionInfoPtr);
}
-
+
@override
bool isFailed() {
return monero.TransactionInfo_isFailed(transactionInfoPtr);
}
-
+
@override
bool isPending() {
return monero.TransactionInfo_isPending(transactionInfoPtr);
}
-
+
@override
String label() {
return monero.TransactionInfo_label(transactionInfoPtr);
}
-
+
@override
String paymentId() {
return monero.TransactionInfo_paymentId(transactionInfoPtr);
}
-
+
@override
int subaddrAccount() {
return monero.TransactionInfo_subaddrAccount(transactionInfoPtr);
}
-
+
@override
String subaddrIndex() {
return monero.TransactionInfo_subaddrIndex(transactionInfoPtr);
}
-
+
@override
int timestamp() {
return monero.TransactionInfo_timestamp(transactionInfoPtr);
}
-
+
@override
String transfers_address(int index) {
return monero.TransactionInfo_transfers_address(transactionInfoPtr, index);
}
-
+
@override
int transfers_amount(int index) {
return monero.TransactionInfo_transfers_amount(transactionInfoPtr, index);
}
-
+
@override
int transfers_count() {
return monero.TransactionInfo_transfers_count(transactionInfoPtr);
}
-
+
@override
int unlockTime() {
return monero.TransactionInfo_unlockTime(transactionInfoPtr);
}
-
+
@override
int ffiAddress() => transactionInfoPtr.address;
}
@@ -757,72 +783,70 @@ class MoneroUnsignedTransaction implements Wallet2UnsignedTransaction {
MoneroUnsignedTransaction(this.unsignedTransactionPtr);
final monero.UnsignedTransaction unsignedTransactionPtr;
-
+
@override
String amount() {
return monero.UnsignedTransaction_amount(unsignedTransactionPtr);
}
-
+
@override
String confirmationMessage() {
- return monero.UnsignedTransaction_confirmationMessage(unsignedTransactionPtr);
+ return monero.UnsignedTransaction_confirmationMessage(
+ unsignedTransactionPtr);
}
-
+
@override
String errorString() {
return monero.UnsignedTransaction_errorString(unsignedTransactionPtr);
}
-
+
@override
String fee() {
return monero.UnsignedTransaction_fee(unsignedTransactionPtr);
}
-
+
@override
int minMixinCount() {
return monero.UnsignedTransaction_minMixinCount(unsignedTransactionPtr);
}
-
+
@override
String mixin() {
return monero.UnsignedTransaction_mixin(unsignedTransactionPtr);
}
-
+
@override
String paymentId() {
return monero.UnsignedTransaction_paymentId(unsignedTransactionPtr);
}
-
+
@override
String recipientAddress() {
return monero.UnsignedTransaction_recipientAddress(unsignedTransactionPtr);
}
-
+
@override
bool sign(String signedFileName) {
- return monero.UnsignedTransaction_sign(unsignedTransactionPtr, signedFileName);
+ return monero.UnsignedTransaction_sign(
+ unsignedTransactionPtr, signedFileName);
}
-
+
@override
String signUR(int max_fragment_length) {
- return monero.UnsignedTransaction_signUR(unsignedTransactionPtr, max_fragment_length);
+ return monero.UnsignedTransaction_signUR(
+ unsignedTransactionPtr, max_fragment_length);
}
@override
- String commitTrezor(int tx_index) {
- return monero.UnsignedTransaction_commitTrezor(unsignedTransactionPtr, tx_index);
- }
-
- @override
int status() {
return monero.UnsignedTransaction_status(unsignedTransactionPtr);
}
-
+
@override
int txCount() {
return monero.UnsignedTransaction_txCount(unsignedTransactionPtr);
}
-
+
@override
int ffiAddress() => unsignedTransactionPtr.address;
}
@@ -831,227 +855,273 @@ class MoneroWallet implements Wallet2Wallet {
MoneroWallet(this.walletPtr);
final monero.wallet walletPtr;
-
+
@override
void addSubaddress({required int accountIndex, String label = ""}) {
- monero.Wallet_addSubaddress(walletPtr, accountIndex: accountIndex, label: label);
+ monero.Wallet_addSubaddress(walletPtr,
+ accountIndex: accountIndex, label: label);
}
-
+
@override
void addSubaddressAccount({String label = ""}) {
monero.Wallet_addSubaddressAccount(walletPtr, label: label);
}
-
+
@override
String address({int accountIndex = 0, int addressIndex = 0}) {
- return monero.Wallet_address(walletPtr, accountIndex: accountIndex, addressIndex: addressIndex);
+ return monero.Wallet_address(walletPtr,
+ accountIndex: accountIndex, addressIndex: addressIndex);
}
-
+
@override
Wallet2AddressBook addressBook() {
return MoneroAddressBook(monero.Wallet_addressBook(walletPtr));
}
-
+
@override
bool addressValid(String address, int networkType) {
return monero.Wallet_addressValid(address, networkType);
}
-
+
@override
int amountFromDouble(double amount) {
return monero.Wallet_amountFromDouble(amount);
}
-
+
@override
int amountFromString(String amount) {
return monero.Wallet_amountFromString(amount);
}
-
+
@override
int approximateBlockChainHeight() {
return monero.Wallet_approximateBlockChainHeight(walletPtr);
}
-
+
@override
int autoRefreshInterval() {
return monero.Wallet_autoRefreshInterval(walletPtr);
}
-
+
@override
int balance({required int accountIndex}) {
return monero.Wallet_balance(walletPtr, accountIndex: accountIndex);
}
-
+
@override
int blockChainHeight() {
return monero.Wallet_blockChainHeight(walletPtr);
}
-
+
@override
Wallet2Coins coins() {
return MoneroCoins(monero.Wallet_coins(walletPtr));
}
-
+
@override
int coldKeyImageSync({required int spent, required int unspent}) {
- return monero.Wallet_coldKeyImageSync(walletPtr, spent: spent, unspent: unspent);
+ return monero.Wallet_coldKeyImageSync(walletPtr,
+ spent: spent, unspent: unspent);
}
-
+
@override
bool connectToDaemon() {
return monero.Wallet_connectToDaemon(walletPtr);
}
-
+
@override
int connected() {
return monero.Wallet_connected(walletPtr);
}
-
+
@override
String createPolyseed({String language = "English"}) {
return monero.Wallet_createPolyseed(language: language);
}
-
+
@override
- Wallet2PendingTransaction createTransaction({required String dst_addr, required String payment_id, required int amount, required int mixin_count, required int pendingTransactionPriority, required int subaddr_account, List<String> preferredInputs = const []}) {
- final transaction = monero.Wallet_createTransaction(walletPtr, dst_addr: dst_addr, payment_id: payment_id, amount: amount, mixin_count: mixin_count, pendingTransactionPriority: pendingTransactionPriority, subaddr_account: subaddr_account, preferredInputs: preferredInputs);
+ Wallet2PendingTransaction createTransaction(
+ {required String dst_addr,
+ required String payment_id,
+ required int amount,
+ required int mixin_count,
+ required int pendingTransactionPriority,
+ required int subaddr_account,
+ List<String> preferredInputs = const []}) {
+ final transaction = monero.Wallet_createTransaction(walletPtr,
+ dst_addr: dst_addr,
+ payment_id: payment_id,
+ amount: amount,
+ mixin_count: mixin_count,
+ pendingTransactionPriority: pendingTransactionPriority,
+ subaddr_account: subaddr_account,
+ preferredInputs: preferredInputs);
return MoneroPendingTransaction(transaction);
}
-
+
@override
- Wallet2PendingTransaction createTransactionMultDest({required List<String> dstAddr, String paymentId = "", required bool isSweepAll, required List<int> amounts, required int mixinCount, required int pendingTransactionPriority, required int subaddr_account, List<String> preferredInputs = const []}) {
- final transaction = monero.Wallet_createTransactionMultDest(walletPtr, dstAddr: dstAddr, paymentId: paymentId, isSweepAll: isSweepAll, amounts: amounts, mixinCount: mixinCount, pendingTransactionPriority: pendingTransactionPriority, subaddr_account: subaddr_account, preferredInputs: preferredInputs);
+ Wallet2PendingTransaction createTransactionMultDest(
+ {required List<String> dstAddr,
+ String paymentId = "",
+ required bool isSweepAll,
+ required List<int> amounts,
+ required int mixinCount,
+ required int pendingTransactionPriority,
+ required int subaddr_account,
+ List<String> preferredInputs = const []}) {
+ final transaction = monero.Wallet_createTransactionMultDest(walletPtr,
+ dstAddr: dstAddr,
+ paymentId: paymentId,
+ isSweepAll: isSweepAll,
+ amounts: amounts,
+ mixinCount: mixinCount,
+ pendingTransactionPriority: pendingTransactionPriority,
+ subaddr_account: subaddr_account,
+ preferredInputs: preferredInputs);
return MoneroPendingTransaction(transaction);
}
-
+
@override
- bool createWatchOnly({required String path, required String password, required String language}) {
- return monero.Wallet_createWatchOnly(walletPtr, path: path, password: password, language: language);
+ bool createWatchOnly(
+ {required String path,
+ required String password,
+ required String language}) {
+ return monero.Wallet_createWatchOnly(walletPtr,
+ path: path, password: password, language: language);
}
-
+
@override
int daemonBlockChainHeight() {
return monero.Wallet_daemonBlockChainHeight(walletPtr);
}
-
+
@override
int defaultMixin() {
return monero.Wallet_defaultMixin(walletPtr);
}
-
+
@override
- String deviceShowAddress({required int accountIndex, required int addressIndex}) {
- return monero.Wallet_deviceShowAddress(walletPtr, accountIndex: accountIndex, addressIndex: addressIndex);
+ String deviceShowAddress(
+ {required int accountIndex, required int addressIndex}) {
+ return monero.Wallet_deviceShowAddress(walletPtr,
+ accountIndex: accountIndex, addressIndex: addressIndex);
}
-
+
@override
String displayAmount(int amount) {
return monero.Wallet_displayAmount(amount);
}
-
+
@override
String errorString() {
return monero.Wallet_errorString(walletPtr);
}
-
+
@override
int estimateBlockChainHeight() {
return monero.Wallet_estimateBlockChainHeight(walletPtr);
}
-
+
@override
- String exchangeMultisigKeys({required List<String> info, required bool force_update_use_with_caution}) {
- return monero.Wallet_exchangeMultisigKeys(walletPtr, info: info, force_update_use_with_caution: force_update_use_with_caution);
+ String exchangeMultisigKeys(
+ {required List<String> info,
+ required bool force_update_use_with_caution}) {
+ return monero.Wallet_exchangeMultisigKeys(walletPtr,
+ info: info,
+ force_update_use_with_caution: force_update_use_with_caution);
}
-
+
@override
bool exportKeyImages(String filename, {required bool all}) {
return monero.Wallet_exportKeyImages(walletPtr, filename, all: all);
}
-
+
@override
String exportKeyImagesUR({int max_fragment_length = 130, bool all = false}) {
- return monero.Wallet_exportKeyImagesUR(walletPtr, max_fragment_length: max_fragment_length, all: all);
+ return monero.Wallet_exportKeyImagesUR(walletPtr,
+ max_fragment_length: max_fragment_length, all: all);
}
-
+
@override
List<String> exportMultisigImages({required List<String> info}) {
- return monero.Wallet_exportMultisigImages(walletPtr, info: info, force_update_use_with_caution: false);
+ return monero.Wallet_exportMultisigImages(walletPtr,
+ info: info, force_update_use_with_caution: false);
}
-
+
@override
bool exportOutputs(String filename, {required bool all}) {
return monero.Wallet_exportOutputs(walletPtr, filename, all: all);
}
-
+
@override
String exportOutputsUR({int max_fragment_length = 130, bool all = false}) {
- return monero.Wallet_exportOutputsUR(walletPtr, max_fragment_length: max_fragment_length, all: all);
+ return monero.Wallet_exportOutputsUR(walletPtr,
+ max_fragment_length: max_fragment_length, all: all);
}
-
+
@override
String filename() {
return monero.Wallet_filename(walletPtr);
}
-
+
@override
String genPaymentId() {
return monero.Wallet_genPaymentId();
}
-
+
@override
int getBackgroundSyncType() {
return monero.Wallet_getBackgroundSyncType(walletPtr);
}
-
+
@override
int getBytesReceived() {
return monero.Wallet_getBytesReceived(walletPtr);
}
-
+
@override
int getBytesSent() {
throw UnimplementedError();
}
-
+
@override
String getCacheAttribute({required String key}) {
return monero.Wallet_getCacheAttribute(walletPtr, key: key);
}
-
+
@override
int getDeviceType() {
return monero.Wallet_getDeviceType(walletPtr);
}
-
+
@override
String getMultisigInfo() {
return monero.Wallet_getMultisigInfo(walletPtr);
}
-
+
@override
String getPassword() {
return monero.Wallet_getPassword(walletPtr);
}
-
+
@override
String getPolyseed({required String passphrase}) {
return monero.Wallet_getPolyseed(walletPtr, passphrase: passphrase);
}
-
+
static Pointer<UnsignedChar> getReceivedFromDevice() {
return monero.Wallet_getReceivedFromDevice();
}
-
+
static int getReceivedFromDeviceLength() {
return monero.Wallet_getReceivedFromDeviceLength();
}
-
+
@override
int getRefreshFromBlockHeight() {
return monero.Wallet_getRefreshFromBlockHeight(walletPtr);
}
-
+
@override
String getSeedLanguage() {
return monero.Wallet_getSeedLanguage(walletPtr);
@@ -1060,464 +1130,530 @@ class MoneroWallet implements Wallet2Wallet {
static Pointer<UnsignedChar> getSendToDevice() {
return monero.Wallet_getSendToDevice();
}
-
+
static int getSendToDeviceLength() {
return monero.Wallet_getSendToDeviceLength();
}
-
+
static bool getStateIsConnected() {
return monero.Wallet_getStateIsConnected();
}
-
+
@override
- String getSubaddressLabel({required int accountIndex, required int addressIndex}) {
- return monero.Wallet_getSubaddressLabel(walletPtr, accountIndex: accountIndex, addressIndex: addressIndex);
+ String getSubaddressLabel(
+ {required int accountIndex, required int addressIndex}) {
+ return monero.Wallet_getSubaddressLabel(walletPtr,
+ accountIndex: accountIndex, addressIndex: addressIndex);
}
-
+
@override
String getTxKey({required String txid}) {
return monero.Wallet_getTxKey(walletPtr, txid: txid);
}
-
+
@override
String getUserNote({required String txid}) {
return monero.Wallet_getUserNote(walletPtr, txid: txid);
}
-
+
static bool getWaitsForDeviceReceive() {
return monero.Wallet_getWaitsForDeviceReceive();
}
-
+
static bool getWaitsForDeviceSend() {
return monero.Wallet_getWaitsForDeviceSend();
}
-
+
@override
Wallet2WalletListener getWalletListener() {
final listener = monero.MONERO_cw_getWalletListener(walletPtr);
return MoneroWalletListener(listener);
}
-
+
@override
int hasMultisigPartialKeyImages() {
return monero.Wallet_hasMultisigPartialKeyImages(walletPtr);
}
-
+
@override
bool hasUnknownKeyImages() {
return monero.Wallet_hasUnknownKeyImages(walletPtr);
}
-
+
@override
Wallet2TransactionHistory history() {
return MoneroTransactionHistory(monero.Wallet_history(walletPtr));
}
-
+
@override
bool importKeyImages(String filename) {
return monero.Wallet_importKeyImages(walletPtr, filename);
}
-
+
@override
bool importKeyImagesUR(String input) {
return monero.Wallet_importKeyImagesUR(walletPtr, input);
}
-
+
@override
int importMultisigImages({required List<String> info}) {
return monero.Wallet_importMultisigImages(walletPtr, info: info);
}
-
+
@override
bool importOutputs(String filename) {
return monero.Wallet_importOutputs(walletPtr, filename);
}
-
+
@override
bool importOutputsUR(String input) {
return monero.Wallet_importOutputsUR(walletPtr, input);
}
-
+
@override
- bool init({required String daemonAddress, int upperTransacationSizeLimit = 0, String daemonUsername = "", String daemonPassword = "", bool useSsl = false, bool lightWallet = false, String proxyAddress = ""}) {
- return monero.Wallet_init(walletPtr, daemonAddress: daemonAddress, upperTransacationSizeLimit: upperTransacationSizeLimit, daemonUsername: daemonUsername, daemonPassword: daemonPassword, useSsl: useSsl, lightWallet: lightWallet, proxyAddress: proxyAddress);
+ bool init(
+ {required String daemonAddress,
+ int upperTransacationSizeLimit = 0,
+ String daemonUsername = "",
+ String daemonPassword = "",
+ bool useSsl = false,
+ bool lightWallet = false,
+ String proxyAddress = ""}) {
+ return monero.Wallet_init(walletPtr,
+ daemonAddress: daemonAddress,
+ upperTransacationSizeLimit: upperTransacationSizeLimit,
+ daemonUsername: daemonUsername,
+ daemonPassword: daemonPassword,
+ useSsl: useSsl,
+ lightWallet: lightWallet,
+ proxyAddress: proxyAddress);
}
-
+
@override
- void init3({required String argv0, required String defaultLogBaseName, required String logPath, required bool console}) {
- return monero.Wallet_init3(walletPtr, argv0: argv0, defaultLogBaseName: defaultLogBaseName, logPath: logPath, console: console);
+ void init3(
+ {required String argv0,
+ required String defaultLogBaseName,
+ required String logPath,
+ required bool console}) {
+ return monero.Wallet_init3(walletPtr,
+ argv0: argv0,
+ defaultLogBaseName: defaultLogBaseName,
+ logPath: logPath,
+ console: console);
}
-
+
@override
String integratedAddress({required String paymentId}) {
return monero.Wallet_integratedAddress(walletPtr, paymentId: paymentId);
}
-
+
@override
bool isBackgroundSyncing() {
return monero.Wallet_isBackgroundSyncing(walletPtr);
}
-
+
@override
bool isBackgroundWallet() {
return monero.Wallet_isBackgroundWallet(walletPtr);
}
-
+
@override
bool isKeysFileLocked() {
return monero.Wallet_isKeysFileLocked(walletPtr);
}
-
+
@override
bool isOffline() {
return monero.Wallet_isOffline(walletPtr);
}
-
+
@override
void keyReuseMitigation2({required bool mitigation}) {
monero.Wallet_keyReuseMitigation2(walletPtr, mitigation: mitigation);
}
-
+
@override
- bool keyValid({required String secret_key_string, required String address_string, required bool isViewKey, required int nettype}) {
- return monero.Wallet_keyValid(secret_key_string: secret_key_string, address_string: address_string, isViewKey: isViewKey, nettype: nettype);
+ bool keyValid(
+ {required String secret_key_string,
+ required String address_string,
+ required bool isViewKey,
+ required int nettype}) {
+ return monero.Wallet_keyValid(
+ secret_key_string: secret_key_string,
+ address_string: address_string,
+ isViewKey: isViewKey,
+ nettype: nettype);
}
-
+
@override
- String keyValid_error({required String secret_key_string, required String address_string, required bool isViewKey, required int nettype}) {
- return monero.Wallet_keyValid_error(secret_key_string: secret_key_string, address_string: address_string, isViewKey: isViewKey, nettype: nettype);
+ String keyValid_error(
+ {required String secret_key_string,
+ required String address_string,
+ required bool isViewKey,
+ required int nettype}) {
+ return monero.Wallet_keyValid_error(
+ secret_key_string: secret_key_string,
+ address_string: address_string,
+ isViewKey: isViewKey,
+ nettype: nettype);
}
-
+
@override
String keysFilename() {
return monero.Wallet_keysFilename(walletPtr);
}
-
+
@override
- Wallet2UnsignedTransaction loadUnsignedTx({required String unsigned_filename}) {
- final tx = monero.Wallet_loadUnsignedTx(walletPtr, unsigned_filename: unsigned_filename);
+ Wallet2UnsignedTransaction loadUnsignedTx(
+ {required String unsigned_filename}) {
+ final tx = monero.Wallet_loadUnsignedTx(walletPtr,
+ unsigned_filename: unsigned_filename);
return MoneroUnsignedTransaction(tx);
}
-
+
@override
Wallet2UnsignedTransaction loadUnsignedTxUR({required String input}) {
final tx = monero.Wallet_loadUnsignedTxUR(walletPtr, input: input);
return MoneroUnsignedTransaction(tx);
}
-
+
@override
bool lockKeysFile() {
return monero.Wallet_lockKeysFile(walletPtr);
}
-
+
@override
String makeMultisig({required List<String> info, required int threshold}) {
- return monero.Wallet_makeMultisig(walletPtr, info: info, threshold: threshold);
+ return monero.Wallet_makeMultisig(walletPtr,
+ info: info, threshold: threshold);
}
-
+
@override
int maximumAllowedAmount() {
return monero.Wallet_maximumAllowedAmount();
}
-
+
@override
Wallet2MultisigState multisig() {
return MoneroMultisigState(monero.Wallet_multisig(walletPtr));
}
-
+
@override
int nettype() {
return monero.Wallet_nettype(walletPtr);
}
-
+
@override
int numSubaddressAccounts() {
return monero.Wallet_numSubaddressAccounts(walletPtr);
}
-
+
@override
int numSubaddresses({required int accountIndex}) {
return monero.Wallet_numSubaddresses(walletPtr, accountIndex: accountIndex);
}
-
+
@override
String path() {
return monero.Wallet_path(walletPtr);
}
-
+
@override
void pauseRefresh() {
monero.Wallet_pauseRefresh(walletPtr);
}
-
+
@override
String paymentIdFromAddress({required String strarg, required int nettype}) {
return monero.Wallet_paymentIdFromAddress(nettype: nettype, strarg: strarg);
}
-
+
@override
bool paymentIdValid(String paymentId) {
return monero.Wallet_paymentIdValid(paymentId);
}
-
+
@override
String publicMultisigSignerKey() {
return monero.Wallet_publicMultisigSignerKey(walletPtr);
}
-
+
@override
String publicSpendKey() {
return monero.Wallet_publicSpendKey(walletPtr);
}
-
+
@override
String publicViewKey() {
return monero.Wallet_publicViewKey(walletPtr);
}
-
+
@override
bool reconnectDevice() {
return monero.Wallet_reconnectDevice(walletPtr);
}
-
+
@override
bool refresh() {
return monero.Wallet_refresh(walletPtr);
}
-
+
@override
void refreshAsync() {
monero.Wallet_refreshAsync(walletPtr);
}
-
+
@override
bool rescanBlockchain() {
return monero.Wallet_rescanBlockchain(walletPtr);
}
-
+
@override
void rescanBlockchainAsync() {
monero.Wallet_rescanBlockchainAsync(walletPtr);
}
-
+
@override
bool rescanSpent() {
return monero.Wallet_rescanSpent(walletPtr);
}
-
+
@override
- Wallet2PendingTransaction restoreMultisigTransaction({required String signData}) {
- final tx = monero.Wallet_restoreMultisigTransaction(walletPtr, signData: signData);
+ Wallet2PendingTransaction restoreMultisigTransaction(
+ {required String signData}) {
+ final tx =
+ monero.Wallet_restoreMultisigTransaction(walletPtr, signData: signData);
return MoneroPendingTransaction(tx);
}
-
+
@override
String secretSpendKey() {
return monero.Wallet_secretSpendKey(walletPtr);
}
-
+
@override
String secretViewKey() {
return monero.Wallet_secretViewKey(walletPtr);
}
-
+
@override
String seed({required String seedOffset}) {
return monero.Wallet_seed(walletPtr, seedOffset: seedOffset);
}
-
+
@override
void segregatePreForkOutputs({required bool segregate}) {
monero.Wallet_segregatePreForkOutputs(walletPtr, segregate: segregate);
}
-
+
@override
void segregationHeight({required int height}) {
monero.Wallet_segregationHeight(walletPtr, height: height);
}
-
+
@override
void setAutoRefreshInterval({required int millis}) {
monero.Wallet_setAutoRefreshInterval(walletPtr, millis: millis);
}
-
+
@override
bool setCacheAttribute({required String key, required String value}) {
return monero.Wallet_setCacheAttribute(walletPtr, key: key, value: value);
}
-
+
@override
void setDefaultMixin(int arg) {
monero.Wallet_setDefaultMixin(walletPtr, arg);
}
-
+
@override
bool setDevicePin({required String passphrase}) {
return monero.Wallet_setDevicePin(walletPtr, passphrase: passphrase);
}
-
+
static void setDeviceReceivedData(Pointer<UnsignedChar> data, int len) {
monero.Wallet_setDeviceReceivedData(data, len);
}
-
+
static void setDeviceSendData(Pointer<UnsignedChar> data, int len) {
monero.Wallet_setDeviceSendData(data, len);
}
- static void setLedgerCallback(Pointer<NativeFunction<Void Function(Pointer<UnsignedChar>, UnsignedInt)>> callback) {
+ static void setLedgerCallback(
+ Pointer<NativeFunction<Void Function(Pointer<UnsignedChar>, UnsignedInt)>>
+ callback) {
monero.Wallet_setLedgerCallback(callback);
}
-
+
@override
void setOffline({required bool offline}) {
monero.Wallet_setOffline(walletPtr, offline: offline);
}
-
+
@override
bool setPassword({required String password}) {
return monero.Wallet_setPassword(walletPtr, password: password);
}
-
+
@override
void setProxy({required String address}) {
monero.Wallet_setProxy(walletPtr, address: address);
}
-
+
@override
void setRecoveringFromDevice({required bool recoveringFromDevice}) {
- monero.Wallet_setRecoveringFromDevice(walletPtr, recoveringFromDevice: recoveringFromDevice);
+ monero.Wallet_setRecoveringFromDevice(walletPtr,
+ recoveringFromDevice: recoveringFromDevice);
}
-
+
@override
void setRecoveringFromSeed({required bool recoveringFromSeed}) {
- monero.Wallet_setRecoveringFromSeed(walletPtr, recoveringFromSeed: recoveringFromSeed);
+ monero.Wallet_setRecoveringFromSeed(walletPtr,
+ recoveringFromSeed: recoveringFromSeed);
}
-
+
@override
void setRefreshFromBlockHeight({required int refresh_from_block_height}) {
- monero.Wallet_setRefreshFromBlockHeight(walletPtr, refresh_from_block_height: refresh_from_block_height);
+ monero.Wallet_setRefreshFromBlockHeight(walletPtr,
+ refresh_from_block_height: refresh_from_block_height);
}
-
+
@override
void setSeedLanguage({required String language}) {
monero.Wallet_setSeedLanguage(walletPtr, language: language);
}
-
+
@override
- void setSubaddressLabel({required int accountIndex, required int addressIndex, required String label}) {
- monero.Wallet_setSubaddressLabel(walletPtr, accountIndex: accountIndex, addressIndex: addressIndex, label: label);
+ void setSubaddressLabel(
+ {required int accountIndex,
+ required int addressIndex,
+ required String label}) {
+ monero.Wallet_setSubaddressLabel(walletPtr,
+ accountIndex: accountIndex, addressIndex: addressIndex, label: label);
}
-
+
@override
void setSubaddressLookahead({required int major, required int minor}) {
monero.Wallet_setSubaddressLookahead(walletPtr, major: major, minor: minor);
}
-
+
@override
void setTrustedDaemon({required bool arg}) {
monero.Wallet_setTrustedDaemon(walletPtr, arg: arg);
}
-
+
@override
bool setUserNote({required String txid, required String note}) {
return monero.Wallet_setUserNote(walletPtr, txid: txid, note: note);
}
-
+
@override
- bool setupBackgroundSync({required int backgroundSyncType, required String walletPassword, required String backgroundCachePassword}) {
- return monero.Wallet_setupBackgroundSync(walletPtr, backgroundSyncType: backgroundSyncType, walletPassword: walletPassword, backgroundCachePassword: backgroundCachePassword);
+ bool setupBackgroundSync(
+ {required int backgroundSyncType,
+ required String walletPassword,
+ required String backgroundCachePassword}) {
+ return monero.Wallet_setupBackgroundSync(walletPtr,
+ backgroundSyncType: backgroundSyncType,
+ walletPassword: walletPassword,
+ backgroundCachePassword: backgroundCachePassword);
}
-
+
@override
String signMessage({required String message, required String address}) {
- return monero.Wallet_signMessage(walletPtr, message: message, address: address);
+ return monero.Wallet_signMessage(walletPtr,
+ message: message, address: address);
}
-
+
@override
bool startBackgroundSync() {
return monero.Wallet_startBackgroundSync(walletPtr);
}
-
+
@override
void startRefresh() {
monero.Wallet_startRefresh(walletPtr);
}
-
+
@override
int status() {
return monero.Wallet_status(walletPtr);
}
-
+
@override
void stop() {
monero.Wallet_stop(walletPtr);
}
-
+
@override
bool stopBackgroundSync(String walletPassword) {
return monero.Wallet_stopBackgroundSync(walletPtr, walletPassword);
}
-
+
@override
bool store({String path = ""}) {
return monero.Wallet_store(walletPtr, path: path);
}
-
+
@override
Wallet2Subaddress subaddress() {
return MoneroSubaddress(monero.Wallet_subaddress(walletPtr));
}
-
+
@override
Wallet2SubaddressAccount subaddressAccount() {
return MoneroSubaddressAccount(monero.Wallet_subaddressAccount(walletPtr));
}
-
+
@override
bool submitTransaction(String filename) {
return monero.Wallet_submitTransaction(walletPtr, filename);
}
-
+
@override
bool submitTransactionUR(String input) {
return monero.Wallet_submitTransactionUR(walletPtr, input);
}
-
+
@override
bool synchronized() {
return monero.Wallet_synchronized(walletPtr);
}
-
+
@override
bool trustedDaemon() {
return monero.Wallet_trustedDaemon(walletPtr);
}
-
+
@override
bool unlockKeysFile() {
return monero.Wallet_unlockKeysFile(walletPtr);
}
-
+
@override
int unlockedBalance({required int accountIndex}) {
return monero.Wallet_unlockedBalance(walletPtr, accountIndex: accountIndex);
}
-
+
@override
int useForkRules({required int version, required int earlyBlocks}) {
- return monero.Wallet_useForkRules(walletPtr, version: version, earlyBlocks: earlyBlocks);
+ return monero.Wallet_useForkRules(walletPtr,
+ version: version, earlyBlocks: earlyBlocks);
}
-
+
@override
- bool verifySignedMessage({required String message, required String address, required String signature}) {
- return monero.Wallet_verifySignedMessage(walletPtr, message: message, address: address, signature: signature);
+ bool verifySignedMessage(
+ {required String message,
+ required String address,
+ required String signature}) {
+ return monero.Wallet_verifySignedMessage(walletPtr,
+ message: message, address: address, signature: signature);
}
-
+
@override
int viewOnlyBalance({required int accountIndex}) {
return monero.Wallet_viewOnlyBalance(walletPtr, accountIndex: accountIndex);
}
-
+
@override
bool watchOnly() {
return monero.Wallet_watchOnly(walletPtr);
@@ -1528,7 +1664,7 @@ class MoneroWallet implements Wallet2Wallet {
final l = parseTrezorTdis(res);
return l;
}
-
+
@override
int ffiAddress() => walletPtr.address;
}
@@ -1553,8 +1689,8 @@ class TrezorTdi {
factory TrezorTdi.fromJson(Map<String, dynamic> j) => TrezorTdi(
outKey: j['out_key'] as String,
txPubKey: j['tx_pub_key'] as String,
- additionalTxPubKeys: (j['additional_tx_pub_keys'] as List?)
- ?.cast<String>(),
+ additionalTxPubKeys:
+ (j['additional_tx_pub_keys'] as List?)?.cast<String>(),
internalOutputIndex: (j['internal_output_index'] as num).toInt(),
subAddrMajor: (j['sub_addr_major'] as num).toInt(),
subAddrMinor: (j['sub_addr_minor'] as num).toInt(),
@@ -1572,124 +1708,233 @@ class MoneroWalletManager implements Wallet2WalletManager {
MoneroWalletManager(this.wmPtr);
final monero.WalletManager wmPtr;
-
+
@override
Future<int> blockTarget() async {
return monero.WalletManager_blockTarget(wmPtr);
}
-
+
@override
Future<int> blockchainHeight() async {
return monero.WalletManager_blockchainHeight(wmPtr);
}
-
+
@override
Future<int> blockchainTargetHeight() async {
return monero.WalletManager_blockchainTargetHeight(wmPtr);
}
-
+
@override
- Wallet2Wallet createDeterministicWalletFromSpendKey({required String path, required String password, String language = "English", int networkType = 0, required String spendKeyString, required bool newWallet, required int restoreHeight, int kdfRounds = 1}) {
- final wallet = monero.WalletManager_createDeterministicWalletFromSpendKey(wmPtr, path: path, password: password, language: language, networkType: networkType, spendKeyString: spendKeyString, newWallet: newWallet, restoreHeight: restoreHeight, kdfRounds: kdfRounds);
+ Wallet2Wallet createDeterministicWalletFromSpendKey(
+ {required String path,
+ required String password,
+ String language = "English",
+ int networkType = 0,
+ required String spendKeyString,
+ required bool newWallet,
+ required int restoreHeight,
+ int kdfRounds = 1}) {
+ final wallet = monero.WalletManager_createDeterministicWalletFromSpendKey(
+ wmPtr,
+ path: path,
+ password: password,
+ language: language,
+ networkType: networkType,
+ spendKeyString: spendKeyString,
+ newWallet: newWallet,
+ restoreHeight: restoreHeight,
+ kdfRounds: kdfRounds);
return MoneroWallet(wallet);
}
-
+
@override
- Wallet2Wallet createWallet({required String path, required String password, String language = "English", int networkType = 0}) {
- final wallet = monero.WalletManager_createWallet(wmPtr, path: path, password: password, language: language, networkType: networkType);
+ Wallet2Wallet createWallet(
+ {required String path,
+ required String password,
+ String language = "English",
+ int networkType = 0}) {
+ final wallet = monero.WalletManager_createWallet(wmPtr,
+ path: path,
+ password: password,
+ language: language,
+ networkType: networkType);
return MoneroWallet(wallet);
}
-
+
@override
- Wallet2Wallet createWalletFromDevice({required String path, required String password, int networkType = 0, required String deviceName, int restoreHeight = 0, String subaddressLookahead = "", int kdfRounds = 1}) {
- final wallet = monero.WalletManager_createWalletFromDevice(wmPtr, path: path, password: password, deviceName: deviceName, restoreHeight: restoreHeight, subaddressLookahead: subaddressLookahead, kdfRounds: kdfRounds);
+ Wallet2Wallet createWalletFromDevice(
+ {required String path,
+ required String password,
+ int networkType = 0,
+ required String deviceName,
+ int restoreHeight = 0,
+ String subaddressLookahead = "",
+ int kdfRounds = 1}) {
+ final wallet = monero.WalletManager_createWalletFromDevice(wmPtr,
+ path: path,
+ password: password,
+ deviceName: deviceName,
+ restoreHeight: restoreHeight,
+ subaddressLookahead: subaddressLookahead,
+ kdfRounds: kdfRounds);
return MoneroWallet(wallet);
}
-
+
@override
- Wallet2Wallet createWalletFromKeys({required String path, required String password, String language = "English", int nettype = 1, required int restoreHeight, required String addressString, required String viewKeyString, required String spendKeyString, int kdf_rounds = 1}) {
- final wallet = monero.WalletManager_createWalletFromKeys(wmPtr, path: path, password: password, language: language, nettype: nettype, restoreHeight: restoreHeight, addressString: addressString, viewKeyString: viewKeyString, spendKeyString: spendKeyString);
+ Wallet2Wallet createWalletFromKeys(
+ {required String path,
+ required String password,
+ String language = "English",
+ int nettype = 1,
+ required int restoreHeight,
+ required String addressString,
+ required String viewKeyString,
+ required String spendKeyString,
+ int kdf_rounds = 1}) {
+ final wallet = monero.WalletManager_createWalletFromKeys(wmPtr,
+ path: path,
+ password: password,
+ language: language,
+ nettype: nettype,
+ restoreHeight: restoreHeight,
+ addressString: addressString,
+ viewKeyString: viewKeyString,
+ spendKeyString: spendKeyString);
return MoneroWallet(wallet);
}
-
+
@override
- Wallet2Wallet createWalletFromPolyseed({required String path, required String password, int networkType = 0, required String mnemonic, required String seedOffset, required bool newWallet, required int restoreHeight, required int kdfRounds}) {
- final wallet = monero.WalletManager_createWalletFromPolyseed(wmPtr, path: path, password: password, networkType: networkType, mnemonic: mnemonic, seedOffset: seedOffset, newWallet: newWallet, restoreHeight: restoreHeight, kdfRounds: kdfRounds);
+ Wallet2Wallet createWalletFromPolyseed(
+ {required String path,
+ required String password,
+ int networkType = 0,
+ required String mnemonic,
+ required String seedOffset,
+ required bool newWallet,
+ required int restoreHeight,
+ required int kdfRounds}) {
+ final wallet = monero.WalletManager_createWalletFromPolyseed(wmPtr,
+ path: path,
+ password: password,
+ networkType: networkType,
+ mnemonic: mnemonic,
+ seedOffset: seedOffset,
+ newWallet: newWallet,
+ restoreHeight: restoreHeight,
+ kdfRounds: kdfRounds);
return MoneroWallet(wallet);
}
-
+
@override
String errorString() {
return monero.WalletManager_errorString(wmPtr);
}
-
+
@override
List<String> findWallets({required String path}) {
return monero.WalletManager_findWallets(wmPtr, path: path);
}
-
+
@override
bool isMining() {
return monero.WalletManager_isMining(wmPtr);
}
-
+
@override
double miningHashRate() {
return monero.WalletManager_miningHashRate(wmPtr);
}
-
+
@override
int networkDifficulty() {
return monero.WalletManager_networkDifficulty(wmPtr);
}
-
+
@override
- Wallet2Wallet openWallet({required String path, required String password, int networkType = 0}) {
- final wallet = monero.WalletManager_openWallet(wmPtr, path: path, password: password, networkType: networkType);
+ Wallet2Wallet openWallet(
+ {required String path, required String password, int networkType = 0}) {
+ final wallet = monero.WalletManager_openWallet(wmPtr,
+ path: path, password: password, networkType: networkType);
return MoneroWallet(wallet);
}
-
- @override
- int queryWalletDevice({required String keysFileName, required String password, required int kdfRounds}) {
- return monero.WalletManager_queryWalletDevice(wmPtr, keysFileName: keysFileName, password: password, kdfRounds: kdfRounds);
- }
-
+
@override
- Wallet2Wallet recoveryWallet({required String path, required String password, required String mnemonic, int networkType = 0, required int restoreHeight, int kdfRounds = 0, required String seedOffset}) {
- final wallet = monero.WalletManager_recoveryWallet(wmPtr, path: path, password: password, mnemonic: mnemonic, networkType: networkType, restoreHeight: restoreHeight, kdfRounds: kdfRounds, seedOffset: seedOffset);
+ int queryWalletDevice(
+ {required String keysFileName,
+ required String password,
+ required int kdfRounds}) {
+ return monero.WalletManager_queryWalletDevice(wmPtr,
+ keysFileName: keysFileName, password: password, kdfRounds: kdfRounds);
+ }
+
+ @override
+ Wallet2Wallet recoveryWallet(
+ {required String path,
+ required String password,
+ required String mnemonic,
+ int networkType = 0,
+ required int restoreHeight,
+ int kdfRounds = 0,
+ required String seedOffset}) {
+ final wallet = monero.WalletManager_recoveryWallet(wmPtr,
+ path: path,
+ password: password,
+ mnemonic: mnemonic,
+ networkType: networkType,
+ restoreHeight: restoreHeight,
+ kdfRounds: kdfRounds,
+ seedOffset: seedOffset);
return MoneroWallet(wallet);
}
-
+
@override
- String resolveOpenAlias({required String address, required bool dnssecValid}) {
- return monero.WalletManager_resolveOpenAlias(wmPtr, address: address, dnssecValid: dnssecValid);
+ String resolveOpenAlias(
+ {required String address, required bool dnssecValid}) {
+ return monero.WalletManager_resolveOpenAlias(wmPtr,
+ address: address, dnssecValid: dnssecValid);
}
-
+
@override
void setDaemonAddress(String address) {
monero.WalletManager_setDaemonAddress(wmPtr, address);
}
-
+
@override
bool setProxy(String address) {
return monero.WalletManager_setProxy(wmPtr, address);
}
-
+
@override
- bool startMining({required String address, required int threads, required bool backgroundMining, required bool ignoreBattery}) {
- return monero.WalletManager_startMining(wmPtr, address: address, threads: threads, backgroundMining: backgroundMining, ignoreBattery: ignoreBattery);
+ bool startMining(
+ {required String address,
+ required int threads,
+ required bool backgroundMining,
+ required bool ignoreBattery}) {
+ return monero.WalletManager_startMining(wmPtr,
+ address: address,
+ threads: threads,
+ backgroundMining: backgroundMining,
+ ignoreBattery: ignoreBattery);
}
-
+
@override
bool stopMining(String address) {
return monero.WalletManager_stopMining(wmPtr, address);
}
-
+
@override
- bool verifyWalletPassword({required String keysFileName, required String password, required bool noSpendKey, required int kdfRounds}) {
- return monero.WalletManager_verifyWalletPassword(wmPtr, keysFileName: keysFileName, password: password, noSpendKey: noSpendKey, kdfRounds: kdfRounds);
+ bool verifyWalletPassword(
+ {required String keysFileName,
+ required String password,
+ required bool noSpendKey,
+ required int kdfRounds}) {
+ return monero.WalletManager_verifyWalletPassword(wmPtr,
+ keysFileName: keysFileName,
+ password: password,
+ noSpendKey: noSpendKey,
+ kdfRounds: kdfRounds);
}
-
+
@override
bool walletExists(String path) {
return monero.WalletManager_walletExists(wmPtr, path);
@@ -1697,10 +1942,11 @@ class MoneroWalletManager implements Wallet2WalletManager {
@override
int ffiAddress() => wmPtr.address;
-
+
@override
void closeWallet(Wallet2Wallet wallet, bool store) {
- monero.WalletManager_closeWallet(wmPtr, Pointer.fromAddress(wallet.ffiAddress()), store);
+ monero.WalletManager_closeWallet(
+ wmPtr, Pointer.fromAddress(wallet.ffiAddress()), store);
}
}
diff --git a/impls/monero.dart/lib/src/wallet2.dart b/impls/monero.dart/lib/src/wallet2.dart
index 655862d..309621d 100644
--- a/impls/monero.dart/lib/src/wallet2.dart
+++ b/impls/monero.dart/lib/src/wallet2.dart
@@ -2,9 +2,10 @@
import 'dart:ffi';
import 'dart:io';
+
abstract class Wallet2 {
Wallet2WalletManagerFactory walletManagerFactory();
-
+
static String get libPath {
if (Platform.isWindows) return 'unknown_libwallet2_api_c.dll';
if (Platform.isMacOS) return 'unknown_libwallet2_api_c.dylib';
@@ -12,10 +13,12 @@ abstract class Wallet2 {
if (Platform.isAndroid) return 'libunknown_libwallet2_api_c.so';
return 'unknown_libwallet2_api_c.so';
}
+
static set libPath(String path) {
- throw Exception('libPath is read-only, as isolates cannot be made aware of changes to this variable');
+ throw Exception(
+ 'libPath is read-only, as isolates cannot be made aware of changes to this variable');
}
-
+
int ffiAddress();
}
@@ -24,9 +27,16 @@ abstract class Wallet2AddressBook {
int getAll_size();
Wallet2AddressBookRow getAll_byIndex(int index);
- bool addRow({required String dstAddr, required String paymentId, required String description, });
+ bool addRow({
+ required String dstAddr,
+ required String paymentId,
+ required String description,
+ });
bool deleteRow({required int rowId});
- bool setDescription({required int rowId, required String description, });
+ bool setDescription({
+ required int rowId,
+ required String description,
+ });
void refresh();
int errorCode();
int lookupPaymentID({required String paymentId});
@@ -149,7 +159,10 @@ abstract class Wallet2Subaddress {
int getAll_size();
Wallet2SubaddressRow getAll_byIndex(int index);
void addRow({required int accountIndex, required String label});
- void setLabel({required int accountIndex, required int addressIndex, required String label});
+ void setLabel(
+ {required int accountIndex,
+ required int addressIndex,
+ required String label});
void refresh({required int accountIndex, required String label});
}
@@ -232,7 +245,6 @@ abstract class Wallet2UnsignedTransaction {
int txCount();
bool sign(String signedFileName);
String signUR(int max_fragment_length);
- String commitTrezor(int tx_index);
}
abstract class Wallet2Wallet {
@@ -249,7 +261,10 @@ abstract class Wallet2Wallet {
String address({int accountIndex = 0, int addressIndex = 0});
String path();
int nettype();
- int useForkRules({required int version, required int earlyBlocks, });
+ int useForkRules({
+ required int version,
+ required int earlyBlocks,
+ });
String integratedAddress({required String paymentId});
String secretViewKey();
String publicViewKey();
@@ -260,8 +275,20 @@ abstract class Wallet2Wallet {
bool store({String path = ""});
String filename();
String keysFilename();
- bool init({ required String daemonAddress, int upperTransacationSizeLimit = 0, String daemonUsername = "", String daemonPassword = "", bool useSsl = false, bool lightWallet = false, String proxyAddress = "", });
- bool createWatchOnly({ required String path, required String password, required String language, });
+ bool init({
+ required String daemonAddress,
+ int upperTransacationSizeLimit = 0,
+ String daemonUsername = "",
+ String daemonPassword = "",
+ bool useSsl = false,
+ bool lightWallet = false,
+ String proxyAddress = "",
+ });
+ bool createWatchOnly({
+ required String path,
+ required String password,
+ required String language,
+ });
void setRefreshFromBlockHeight({required int refresh_from_block_height});
int getRefreshFromBlockHeight();
void setRecoveringFromSeed({required bool recoveringFromSeed});
@@ -287,13 +314,28 @@ abstract class Wallet2Wallet {
String genPaymentId();
bool paymentIdValid(String paymentId);
bool addressValid(String address, int networkType);
- bool keyValid({required String secret_key_string, required String address_string, required bool isViewKey, required int nettype});
- String keyValid_error({required String secret_key_string, required String address_string, required bool isViewKey, required int nettype});
+ bool keyValid(
+ {required String secret_key_string,
+ required String address_string,
+ required bool isViewKey,
+ required int nettype});
+ String keyValid_error(
+ {required String secret_key_string,
+ required String address_string,
+ required bool isViewKey,
+ required int nettype});
String paymentIdFromAddress({required String strarg, required int nettype});
int maximumAllowedAmount();
- void init3({ required String argv0, required String defaultLogBaseName, required String logPath, required bool console, });
+ void init3({
+ required String argv0,
+ required String defaultLogBaseName,
+ required String logPath,
+ required bool console,
+ });
String getPolyseed({required String passphrase});
- String createPolyseed({ String language = "English", });
+ String createPolyseed({
+ String language = "English",
+ });
void startRefresh();
void pauseRefresh();
bool refresh();
@@ -306,32 +348,76 @@ abstract class Wallet2Wallet {
void addSubaddressAccount({String label = ""});
int numSubaddressAccounts();
int numSubaddresses({required int accountIndex});
- String getSubaddressLabel({required int accountIndex, required int addressIndex});
- void setSubaddressLabel({required int accountIndex, required int addressIndex, required String label});
+ String getSubaddressLabel(
+ {required int accountIndex, required int addressIndex});
+ void setSubaddressLabel(
+ {required int accountIndex,
+ required int addressIndex,
+ required String label});
Wallet2MultisigState multisig();
String getMultisigInfo();
- String makeMultisig({ required List<String> info, required int threshold, });
- String exchangeMultisigKeys({ required List<String> info, required bool force_update_use_with_caution, });
- List<String> exportMultisigImages({ required List<String> info, });
- int importMultisigImages({ required List<String> info, });
+ String makeMultisig({
+ required List<String> info,
+ required int threshold,
+ });
+ String exchangeMultisigKeys({
+ required List<String> info,
+ required bool force_update_use_with_caution,
+ });
+ List<String> exportMultisigImages({
+ required List<String> info,
+ });
+ int importMultisigImages({
+ required List<String> info,
+ });
int hasMultisigPartialKeyImages();
- Wallet2PendingTransaction restoreMultisigTransaction({ required String signData, });
- Wallet2PendingTransaction createTransactionMultDest({ required List<String> dstAddr, String paymentId = "", required bool isSweepAll, required List<int> amounts, required int mixinCount, required int pendingTransactionPriority, required int subaddr_account, List<String> preferredInputs = const [], });
- Wallet2PendingTransaction createTransaction({required String dst_addr, required String payment_id, required int amount, required int mixin_count, required int pendingTransactionPriority, required int subaddr_account, List<String> preferredInputs = const [],});
- Wallet2UnsignedTransaction loadUnsignedTx({required String unsigned_filename});
+ Wallet2PendingTransaction restoreMultisigTransaction({
+ required String signData,
+ });
+ Wallet2PendingTransaction createTransactionMultDest({
+ required List<String> dstAddr,
+ String paymentId = "",
+ required bool isSweepAll,
+ required List<int> amounts,
+ required int mixinCount,
+ required int pendingTransactionPriority,
+ required int subaddr_account,
+ List<String> preferredInputs = const [],
+ });
+ Wallet2PendingTransaction createTransaction({
+ required String dst_addr,
+ required String payment_id,
+ required int amount,
+ required int mixin_count,
+ required int pendingTransactionPriority,
+ required int subaddr_account,
+ List<String> preferredInputs = const [],
+ });
+ Wallet2UnsignedTransaction loadUnsignedTx(
+ {required String unsigned_filename});
Wallet2UnsignedTransaction loadUnsignedTxUR({required String input});
bool submitTransaction(String filename);
bool submitTransactionUR(String input);
bool hasUnknownKeyImages();
bool exportKeyImages(String filename, {required bool all});
- String exportKeyImagesUR({ int max_fragment_length = 130, bool all = false, });
+ String exportKeyImagesUR({
+ int max_fragment_length = 130,
+ bool all = false,
+ });
bool importKeyImages(String filename);
bool importKeyImagesUR(String input);
bool exportOutputs(String filename, {required bool all});
- String exportOutputsUR({ int max_fragment_length = 130, bool all = false, });
+ String exportOutputsUR({
+ int max_fragment_length = 130,
+ bool all = false,
+ });
bool importOutputs(String filename);
bool importOutputsUR(String input);
- bool setupBackgroundSync({ required int backgroundSyncType, required String walletPassword, required String backgroundCachePassword, });
+ bool setupBackgroundSync({
+ required int backgroundSyncType,
+ required String walletPassword,
+ required String backgroundCachePassword,
+ });
int getBackgroundSyncType();
bool startBackgroundSync();
bool stopBackgroundSync(String walletPassword);
@@ -349,8 +435,15 @@ abstract class Wallet2Wallet {
bool setUserNote({required String txid, required String note});
String getUserNote({required String txid});
String getTxKey({required String txid});
- String signMessage({ required String message, required String address, });
- bool verifySignedMessage({ required String message, required String address, required String signature, });
+ String signMessage({
+ required String message,
+ required String address,
+ });
+ bool verifySignedMessage({
+ required String message,
+ required String address,
+ required String signature,
+ });
bool rescanSpent();
void setOffline({required bool offline});
bool isOffline();
@@ -362,7 +455,8 @@ abstract class Wallet2Wallet {
bool isKeysFileLocked();
int getDeviceType();
int coldKeyImageSync({required int spent, required int unspent});
- String deviceShowAddress({required int accountIndex, required int addressIndex});
+ String deviceShowAddress(
+ {required int accountIndex, required int addressIndex});
bool reconnectDevice();
int getBytesReceived();
int getBytesSent();
@@ -372,17 +466,79 @@ abstract class Wallet2Wallet {
abstract class Wallet2WalletManager {
int ffiAddress();
- Wallet2Wallet createWallet({ required String path, required String password, String language = "English", int networkType = 0, });
- Wallet2Wallet openWallet({ required String path, required String password, int networkType = 0, });
+ Wallet2Wallet createWallet({
+ required String path,
+ required String password,
+ String language = "English",
+ int networkType = 0,
+ });
+ Wallet2Wallet openWallet({
+ required String path,
+ required String password,
+ int networkType = 0,
+ });
void closeWallet(Wallet2Wallet wallet, bool store);
- Wallet2Wallet recoveryWallet({ required String path, required String password, required String mnemonic, int networkType = 0, required int restoreHeight, int kdfRounds = 0, required String seedOffset, });
- Wallet2Wallet createWalletFromKeys({ required String path, required String password, String language = "English", int nettype = 1, required int restoreHeight, required String addressString, required String viewKeyString, required String spendKeyString, int kdf_rounds = 1, });
- Wallet2Wallet createDeterministicWalletFromSpendKey({ required String path, required String password, String language = "English", int networkType = 0, required String spendKeyString, required bool newWallet, required int restoreHeight, int kdfRounds = 1, });
- Wallet2Wallet createWalletFromDevice({ required String path, required String password, int networkType = 0, required String deviceName, int restoreHeight = 0, String subaddressLookahead = "", int kdfRounds = 1, });
- Wallet2Wallet createWalletFromPolyseed({ required String path, required String password, int networkType = 0, required String mnemonic, required String seedOffset, required bool newWallet, required int restoreHeight, required int kdfRounds, });
+ Wallet2Wallet recoveryWallet({
+ required String path,
+ required String password,
+ required String mnemonic,
+ int networkType = 0,
+ required int restoreHeight,
+ int kdfRounds = 0,
+ required String seedOffset,
+ });
+ Wallet2Wallet createWalletFromKeys({
+ required String path,
+ required String password,
+ String language = "English",
+ int nettype = 1,
+ required int restoreHeight,
+ required String addressString,
+ required String viewKeyString,
+ required String spendKeyString,
+ int kdf_rounds = 1,
+ });
+ Wallet2Wallet createDeterministicWalletFromSpendKey({
+ required String path,
+ required String password,
+ String language = "English",
+ int networkType = 0,
+ required String spendKeyString,
+ required bool newWallet,
+ required int restoreHeight,
+ int kdfRounds = 1,
+ });
+ Wallet2Wallet createWalletFromDevice({
+ required String path,
+ required String password,
+ int networkType = 0,
+ required String deviceName,
+ int restoreHeight = 0,
+ String subaddressLookahead = "",
+ int kdfRounds = 1,
+ });
+ Wallet2Wallet createWalletFromPolyseed({
+ required String path,
+ required String password,
+ int networkType = 0,
+ required String mnemonic,
+ required String seedOffset,
+ required bool newWallet,
+ required int restoreHeight,
+ required int kdfRounds,
+ });
bool walletExists(String path);
- bool verifyWalletPassword({ required String keysFileName, required String password, required bool noSpendKey, required int kdfRounds, });
- int queryWalletDevice({ required String keysFileName, required String password, required int kdfRounds, });
+ bool verifyWalletPassword({
+ required String keysFileName,
+ required String password,
+ required bool noSpendKey,
+ required int kdfRounds,
+ });
+ int queryWalletDevice({
+ required String keysFileName,
+ required String password,
+ required int kdfRounds,
+ });
List<String> findWallets({required String path});
String errorString();
void setDaemonAddress(String address);
@@ -392,9 +548,17 @@ abstract class Wallet2WalletManager {
double miningHashRate();
Future<int> blockTarget();
bool isMining();
- bool startMining({ required String address, required int threads, required bool backgroundMining, required bool ignoreBattery, });
+ bool startMining({
+ required String address,
+ required int threads,
+ required bool backgroundMining,
+ required bool ignoreBattery,
+ });
bool stopMining(String address);
- String resolveOpenAlias({ required String address, required bool dnssecValid, });
+ String resolveOpenAlias({
+ required String address,
+ required bool dnssecValid,
+ });
bool setProxy(String address);
}
@@ -404,4 +568,4 @@ abstract class Wallet2WalletManagerFactory {
void setLogLevel(int level);
void setLogCategories(String categories);
Wallet2WalletManager getWalletManager();
-} \ No newline at end of file
+}
diff --git a/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.cpp b/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.cpp
index a800ad5..391cb65 100644
--- a/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.cpp
+++ b/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.cpp
@@ -102,6 +102,15 @@ const char* MONERO_PendingTransaction_commitUR(void* pendingTx_ptr, int max_frag
DEBUG_END()
}
+
+const char* MONERO_PendingTransaction_commitTrezor(void* pendingTx_ptr, int tx_index) {
+ DEBUG_START()
+ Monero::PendingTransaction *pendingTx = reinterpret_cast<Monero::PendingTransaction*>(pendingTx_ptr);
+ std::string str = pendingTx->commitTrezor(tx_index);
+ return strdup(str.c_str());
+ DEBUG_END()
+}
+
uint64_t MONERO_PendingTransaction_amount(void* pendingTx_ptr) {
DEBUG_START()
Monero::PendingTransaction *pendingTx = reinterpret_cast<Monero::PendingTransaction*>(pendingTx_ptr);
@@ -266,13 +275,6 @@ const char* MONERO_UnsignedTransaction_signUR(void* unsignedTx_ptr, int max_frag
DEBUG_END()
}
-const char* MONERO_UnsignedTransaction_commitTrezor(void* unsignedTx_ptr, int tx_index) {
- DEBUG_START()
- Monero::UnsignedTransaction *unsignedTx = reinterpret_cast<Monero::UnsignedTransaction*>(unsignedTx_ptr);
- std::string str = unsignedTx->commitTrezor(tx_index);
- return strdup(str.c_str());
- DEBUG_END()
-}
// TransactionInfo
const int MONERO_TransactionInfoDirection_In = 0;
diff --git a/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.h b/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.h
index fdaf228..f30d233 100644
--- a/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.h
+++ b/monero_libwallet2_api_c/src/main/cpp/monero_wallet2_api_c.h
@@ -84,6 +84,7 @@ extern ADDAPI const char* MONERO_PendingTransaction_errorString(void* pendingTx_
// virtual bool commit(const std::string &filename = "", bool overwrite = false) = 0;
extern ADDAPI bool MONERO_PendingTransaction_commit(void* pendingTx_ptr, const char* filename, bool overwrite);
extern ADDAPI const char* MONERO_PendingTransaction_commitUR(void* pendingTx_ptr, int max_fragment_length);
+extern ADDAPI const char* MONERO_PendingTransaction_commitTrezor(void* pendingTx_ptr, int tx_index);
// virtual uint64_t amount() const = 0;
extern ADDAPI uint64_t MONERO_PendingTransaction_amount(void* pendingTx_ptr);
// virtual uint64_t dust() const = 0;
@@ -144,7 +145,6 @@ extern ADDAPI uint64_t MONERO_UnsignedTransaction_txCount(void* unsignedTx_ptr);
// virtual bool sign(const std::string &signedFileName) = 0;
extern ADDAPI bool MONERO_UnsignedTransaction_sign(void* unsignedTx_ptr, const char* signedFileName);
extern ADDAPI const char* MONERO_UnsignedTransaction_signUR(void* unsignedTx_ptr, int max_fragment_length);
-extern ADDAPI const char* MONERO_UnsignedTransaction_commitTrezor(void* unsignedTx_ptr, int tx_index);
// };
// struct TransactionInfo
// {
diff --git a/patches/monero/0021-trezor-import-export-sign-functions.patch b/patches/monero/0021-trezor-import-export-sign-functions.patch
index 6129263..8f89f01 100644
--- a/patches/monero/0021-trezor-import-export-sign-functions.patch
+++ b/patches/monero/0021-trezor-import-export-sign-functions.patch
@@ -1,22 +1,71 @@
-From 8a56c766201269bd06319b30bd7400fdb4610a27 Mon Sep 17 00:00:00 2001
+From b0fb84c69bba4cc6ffdd7c401a804c2d73089043 Mon Sep 17 00:00:00 2001
From: Czarek Nakamoto <cyjan@mrcyjanek.net>
-Date: Fri, 8 May 2026 21:40:35 -0400
+Date: Wed, 13 May 2026 11:35:01 -0400
Subject: [PATCH] trezor import/export/sign functions
---
- src/device_trezor/trezor/protocol.cpp | 250 ++++++++++++++++++++++++
+ cmake/CheckTrezor.cmake | 28 +--
+ src/device_trezor/trezor/protocol.cpp | 220 ++++++++++++++++++++++++
src/device_trezor/trezor/protocol.hpp | 8 +
- src/wallet/api/unsigned_transaction.cpp | 60 ++++++
- src/wallet/api/unsigned_transaction.h | 1 +
- src/wallet/api/wallet.cpp | 31 ++-
+ src/wallet/api/pending_transaction.cpp | 60 +++++++
+ src/wallet/api/pending_transaction.h | 1 +
+ src/wallet/api/unsigned_transaction.cpp | 2 +
+ src/wallet/api/wallet.cpp | 31 +++-
src/wallet/api/wallet.h | 2 +
src/wallet/api/wallet2_api.h | 14 ++
- src/wallet/wallet2.cpp | 144 ++++++++++++++
- src/wallet/wallet2.h | 3 +-
- 9 files changed, 511 insertions(+), 2 deletions(-)
+ src/wallet/wallet2.cpp | 158 +++++++++++++++++
+ src/wallet/wallet2.h | 5 +-
+ 11 files changed, 500 insertions(+), 29 deletions(-)
+diff --git a/cmake/CheckTrezor.cmake b/cmake/CheckTrezor.cmake
+index 4fae15fad..57e3d4866 100644
+--- a/cmake/CheckTrezor.cmake
++++ b/cmake/CheckTrezor.cmake
+@@ -40,9 +40,6 @@ if (USE_DEVICE_TREZOR)
+ # Protobuf handling the cache variables set in docker.
+ if(NOT Protobuf_FOUND AND NOT Protobuf_LIBRARY AND NOT Protobuf_PROTOC_EXECUTABLE AND NOT Protobuf_INCLUDE_DIR)
+ message(STATUS "Could not find Protobuf")
+- elseif(NOT Protobuf_LIBRARY OR NOT EXISTS "${Protobuf_LIBRARY}")
+- message(STATUS "Protobuf library not found: ${Protobuf_LIBRARY}")
+- unset(Protobuf_FOUND)
+ elseif(NOT Protobuf_PROTOC_EXECUTABLE OR NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}")
+ message(STATUS "Protobuf executable not found: ${Protobuf_PROTOC_EXECUTABLE}")
+ unset(Protobuf_FOUND)
+@@ -93,31 +90,8 @@ if(Protobuf_FOUND AND USE_DEVICE_TREZOR)
+ endif()
+ endif()
+
+-# Protobuf compilation test
+-if(Protobuf_FOUND AND USE_DEVICE_TREZOR AND TREZOR_PYTHON)
+- execute_process(COMMAND ${Protobuf_PROTOC_EXECUTABLE} -I "${CMAKE_CURRENT_LIST_DIR}" -I "${Protobuf_INCLUDE_DIR}" "${CMAKE_CURRENT_LIST_DIR}/test-protobuf.proto" --cpp_out ${CMAKE_BINARY_DIR} RESULT_VARIABLE RET OUTPUT_VARIABLE OUT ERROR_VARIABLE ERR)
+- if(RET)
+- message(STATUS "Protobuf test generation failed: ${OUT} ${ERR}")
+- endif()
+-
+- try_compile(Protobuf_COMPILE_TEST_PASSED
+- "${CMAKE_BINARY_DIR}"
+- SOURCES
+- "${CMAKE_BINARY_DIR}/test-protobuf.pb.cc"
+- "${CMAKE_CURRENT_LIST_DIR}/test-protobuf.cpp"
+- CMAKE_FLAGS
+- "-DINCLUDE_DIRECTORIES=${Protobuf_INCLUDE_DIR};${CMAKE_BINARY_DIR}"
+- "-DCMAKE_CXX_STANDARD=11"
+- LINK_LIBRARIES ${Protobuf_LIBRARY}
+- OUTPUT_VARIABLE OUTPUT
+- )
+- if(NOT Protobuf_COMPILE_TEST_PASSED)
+- message(STATUS "Protobuf Compilation test failed: ${OUTPUT}.")
+- endif()
+-endif()
+-
+ # Try to build protobuf messages
+-if(Protobuf_FOUND AND USE_DEVICE_TREZOR AND TREZOR_PYTHON AND Protobuf_COMPILE_TEST_PASSED)
++if(Protobuf_FOUND AND USE_DEVICE_TREZOR AND TREZOR_PYTHON)
+ set(ENV{PROTOBUF_INCLUDE_DIRS} "${Protobuf_INCLUDE_DIR}")
+ set(ENV{PROTOBUF_PROTOC_EXECUTABLE} "${Protobuf_PROTOC_EXECUTABLE}")
+ set(TREZOR_PROTOBUF_PARAMS "")
diff --git a/src/device_trezor/trezor/protocol.cpp b/src/device_trezor/trezor/protocol.cpp
-index 0e59a16ba..4f146e3f1 100644
+index 0e59a16ba..afd1498d2 100644
--- a/src/device_trezor/trezor/protocol.cpp
+++ b/src/device_trezor/trezor/protocol.cpp
@@ -29,12 +29,17 @@
@@ -48,7 +97,7 @@ index 0e59a16ba..4f146e3f1 100644
void Signer::set_tx_input(MoneroTransactionSourceEntry * dst, size_t idx, bool need_ring_keys, bool need_ring_indices){
const cryptonote::tx_source_entry & src = cur_tx().sources[idx];
const tools::wallet2::transfer_details & transfer = get_source_transfer(idx);
-@@ -1096,6 +1105,247 @@ namespace tx {
+@@ -1096,6 +1105,217 @@ namespace tx {
memwipe(plaintext.get(), keys_len);
}
@@ -145,36 +194,6 @@ index 0e59a16ba..4f146e3f1 100644
+ }
+ if (e.has_subaddr_minor())
+ o.AddMember("subaddr_minor", e.subaddr_minor(), a);
-+ if (e.has_multisig_klrki())
-+ {
-+ const auto &ms = e.multisig_klrki();
-+ const bool any = (ms.has_k() && !ms.k().empty()) || (ms.has_l() && !ms.l().empty()) || (ms.has_r() && !ms.r().empty()) || (ms.has_ki() && !ms.ki().empty());
-+ if (any)
-+ {
-+ rapidjson::Value mso(rapidjson::kObjectType);
-+ if (ms.has_k())
-+ {
-+ const std::string h = bin_to_hex_lower(ms.k());
-+ mso.AddMember("K", rapidjson::Value(h.c_str(), static_cast<rapidjson::SizeType>(h.size()), a), a);
-+ }
-+ if (ms.has_l())
-+ {
-+ const std::string h = bin_to_hex_lower(ms.l());
-+ mso.AddMember("L", rapidjson::Value(h.c_str(), static_cast<rapidjson::SizeType>(h.size()), a), a);
-+ }
-+ if (ms.has_r())
-+ {
-+ const std::string h = bin_to_hex_lower(ms.r());
-+ mso.AddMember("R", rapidjson::Value(h.c_str(), static_cast<rapidjson::SizeType>(h.size()), a), a);
-+ }
-+ if (ms.has_ki())
-+ {
-+ const std::string h = bin_to_hex_lower(ms.ki());
-+ mso.AddMember("ki", rapidjson::Value(h.c_str(), static_cast<rapidjson::SizeType>(h.size()), a), a);
-+ }
-+ o.AddMember("multisig_klrki", mso, a);
-+ }
-+ }
+ return o;
+ }
+
@@ -317,21 +336,11 @@ index 7ffadd9aa..7899e60d0 100644
// TX Key decryption
void load_tx_key_data(hw::device_cold::tx_key_data_t & res, const std::string & data);
-diff --git a/src/wallet/api/unsigned_transaction.cpp b/src/wallet/api/unsigned_transaction.cpp
-index fd03e959d..d45723bb5 100644
---- a/src/wallet/api/unsigned_transaction.cpp
-+++ b/src/wallet/api/unsigned_transaction.cpp
-@@ -34,14 +34,21 @@
-
- #include "cryptonote_basic/cryptonote_format_utils.h"
- #include "cryptonote_basic/cryptonote_basic_impl.h"
-+#include "cryptonote_config.h"
-
- #include <memory>
- #include <vector>
- #include <sstream>
- #include <boost/format.hpp>
-+#include <functional>
+diff --git a/src/wallet/api/pending_transaction.cpp b/src/wallet/api/pending_transaction.cpp
+index 1f714d229..22c09483d 100644
+--- a/src/wallet/api/pending_transaction.cpp
++++ b/src/wallet/api/pending_transaction.cpp
+@@ -44,6 +44,11 @@
#include "bc-ur/src/bc-ur.hpp"
@@ -343,11 +352,11 @@ index fd03e959d..d45723bb5 100644
using namespace std;
namespace Monero {
-@@ -138,6 +145,59 @@ std::string UnsignedTransactionImpl::signUR(int max_fragment_length)
- return "";
+@@ -210,6 +215,61 @@ std::string PendingTransactionImpl::commitUR(int max_fragment_length) {
+ }
}
-+std::string UnsignedTransactionImpl::commitTrezor(uint64_t tx_index)
++std::string PendingTransactionImpl::commitTrezor(uint64_t tx_index)
+{
+#if !defined(DEVICE_TREZOR_READY) || !DEVICE_TREZOR_READY
+ (void)tx_index;
@@ -355,21 +364,23 @@ index fd03e959d..d45723bb5 100644
+ m_status = Status_Error;
+ return "";
+#else
-+ if (tx_index >= m_unsigned_tx_set.txes.size())
++ if (tx_index >= m_pending_tx.size())
+ {
+ m_errorString = tr("Invalid transaction index");
+ m_status = Status_Error;
+ return "";
+ }
-+ if (std::get<0>(m_unsigned_tx_set.transfers) != 0)
-+ {
-+ m_errorString = tr("Unsupported unsigned transaction transfer offset");
-+ m_status = Status_Error;
-+ return "";
-+ }
+ try
+ {
+ tools::wallet2 *w = m_wallet.m_wallet.get();
++ tools::wallet2::unsigned_tx_set utx;
++ w->construct_unsigned_tx_set_for_signing(m_pending_tx, utx);
++ if (std::get<0>(utx.transfers) != 0)
++ {
++ m_errorString = tr("Unsupported unsigned transaction transfer offset");
++ m_status = Status_Error;
++ return "";
++ }
+ hw::tx_aux_data aux_data;
+ const int bpv = w->use_fork_rules(HF_VERSION_BULLETPROOF_PLUS, -10) ? 4
+ : (w->use_fork_rules(HF_VERSION_CLSAG, -10) ? 3
@@ -383,7 +394,7 @@ index fd03e959d..d45723bb5 100644
+
+ const std::string json = hw::trezor::protocol::tx::trezor_connect_monero_sign_transaction_to_json(
+ &shim,
-+ &m_unsigned_tx_set,
++ &utx,
+ static_cast<size_t>(tx_index),
+ &aux_data,
+ w->nettype());
@@ -400,20 +411,38 @@ index fd03e959d..d45723bb5 100644
+#endif
+}
+
- //----------------------------------------------------------------------------------------------------
- bool UnsignedTransactionImpl::checkLoadedTx(const std::function<size_t()> get_num_txes, const std::function<const tools::wallet2::tx_construction_data&(size_t)> &get_tx, const std::string &extra_message)
+
+ uint64_t PendingTransactionImpl::amount() const
{
-diff --git a/src/wallet/api/unsigned_transaction.h b/src/wallet/api/unsigned_transaction.h
-index a94b23f75..e2f250565 100644
---- a/src/wallet/api/unsigned_transaction.h
-+++ b/src/wallet/api/unsigned_transaction.h
-@@ -54,6 +54,7 @@ public:
- // sign txs and save to file
- bool sign(const std::string &signedFileName) override;
- std::string signUR(int max_fragment_length = 130) override;
+diff --git a/src/wallet/api/pending_transaction.h b/src/wallet/api/pending_transaction.h
+index 0cc6c58e9..9c9097cd1 100644
+--- a/src/wallet/api/pending_transaction.h
++++ b/src/wallet/api/pending_transaction.h
+@@ -47,6 +47,7 @@ public:
+ std::string errorString() const override;
+ bool commit(const std::string &filename = "", bool overwrite = false) override;
+ std::string commitUR(int max_fragment_length = 130) override;
+ std::string commitTrezor(uint64_t tx_index = 0) override;
- std::string confirmationMessage() const override {return m_confirmationMessage;}
- uint64_t minMixinCount() const override;
+ uint64_t amount() const override;
+ uint64_t dust() const override;
+ uint64_t fee() const override;
+diff --git a/src/wallet/api/unsigned_transaction.cpp b/src/wallet/api/unsigned_transaction.cpp
+index fd03e959d..7232e518f 100644
+--- a/src/wallet/api/unsigned_transaction.cpp
++++ b/src/wallet/api/unsigned_transaction.cpp
+@@ -34,11 +34,13 @@
+
+ #include "cryptonote_basic/cryptonote_format_utils.h"
+ #include "cryptonote_basic/cryptonote_basic_impl.h"
++#include "cryptonote_config.h"
+
+ #include <memory>
+ #include <vector>
+ #include <sstream>
+ #include <boost/format.hpp>
++#include <functional>
+
+ #include "bc-ur/src/bc-ur.hpp"
diff --git a/src/wallet/api/wallet.cpp b/src/wallet/api/wallet.cpp
index c24b4a97d..cc85398ca 100644
@@ -476,17 +505,17 @@ index 98c03b9c1..5248badb8 100644
diff --git a/src/wallet/api/wallet2_api.h b/src/wallet/api/wallet2_api.h
-index 3d11929f9..faea404dc 100644
+index 3d11929f9..ee9edd68e 100644
--- a/src/wallet/api/wallet2_api.h
+++ b/src/wallet/api/wallet2_api.h
-@@ -165,6 +165,7 @@ struct UnsignedTransaction
- */
- virtual bool sign(const std::string &signedFileName) = 0;
- virtual std::string signUR(int max_fragment_length = 130) = 0;
-+ virtual std::string commitTrezor(uint64_t tx_index = 0) = 0;
- };
-
- /**
+@@ -92,6 +92,7 @@ struct PendingTransaction
+ // commit transaction or save to file if filename is provided.
+ virtual bool commit(const std::string &filename = "", bool overwrite = false) = 0;
+ virtual std::string commitUR(int max_fragment_length = 130) = 0;
++ virtual std::string commitTrezor(uint64_t tx_index = 0) = 0;
+ virtual uint64_t amount() const = 0;
+ virtual uint64_t dust() const = 0;
+ virtual uint64_t fee() const = 0;
@@ -1220,6 +1221,19 @@ struct Wallet
//! serialize wallet cache to JSON
@@ -508,7 +537,7 @@ index 3d11929f9..faea404dc 100644
/**
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
-index a7532d7ec..7f931c4c9 100644
+index a7532d7ec..bb0ada04d 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -98,6 +98,7 @@ extern "C"
@@ -519,7 +548,28 @@ index a7532d7ec..7f931c4c9 100644
}
using namespace std;
using namespace crypto;
-@@ -16384,4 +16385,147 @@ std::pair<size_t, uint64_t> wallet2::estimate_tx_size_and_weight(bool use_rct, i
+@@ -7838,6 +7839,20 @@ std::string wallet2::dump_tx_to_str(const std::vector<pending_tx> &ptx_vector) c
+ return std::string(UNSIGNED_TX_PREFIX) + ciphertext;
+ }
+ //----------------------------------------------------------------------------------------------------
++void wallet2::construct_unsigned_tx_set_for_signing(const std::vector<pending_tx>& ptx_vector, unsigned_tx_set &utx) const
++{
++ utx.txes.clear();
++ utx.txes.reserve(ptx_vector.size());
++ for (const auto &tx : ptx_vector)
++ utx.txes.push_back(get_construction_data_with_decrypted_short_payment_id(tx, m_account.get_device()));
++
++ utx.new_transfers = std::make_tuple(static_cast<uint64_t>(0), static_cast<uint64_t>(0), std::vector<exported_transfer_details>());
++
++ transfer_container transfers_copy;
++ get_transfers(transfers_copy);
++ utx.transfers = std::make_tuple(static_cast<uint64_t>(0), static_cast<uint64_t>(transfers_copy.size()), std::move(transfers_copy));
++}
++//----------------------------------------------------------------------------------------------------
+ bool wallet2::load_unsigned_tx(const std::string &unsigned_filename, unsigned_tx_set &exported_txs) const
+ {
+ std::string s;
+@@ -16384,4 +16399,147 @@ std::pair<size_t, uint64_t> wallet2::estimate_tx_size_and_weight(bool use_rct, i
return std::make_pair(size, weight);
}
//----------------------------------------------------------------------------------------------------
@@ -668,10 +718,19 @@ index a7532d7ec..7f931c4c9 100644
+//----------------------------------------------------------------------------------------------------
}
diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h
-index 37a2447d2..e2016945b 100644
+index 37a2447d2..a1ca49e90 100644
--- a/src/wallet/wallet2.h
+++ b/src/wallet/wallet2.h
-@@ -1717,7 +1717,8 @@ private:
+@@ -1207,6 +1207,8 @@ private:
+ void commit_tx(std::vector<pending_tx>& ptx_vector);
+ bool save_tx(const std::vector<pending_tx>& ptx_vector, const std::string &filename) const;
+ std::string dump_tx_to_str(const std::vector<pending_tx> &ptx_vector) const;
++ //! Populate \p utx from pending txs for cold/device signing (uses live transfer indices).
++ void construct_unsigned_tx_set_for_signing(const std::vector<pending_tx>& ptx_vector, unsigned_tx_set &utx) const;
+ std::string save_multisig_tx(multisig_tx_set txs);
+ bool save_multisig_tx(const multisig_tx_set &txs, const std::string &filename);
+ std::string save_multisig_tx(const std::vector<pending_tx>& ptx_vector);
+@@ -1717,7 +1719,8 @@ private:
bool is_unattended() const { return m_unattended; }
std::pair<size_t, uint64_t> estimate_tx_size_and_weight(bool use_rct, int n_inputs, int ring_size, int n_outputs, size_t extra_size);
@@ -682,5 +741,5 @@ index 37a2447d2..e2016945b 100644
bool daemon_requires_payment();
bool make_rpc_payment(uint32_t nonce, uint32_t cookie, uint64_t &credits, uint64_t &balance);
--
-2.50.1 (Apple Git-155)
+2.51.0