Browse Source

Use CCoinControl selection in CWallet::FundTransaction

0.13
João Barbosa 9 years ago
parent
commit
d6cc6a1830
  1. 5
      src/coincontrol.h
  2. 2
      src/qt/coincontroldialog.cpp
  3. 13
      src/wallet/wallet.cpp

5
src/coincontrol.h

@ -38,10 +38,9 @@ public:
return (setSelected.size() > 0); return (setSelected.size() > 0);
} }
bool IsSelected(const uint256& hash, unsigned int n) const bool IsSelected(const COutPoint& output) const
{ {
COutPoint outpt(hash, n); return (setSelected.count(output) > 0);
return (setSelected.count(outpt) > 0);
} }
void Select(const COutPoint& output) void Select(const COutPoint& output)

2
src/qt/coincontroldialog.cpp

@ -796,7 +796,7 @@ void CoinControlDialog::updateView()
} }
// set checkbox // set checkbox
if (coinControl->IsSelected(txhash, out.i)) if (coinControl->IsSelected(COutPoint(txhash, out.i)))
itemOutput->setCheckState(COLUMN_CHECKBOX, Qt::Checked); itemOutput->setCheckState(COLUMN_CHECKBOX, Qt::Checked);
} }

13
src/wallet/wallet.cpp

@ -1669,7 +1669,7 @@ void CWallet::AvailableCoins(vector<COutput>& vCoins, bool fOnlyConfirmed, const
isminetype mine = IsMine(pcoin->vout[i]); isminetype mine = IsMine(pcoin->vout[i]);
if (!(IsSpent(wtxid, i)) && mine != ISMINE_NO && if (!(IsSpent(wtxid, i)) && mine != ISMINE_NO &&
!IsLockedCoin((*it).first, i) && (pcoin->vout[i].nValue > 0 || fIncludeZeroValue) && !IsLockedCoin((*it).first, i) && (pcoin->vout[i].nValue > 0 || fIncludeZeroValue) &&
(!coinControl || !coinControl->HasSelected() || coinControl->fAllowOtherInputs || coinControl->IsSelected((*it).first, i))) (!coinControl || !coinControl->HasSelected() || coinControl->fAllowOtherInputs || coinControl->IsSelected(COutPoint((*it).first, i))))
vCoins.push_back(COutput(pcoin, i, nDepth, vCoins.push_back(COutput(pcoin, i, nDepth,
((mine & ISMINE_SPENDABLE) != ISMINE_NO) || ((mine & ISMINE_SPENDABLE) != ISMINE_NO) ||
(coinControl && coinControl->fAllowWatchOnly && (mine & ISMINE_WATCH_SOLVABLE) != ISMINE_NO))); (coinControl && coinControl->fAllowWatchOnly && (mine & ISMINE_WATCH_SOLVABLE) != ISMINE_NO)));
@ -1927,16 +1927,7 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount &nFeeRet, int& nC
// Add new txins (keeping original txin scriptSig/order) // Add new txins (keeping original txin scriptSig/order)
BOOST_FOREACH(const CTxIn& txin, wtx.vin) BOOST_FOREACH(const CTxIn& txin, wtx.vin)
{ {
bool found = false; if (!coinControl.IsSelected(txin.prevout))
BOOST_FOREACH(const CTxIn& origTxIn, tx.vin)
{
if (txin.prevout.hash == origTxIn.prevout.hash && txin.prevout.n == origTxIn.prevout.n)
{
found = true;
break;
}
}
if (!found)
tx.vin.push_back(txin); tx.vin.push_back(txin);
} }

Loading…
Cancel
Save