aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/chain.cpp
diff options
context:
space:
mode:
authorRussell Yanofsky <[email protected]>2017-07-27 10:08:31 -0400
committerRussell Yanofsky <[email protected]>2019-01-15 12:42:00 -0400
commit700c42b85d20e624bef4228eef062c93084efab5 (patch)
tree60f0213d9b6671995ae6e7d2015d57ffdda89f4b /src/interfaces/chain.cpp
parentMerge #14433: Add checksum in gitian build scripts for ossl (diff)
downloaddiscoin-700c42b85d20e624bef4228eef062c93084efab5.tar.xz
discoin-700c42b85d20e624bef4228eef062c93084efab5.zip
Add height, depth, and hash methods 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 <[email protected]>
Diffstat (limited to 'src/interfaces/chain.cpp')
-rw-r--r--src/interfaces/chain.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/interfaces/chain.cpp b/src/interfaces/chain.cpp
index 2571a9103..138d1bfd5 100644
--- a/src/interfaces/chain.cpp
+++ b/src/interfaces/chain.cpp
@@ -4,7 +4,9 @@
#include <interfaces/chain.h>
+#include <chain.h>
#include <sync.h>
+#include <uint256.h>
#include <util/system.h>
#include <validation.h>
@@ -16,6 +18,34 @@ namespace {
class LockImpl : public Chain::Lock
{
+ Optional<int> getHeight() override
+ {
+ int height = ::chainActive.Height();
+ if (height >= 0) {
+ return height;
+ }
+ return nullopt;
+ }
+ Optional<int> getBlockHeight(const uint256& hash) override
+ {
+ CBlockIndex* block = LookupBlockIndex(hash);
+ if (block && ::chainActive.Contains(block)) {
+ return block->nHeight;
+ }
+ return nullopt;
+ }
+ int getBlockDepth(const uint256& hash) override
+ {
+ const Optional<int> tip_height = getHeight();
+ const Optional<int> height = getBlockHeight(hash);
+ return tip_height && height ? *tip_height - *height + 1 : 0;
+ }
+ uint256 getBlockHash(int height) override
+ {
+ CBlockIndex* block = ::chainActive[height];
+ assert(block != nullptr);
+ return block->GetBlockHash();
+ }
};
class LockingStateImpl : public LockImpl, public UniqueLock<CCriticalSection>