From fc1180bc6c2a97624a7ac2684dce047dc2fb3200 Mon Sep 17 00:00:00 2001 From: Thomas Winget Date: Fri, 13 Jun 2014 14:05:15 -0400 Subject: [PATCH] Added comments to wallet functions --- src/wallet/wallet2.cpp | 7 +++++++ src/wallet/wallet2.h | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index a63eb4be7..fb4673f00 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -630,10 +630,17 @@ namespace } } //---------------------------------------------------------------------------------------------------- +// Select random input sources for transaction. +// returns: +// direct return: amount of money found +// modified reference: selected_transfers, a list of iterators/indices of input sources uint64_t wallet2::select_transfers(uint64_t needed_money, bool add_dust, uint64_t dust, std::list& selected_transfers) { std::vector unused_transfers_indices; std::vector unused_dust_indices; + + // aggregate sources available for transfers + // if dust needed, take dust from only one source (so require source has at least dust amount) for (size_t i = 0; i < m_transfers.size(); ++i) { const transfer_details& td = m_transfers[i]; diff --git a/src/wallet/wallet2.h b/src/wallet/wallet2.h index 534a0517b..64b8b337b 100644 --- a/src/wallet/wallet2.h +++ b/src/wallet/wallet2.h @@ -304,9 +304,13 @@ namespace tools uint64_t unlock_time, uint64_t fee, const std::vector& extra, T destination_split_strategy, const tx_dust_policy& dust_policy, cryptonote::transaction &tx) { using namespace cryptonote; + // throw if attempting a transaction with no destinations THROW_WALLET_EXCEPTION_IF(dsts.empty(), error::zero_destination); uint64_t needed_money = fee; + + // calculate total amount being sent to all destinations + // throw if total amount overflows uint64_t BOOST_FOREACH(auto& dt, dsts) { THROW_WALLET_EXCEPTION_IF(0 == dt.amount, error::zero_destination); @@ -314,6 +318,8 @@ namespace tools THROW_WALLET_EXCEPTION_IF(needed_money < dt.amount, error::tx_sum_overflow, dsts, fee); } + // randomly select inputs for transaction + // throw if requested send amount is greater than amount available to send std::list selected_transfers; uint64_t found_money = select_transfers(needed_money, 0 == fake_outputs_count, dust_policy.dust_threshold, selected_transfers); THROW_WALLET_EXCEPTION_IF(found_money < needed_money, error::not_enough_money, found_money, needed_money - fee, fee);