wallet:AvailableCoins filter by destination/s feature implemented + connected to sendmany async operation.
This commit is contained in:
parent
4007e24ed0
commit
359a05d6ae
|
@ -900,21 +900,9 @@ bool AsyncRPCOperation_sendmany::find_utxos(bool fAcceptCoinbase=false) {
|
|||
|
||||
LOCK2(cs_main, pwalletMain->cs_wallet);
|
||||
|
||||
pwalletMain->AvailableCoins(vecOutputs, false, NULL, true, fAcceptCoinbase, true, mindepth_);
|
||||
pwalletMain->AvailableCoins(vecOutputs, false, NULL, true, fAcceptCoinbase, true, mindepth_, &destinations);
|
||||
|
||||
for (const COutput& out : vecOutputs) {
|
||||
|
||||
if (destinations.size()) {
|
||||
CTxDestination address;
|
||||
if (!ExtractDestination(out.tx->vout[out.i].scriptPubKey, address)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!destinations.count(address)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
CScript scriptPubKey = out.tx->vout[out.i].scriptPubKey;
|
||||
CAmount nValue = out.tx->vout[out.i].nValue;
|
||||
SendManyInputUTXO utxo(out.tx->GetHash(), out.i, scriptPubKey, nValue, isCoinbase);
|
||||
|
|
|
@ -3209,7 +3209,14 @@ CAmount CWallet::GetImmatureWatchOnlyBalance() const
|
|||
return nTotal;
|
||||
}
|
||||
|
||||
void CWallet::AvailableCoins(vector<COutput>& vCoins, bool fOnlyConfirmed, const CCoinControl *coinControl, bool fIncludeZeroValue, bool fIncludeCoinBase, bool fOnlySpendable, int nMinDepth) const
|
||||
void CWallet::AvailableCoins(vector<COutput>& vCoins,
|
||||
bool fOnlyConfirmed,
|
||||
const CCoinControl *coinControl,
|
||||
bool fIncludeZeroValue,
|
||||
bool fIncludeCoinBase,
|
||||
bool fOnlySpendable,
|
||||
int nMinDepth,
|
||||
std::set<CTxDestination>* onlyFilterByDests) const
|
||||
{
|
||||
assert(nMinDepth >= 0);
|
||||
vCoins.clear();
|
||||
|
@ -3247,7 +3254,14 @@ void CWallet::AvailableCoins(vector<COutput>& vCoins, bool fOnlyConfirmed, const
|
|||
if (fOnlySpendable && !isSpendable)
|
||||
continue;
|
||||
|
||||
isminetype mine = IsMine(pcoin->vout[i]);
|
||||
// Filter by specific destinations if needed
|
||||
if (onlyFilterByDests && !onlyFilterByDests->empty()) {
|
||||
CTxDestination address;
|
||||
if (!ExtractDestination(output.scriptPubKey, address) || onlyFilterByDests->count(address) == 0) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (!(IsSpent(wtxid, i)) && mine != ISMINE_NO &&
|
||||
!IsLockedCoin((*it).first, i) && (pcoin->vout[i].nValue > 0 || fIncludeZeroValue) &&
|
||||
(!coinControl || !coinControl->HasSelected() || coinControl->fAllowOtherInputs || coinControl->IsSelected((*it).first, i)))
|
||||
|
|
|
@ -1016,7 +1016,8 @@ public:
|
|||
bool fIncludeZeroValue=false,
|
||||
bool fIncludeCoinBase=true,
|
||||
bool fOnlySpendable=false,
|
||||
int nMinDepth = 0) const;
|
||||
int nMinDepth = 0,
|
||||
std::set<CTxDestination>* onlyFilterByDests = nullptr) const;
|
||||
|
||||
/**
|
||||
* Shuffle and select coins until nTargetValue is reached while avoiding
|
||||
|
|
Loading…
Reference in New Issue