diff --git a/grpc/execution/server.go b/grpc/execution/server.go index aede18f6d..fa2439fcc 100644 --- a/grpc/execution/server.go +++ b/grpc/execution/server.go @@ -281,7 +281,7 @@ func (s *ExecutionServiceServerV2) UpdateCommitmentState(ctx context.Context, re s.commitmentUpdateLock.Lock() defer s.commitmentUpdateLock.Unlock() - if err := validateStaticCommitmentState(req.CommitmentState); err != nil { + if err := validateStaticCommitmentState(req.CommitmentState, s.softAsFirm); err != nil { log.Error("UpdateCommitmentState called with invalid CommitmentState", "err", err) return nil, status.Error(codes.InvalidArgument, "CommitmentState is invalid") } diff --git a/grpc/execution/validation.go b/grpc/execution/validation.go index f7d1646e7..8c8db05eb 100644 --- a/grpc/execution/validation.go +++ b/grpc/execution/validation.go @@ -116,7 +116,7 @@ func validateStaticExecuteBlockRequest(req *astriaPb.ExecuteBlockRequest) error } // `validateStaticCommitment` validates the given commitment without regard to the current state of the system. -func validateStaticCommitmentState(commitmentState *astriaPb.CommitmentState) error { +func validateStaticCommitmentState(commitmentState *astriaPb.CommitmentState, softAsFirm bool) error { if commitmentState == nil { return fmt.Errorf("commitment state is nil") } @@ -126,20 +126,13 @@ func validateStaticCommitmentState(commitmentState *astriaPb.CommitmentState) er if commitmentState.FirmExecutedBlockMetadata == nil { return fmt.Errorf("FirmExecutedBlockMetadata cannot be nil") } - if commitmentState.LowestCelestiaSearchHeight == 0 { - return fmt.Errorf("lowest celestia search height of 0 is not valid") - } - if err := validateStaticExecutedBlockMetadata(commitmentState.SoftExecutedBlockMetadata); err != nil { return fmt.Errorf("soft block invalid: %w", err) } - if err := validateStaticExecutedBlockMetadata(commitmentState.FirmExecutedBlockMetadata); err != nil { - return fmt.Errorf("firm block invalid: %w", err) - } - - // Verify that the firm block is not newer than the soft block - if commitmentState.FirmExecutedBlockMetadata.Number > commitmentState.SoftExecutedBlockMetadata.Number { - return fmt.Errorf("FirmExecutedBlockMetadata number cannot be greater than SoftExecutedBlockMetadata number") + if !softAsFirm { + if err := validateStaticExecutedBlockMetadata(commitmentState.FirmExecutedBlockMetadata); err != nil { + return fmt.Errorf("firm block invalid: %w", err) + } } return nil diff --git a/grpc/execution/validation_test.go b/grpc/execution/validation_test.go index 74084fcac..7f15e7b95 100644 --- a/grpc/execution/validation_test.go +++ b/grpc/execution/validation_test.go @@ -233,7 +233,7 @@ func TestValidateStaticCommitmentState(t *testing.T) { LowestCelestiaSearchHeight: 100, } - err := validateStaticCommitmentState(validState) + err := validateStaticCommitmentState(validState, false) require.Nil(t, err, "Valid CommitmentState should pass validation") // Test missing SoftExecutedBlockMetadata @@ -242,7 +242,7 @@ func TestValidateStaticCommitmentState(t *testing.T) { FirmExecutedBlockMetadata: validState.FirmExecutedBlockMetadata, LowestCelestiaSearchHeight: 100, } - err = validateStaticCommitmentState(invalidState1) + err = validateStaticCommitmentState(invalidState1, false) require.NotNil(t, err, "CommitmentState without SoftExecutedBlockMetadata should fail validation") require.Contains(t, err.Error(), "SoftExecutedBlockMetadata cannot be nil", "Error should mention SoftExecutedBlockMetadata") @@ -252,7 +252,7 @@ func TestValidateStaticCommitmentState(t *testing.T) { FirmExecutedBlockMetadata: nil, LowestCelestiaSearchHeight: 100, } - err = validateStaticCommitmentState(invalidState2) + err = validateStaticCommitmentState(invalidState2, false) require.NotNil(t, err, "CommitmentState without FirmExecutedBlockMetadata should fail validation") require.Contains(t, err.Error(), "FirmExecutedBlockMetadata cannot be nil", "Error should mention FirmExecutedBlockMetadata") @@ -267,23 +267,9 @@ func TestValidateStaticCommitmentState(t *testing.T) { FirmExecutedBlockMetadata: validState.FirmExecutedBlockMetadata, LowestCelestiaSearchHeight: 100, } - err = validateStaticCommitmentState(invalidState3) + err = validateStaticCommitmentState(invalidState3, false) require.NotNil(t, err, "CommitmentState with invalid SoftExecutedBlockMetadata should fail validation") - // Test firm block newer than soft block - invalidState4 := &astriaPb.CommitmentState{ - SoftExecutedBlockMetadata: validState.SoftExecutedBlockMetadata, - FirmExecutedBlockMetadata: &astriaPb.ExecutedBlockMetadata{ - Number: 11, // Higher than soft block - Hash: "0xabcdef", - ParentHash: "0xfedcba", - Timestamp: ×tamppb.Timestamp{Seconds: 1234567880}, - }, - LowestCelestiaSearchHeight: 100, - } - err = validateStaticCommitmentState(invalidState4) - require.NotNil(t, err, "CommitmentState with firm block newer than soft block should fail validation") - require.Contains(t, err.Error(), "FirmExecutedBlockMetadata number", "Error should mention FirmExecutedBlockMetadata number") } func TestValidateStaticExecutedBlockMetadata(t *testing.T) {