mirror of
https://github.com/Qortal/qortal.git
synced 2025-02-14 11:15:49 +00:00
Previously BlockMinter & Synchronizer would both try opportunistic locking, with no wait/timeout or fairness. This could lead to a situation where a majority of nodes are synchronizing, albeit only the top 1 or 2 blocks, but no node manages to mint within the 'recent' period, so the chain stalls. However, if a node is at/near the top of the chain then synchronization shouldn't take very long so we let BlockMinter wait until to 30s (approx. half typical block time) to obtain lock. This makes minting blocks more likely in a BlockMinter/Sync fight which helps keep the chain going. Detecting chain stalls, and allowing minting if we have plenty of peers, also produces blockchain 'islands' so isn't a simple fix at this point.