mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-15 04:11:02 +01:00
This is move-only. Also delete external RecentConfirmedTransactionsFilter() access since it is no longer necessary.
73 lines
2.7 KiB
C++
73 lines
2.7 KiB
C++
// Copyright (c) 2024 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_NODE_TXDOWNLOADMAN_H
|
|
#define BITCOIN_NODE_TXDOWNLOADMAN_H
|
|
|
|
#include <cstdint>
|
|
#include <memory>
|
|
|
|
class CBlock;
|
|
class CRollingBloomFilter;
|
|
class CTxMemPool;
|
|
class GenTxid;
|
|
class TxOrphanage;
|
|
class TxRequestTracker;
|
|
namespace node {
|
|
class TxDownloadManagerImpl;
|
|
|
|
struct TxDownloadOptions {
|
|
/** Read-only reference to mempool. */
|
|
const CTxMemPool& m_mempool;
|
|
};
|
|
|
|
/**
|
|
* Class responsible for deciding what transactions to request and, once
|
|
* downloaded, whether and how to validate them. It is also responsible for
|
|
* deciding what transaction packages to validate and how to resolve orphan
|
|
* transactions. Its data structures include TxRequestTracker for scheduling
|
|
* requests, rolling bloom filters for remembering transactions that have
|
|
* already been {accepted, rejected, confirmed}, an orphanage, and a registry of
|
|
* each peer's transaction relay-related information.
|
|
*
|
|
* Caller needs to interact with TxDownloadManager:
|
|
* - ValidationInterface callbacks.
|
|
* - When a potential transaction relay peer connects or disconnects.
|
|
* - When a transaction or package is accepted or rejected from mempool
|
|
* - When a inv, notfound, or tx message is received
|
|
* - To get instructions for which getdata messages to send
|
|
*
|
|
* This class is not thread-safe. Access must be synchronized using an
|
|
* external mutex.
|
|
*/
|
|
class TxDownloadManager {
|
|
const std::unique_ptr<TxDownloadManagerImpl> m_impl;
|
|
|
|
public:
|
|
explicit TxDownloadManager(const TxDownloadOptions& options);
|
|
~TxDownloadManager();
|
|
|
|
// Get references to internal data structures. Outside access to these data structures should be
|
|
// temporary and removed later once logic has been moved internally.
|
|
TxOrphanage& GetOrphanageRef();
|
|
TxRequestTracker& GetTxRequestRef();
|
|
CRollingBloomFilter& RecentRejectsFilter();
|
|
CRollingBloomFilter& RecentRejectsReconsiderableFilter();
|
|
|
|
// Responses to chain events. TxDownloadManager is not an actual client of ValidationInterface, these are called through PeerManager.
|
|
void ActiveTipChange();
|
|
void BlockConnected(const std::shared_ptr<const CBlock>& pblock);
|
|
void BlockDisconnected();
|
|
|
|
/** Check whether we already have this gtxid in:
|
|
* - mempool
|
|
* - orphanage
|
|
* - m_recent_rejects
|
|
* - m_recent_rejects_reconsiderable (if include_reconsiderable = true)
|
|
* - m_recent_confirmed_transactions
|
|
* */
|
|
bool AlreadyHaveTx(const GenTxid& gtxid, bool include_reconsiderable);
|
|
};
|
|
} // namespace node
|
|
#endif // BITCOIN_NODE_TXDOWNLOADMAN_H
|