2

In the source code for the CBlockHeader class, there is a field called nBits.

/** Nodes collect new transactions into a block, hash them into a hash tree,
 * and scan through nonce values to make the block's hash satisfy proof-of-work
 * requirements.  When they solve the proof-of-work, they broadcast the block
 * to everyone and the block is added to the block chain.  The first transaction
 * in the block is a special one that creates a new coin owned by the creator
 * of the block.
 */
class CBlockHeader
{
public:
    // header
    int32_t nVersion;
    uint256 hashPrevBlock;
    uint256 hashMerkleRoot;
    uint32_t nTime;
    uint32_t nBits;
    uint32_t nNonce;

As far as I searched in the code, I didn't found any comment for this field. But I saw the CheckBlockHeader function using the nBits field to check proof of work of the block. So I interpret that it's a representation of the difficulty for the block.

static bool CheckBlockHeader(const CBlockHeader& block, BlockValidationState& state, const Consensus::Params& consensusParams, bool fCheckPOW = true)
{
    // Check proof of work matches claimed amount
    if (fCheckPOW && !CheckProofOfWork(block.GetHash(), block.nBits, consensusParams))
        return state.Invalid(BlockValidationResult::BLOCK_INVALID_HEADER, "high-hash", "proof of work failed");
return true;

}

Is my understanding correct?

Murch
  • 75,206
  • 34
  • 186
  • 622
Amir reza Riahi
  • 1,245
  • 8
  • 23

1 Answers1

3

I interpret that it's a representation of the difficulty for the block. ... Is my understanding correct?

Yes, it is a compact representation of the network target for that block. The target being a kind of inverse of the difficulty.

RedGrittyBrick
  • 26,841
  • 3
  • 25
  • 51