Bitcoin
validationinterface.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2018 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #ifndef BITCOIN_VALIDATIONINTERFACE_H
7 #define BITCOIN_VALIDATIONINTERFACE_H
8 
9 #include <primitives/transaction.h> // CTransaction(Ref)
10 #include <sync.h>
11 
12 #include <functional>
13 #include <memory>
14 
16 class CBlock;
17 class CBlockIndex;
18 struct CBlockLocator;
19 class CConnman;
21 class CValidationState;
22 class uint256;
23 class CScheduler;
24 class CTxMemPool;
25 enum class MemPoolRemovalReason;
26 
27 // These functions dispatch to one or all registered wallets
28 
44 void CallFunctionInValidationInterfaceQueue(std::function<void ()> func);
55 
72 protected:
77  ~CValidationInterface() = default;
87  virtual void UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) {}
93  virtual void TransactionAddedToMempool(const CTransactionRef &ptxn) {}
104  virtual void TransactionRemovedFromMempool(const CTransactionRef &ptx) {}
111  virtual void BlockConnected(const std::shared_ptr<const CBlock> &block, const CBlockIndex *pindex, const std::vector<CTransactionRef> &txnConflicted) {}
117  virtual void BlockDisconnected(const std::shared_ptr<const CBlock> &block) {}
134  virtual void ChainStateFlushed(const CBlockLocator &locator) {}
141  virtual void BlockChecked(const CBlock&, const CValidationState&) {}
145  virtual void NewPoWValidBlock(const CBlockIndex *pindex, const std::shared_ptr<const CBlock>& block) {};
149 };
150 
151 struct MainSignalsInstance;
153 private:
154  std::unique_ptr<MainSignalsInstance> m_internals;
155 
159  friend void ::CallFunctionInValidationInterfaceQueue(std::function<void ()> func);
160 
162 
163 public:
170 
171  size_t CallbacksPending();
172 
177 
178  void UpdatedBlockTip(const CBlockIndex *, const CBlockIndex *, bool fInitialDownload);
180  void BlockConnected(const std::shared_ptr<const CBlock> &, const CBlockIndex *pindex, const std::shared_ptr<const std::vector<CTransactionRef>> &);
181  void BlockDisconnected(const std::shared_ptr<const CBlock> &);
182  void ChainStateFlushed(const CBlockLocator &);
183  void BlockChecked(const CBlock&, const CValidationState&);
184  void NewPoWValidBlock(const CBlockIndex *, const std::shared_ptr<const CBlock>&);
185 };
186 
188 
189 #endif // BITCOIN_VALIDATIONINTERFACE_H
std::shared_ptr< const CTransaction > CTransactionRef
Definition: transaction.h:408
size_t CallbacksPending()
Definition: validationinterface.cpp:71
virtual void TransactionAddedToMempool(const CTransactionRef &ptxn)
Definition: validationinterface.h:93
void BlockChecked(const CBlock &, const CValidationState &)
Definition: validationinterface.cpp:173
void UnregisterWithMempoolSignals(CTxMemPool &pool)
Definition: validationinterface.cpp:83
CCriticalSection cs_main
Definition: validation.cpp:100
Definition: block.h:126
Definition: scheduler.h:37
void BlockConnected(const std::shared_ptr< const CBlock > &, const CBlockIndex *pindex, const std::shared_ptr< const std::vector< CTransactionRef >> &)
Definition: validationinterface.cpp:155
void NewPoWValidBlock(const CBlockIndex *, const std::shared_ptr< const CBlock > &)
Definition: validationinterface.cpp:177
Definition: net.h:113
void RegisterBackgroundSignalScheduler(CScheduler &scheduler)
Definition: validationinterface.cpp:56
MemPoolRemovalReason
Definition: txmempool.h:347
Definition: validation.h:98
static CScheduler scheduler
Definition: init.cpp:178
void MempoolEntryRemoved(CTransactionRef tx, MemPoolRemovalReason reason)
Definition: validationinterface.cpp:131
void BlockDisconnected(const std::shared_ptr< const CBlock > &)
Definition: validationinterface.cpp:161
virtual void TransactionRemovedFromMempool(const CTransactionRef &ptx)
Definition: validationinterface.h:104
void FlushBackgroundCallbacks()
Definition: validationinterface.cpp:65
virtual void BlockDisconnected(const std::shared_ptr< const CBlock > &block)
Definition: validationinterface.h:117
virtual void ChainStateFlushed(const CBlockLocator &locator)
Definition: validationinterface.h:134
void TransactionAddedToMempool(const CTransactionRef &)
Definition: validationinterface.cpp:149
void UpdatedBlockTip(const CBlockIndex *, const CBlockIndex *, bool fInitialDownload)
Definition: validationinterface.cpp:139
void RegisterValidationInterface(CValidationInterface *pwalletIn)
Definition: validationinterface.cpp:92
virtual void BlockChecked(const CBlock &, const CValidationState &)
Definition: validationinterface.h:141
void SyncWithValidationInterfaceQueue() LOCKS_EXCLUDED(cs_main)
Definition: validationinterface.cpp:121
void UnregisterBackgroundSignalScheduler()
Definition: validationinterface.cpp:61
void CallFunctionInValidationInterfaceQueue(std::function< void()> func)
Definition: validationinterface.cpp:117
virtual void BlockConnected(const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex, const std::vector< CTransactionRef > &txnConflicted)
Definition: validationinterface.h:111
#define LOCKS_EXCLUDED(...)
Definition: thread_annotations.h:21
CMainSignals & GetMainSignals()
Definition: validationinterface.cpp:87
Definition: uint256.h:121
Definition: validationinterface.h:152
void RegisterWithMempoolSignals(CTxMemPool &pool)
Definition: validationinterface.cpp:76
Definition: validationinterface.cpp:30
Definition: validationinterface.h:71
Definition: txmempool.h:443
virtual void NewPoWValidBlock(const CBlockIndex *pindex, const std::shared_ptr< const CBlock > &block)
Definition: validationinterface.h:145
void UnregisterAllValidationInterfaces()
Definition: validationinterface.cpp:110
Definition: chain.h:139
void ChainStateFlushed(const CBlockLocator &)
Definition: validationinterface.cpp:167
Definition: block.h:72
virtual void UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload)
Definition: validationinterface.h:87
void UnregisterValidationInterface(CValidationInterface *pwalletIn)
Definition: validationinterface.cpp:104
std::unique_ptr< MainSignalsInstance > m_internals
Definition: validationinterface.h:154