diff --git a/x/ophost/keeper/output.go b/x/ophost/keeper/output.go index 8e2d88da..75d99f6e 100644 --- a/x/ophost/keeper/output.go +++ b/x/ophost/keeper/output.go @@ -22,6 +22,16 @@ func (k Keeper) GetOutputProposal(ctx context.Context, bridgeId, outputIndex uin } func (k Keeper) DeleteOutputProposal(ctx context.Context, bridgeId, outputIndex uint64) error { + output, err := k.GetOutputProposal(ctx, bridgeId, outputIndex) + if err != nil { + return err + } + if isFinal, err := k.isFinalized(ctx, bridgeId, output); err != nil { + return err + } else if isFinal { + return types.ErrAlreadyFinalized + } + return k.OutputProposals.Remove(ctx, collections.Join(bridgeId, outputIndex)) } @@ -35,6 +45,10 @@ func (k Keeper) IsFinalized(ctx context.Context, bridgeId, outputIndex uint64) ( return false, err } + return k.isFinalized(ctx, bridgeId, output) +} + +func (k Keeper) isFinalized(ctx context.Context, bridgeId uint64, output types.Output) (bool, error) { bridgeConfig, err := k.GetBridgeConfig(ctx, bridgeId) if err != nil { return false, err diff --git a/x/ophost/types/error.go b/x/ophost/types/error.go index fcc93b3f..0ea7261e 100644 --- a/x/ophost/types/error.go +++ b/x/ophost/types/error.go @@ -13,6 +13,7 @@ var ( ErrInvalidSequence = errorsmod.Register(ModuleName, 6, "invalid sequence") ErrInvalidL2BlockNumber = errorsmod.Register(ModuleName, 7, "invalid l2 block number") ErrNotFinalized = errorsmod.Register(ModuleName, 8, "output has not finalized") - ErrFailedToVerifyWithdrawal = errorsmod.Register(ModuleName, 9, "failed to verify withdrawal tx") - ErrWithdrawalAlreadyFinalized = errorsmod.Register(ModuleName, 10, "withdrawal already finalized") + ErrAlreadyFinalized = errorsmod.Register(ModuleName, 9, "output has already finalized") + ErrFailedToVerifyWithdrawal = errorsmod.Register(ModuleName, 10, "failed to verify withdrawal tx") + ErrWithdrawalAlreadyFinalized = errorsmod.Register(ModuleName, 11, "withdrawal already finalized") )