mimblewimble / grin

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

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

Closed yeastplume closed 1 year ago

yeastplume commented 1 year 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 1 year ago

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