Set head should unmark blocks as valid

This commit is contained in:
Aayush Rajasekaran 2020-10-07 21:45:41 -04:00
parent b1fe92f8ff
commit da34548a05

View File

@ -254,11 +254,31 @@ func (a *ChainAPI) ChainStatObj(ctx context.Context, obj cid.Cid, base cid.Cid)
} }
func (a *ChainAPI) ChainSetHead(ctx context.Context, tsk types.TipSetKey) error { func (a *ChainAPI) ChainSetHead(ctx context.Context, tsk types.TipSetKey) error {
ts, err := a.Chain.GetTipSetFromKey(tsk) newHeadTs, err := a.Chain.GetTipSetFromKey(tsk)
if err != nil { if err != nil {
return xerrors.Errorf("loading tipset %s: %w", tsk, err) return xerrors.Errorf("loading tipset %s: %w", tsk, err)
} }
return a.Chain.SetHead(ts)
currentTs, err := a.ChainHead(ctx)
if err != nil {
return xerrors.Errorf("getting head: %w", err)
}
for currentTs.Height() >= newHeadTs.Height() {
for _, blk := range currentTs.Key().Cids() {
err = a.Chain.UnmarkBlockAsValidated(ctx, blk)
if err != nil {
return xerrors.Errorf("unmarking block as validated %s: %w", blk, err)
}
}
currentTs, err = a.ChainGetTipSet(ctx, currentTs.Parents())
if err != nil {
return xerrors.Errorf("loading tipset: %w", err)
}
}
return a.Chain.SetHead(newHeadTs)
} }
func (a *ChainAPI) ChainGetGenesis(ctx context.Context) (*types.TipSet, error) { func (a *ChainAPI) ChainGetGenesis(ctx context.Context) (*types.TipSet, error) {