Why are all the `genesis.hashMerkleRoot` values the same in the Bitcoin network, yet the `consensus.hashGenesisBlock` values printed are different? How is this implemented?
That's actually a good question. Reading
chainparams.cpp, merkle root "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b" is used in both mainnet and test networks, but it can only be true in one, because these networks
use a different genesis coinbase transaction, and genesis' merkle root is determined by the coinbase transaction.
It doesn't fail though, for if it did, Bitcoin Core with --testnet would fail at startup.
I tested modifying the value of `const char* pszTimestamp` and it printed different results using `assert(consensus.hashGenesisBlock)`. I'm not sure if this is correct.
What kind of results? If you changed pszTimestamp, it should abort.