From 71292ec50397121c269b16f0bf4303ea215b054b Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Wed, 29 Nov 2023 16:24:18 +0700 Subject: [PATCH] refactor: replace usage of deterministicMNManager to new interface listMNCollaterials --- src/wallet/wallet.cpp | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index ba0d94cdaa4aa5..cf55272f3fb03b 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -45,7 +45,6 @@ #include #include #include -#include #include #include @@ -876,15 +875,16 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFlushOnClose) wtx.nTimeSmart = ComputeTimeSmart(wtx); AddToSpends(hash); - auto mnList = deterministicMNManager->GetListAtChainTip(); + std::vector> outputs; for(unsigned int i = 0; i < wtx.tx->vout.size(); ++i) { if (IsMine(wtx.tx->vout[i]) && !IsSpent(hash, i)) { setWalletUTXO.insert(COutPoint(hash, i)); - if (CDeterministicMNManager::IsProTxWithCollateral(wtx.tx, i) || mnList.HasMNByCollateral(COutPoint(hash, i))) { - LockCoin(COutPoint(hash, i)); - } + outputs.emplace_back(wtx.tx, i); } } + for (const auto& outPoint : m_chain->listMNCollaterials(outputs)) { + LockCoin(outPoint); + } } bool fUpdated = false; @@ -907,16 +907,19 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFlushOnClose) fUpdated = true; } - auto mnList = deterministicMNManager->GetListAtChainTip(); - for (unsigned int i = 0; i < wtx.tx->vout.size(); ++i) { + std::vector> outputs; + for(unsigned int i = 0; i < wtx.tx->vout.size(); ++i) { if (IsMine(wtx.tx->vout[i]) && !IsSpent(hash, i)) { bool new_utxo = setWalletUTXO.insert(COutPoint(hash, i)).second; - if (new_utxo && (CDeterministicMNManager::IsProTxWithCollateral(wtx.tx, i) || mnList.HasMNByCollateral(COutPoint(hash, i)))) { - LockCoin(COutPoint(hash, i)); + if (new_utxo) { + outputs.emplace_back(wtx.tx, i); + fUpdated = true; } - fUpdated |= new_utxo; } } + for (const auto& outPoint : m_chain->listMNCollaterials(outputs)) { + LockCoin(outPoint); + } } //// debug print @@ -3876,18 +3879,19 @@ DBErrors CWallet::LoadWallet(bool& fFirstRunRet) // This avoids accidental spending of collaterals. They can still be unlocked manually if a spend is really intended. void CWallet::AutoLockMasternodeCollaterals() { - auto mnList = deterministicMNManager->GetListAtChainTip(); + std::vector> outputs; LOCK(cs_wallet); for (const auto& pair : mapWallet) { for (unsigned int i = 0; i < pair.second.tx->vout.size(); ++i) { if (IsMine(pair.second.tx->vout[i]) && !IsSpent(pair.first, i)) { - if (CDeterministicMNManager::IsProTxWithCollateral(pair.second.tx, i) || mnList.HasMNByCollateral(COutPoint(pair.first, i))) { - LockCoin(COutPoint(pair.first, i)); - } + outputs.emplace_back(pair.second.tx, i); } } } + for (const auto& outPoint : m_chain->listMNCollaterials(outputs)) { + LockCoin(outPoint); + } } DBErrors CWallet::ZapSelectTx(std::vector& vHashIn, std::vector& vHashOut)