block-core / blockcore

Open source .NET Core Bitcoin based blockchain node in C#
https://www.blockcore.net
218 stars 90 forks source link

Rewind data of height '756024' was not found! #166

Open sondreb opened 4 years ago

sondreb commented 4 years ago

Is this an issue on latest codebase?

[2020-06-23 17:50:04.5783 1] INFO: Stratis.Bitcoin.FullNode.Initialize Full node initialized on CityMain.
[2020-06-23 17:50:04.5783 1] INFO: Stratis.Bitcoin.FullNode.Start Starting node.
[2020-06-23 17:50:05.0142 1] INFO: Stratis.Bitcoin.Features.Api.ApiFeature.InitializeAsync API starting on URL 'http://localhost:4335/'.
[2020-06-23 17:50:05.5865 1] INFO: Stratis.Bitcoin.Base.BaseFeature+<StartChainAsync>d__30.MoveNext Loading finalized block height.
[2020-06-23 17:50:05.6189 4] INFO: Stratis.Bitcoin.Base.BaseFeature+<StartChainAsync>d__30.MoveNext Loading chain.
[2020-06-23 17:50:11.9218 7] INFO: Stratis.Bitcoin.Base.BaseFeature+<StartChainAsync>d__30.MoveNext Chain loaded at height 756024.
[2020-06-23 17:50:11.9218 4] INFO: Stratis.Bitcoin.Utilities.AsyncLoop+<>c__DisplayClass20_0+<<StartAsync>b__0>d.MoveNext FlushChain starting in 60 seconds.
[2020-06-23 17:50:12.0501 8] INFO: Stratis.Bitcoin.Base.BaseFeature.StartAddressManager Loading peers from : C:\Node\CITY\dns\data\city\CityMain.
[2020-06-23 17:50:12.1737 4] INFO: Stratis.Bitcoin.Utilities.AsyncLoop+<>c__DisplayClass20_0+<<StartAsync>b__0>d.MoveNext Periodic peer flush starting in 300 seconds.
[2020-06-23 17:50:12.3995 1] ERROR: Stratis.Bitcoin.Builder.FullNodeFeatureExecutor.LogAndAddException An error occurred: 'Stratis.Bitcoin.Consensus.ConsensusException: Rewind data of height '756024' was not found!
   at Stratis.Bitcoin.Features.Consensus.ProvenBlockHeaders.RewindDataIndexCache.AddRewindData(Int32 rewindHeight, RewindData rewindData) in D:\a\city-chain\city-chain\src\Stratis.Bitcoin.Features.Consensus\ProvenBlockHeaders\RewindDataIndexCache.cs:line 71
   at Stratis.Bitcoin.Features.Consensus.ProvenBlockHeaders.RewindDataIndexCache.Initialize(Int32 tipHeight, ICoinView coinView) in D:\a\city-chain\city-chain\src\Stratis.Bitcoin.Features.Consensus\ProvenBlockHeaders\RewindDataIndexCache.cs:line 53
   at Stratis.Bitcoin.Features.Consensus.Rules.PosConsensusRuleEngine.Initialize(ChainedHeader chainTip) in D:\a\city-chain\city-chain\src\Stratis.Bitcoin.Features.Consensus\Rules\PosConsensusRuleEngine.cs:line 63
   at Stratis.Bitcoin.Base.BaseFeature.InitializeAsync() in D:\a\city-chain\city-chain\src\Stratis.Bitcoin\Base\BaseFeature.cs:line 231
   at Stratis.Bitcoin.Builder.FullNodeFeatureExecutor.<>c.<Initialize>b__3_1(IFullNodeFeature service) in D:\a\city-chain\city-chain\src\Stratis.Bitcoin\Builder\FullNodeFeatureExecutor.cs:line 57
   at Stratis.Bitcoin.Builder.FullNodeFeatureExecutor.Execute(Action`1 callback, Boolean disposing) in D:\a\city-chain\city-chain\src\Stratis.Bitcoin\Builder\FullNodeFeatureExecutor.cs:line 128'
[2020-06-23 17:50:12.4069 1] ERROR: Stratis.Bitcoin.Builder.FullNodeFeatureExecutor.Initialize An error occurred starting the application.
dangershony commented 4 years ago

No this is a known issue its rare but happens (most likely when node crashes) Basically consensus should not persist if its ahead of blockcore tip.

Right now the only way to recover is to resync from genesis

dangershony commented 4 years ago

To fix this issue I think we should add code to the consensus rules to not persist rewind data that is behind blocksotre tip, either by waiting for blockstore or by keeping enough rewind data up to prev stop tip

Its a bit complicated so anyone that wants to deep dive in to consensus code this is a chance