diff options
| author | Russell Yanofsky <[email protected]> | 2019-01-07 22:56:46 -0800 |
|---|---|---|
| committer | Russell Yanofsky <[email protected]> | 2019-01-15 08:42:00 -0800 |
| commit | 2ffb07929ef480bd114defdc10b6a84463f222be (patch) | |
| tree | 49199da132e8043f486a6d9702b2b22bdda9a9fc /src/interfaces/chain.cpp | |
| parent | Add time methods to the Chain interface (diff) | |
| download | discoin-2ffb07929ef480bd114defdc10b6a84463f222be.tar.xz discoin-2ffb07929ef480bd114defdc10b6a84463f222be.zip | |
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 <[email protected]>
Diffstat (limited to 'src/interfaces/chain.cpp')
| -rw-r--r-- | src/interfaces/chain.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/interfaces/chain.cpp b/src/interfaces/chain.cpp index ca2533bb1..6e2224bc3 100644 --- a/src/interfaces/chain.cpp +++ b/src/interfaces/chain.cpp @@ -5,6 +5,8 @@ #include <interfaces/chain.h> #include <chain.h> +#include <chainparams.h> +#include <primitives/block.h> #include <sync.h> #include <uint256.h> #include <util/system.h> @@ -58,6 +60,22 @@ class LockImpl : public Chain::Lock assert(block != nullptr); return block->GetMedianTimePast(); } + Optional<int> findFork(const uint256& hash, Optional<int>* height) override + { + const CBlockIndex* block = LookupBlockIndex(hash); + const CBlockIndex* fork = block ? ::chainActive.FindFork(block) : nullptr; + if (height) { + if (block) { + *height = block->nHeight; + } else { + height->reset(); + } + } + if (fork) { + return fork->nHeight; + } + return nullopt; + } }; class LockingStateImpl : public LockImpl, public UniqueLock<CCriticalSection> @@ -77,6 +95,27 @@ public: return std::move(result); } std::unique_ptr<Chain::Lock> assumeLocked() override { return MakeUnique<LockImpl>(); } + bool findBlock(const uint256& hash, CBlock* block, int64_t* time, int64_t* time_max) override + { + CBlockIndex* index; + { + LOCK(cs_main); + index = LookupBlockIndex(hash); + if (!index) { + return false; + } + if (time) { + *time = index->GetBlockTime(); + } + if (time_max) { + *time_max = index->GetBlockTimeMax(); + } + } + if (block && !ReadBlockFromDisk(*block, index, Params().GetConsensus())) { + block->SetNull(); + } + return true; + } }; } // namespace |