BSHA3  0.17.99
P2P Blockchain, based on Bitcoin
base.h
Go to the documentation of this file.
1 // Copyright (c) 2017-2018 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #ifndef BITCOIN_INDEX_BASE_H
6 #define BITCOIN_INDEX_BASE_H
7 
8 #include <dbwrapper.h>
9 #include <primitives/block.h>
10 #include <primitives/transaction.h>
11 #include <threadinterrupt.h>
12 #include <uint256.h>
13 #include <validationinterface.h>
14 
15 class CBlockIndex;
16 
23 {
24 protected:
25  class DB : public CDBWrapper
26  {
27  public:
28  DB(const fs::path& path, size_t n_cache_size,
29  bool f_memory = false, bool f_wipe = false, bool f_obfuscate = false);
30 
32  bool ReadBestBlock(CBlockLocator& locator) const;
33 
35  bool WriteBestBlock(const CBlockLocator& locator);
36  };
37 
38 private:
42  std::atomic<bool> m_synced{false};
43 
45  std::atomic<const CBlockIndex*> m_best_block_index{nullptr};
46 
47  std::thread m_thread_sync;
49 
55  void ThreadSync();
56 
58  bool WriteBestBlock(const CBlockIndex* block_index);
59 
60 protected:
61  void BlockConnected(const std::shared_ptr<const CBlock>& block, const CBlockIndex* pindex,
62  const std::vector<CTransactionRef>& txn_conflicted) override;
63 
64  void ChainStateFlushed(const CBlockLocator& locator) override;
65 
67  virtual bool Init();
68 
70  virtual bool WriteBlock(const CBlock& block, const CBlockIndex* pindex) { return true; }
71 
72  virtual DB& GetDB() const = 0;
73 
75  virtual const char* GetName() const = 0;
76 
77 public:
79  virtual ~BaseIndex();
80 
87 
88  void Interrupt();
89 
92  void Start();
93 
95  void Stop();
96 };
97 
98 #endif // BITCOIN_INDEX_BASE_H
virtual bool Init()
Initialize internal state from the database and block index.
Definition: base.cpp:55
CThreadInterrupt m_interrupt
Definition: base.h:48
void ChainStateFlushed(const CBlockLocator &locator) override
Notifies listeners of the new active block chain on-disk.
Definition: base.cpp:190
Describes a place in the block chain to another node such that if the other node doesn&#39;t have the sam...
Definition: block.h:128
std::atomic< bool > m_synced
Whether the index is in sync with the main chain.
Definition: base.h:42
Definition: block.h:74
Implement this to subscribe to events generated in validation.
void Stop()
Stops the instance from staying in sync with blockchain updates.
Definition: base.cpp:271
std::thread m_thread_sync
Definition: base.h:47
virtual bool WriteBlock(const CBlock &block, const CBlockIndex *pindex)
Write update index entries for a newly connected block.
Definition: base.h:70
virtual ~BaseIndex()
Destructor interrupts sync thread if running and blocks until it exits.
Definition: base.cpp:49
void Interrupt()
Definition: base.cpp:252
Base class for indices of blockchain data.
Definition: base.h:22
bool BlockUntilSyncedToCurrentChain()
Blocks the current thread until the index is caught up to the current state of the block chain...
Definition: base.cpp:228
void Start()
Start initializes the sync state and registers the instance as a ValidationInterface so that it stays...
Definition: base.cpp:257
bool WriteBestBlock(const CBlockIndex *block_index)
Write the current chain block locator to the DB.
Definition: base.cpp:143
bool WriteBestBlock(const CBlockLocator &locator)
Write block locator of the chain that the txindex is in sync with.
Definition: base.cpp:44
The block chain is a tree shaped structure starting with the genesis block at the root...
Definition: chain.h:170
void BlockConnected(const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex, const std::vector< CTransactionRef > &txn_conflicted) override
Notifies listeners of a block being connected.
Definition: base.cpp:152
void ThreadSync()
Sync the index with the block index starting from the current best block.
Definition: base.cpp:84
virtual const char * GetName() const =0
Get the name of the index for display in logs.
DB(const fs::path &path, size_t n_cache_size, bool f_memory=false, bool f_wipe=false, bool f_obfuscate=false)
Definition: base.cpp:31
bool ReadBestBlock(CBlockLocator &locator) const
Read block locator of the chain that the txindex is in sync with.
Definition: base.cpp:35
virtual DB & GetDB() const =0
std::atomic< const CBlockIndex * > m_best_block_index
The last block in the chain that the index is in sync with.
Definition: base.h:45