aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces
diff options
context:
space:
mode:
authorRussell Yanofsky <russ@yanofsky.org>2019-01-07 22:35:47 -0800
committerRussell Yanofsky <russ@yanofsky.org>2019-01-15 08:42:00 -0800
commitd93c4c1d6e0aab5f32306ecd7c1237257b26940d (patch)
treee11259962b2fdb58049057658bf924b4266ba892 /src/interfaces
parent700c42b85d20e624bef4228eef062c93084efab5 (diff)
downloadbitcoin-d93c4c1d6e0aab5f32306ecd7c1237257b26940d.tar.xz
Add time 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 <ben.woosley@gmail.com>
Diffstat (limited to 'src/interfaces')
-rw-r--r--src/interfaces/chain.cpp12
-rw-r--r--src/interfaces/chain.h8
-rw-r--r--src/interfaces/wallet.cpp9
3 files changed, 27 insertions, 2 deletions
diff --git a/src/interfaces/chain.cpp b/src/interfaces/chain.cpp
index 138d1bfd5f..ca2533bb1d 100644
--- a/src/interfaces/chain.cpp
+++ b/src/interfaces/chain.cpp
@@ -46,6 +46,18 @@ class LockImpl : public Chain::Lock
assert(block != nullptr);
return block->GetBlockHash();
}
+ int64_t getBlockTime(int height) override
+ {
+ CBlockIndex* block = ::chainActive[height];
+ assert(block != nullptr);
+ return block->GetBlockTime();
+ }
+ int64_t getBlockMedianTimePast(int height) override
+ {
+ CBlockIndex* block = ::chainActive[height];
+ assert(block != nullptr);
+ return block->GetMedianTimePast();
+ }
};
class LockingStateImpl : public LockImpl, public UniqueLock<CCriticalSection>
diff --git a/src/interfaces/chain.h b/src/interfaces/chain.h
index 928b8af1f4..1db9d3861d 100644
--- a/src/interfaces/chain.h
+++ b/src/interfaces/chain.h
@@ -8,6 +8,7 @@
#include <optional.h>
#include <memory>
+#include <stdint.h>
#include <string>
#include <vector>
@@ -48,6 +49,13 @@ public:
//! Get block hash. Height must be valid or this function will abort.
virtual uint256 getBlockHash(int height) = 0;
+
+ //! Get block time. Height must be valid or this function will abort.
+ virtual int64_t getBlockTime(int height) = 0;
+
+ //! Get block median time past. Height must be valid or this function
+ //! will abort.
+ virtual int64_t getBlockMedianTimePast(int height) = 0;
};
//! Return Lock interface. Chain is locked when this is called, and
diff --git a/src/interfaces/wallet.cpp b/src/interfaces/wallet.cpp
index 489cf0981c..88c5db73a1 100644
--- a/src/interfaces/wallet.cpp
+++ b/src/interfaces/wallet.cpp
@@ -333,8 +333,13 @@ public:
if (mi == m_wallet.mapWallet.end()) {
return false;
}
- num_blocks = locked_chain->getHeight().value_or(-1);
- block_time = ::chainActive.Tip()->GetBlockTime();
+ if (Optional<int> height = locked_chain->getHeight()) {
+ num_blocks = *height;
+ block_time = locked_chain->getBlockTime(*height);
+ } else {
+ num_blocks = -1;
+ block_time = -1;
+ }
tx_status = MakeWalletTxStatus(*locked_chain, mi->second);
return true;
}