add multi dest tx support

This commit is contained in:
Czarek Nakamoto
2024-04-17 15:55:34 +02:00
parent 19df009754
commit a1d03a28a7
4 changed files with 48 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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);
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);

View File

@@ -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));

View File

@@ -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,