bool do_send_money(tools::wallet2& w1, tools::wallet2& w2, size_t mix_in_factor, uint64_t amount_to_transfer, transaction& tx, size_t parts=1) { CHECK_AND_ASSERT_MES(parts > 0, false, "parts must be > 0"); std::vector<currency::tx_destination_entry> dsts; dsts.reserve(parts); uint64_t amount_used = 0; uint64_t max_part = amount_to_transfer / parts; for (size_t i = 0; i < parts; ++i) { currency::tx_destination_entry de; de.addr = w2.get_account().get_keys().m_account_address; if (i < parts - 1) de.amount = random(max_part); else de.amount = amount_to_transfer - amount_used; amount_used += de.amount; //std::cout << "PARTS (" << amount_to_transfer << ") " << amount_used << " " << de.amount << std::endl; dsts.push_back(de); } try { w1.transfer(dsts, mix_in_factor, 0, DEFAULT_FEE, std::vector<uint8_t>(), tools::detail::null_split_strategy, tools::tx_dust_policy(DEFAULT_FEE), tx); return true; } catch (const std::exception&) { return false; } }
bool do_send_money(tools::wallet2& w1, tools::wallet2& w2, size_t mix_in_factor, uint64_t amount_to_transfer, transaction& tx, size_t parts=1) { CHECK_AND_ASSERT_MES(parts > 0, false, "parts must be > 0"); std::vector<cryptonote::tx_destination_entry> dsts; dsts.reserve(parts); uint64_t amount_used = 0; uint64_t max_part = amount_to_transfer / parts; for (size_t i = 0; i < parts; ++i) { cryptonote::tx_destination_entry de; de.addr = w2.get_account().get_keys().m_account_address; if (i < parts - 1) de.amount = random(max_part); else de.amount = amount_to_transfer - amount_used; amount_used += de.amount; //std::cout << "PARTS (" << amount_to_transfer << ") " << amount_used << " " << de.amount << std::endl; dsts.push_back(de); } try { tools::wallet2::pending_tx ptx; std::vector<size_t> indices = w1.select_available_outputs([](const tools::wallet2::transfer_details&) { return true; }); w1.transfer(dsts, mix_in_factor, indices, 0, TEST_FEE, std::vector<uint8_t>(), tools::detail::null_split_strategy, tools::tx_dust_policy(TEST_DUST_THRESHOLD), tx, ptx, true); w1.commit_tx(ptx); return true; } catch (const std::exception&) { return false; } }