From 93a18a3650292afbb441a47d1fa1b94aeb0164e3 Mon Sep 17 00:00:00 2001 From: Gavin Andresen Date: Sat, 15 Feb 2014 16:38:28 -0500 Subject: Remove CWalletTx::vfSpent Use the spent outpoint multimap to figure out which wallet transaction outputs are unspent, instead of a vfSpent array that is saved to disk. --- src/qt/coincontroldialog.cpp | 9 +++++---- src/qt/walletmodel.cpp | 6 ++++++ src/qt/walletmodel.h | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) (limited to 'src/qt') diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp index e1a9140f45..2d8fcd7a52 100644 --- a/src/qt/coincontroldialog.cpp +++ b/src/qt/coincontroldialog.cpp @@ -468,11 +468,12 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog) BOOST_FOREACH(const COutput& out, vOutputs) { - // unselect already spent, very unlikely scenario, this could happen when selected are spent elsewhere, like rpc or another computer - if (out.tx->IsSpent(out.i)) + // unselect already spent, very unlikely scenario, this could happen + // when selected are spent elsewhere, like rpc or another computer + uint256 txhash = out.tx->GetHash(); + COutPoint outpt(txhash, out.i); + if (model->isSpent(outpt)) { - uint256 txhash = out.tx->GetHash(); - COutPoint outpt(txhash, out.i); coinControl->UnSelect(outpt); continue; } diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index 3549cd49f0..eae448fee4 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -501,6 +501,12 @@ void WalletModel::getOutputs(const std::vector& vOutpoints, std::vect } } +bool WalletModel::isSpent(const COutPoint& outpoint) const +{ + LOCK(wallet->cs_wallet); + return wallet->IsSpent(outpoint.hash, outpoint.n); +} + // AvailableCoins + LockedCoins grouped by wallet address (put change in one group with wallet address) void WalletModel::listCoins(std::map >& mapCoins) const { diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index 91a6fba222..28a9169e27 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -180,6 +180,7 @@ public: bool getPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const; void getOutputs(const std::vector& vOutpoints, std::vector& vOutputs); + bool isSpent(const COutPoint& outpoint) const; void listCoins(std::map >& mapCoins) const; bool isLockedCoin(uint256 hash, unsigned int n) const; -- cgit v1.2.3