diff options
author | dergoegge <n.goeggi@gmail.com> | 2023-01-16 16:13:52 +0100 |
---|---|---|
committer | dergoegge <n.goeggi@gmail.com> | 2023-01-23 17:18:35 +0100 |
commit | 1429f8377017c0029cb87c4d355c37b796432611 (patch) | |
tree | 5ee91a8932ba3d8faa9e1c849aaf23781f78aade | |
parent | dbca00ef76e5a004555dbd4cdc9209492f02e358 (diff) |
[block encodings] Make CheckBlock mockable for PartiallyDownloadedBlock
-rw-r--r-- | src/blockencodings.cpp | 3 | ||||
-rw-r--r-- | src/blockencodings.h | 10 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/blockencodings.cpp b/src/blockencodings.cpp index bcb86d75cc..c83e893c0e 100644 --- a/src/blockencodings.cpp +++ b/src/blockencodings.cpp @@ -197,7 +197,8 @@ ReadStatus PartiallyDownloadedBlock::FillBlock(CBlock& block, const std::vector< return READ_STATUS_INVALID; BlockValidationState state; - if (!CheckBlock(block, state, Params().GetConsensus())) { + CheckBlockFn check_block = m_check_block_mock ? m_check_block_mock : CheckBlock; + if (!check_block(block, state, Params().GetConsensus(), /*fCheckPoW=*/true, /*fCheckMerkleRoot=*/true)) { // TODO: We really want to just check merkle tree manually here, // but that is expensive, and CheckBlock caches a block's // "checked-status" (in the CBlock?). CBlock should be able to diff --git a/src/blockencodings.h b/src/blockencodings.h index e60c1e3db4..7207ff1ae2 100644 --- a/src/blockencodings.h +++ b/src/blockencodings.h @@ -7,8 +7,13 @@ #include <primitives/block.h> +#include <functional> class CTxMemPool; +class BlockValidationState; +namespace Consensus { +struct Params; +}; // Transaction compression schemes for compact block relay can be introduced by writing // an actual formatter here. @@ -129,6 +134,11 @@ protected: const CTxMemPool* pool; public: CBlockHeader header; + + // Can be overriden for testing + using CheckBlockFn = std::function<bool(const CBlock&, BlockValidationState&, const Consensus::Params&, bool, bool)>; + CheckBlockFn m_check_block_mock{nullptr}; + explicit PartiallyDownloadedBlock(CTxMemPool* poolIn) : pool(poolIn) {} // extra_txn is a list of extra transactions to look at, in <witness hash, reference> form |