diff options
| author | Czarek Nakamoto <cyjan@mrcyjanek.net> | 2024-04-17 15:55:34 +0200 |
|---|---|---|
| committer | Czarek Nakamoto <cyjan@mrcyjanek.net> | 2024-04-17 16:16:22 +0200 |
| commit | a1d03a28a7e7c10c6a51d3e1de3d6a1fcd24ce30 (patch) | |
| tree | 178db7a3de15616268f588fcb012e6c70c7f342e /monero_libwallet2_api_c/src/main | |
| parent | 19df009754d4c182af650958c6dc7cad8973e36d (diff) | |
add multi dest tx supportv0.18.3.3-RC28
Diffstat (limited to 'monero_libwallet2_api_c/src/main')
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, |
