@@ -191,11 +191,7 @@ util::Result<PreSelectedInputs> FetchSelectedInputs(const CWallet& wallet, const
191191CoinsResult AvailableCoins (const CWallet& wallet,
192192 const CCoinControl* coinControl,
193193 std::optional<CFeeRate> feerate,
194- const CAmount& nMinimumAmount,
195- const CAmount& nMaximumAmount,
196- const CAmount& nMinimumSumAmount,
197- const uint64_t nMaximumCount,
198- bool only_spendable)
194+ const CoinFilterParams& params)
199195{
200196 AssertLockHeld (wallet.cs_wallet );
201197
@@ -213,7 +209,7 @@ CoinsResult AvailableCoins(const CWallet& wallet,
213209 const uint256& wtxid = entry.first ;
214210 const CWalletTx& wtx = entry.second ;
215211
216- if (wallet.IsTxImmatureCoinBase (wtx))
212+ if (wallet.IsTxImmatureCoinBase (wtx) && !params. include_immature_coinbase )
217213 continue ;
218214
219215 int nDepth = wallet.GetTxDepthInMainChain (wtx);
@@ -272,7 +268,7 @@ CoinsResult AvailableCoins(const CWallet& wallet,
272268 const CTxOut& output = wtx.tx ->vout [i];
273269 const COutPoint outpoint (wtxid, i);
274270
275- if (output.nValue < nMinimumAmount || output.nValue > nMaximumAmount )
271+ if (output.nValue < params. min_amount || output.nValue > params. max_amount )
276272 continue ;
277273
278274 // Skip manually selected coins (the caller can fetch them directly)
@@ -304,7 +300,7 @@ CoinsResult AvailableCoins(const CWallet& wallet,
304300 bool spendable = ((mine & ISMINE_SPENDABLE) != ISMINE_NO) || (((mine & ISMINE_WATCH_ONLY) != ISMINE_NO) && (coinControl && coinControl->fAllowWatchOnly && solvable));
305301
306302 // Filter by spendable outputs only
307- if (!spendable && only_spendable) continue ;
303+ if (!spendable && params. only_spendable ) continue ;
308304
309305 // Obtain script type
310306 std::vector<std::vector<uint8_t >> script_solutions;
@@ -328,14 +324,14 @@ CoinsResult AvailableCoins(const CWallet& wallet,
328324 // Cache total amount as we go
329325 result.total_amount += output.nValue ;
330326 // Checks the sum amount of all UTXO's.
331- if (nMinimumSumAmount != MAX_MONEY) {
332- if (result.total_amount >= nMinimumSumAmount ) {
327+ if (params. min_sum_amount != MAX_MONEY) {
328+ if (result.total_amount >= params. min_sum_amount ) {
333329 return result;
334330 }
335331 }
336332
337333 // Checks the maximum number of UTXO's.
338- if (nMaximumCount > 0 && result.Size () >= nMaximumCount ) {
334+ if (params. max_count > 0 && result.Size () >= params. max_count ) {
339335 return result;
340336 }
341337 }
@@ -344,21 +340,16 @@ CoinsResult AvailableCoins(const CWallet& wallet,
344340 return result;
345341}
346342
347- CoinsResult AvailableCoinsListUnspent (const CWallet& wallet, const CCoinControl* coinControl, const CAmount& nMinimumAmount, const CAmount& nMaximumAmount, const CAmount& nMinimumSumAmount, const uint64_t nMaximumCount )
343+ CoinsResult AvailableCoinsListUnspent (const CWallet& wallet, const CCoinControl* coinControl, CoinFilterParams params )
348344{
349- return AvailableCoins (wallet, coinControl, /* feerate=*/ std::nullopt , nMinimumAmount, nMaximumAmount, nMinimumSumAmount, nMaximumCount, /* only_spendable=*/ false );
345+ params.only_spendable = false ;
346+ return AvailableCoins (wallet, coinControl, /* feerate=*/ std::nullopt , params);
350347}
351348
352349CAmount GetAvailableBalance (const CWallet& wallet, const CCoinControl* coinControl)
353350{
354351 LOCK (wallet.cs_wallet );
355- return AvailableCoins (wallet, coinControl,
356- /* feerate=*/ std::nullopt ,
357- /* nMinimumAmount=*/ 1 ,
358- /* nMaximumAmount=*/ MAX_MONEY,
359- /* nMinimumSumAmount=*/ MAX_MONEY,
360- /* nMaximumCount=*/ 0
361- ).total_amount ;
352+ return AvailableCoins (wallet, coinControl).total_amount ;
362353}
363354
364355const CTxOut& FindNonChangeParentOutput (const CWallet& wallet, const CTransaction& tx, int output)
@@ -897,13 +888,7 @@ static util::Result<CreatedTransactionResult> CreateTransactionInternal(
897888 // allowed (coins automatically selected by the wallet)
898889 CoinsResult available_coins;
899890 if (coin_control.m_allow_other_inputs ) {
900- available_coins = AvailableCoins (wallet,
901- &coin_control,
902- coin_selection_params.m_effective_feerate ,
903- 1 , /* nMinimumAmount*/
904- MAX_MONEY, /* nMaximumAmount*/
905- MAX_MONEY, /* nMinimumSumAmount*/
906- 0 ); /* nMaximumCount*/
891+ available_coins = AvailableCoins (wallet, &coin_control, coin_selection_params.m_effective_feerate );
907892 }
908893
909894 // Choose coins to use
0 commit comments