In tandem with, #3774 this fixes a case where PIBD fails to restart properly if the downloads txhashset state does not match with expected roots.
The previous logic attempted to manually roll back the output PMMR states to genesis, which could not work given rollback relies on blocks data existing in the DB (which is not guaranteed beyond the horizon block). This adds a reset_chain_head_to_genesis function to chain.rs, which re-initializes the body PMMRs to the genesis block while leaving the header MMR intact, allowing PIBD to start again from the genesis block.
Once we've tested this, I'll merge #3774 first and then merge into this one to maintain @ardocrat's credit where credit is due.
In tandem with, #3774 this fixes a case where PIBD fails to restart properly if the downloads txhashset state does not match with expected roots.
The previous logic attempted to manually roll back the output PMMR states to genesis, which could not work given rollback relies on blocks data existing in the DB (which is not guaranteed beyond the horizon block). This adds a
reset_chain_head_to_genesis
function tochain.rs
, which re-initializes the body PMMRs to the genesis block while leaving the header MMR intact, allowing PIBD to start again from the genesis block.Once we've tested this, I'll merge #3774 first and then merge into this one to maintain @ardocrat's credit where credit is due.