Chain linked to block marked previously as bad
Problem
You may encounter error messages that promts block marked previously as bad
. There are generally two types of these errors, one that may indicated that you are following a bad fork, similar to this:
{"level":"error","ts":"2022-08-27T09:35:00.408+0800","logger":"chain","caller":"chain/sync_manager.go:253","msg":"error during sync in [bafy2bzaceaqkpdwcfdygig4736fohmftkjk6yfthgvjopbcp6vtzpo75dtvum]: collectChain failed: chain linked to block marked previously as bad ([bafy2bzaceaqkpdwcfdygig4736fohmftkjk6yfthgvjopbcp6vtzpo75dtvum], bafy2bzacedtp46ivpr75n5z5culnx2cnhvgfvtizjxzpx6zu5uh4hrl4sveai) (reason: linked to bafy2bzacedra54fsmpkpcab426swxodzmpxdud6hcxcaxpkvswzuqkyb4wg5w caused by: [bafy2bzacebnoo5yjetazelgof3emmwdbndbj7pubzfoj45qj7jlokvubgxuj4 bafy2bzacecwxsgvjvtcyelox7jjjgkz4qcsxnvsivbmt62n24d5gotjhwue5i bafy2bzacedwudc2vmxg3lm7i4rku726k5rce2j6j5eq4oinyfti5lvhtqffmo] fork past finality)"}
The other error that also promts that a block was previously marked as bad also outputs that the parent state root did not match the computed state
, similar to this:
07T09:30:30.355Z","logger":"chain","caller":"chain/sync_manager.go:254","msg":"error during sync in [bafy2bzacec6s4imaxzqfcinevrtlrvssynq6aytgahcm6zfoj2uvktm53v4ma]: collectChain failed: chain linked to block marked previously as bad ([bafy2bzacec6s4imaxzqfcinevrtlrvssynq6aytgahcm6zfoj2uvktm53v4ma], bafy2bzacebwhvvd54665mw44asdid2qlupxq7u7facqbahbtqhjl7zdl654j6) (reason: linked to bafy2bzaceacp7f7r4cmfkxmrfzfgtcqux2pgaxryld3p4ejywhqyjgliu24gq caused by: [bafy2bzacec75osxwx7hkpgjiltinf25ugzw7pzgcsae77w5a3byez5w6zx3ww] 1 error occurred:\n\t* parent state root did not match computed state
Environment
- Mainnet
- Calibnet
- Butterflynet
- Local network
Resolution
For the error message indicating that you are on a fork, there are two ways to try to resolve it.
The first solution is to:
- unmark all bad blocks
- reset the head to a known good epoch
- restart the lotus node
lotus sync unmark-bad --all
lotus chain sethead --epoch <epochNumber>
The other solution is to re-import a new lightweight snapshot and restart Lotus.
For the error message indicating that parent state root did not match the computed state
, this is often related to a build-error, or that the ffi-submodule was not properly updated during an upgrade. To prevent these errors you must rebuild Lotus, and during the build it is important that git submodule update
is called.