From 0b7363211f954698e593699f32ed13b425fce2bc Mon Sep 17 00:00:00 2001 From: bitflash-maintainer Date: Wed, 2 Sep 2026 14:33:56 +0000 Subject: genesis: say that the 2025 nTime is known and must not be "fixed" nTime is 1753315200, which is 2025-07-24T00:00:00Z. The comment beside it claimed 2026-07-24, and the headline in pszTimestamp reads 24/Jul/2026, so the constant looked like a typo somebody ought to correct. Nothing is wrong with the data. nTime matters only as an input to the genesis hash, the block hashes to hashGenesisBlock with it, the asserts pass, and the whole network agrees. The hazard is entirely in acting on the mismatch. Editing nTime alone trips the assert -- loud, and it reverts. Editing it and regenerating GENESIS_NONCE and hashGenesisBlock to match is the quiet one: that node starts without complaint, builds its own chain from height 0, and rejects every real peer, and the re-mining branch a few lines below prints exactly the constants needed to do it. So: correct the comment rather than the constant, state the discrepancy as known and uncorrectable, and have the re-mining printout say what those constants are and are not for. No value changes -- pszTimestamp, the scriptPubKey, nTime, nBits, nNonce, GENESIS_NONCE, hashGenesisBlock and hashGenesisMerkleRoot are all byte-identical. --- src/main.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 7b3e555..a68e3b0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2678,7 +2678,18 @@ bool LoadBlockIndex(bool fAllowNew) // CTxOut(nValue=50.00000000, scriptPubKey=0x5F1DF16B2B704C8A578D0B) // vMerkleTree: 4a5e1e - // Bitflash genesis block -- own header (fair launch, 2026 stable relaunch) + // Bitflash genesis block -- own header (fair launch) + // + // Do not change pszTimestamp, the scriptPubKey, nTime or nNonce. They + // are the inputs to the genesis hash, and the genesis hash is + // consensus. Changing one on its own trips the assert below, which is + // loud and reverts cleanly; changing one and regenerating + // GENESIS_NONCE and hashGenesisBlock to match -- which is exactly what + // the re-mining branch below prints out and invites -- gives a node + // that starts without complaint, builds its own chain from height 0, + // and rejects every real peer as being on a different chain. That one + // fails silently, and the damage scales with how many people run the + // "fixed" build. char* pszTimestamp = "Bitflash 24/Jul/2026 Fair launch: one CPU one vote, no premine"; CTransaction txNew; txNew.vin.resize(1); @@ -2691,7 +2702,14 @@ bool LoadBlockIndex(bool fAllowNew) block.hashPrevBlock = 0; block.hashMerkleRoot = block.BuildMerkleTree(); block.nVersion = 1; - block.nTime = 1753315200; // 2026-07-24 00:00:00 UTC (stable relaunch) + // 1753315200 is 2025-07-24T00:00:00Z. The headline in pszTimestamp + // above reads 2026 and does not match it. This is a known discrepancy + // and not a typo in the constant: the value is only consensus-critical + // as an input to the genesis hash, the block hashes to + // hashGenesisBlock with it, and every node on the network agrees. The + // mismatch is in the launched chain and cannot be corrected -- see the + // warning above before deciding otherwise. + block.nTime = 1753315200; block.nBits = 0x1f0fffff; // = bnProofOfWorkLimit (Bitflash RandomX floor) block.nNonce = GENESIS_NONCE; @@ -2718,6 +2736,11 @@ bool LoadBlockIndex(bool fAllowNew) printf("powhash = %s\n", block.GetPoWHash().ToString().c_str()); printf("hash = %s\n", block.GetHash().ToString().c_str()); printf("merkle = %s\n", block.hashMerkleRoot.ToString().c_str()); + printf("----------------------------------------\n"); + printf("These constants bring up a NEW chain. Do not paste them\n"); + printf("into a build for this network to make an edited nTime or\n"); + printf("pszTimestamp fit -- a node whose genesis differs starts\n"); + printf("cleanly on a chain of its own and rejects every real peer.\n"); printf("========================================\n"); } -- cgit v1.2.3