src: update checkpoints to match v0.18.4.5
What changed, and why it matters
This commit updates Monero's built-in blockchain checkpoints to match the latest software release (v0.18.4.5). Checkpoints are hardcoded reference points that help nodes quickly verify they are following the correct chain and protect against certain types of attacks. The change is routine maintenance: it adds one new checkpoint at block height 3576000, updates a hash that verifies the checkpoint data file, and updates the recommended minimum version in documentation. There is no indication this fixes an active security vulnerability.
No security action required beyond normal verification that the new checkpoint hash matches the official Monero v0.18.4.5 release. Node operators should upgrade to stay in sync with the network.
Security signals we found
Hardcoded blockchain checkpoint added at height 3576000
Expected hash of checkpoint data file updated
Documentation minimum version bumped to v0.18.4.5
Evidence from the diff
The commit adds a new hardcoded checkpoint at height 3576000 in src/checkpoints/checkpoints.cpp, updates the expected SHA-256 hash of the compiled-in checkpoints.dat file in src/cryptonote_core/blockchain.cpp, and bumps the documented ‘Minimum’ compatible version from v0.18.4.4 to v0.18.4.5 in README.md. These are normal synchronization/consistency updates for a new release. The binary checkpoints.dat file also changed, consistent with adding a new checkpoint. No code logic, validation rules, or cryptographic handling was modified.
Changed components
src/checkpoints/checkpoints.cppsrc/cryptonote_core/blockchain.cppsrc/blocks/checkpoints.datREADME.mdInspect captured patch +4 / −3
diff --git a/README.md b/README.md
index 0ffe561..db9c3a1 100644
--- a/README.md
+++ b/README.md
@@ -137,8 +137,8 @@ Dates are provided in the format YYYY-MM-DD. The "Minimum" is the software versi
| 1978433 | 2019-11-30 | v12 | v0.15.0.0 | v0.16.0.0 | New PoW based on RandomX, only allow >= 2 outputs, change to the block median used to calculate penalty, v1 coinbases are forbidden, rct sigs in coinbase forbidden, 10 block lock time for incoming outputs
| 2210000 | 2020-10-17 | v13 | v0.17.0.0 | v0.17.3.2 | New CLSAG transaction format
| 2210720 | 2020-10-18 | v14 | v0.17.1.1 | v0.17.3.2 | forbid old MLSAG transaction format
-| 2688888 | 2022-08-13 | v15 | v0.18.0.0 | v0.18.4.4 | ringsize = 16, bulletproofs+, view tags, adjusted dynamic block weight algorithm
-| 2689608 | 2022-08-14 | v16 | v0.18.0.0 | v0.18.4.4 | forbid old v14 transaction format
+| 2688888 | 2022-08-13 | v15 | v0.18.0.0 | v0.18.4.5 | ringsize = 16, bulletproofs+, view tags, adjusted dynamic block weight algorithm
+| 2689608 | 2022-08-14 | v16 | v0.18.0.0 | v0.18.4.5 | forbid old v14 transaction format
| XXXXXXX | XXX-XX-XX | XXX | vX.XX.X.X | vX.XX.X.X | XXX |
X's indicate that these details have not been determined as of commit date.
diff --git a/src/blocks/checkpoints.dat b/src/blocks/checkpoints.dat
index 95359b7..35248c2 100644
Binary files a/src/blocks/checkpoints.dat and b/src/blocks/checkpoints.dat differ
diff --git a/src/checkpoints/checkpoints.cpp b/src/checkpoints/checkpoints.cpp
index e917f0b..205d2e8 100644
--- a/src/checkpoints/checkpoints.cpp
+++ b/src/checkpoints/checkpoints.cpp
@@ -269,6 +269,7 @@ namespace cryptonote
ADD_CHECKPOINT2(3482000, "629071b10ddad67bdc6156102aba8e008a754c91da252eede852fff9175a9f0a", "0x6f1063da7e70c0e");
ADD_CHECKPOINT2(3516300, "fa08acbcda99fcc3cd94a749364a29fa6de9501a023cb6673d0c68fdf988b7c3", "0x738f0af4d65d459");
ADD_CHECKPOINT2(3541000, "74c457bed9ceef40f31f43bb8fab804077519d45c910dcad2acf4dd8556195c7", "0x76ff158c682d218");
+ ADD_CHECKPOINT2(3576000, "5da4891bfd06be270193bd949f2a623a2b0cb0ebfaad21c70a6cb18e418e5b6a", "0x7cb2e203e867b57");
return true;
}
diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp
index 868e410..d44dc56 100644
--- a/src/cryptonote_core/blockchain.cpp
+++ b/src/cryptonote_core/blockchain.cpp
@@ -5497,7 +5497,7 @@ void Blockchain::cancel()
}
#if defined(PER_BLOCK_CHECKPOINT)
-static const char expected_block_hashes_hash[] = "baf89ec87f4435fc782a8111b1c8817ba0f00c496e98af154a982818c495edea";
+static const char expected_block_hashes_hash[] = "06c61040ace2d58086f1f8f0c0a78881a71c88f2814307b19f881ef92680f6e0";
void Blockchain::load_compiled_in_block_hashes(const GetCheckpointsCallback& get_checkpoints)
{
if (get_checkpoints == nullptr || !m_fast_sync)
Why this scored 21/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.