Remove uses of CheckFinalTx in wallet code
This commit does not change behavior.
This commit is contained in:
parent
f3f9c1de19
commit
80f52a2267
5 changed files with 18 additions and 15 deletions
|
@ -8,6 +8,7 @@
|
|||
#include <chainparams.h>
|
||||
#include <primitives/block.h>
|
||||
#include <sync.h>
|
||||
#include <threadsafety.h>
|
||||
#include <uint256.h>
|
||||
#include <util/system.h>
|
||||
#include <validation.h>
|
||||
|
@ -132,6 +133,11 @@ class LockImpl : public Chain::Lock
|
|||
}
|
||||
return nullopt;
|
||||
}
|
||||
bool checkFinalTx(const CTransaction& tx) override
|
||||
{
|
||||
LockAnnotation lock(::cs_main);
|
||||
return CheckFinalTx(tx);
|
||||
}
|
||||
};
|
||||
|
||||
class LockingStateImpl : public LockImpl, public UniqueLock<CCriticalSection>
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
class CBlock;
|
||||
class CScheduler;
|
||||
class CTransaction;
|
||||
class uint256;
|
||||
struct CBlockLocator;
|
||||
|
||||
|
@ -102,6 +103,9 @@ public:
|
|||
//! is guaranteed to be an ancestor of the block used to create the
|
||||
//! locator.
|
||||
virtual Optional<int> findLocatorFork(const CBlockLocator& locator) = 0;
|
||||
|
||||
//! Check if transaction will be final given chain height current time.
|
||||
virtual bool checkFinalTx(const CTransaction& tx) = 0;
|
||||
};
|
||||
|
||||
//! Return Lock interface. Chain is locked when this is called, and
|
||||
|
|
|
@ -99,7 +99,7 @@ WalletTx MakeWalletTx(interfaces::Chain::Lock& locked_chain, CWallet& wallet, co
|
|||
//! Construct wallet tx status struct.
|
||||
WalletTxStatus MakeWalletTxStatus(interfaces::Chain::Lock& locked_chain, const CWalletTx& wtx)
|
||||
{
|
||||
LockAnnotation lock(::cs_main); // Temporary, for CheckFinalTx below. Removed in upcoming commit.
|
||||
LockAnnotation lock(::cs_main); // Temporary, for mapBlockIndex below. Removed in upcoming commit.
|
||||
|
||||
WalletTxStatus result;
|
||||
auto mi = ::mapBlockIndex.find(wtx.hashBlock);
|
||||
|
@ -109,7 +109,7 @@ WalletTxStatus MakeWalletTxStatus(interfaces::Chain::Lock& locked_chain, const C
|
|||
result.depth_in_main_chain = wtx.GetDepthInMainChain(locked_chain);
|
||||
result.time_received = wtx.nTimeReceived;
|
||||
result.lock_time = wtx.tx->nLockTime;
|
||||
result.is_final = CheckFinalTx(*wtx.tx);
|
||||
result.is_final = locked_chain.checkFinalTx(*wtx.tx);
|
||||
result.is_trusted = wtx.IsTrusted(locked_chain);
|
||||
result.is_abandoned = wtx.isAbandoned();
|
||||
result.is_coinbase = wtx.IsCoinBase();
|
||||
|
|
|
@ -607,7 +607,6 @@ static UniValue getreceivedbyaddress(const JSONRPCRequest& request)
|
|||
// the user could have gotten from another RPC command prior to now
|
||||
pwallet->BlockUntilSyncedToCurrentChain();
|
||||
|
||||
LockAnnotation lock(::cs_main); // Temporary, for CheckFinalTx below. Removed in upcoming commit.
|
||||
auto locked_chain = pwallet->chain().lock();
|
||||
LOCK(pwallet->cs_wallet);
|
||||
|
||||
|
@ -630,7 +629,7 @@ static UniValue getreceivedbyaddress(const JSONRPCRequest& request)
|
|||
CAmount nAmount = 0;
|
||||
for (const std::pair<const uint256, CWalletTx>& pairWtx : pwallet->mapWallet) {
|
||||
const CWalletTx& wtx = pairWtx.second;
|
||||
if (wtx.IsCoinBase() || !CheckFinalTx(*wtx.tx))
|
||||
if (wtx.IsCoinBase() || !locked_chain->checkFinalTx(*wtx.tx))
|
||||
continue;
|
||||
|
||||
for (const CTxOut& txout : wtx.tx->vout)
|
||||
|
@ -679,7 +678,6 @@ static UniValue getreceivedbylabel(const JSONRPCRequest& request)
|
|||
// the user could have gotten from another RPC command prior to now
|
||||
pwallet->BlockUntilSyncedToCurrentChain();
|
||||
|
||||
LockAnnotation lock(::cs_main); // Temporary, for CheckFinalTx below. Removed in upcoming commit.
|
||||
auto locked_chain = pwallet->chain().lock();
|
||||
LOCK(pwallet->cs_wallet);
|
||||
|
||||
|
@ -696,7 +694,7 @@ static UniValue getreceivedbylabel(const JSONRPCRequest& request)
|
|||
CAmount nAmount = 0;
|
||||
for (const std::pair<const uint256, CWalletTx>& pairWtx : pwallet->mapWallet) {
|
||||
const CWalletTx& wtx = pairWtx.second;
|
||||
if (wtx.IsCoinBase() || !CheckFinalTx(*wtx.tx))
|
||||
if (wtx.IsCoinBase() || !locked_chain->checkFinalTx(*wtx.tx))
|
||||
continue;
|
||||
|
||||
for (const CTxOut& txout : wtx.tx->vout)
|
||||
|
@ -1051,8 +1049,6 @@ struct tallyitem
|
|||
|
||||
static UniValue ListReceived(interfaces::Chain::Lock& locked_chain, CWallet * const pwallet, const UniValue& params, bool by_label) EXCLUSIVE_LOCKS_REQUIRED(pwallet->cs_wallet)
|
||||
{
|
||||
LockAnnotation lock(::cs_main); // Temporary, for CheckFinalTx below. Removed in upcoming commit.
|
||||
|
||||
// Minimum confirmations
|
||||
int nMinDepth = 1;
|
||||
if (!params[0].isNull())
|
||||
|
@ -1083,7 +1079,7 @@ static UniValue ListReceived(interfaces::Chain::Lock& locked_chain, CWallet * co
|
|||
for (const std::pair<const uint256, CWalletTx>& pairWtx : pwallet->mapWallet) {
|
||||
const CWalletTx& wtx = pairWtx.second;
|
||||
|
||||
if (wtx.IsCoinBase() || !CheckFinalTx(*wtx.tx))
|
||||
if (wtx.IsCoinBase() || !locked_chain.checkFinalTx(*wtx.tx))
|
||||
continue;
|
||||
|
||||
int nDepth = wtx.GetDepthInMainChain(locked_chain);
|
||||
|
|
|
@ -2075,10 +2075,8 @@ bool CWalletTx::InMempool() const
|
|||
|
||||
bool CWalletTx::IsTrusted(interfaces::Chain::Lock& locked_chain) const
|
||||
{
|
||||
LockAnnotation lock(::cs_main); // Temporary, for CheckFinalTx below. Removed in upcoming commit.
|
||||
|
||||
// Quick answer in most cases
|
||||
if (!CheckFinalTx(*tx))
|
||||
if (!locked_chain.checkFinalTx(*tx))
|
||||
return false;
|
||||
int nDepth = GetDepthInMainChain(locked_chain);
|
||||
if (nDepth >= 1)
|
||||
|
@ -2263,7 +2261,6 @@ CAmount CWallet::GetImmatureWatchOnlyBalance() const
|
|||
// trusted.
|
||||
CAmount CWallet::GetLegacyBalance(const isminefilter& filter, int minDepth) const
|
||||
{
|
||||
LockAnnotation lock(::cs_main); // Temporary, for CheckFinalTx below. Removed in upcoming commit.
|
||||
auto locked_chain = chain().lock();
|
||||
LOCK(cs_wallet);
|
||||
|
||||
|
@ -2271,7 +2268,7 @@ CAmount CWallet::GetLegacyBalance(const isminefilter& filter, int minDepth) cons
|
|||
for (const auto& entry : mapWallet) {
|
||||
const CWalletTx& wtx = entry.second;
|
||||
const int depth = wtx.GetDepthInMainChain(*locked_chain);
|
||||
if (depth < 0 || !CheckFinalTx(*wtx.tx) || wtx.IsImmatureCoinBase(*locked_chain)) {
|
||||
if (depth < 0 || !locked_chain->checkFinalTx(*wtx.tx) || wtx.IsImmatureCoinBase(*locked_chain)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -2325,7 +2322,7 @@ void CWallet::AvailableCoins(interfaces::Chain::Lock& locked_chain, std::vector<
|
|||
const uint256& wtxid = entry.first;
|
||||
const CWalletTx* pcoin = &entry.second;
|
||||
|
||||
if (!CheckFinalTx(*pcoin->tx))
|
||||
if (!locked_chain.checkFinalTx(*pcoin->tx))
|
||||
continue;
|
||||
|
||||
if (pcoin->IsImmatureCoinBase(locked_chain))
|
||||
|
|
Loading…
Reference in a new issue