aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces
diff options
context:
space:
mode:
authorRussell Yanofsky <russ@yanofsky.org>2020-01-16 16:38:30 -0500
committerRussell Yanofsky <russ@yanofsky.org>2020-03-31 08:36:02 -0500
commitc1694ce6bb7e19a8722d5583cd85ad17da40bb67 (patch)
tree21e0b8bdd3d8cba56623e3f63696f31a9d6a6517 /src/interfaces
parentade5f87971211bc67753f14a0d49e020142efc7c (diff)
downloadbitcoin-c1694ce6bb7e19a8722d5583cd85ad17da40bb67.tar.xz
wallet: Avoid use of Chain::Lock in importprunedfunds
This is a step toward removing the Chain::Lock class and reducing cs_main locking. This change only affects behavior in the case where wallet last block processed falls behind the chain tip, in which case the "Block not found in chain" error will be stricter and not allow importing data from a blocks between the wallet last processed tip and the current node tip.
Diffstat (limited to 'src/interfaces')
-rw-r--r--src/interfaces/chain.cpp8
-rw-r--r--src/interfaces/chain.h6
2 files changed, 14 insertions, 0 deletions
diff --git a/src/interfaces/chain.cpp b/src/interfaces/chain.cpp
index cfaf79f709..1c1fbe7387 100644
--- a/src/interfaces/chain.cpp
+++ b/src/interfaces/chain.cpp
@@ -267,6 +267,14 @@ public:
WAIT_LOCK(cs_main, lock);
return FillBlock(LookupBlockIndex(hash), block, lock);
}
+ bool findAncestorByHash(const uint256& block_hash, const uint256& ancestor_hash, const FoundBlock& ancestor_out) override
+ {
+ WAIT_LOCK(cs_main, lock);
+ const CBlockIndex* block = LookupBlockIndex(block_hash);
+ const CBlockIndex* ancestor = LookupBlockIndex(ancestor_hash);
+ if (block && ancestor && block->GetAncestor(ancestor->nHeight) != ancestor) ancestor = nullptr;
+ return FillBlock(ancestor, ancestor_out, lock);
+ }
void findCoins(std::map<COutPoint, Coin>& coins) override { return FindCoins(m_node, coins); }
double guessVerificationProgress(const uint256& block_hash) override
{
diff --git a/src/interfaces/chain.h b/src/interfaces/chain.h
index 3778ab9a8b..7504f4cfb6 100644
--- a/src/interfaces/chain.h
+++ b/src/interfaces/chain.h
@@ -150,6 +150,12 @@ public:
//! or contents.
virtual bool findBlock(const uint256& hash, const FoundBlock& block={}) = 0;
+ //! Return whether block descends from a specified ancestor, and
+ //! optionally return ancestor information.
+ virtual bool findAncestorByHash(const uint256& block_hash,
+ const uint256& ancestor_hash,
+ const FoundBlock& ancestor_out={}) = 0;
+
//! Look up unspent output information. Returns coins in the mempool and in
//! the current chain UTXO set. Iterates through all the keys in the map and
//! populates the values.