It is the set of block hashes from the genesis block to a fairly recent block, and is used to speed sync up for historical blocks. It is typically updated shortly before a new release.
Those hashes are stored as is so they can be read without having to parse hex strings, which would be slower and use more memory.
checkpoints.dat for yourself, sync the blockchain past the latest checkpoint height (For example, height 2606000 for release v0.17.3.2). Then run the following commands to generate a list of block hashes:
monero-blockchain-export --block-stop <aforementioned height> --blocksdat --output-file mycheckpoints.dat
You can compare the generated file against the
checkpoints.dat in the source tree:
diff mycheckpoints.dat /path_to_monero_repo/src/blocks/checkpoints.dat
You may have noticed the value
expected_block_hashes_hash in the "Release Checklist" document. This is a simple SHA-256 digest of
checkpoints.dat. This value should be equal to the value of:
This value is used to double-check the integrity of the