diff options
author | Russell Yanofsky <russ@yanofsky.org> | 2019-01-07 22:56:46 -0800 |
---|---|---|
committer | Russell Yanofsky <russ@yanofsky.org> | 2019-01-15 08:42:00 -0800 |
commit | 2ffb07929ef480bd114defdc10b6a84463f222be (patch) | |
tree | 49199da132e8043f486a6d9702b2b22bdda9a9fc /src/interfaces/chain.h | |
parent | d93c4c1d6e0aab5f32306ecd7c1237257b26940d (diff) | |
download | bitcoin-2ffb07929ef480bd114defdc10b6a84463f222be.tar.xz |
Add findFork and findBlock to the Chain interface
And use them to remove uses of chainActive and mapBlockIndex in wallet code
This commit does not change behavior.
Co-authored-by: Ben Woosley <ben.woosley@gmail.com>
Diffstat (limited to 'src/interfaces/chain.h')
-rw-r--r-- | src/interfaces/chain.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/interfaces/chain.h b/src/interfaces/chain.h index 1db9d3861d..8c7bd8c6ea 100644 --- a/src/interfaces/chain.h +++ b/src/interfaces/chain.h @@ -12,6 +12,7 @@ #include <string> #include <vector> +class CBlock; class CScheduler; class uint256; @@ -56,6 +57,13 @@ public: //! Get block median time past. Height must be valid or this function //! will abort. virtual int64_t getBlockMedianTimePast(int height) = 0; + + //! Return height of the highest block on the chain that is an ancestor + //! of the specified block, or nullopt if no common ancestor is found. + //! Also return the height of the specified block as an optional output + //! parameter (to avoid the cost of a second hash lookup in case this + //! information is desired). + virtual Optional<int> findFork(const uint256& hash, Optional<int>* height) = 0; }; //! Return Lock interface. Chain is locked when this is called, and @@ -66,6 +74,17 @@ public: //! method is temporary and is only used in a few places to avoid changing //! behavior while code is transitioned to use the Chain::Lock interface. virtual std::unique_ptr<Lock> assumeLocked() = 0; + + //! Return whether node has the block and optionally return block metadata + //! or contents. + //! + //! If a block pointer is provided to retrieve the block contents, and the + //! block exists but doesn't have data (for example due to pruning), the + //! block will be empty and all fields set to null. + virtual bool findBlock(const uint256& hash, + CBlock* block = nullptr, + int64_t* time = nullptr, + int64_t* max_time = nullptr) = 0; }; //! Interface to let node manage chain clients (wallets, or maybe tools for |