diff --git a/x/rollapp/keeper/hard_fork.go b/x/rollapp/keeper/hard_fork.go index c15b4c644..29f2915e8 100644 --- a/x/rollapp/keeper/hard_fork.go +++ b/x/rollapp/keeper/hard_fork.go @@ -29,6 +29,10 @@ func (k Keeper) HardFork(ctx sdk.Context, rollappID string, newRevisionHeight ui // update revision number rollapp.RevisionNumber += 1 rollapp.RevisionStartHeight = newRevisionHeight + + // stop liveness events + k.ResetLivenessClock(ctx, &rollapp) + k.SetRollapp(ctx, rollapp) // handle the sequencers, clean delayed packets, handle light client diff --git a/x/rollapp/keeper/sequencer_hooks.go b/x/rollapp/keeper/sequencer_hooks.go index e21a78582..db90c4124 100644 --- a/x/rollapp/keeper/sequencer_hooks.go +++ b/x/rollapp/keeper/sequencer_hooks.go @@ -14,7 +14,7 @@ type SequencerHooks struct { // AfterRecoveryFromHalt is called after a new sequencer is set the proposer for an halted rollapp. // We assume the rollapp had forked once halted -func (h SequencerHooks) AfterRecoveryFromHalt(ctx sdk.Context, rollapp string, newSeq sequencertypes.Sequencer) error { +func (h SequencerHooks) AfterSetRealProposer(ctx sdk.Context, rollapp string, newSeq sequencertypes.Sequencer) error { // Start the liveness clock from zero // NOTE: it could make more sense if liveness was a property of the sequencer rather than the rollapp // TODO: tech debt https://github.com/dymensionxyz/dymension/issues/1357 diff --git a/x/sequencer/keeper/proposer.go b/x/sequencer/keeper/proposer.go index d561fe0d9..8e5bdcbeb 100644 --- a/x/sequencer/keeper/proposer.go +++ b/x/sequencer/keeper/proposer.go @@ -56,7 +56,7 @@ func (k Keeper) RecoverFromSentinel(ctx sdk.Context, rollapp string) error { } k.SetProposer(ctx, rollapp, successor.Address) - err = k.hooks.AfterRecoveryFromHalt(ctx, rollapp, successor) + err = k.hooks.AfterSetRealProposer(ctx, rollapp, successor) if err != nil { return errorsmod.Wrap(err, "recovery from halt callbacks") } diff --git a/x/sequencer/keeper/rotation.go b/x/sequencer/keeper/rotation.go index 07fc3061f..63278d676 100644 --- a/x/sequencer/keeper/rotation.go +++ b/x/sequencer/keeper/rotation.go @@ -87,12 +87,14 @@ func (k Keeper) OnProposerLastBlock(ctx sdk.Context, proposer types.Sequencer) e k.SetSuccessor(ctx, rollapp, types.SentinelSeqAddr) // clear successor k.SetProposer(ctx, rollapp, successor.Address) - // if proposer is sentinel, prepare new revision for the rollapp + // if successor is sentinel, prepare new revision for the rollapp if successor.Sentinel() { err := k.rollappKeeper.HardForkToLatest(ctx, rollapp) if err != nil { return errorsmod.Wrap(err, "hard fork to latest") } + } else if err := k.hooks.AfterSetRealProposer(ctx, rollapp, successor); err != nil { + return errorsmod.Wrap(err, "after set real sequencer") } ctx.EventManager().EmitEvent( diff --git a/x/sequencer/types/hooks.go b/x/sequencer/types/hooks.go index f4e616dda..0051c27e7 100644 --- a/x/sequencer/types/hooks.go +++ b/x/sequencer/types/hooks.go @@ -3,7 +3,7 @@ package types import sdk "github.com/cosmos/cosmos-sdk/types" type Hooks interface { - AfterRecoveryFromHalt(ctx sdk.Context, rollapp string, newProposer Sequencer) error + AfterSetRealProposer(ctx sdk.Context, rollapp string, newProposer Sequencer) error AfterKickProposer(ctx sdk.Context, kicked Sequencer) error } @@ -11,7 +11,7 @@ var _ Hooks = NoOpHooks{} type NoOpHooks struct{} -func (n NoOpHooks) AfterRecoveryFromHalt(ctx sdk.Context, rollapp string, newProposer Sequencer) error { +func (n NoOpHooks) AfterSetRealProposer(ctx sdk.Context, rollapp string, newProposer Sequencer) error { return nil } @@ -27,9 +27,9 @@ func NewMultiHooks(hooks ...Hooks) MultiHooks { return MultiHooks(hooks) } -func (m MultiHooks) AfterRecoveryFromHalt(ctx sdk.Context, rollapp string, newProposer Sequencer) error { +func (m MultiHooks) AfterSetRealProposer(ctx sdk.Context, rollapp string, newProposer Sequencer) error { for _, h := range m { - err := h.AfterRecoveryFromHalt(ctx, rollapp, newProposer) + err := h.AfterSetRealProposer(ctx, rollapp, newProposer) if err != nil { return err }