what is nMinimumChainWork? I was trying to run my own private bitcoin network, so I downloaded the source and compiled it, then I started two bitcoind instances in two docker contains, and I made sure they did not connect to outside network, used -connect=0 -dns=0 -dnsseed=0, and then -addnode to specify other node's ip and port. When I then tried to run a local miner, the RPC getblocktemplate always return Bitcoin is downloading blocks.... By looking at the source, it looks it won't pass this line:

// in IsInitialBlockDownlaod
if (chainActive.Tip()-&gt;nChainWork &lt; nMinimumChainWork) {
     return true;
}


the definition is found in chainparams.cpp:

// The best chain should have at least this much work.
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000f91c579d57cad4bc5278cc");


What does this mean? What is nMinimumChainWork for? And what is the hardcoded hex number, by searching blockchain.info it is not a block hash.
It is a number designed to protect new clients from accepting fake blockchains when they initially are syncing, if an attacker managed to segregate them from the network. As the name suggests, it's the minimum amount of total work a chain must have before the client considers it valid. It is updated to a higher number at every release, based on the total work in the blockchain at the time of that release (the hex format is more compact and consistent with other code than say a decimal number)