mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-26 19:23:26 -03:00
1d4cfa4272
The rule against difficulty adjustments changing by more than a factor of 4 can be helpful for anti-DoS measures in contexts where we lack a full headers chain, so expose this functionality separately and in the narrow case where we only know the height, new value, and old value. Includes fuzz test by Martin Zumsande.
37 lines
1.4 KiB
C++
37 lines
1.4 KiB
C++
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2018 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_POW_H
|
|
#define BITCOIN_POW_H
|
|
|
|
#include <consensus/params.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
class CBlockHeader;
|
|
class CBlockIndex;
|
|
class uint256;
|
|
|
|
unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params&);
|
|
unsigned int CalculateNextWorkRequired(const CBlockIndex* pindexLast, int64_t nFirstBlockTime, const Consensus::Params&);
|
|
|
|
/** Check whether a block hash satisfies the proof-of-work requirement specified by nBits */
|
|
bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params&);
|
|
|
|
/**
|
|
* Return false if the proof-of-work requirement specified by new_nbits at a
|
|
* given height is not possible, given the proof-of-work on the prior block as
|
|
* specified by old_nbits.
|
|
*
|
|
* This function only checks that the new value is within a factor of 4 of the
|
|
* old value for blocks at the difficulty adjustment interval, and otherwise
|
|
* requires the values to be the same.
|
|
*
|
|
* Always returns true on networks where min difficulty blocks are allowed,
|
|
* such as regtest/testnet.
|
|
*/
|
|
bool PermittedDifficultyTransition(const Consensus::Params& params, int64_t height, uint32_t old_nbits, uint32_t new_nbits);
|
|
|
|
#endif // BITCOIN_POW_H
|