summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCzarek Nakamoto <cyjan@mrcyjanek.net>2024-04-17 15:55:34 +0200
committerCzarek Nakamoto <cyjan@mrcyjanek.net>2024-04-17 16:16:22 +0200
commita1d03a28a7e7c10c6a51d3e1de3d6a1fcd24ce30 (patch)
tree178db7a3de15616268f588fcb012e6c70c7f342e
parent19df009754d4c182af650958c6dc7cad8973e36d (diff)
add multi dest tx supportv0.18.3.3-RC28
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/helpers.cpp15
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/helpers.hpp3
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp27
-rw-r--r--monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.h5
4 files changed, 48 insertions, 2 deletions
diff --git a/monero_libwallet2_api_c/src/main/cpp/helpers.cpp b/monero_libwallet2_api_c/src/main/cpp/helpers.cpp
index 04befc6..d77995b 100644
--- a/monero_libwallet2_api_c/src/main/cpp/helpers.cpp
+++ b/monero_libwallet2_api_c/src/main/cpp/helpers.cpp
@@ -157,4 +157,19 @@ std::set<std::string> splitString(const std::string& str, const std::string& del
}
tokens.insert(content); // Inserting the last token
return tokens;
+}
+
+std::vector<uint64_t> splitStringUint(const std::string& str, const std::string& delim) {
+ std::vector<uint64_t> tokens;
+ if (str.empty()) return tokens;
+ size_t pos = 0;
+ std::string token;
+ std::string content = str; // Copy of str so we can safely erase content
+ while ((pos = content.find(delim)) != std::string::npos) {
+ token = content.substr(0, pos);
+ tokens.push_back(std::stoull(token)); // Convert string to uint64_t and push to vector
+ content.erase(0, pos + delim.length());
+ }
+ tokens.push_back(std::stoull(content)); // Inserting the last token
+ return tokens;
} \ No newline at end of file
diff --git a/monero_libwallet2_api_c/src/main/cpp/helpers.hpp b/monero_libwallet2_api_c/src/main/cpp/helpers.hpp
index 45fa624..9513fc0 100644
--- a/monero_libwallet2_api_c/src/main/cpp/helpers.hpp
+++ b/monero_libwallet2_api_c/src/main/cpp/helpers.hpp
@@ -8,4 +8,5 @@ const char* vectorToString(const std::vector<uint32_t>& vec, const std::string s
const char* vectorToString(const std::vector<uint64_t>& vec, const std::string separator);
const char* vectorToString(const std::vector<std::set<uint32_t>>& vec, const std::string separator);
const char* vectorToString(const std::set<uint32_t>& intSet, const std::string separator);
-std::set<std::string> splitString(const std::string& str, const std::string& delim); \ No newline at end of file
+std::set<std::string> splitString(const std::string& str, const std::string& delim);
+std::vector<uint64_t> splitStringUint(const std::string& str, const std::string& delim); \ No newline at end of file
diff --git a/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp b/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp
index ab13e15..251a428 100644
--- a/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp
+++ b/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.cpp
@@ -1228,6 +1228,32 @@ Monero::PendingTransaction::Priority PendingTransaction_Priority_fromInt(int val
}
}
+void* MONERO_Wallet_createTransactionMultDest(void* wallet_ptr, const char* &dst_addr_list, const char* dst_addr_list_separator, const char* payment_id,
+ bool amount_sweep_all, const char* amount_list, const char* amount_list_separator, uint32_t mixin_count,
+ int pendingTransactionPriority,
+ uint32_t subaddr_account,
+ const char* preferredInputs, const char* preferredInputs_separator) {
+ Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
+ std::set<std::string> dst_addr_ = splitString(std::string(dst_addr_list), std::string(dst_addr_list_separator));
+ std::vector<std::string> dst_addr(dst_addr_.begin(), dst_addr_.end());
+
+ Monero::optional<std::vector<uint64_t>> optAmount;
+ if (!amount_sweep_all) {
+ optAmount = splitStringUint(std::string(amount_list), std::string(amount_list_separator));;
+ }
+ std::set<uint32_t> subaddr_indices = {};
+ std::set<std::string> preferred_inputs = splitString(std::string(preferredInputs), std::string(preferredInputs_separator));
+
+ return wallet->createTransactionMultDest(
+ dst_addr, std::string(payment_id),
+ optAmount, mixin_count,
+ PendingTransaction_Priority_fromInt(pendingTransactionPriority),
+ subaddr_account,
+ subaddr_indices,
+ preferred_inputs
+ );
+}
+
void* MONERO_Wallet_createTransaction(void* wallet_ptr, const char* dst_addr, const char* payment_id,
uint64_t amount, uint32_t mixin_count,
int pendingTransactionPriority,
@@ -1246,7 +1272,6 @@ void* MONERO_Wallet_createTransaction(void* wallet_ptr, const char* dst_addr, co
subaddr_account, subaddr_indices, preferred_inputs);
}
-
void* MONERO_Wallet_loadUnsignedTx(void* wallet_ptr, const char* fileName) {
Monero::Wallet *wallet = reinterpret_cast<Monero::Wallet*>(wallet_ptr);
return wallet->loadUnsignedTx(std::string(fileName));
diff --git a/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.h b/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.h
index f0bd66e..4cd1daf 100644
--- a/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.h
+++ b/monero_libwallet2_api_c/src/main/cpp/wallet2_api_c.h
@@ -687,6 +687,11 @@ extern ADDAPI const char* MONERO_Wallet_getMultisigInfo(void* wallet_ptr);
// PendingTransaction::Priority = PendingTransaction::Priority_Low,
// uint32_t subaddr_account = 0,
// std::set<uint32_t> subaddr_indices = {}) = 0;
+extern ADDAPI void* MONERO_Wallet_createTransactionMultDest(void* wallet_ptr, const char* &dst_addr_list, const char* dst_addr_list_separator, const char* payment_id,
+ bool amount_sweep_all, const char* amount_list, const char* amount_list_separator, uint32_t mixin_count,
+ int pendingTransactionPriority,
+ uint32_t subaddr_account,
+ const char* preferredInputs, const char* preferredInputs_separator);
// virtual PendingTransaction * createTransaction(const std::string &dst_addr, const std::string &payment_id,
// optional<uint64_t> amount, uint32_t mixin_count,
// PendingTransaction::Priority = PendingTransaction::Priority_Low,