6#include <chainparams.h>
30 std::vector<std::unique_ptr<CBlockIndex>> blocks;
31 const uint32_t fixed_time = fuzzed_data_provider.
ConsumeIntegral<uint32_t>();
32 const uint32_t fixed_bits = fuzzed_data_provider.
ConsumeIntegral<uint32_t>();
39 *blocks.emplace_back(std::make_unique<CBlockIndex>(*block_header))};
41 CBlockIndex* previous_block = blocks.empty() ? nullptr :
PickValue(fuzzed_data_provider, blocks).get();
42 const int current_height = (previous_block !=
nullptr && previous_block->
nHeight != std::numeric_limits<int>::max()) ? previous_block->
nHeight + 1 : 0;
44 current_block.
pprev = previous_block;
47 current_block.
nHeight = current_height;
52 current_block.
nTime = fixed_time + seconds;
56 current_block.
nBits = fixed_bits;
72 const auto& to =
PickValue(fuzzed_data_provider, blocks);
73 const auto& from =
PickValue(fuzzed_data_provider, blocks);
74 const auto& tip =
PickValue(fuzzed_data_provider, blocks);
94 std::vector<std::unique_ptr<CBlockIndex>> blocks;
96 const uint32_t old_time{fuzzed_data_provider.
ConsumeIntegral<uint32_t>()};
97 const uint32_t new_time{fuzzed_data_provider.
ConsumeIntegral<uint32_t>()};
104 if (old_target > pow_limit) {
111 header.
nTime = old_time;
112 header.
nBits = nbits;
114 header.
nTime = new_time;
116 auto current_block{std::make_unique<CBlockIndex>(header)};
117 current_block->pprev = blocks.empty() ? nullptr : blocks.back().get();
118 current_block->nHeight = height;
119 blocks.emplace_back(std::move(current_block));
121 auto last_block{blocks.back().get()};
arith_uint256 UintToArith256(const uint256 &a)
int64_t GetBlockProofEquivalentTime(const CBlockIndex &to, const CBlockIndex &from, const CBlockIndex &tip, const Consensus::Params ¶ms)
Return the time it would take to redo the work difference between from and to, assuming the current h...
arith_uint256 GetBlockProof(const CBlockIndex &block)
Compute how much work a block index entry corresponds to.
void SelectParams(const ChainType chain)
Sets the params returned by Params() to those for the given chain type.
const CChainParams & Params()
Return the currently selected parameters.
#define Assert(val)
Identity function.
The block chain is a tree shaped structure starting with the genesis block at the root,...
CBlockIndex * pprev
pointer to the index of the predecessor of this block
arith_uint256 nChainWork
(memory only) Total amount of work (expected number of hashes) in the chain up to and including this ...
int nHeight
height of the entry in the chain. The genesis block has height 0
const Consensus::Params & GetConsensus() const
T ConsumeIntegralInRange(T min, T max)
256-bit unsigned big integer.
arith_uint256 & SetCompact(uint32_t nCompact, bool *pfNegative=nullptr, bool *pfOverflow=nullptr)
The "compact" format is a representation of a whole number N using an unsigned 32bit number similar t...
uint32_t GetCompact(bool fNegative=false) const
#define LIMITED_WHILE(condition, limit)
Can be used to limit a theoretically unbounded loop.
bool AdditionOverflow(const T i, const T j) noexcept
bool PermittedDifficultyTransition(const Consensus::Params ¶ms, int64_t height, uint32_t old_nbits, uint32_t new_nbits)
Return false if the proof-of-work requirement specified by new_nbits at a given height is not possibl...
unsigned int GetNextWorkRequired(const CBlockIndex *pindexLast, const CBlockHeader *pblock, const Consensus::Params ¶ms)
bool CheckProofOfWorkImpl(uint256 hash, unsigned int nBits, const Consensus::Params ¶ms)
unsigned int CalculateNextWorkRequired(const CBlockIndex *pindexLast, int64_t nFirstBlockTime, const Consensus::Params ¶ms)
Parameters that influence chain consensus.
int64_t DifficultyAdjustmentInterval() const
uint256 powLimit
Proof of work parameters.
int64_t nPowTargetSpacing
auto & PickValue(FuzzedDataProvider &fuzzed_data_provider, Collection &col)
arith_uint256 ConsumeArithUInt256(FuzzedDataProvider &fuzzed_data_provider) noexcept
std::optional< T > ConsumeDeserializable(FuzzedDataProvider &fuzzed_data_provider, const P ¶ms, const std::optional< size_t > &max_length=std::nullopt) noexcept