mimblewimble / grin

Minimal implementation of the Mimblewimble protocol.
https://grin.mw/
Apache License 2.0
5.04k stars 992 forks source link

[PIBD] Fix to restart of PIBD download on corrupted data or mismatched roots #3775

Closed yeastplume closed 8 months ago

yeastplume commented 8 months ago

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.

ardocrat commented 8 months ago

Thanks, its working, in the end of SyncStatus::TxHashsetPibd it restarts PIBD synchronization from 0 if root is missing.