aboutsummaryrefslogtreecommitdiff
path: root/src/wallet/spend.h
diff options
context:
space:
mode:
authorfurszy <matiasfurszyfer@protonmail.com>2022-07-22 16:16:44 -0300
committerfurszy <matiasfurszyfer@protonmail.com>2022-10-26 15:52:35 -0300
commit295852f61998a025b0b28a0671e6e1cf0dc08d0d (patch)
tree059002052b8d54834f629bd80f8f5fb558708f41 /src/wallet/spend.h
parent37e7887cb4bfd7db6eb462ed0741c45aea22a990 (diff)
wallet: encapsulate pre-selected-inputs lookup into its own function
First step towards decoupling the pre-selected-inputs fetching functionality from `SelectCoins`. Which, will let us not waste resources calculating the available coins if one of the pre-set inputs has an error. (right now, if one of the pre-set inputs is invalid, we first walk through the entire wallet txes map just to end up failing right after it finish)
Diffstat (limited to 'src/wallet/spend.h')
-rw-r--r--src/wallet/spend.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/wallet/spend.h b/src/wallet/spend.h
index c29e5be5c7..39832f363f 100644
--- a/src/wallet/spend.h
+++ b/src/wallet/spend.h
@@ -121,6 +121,26 @@ std::optional<SelectionResult> AttemptSelection(const CWallet& wallet, const CAm
std::optional<SelectionResult> ChooseSelectionResult(const CWallet& wallet, const CAmount& nTargetValue, const CoinEligibilityFilter& eligibility_filter, const std::vector<COutput>& available_coins,
const CoinSelectionParams& coin_selection_params);
+// User manually selected inputs that must be part of the transaction
+struct PreSelectedInputs
+{
+ std::set<COutput> coins;
+ // If subtract fee from outputs is disabled, the 'total_amount'
+ // will be the sum of each output effective value
+ // instead of the sum of the outputs amount
+ CAmount total_amount{0};
+
+ void Insert(const COutput& output, bool subtract_fee_outputs)
+ {
+ if (subtract_fee_outputs) {
+ total_amount += output.txout.nValue;
+ } else {
+ total_amount += output.GetEffectiveValue();
+ }
+ coins.insert(output);
+ }
+};
+
/**
* Select a set of coins such that nTargetValue is met and at least
* all coins from coin_control are selected; never select unconfirmed coins if they are not ours