add multi dest tx support
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
@@ -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));
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user