diff --git a/op-deployer/pkg/deployer/upgrade/embedded/upgrade.go b/op-deployer/pkg/deployer/upgrade/embedded/upgrade.go index 5250761b069..edc429b9d6e 100644 --- a/op-deployer/pkg/deployer/upgrade/embedded/upgrade.go +++ b/op-deployer/pkg/deployer/upgrade/embedded/upgrade.go @@ -136,41 +136,36 @@ func (u *UpgradeOPChainInput) EncodedUpgradeInputV2() ([]byte, error) { var err error if gameConfig.Enabled { - if gameConfig.GameType == GameTypeCannon || gameConfig.GameType == GameTypeCannonKona { + switch gameConfig.GameType { + case GameTypeCannon, GameTypeCannonKona: if gameConfig.FaultDisputeGameConfig == nil { return nil, fmt.Errorf("faultDisputeGameConfig is required for game type %d", gameConfig.GameType) } + // Encode the fault dispute game args gameArgs, err = faultEncoder.EncodeArgs(gameConfig.FaultDisputeGameConfig) if err != nil { return nil, fmt.Errorf("failed to encode fault game config: %w", err) } - - // Edge case check when the encoded game args length is less than 4 - if len(gameArgs) < 4 { - return nil, fmt.Errorf("encoded game args length is less than 4 for game type %d", gameConfig.GameType) - } - - // Skip the selector bytes - gameArgs = gameArgs[4:] - } - - if gameConfig.GameType == GameTypePermissionedCannon { + case GameTypePermissionedCannon: if gameConfig.PermissionedDisputeGameConfig == nil { return nil, fmt.Errorf("permissionedDisputeGameConfig is required for game type %d", gameConfig.GameType) } + // Encode the permissioned dispute game args gameArgs, err = permEncoder.EncodeArgs(gameConfig.PermissionedDisputeGameConfig) if err != nil { return nil, fmt.Errorf("failed to encode permissioned game config: %w", err) } + default: + return nil, fmt.Errorf("invalid game type %d for opcm v2", gameConfig.GameType) + } - // Edge case check when the encoded game args length is less than 4 - if len(gameArgs) < 4 { - return nil, fmt.Errorf("encoded game args length is less than 4 for game type %d", gameConfig.GameType) - } - - // Skip the selector bytes - gameArgs = gameArgs[4:] + // Edge case check when the encoded game args length is less than 4 + if len(gameArgs) < 4 { + return nil, fmt.Errorf("encoded game args length is less than 4 for game type %d", gameConfig.GameType) } + + // Skip the selector bytes + gameArgs = gameArgs[4:] } encodableConfigs[i] = EncodableDisputeGameConfig{ diff --git a/op-deployer/pkg/deployer/upgrade/embedded/upgrade_test.go b/op-deployer/pkg/deployer/upgrade/embedded/upgrade_test.go index 354c6851169..cf4cdbe81ea 100644 --- a/op-deployer/pkg/deployer/upgrade/embedded/upgrade_test.go +++ b/op-deployer/pkg/deployer/upgrade/embedded/upgrade_test.go @@ -254,6 +254,16 @@ func TestEncodedUpgradeInputV2_GameTypeConfigValidation(t *testing.T) { errorContains: fmt.Sprintf("permissionedDisputeGameConfig is required for game type %d", GameTypePermissionedCannon), shouldPass: false, }, + { + name: "invalid game type returns error", + gameConfig: DisputeGameConfig{ + Enabled: true, + InitBond: big.NewInt(1000), + GameType: GameType(99), // not a valid game type (0, 1, 8) + }, + errorContains: fmt.Sprintf("invalid game type %d for opcm v2", GameType(99)), + shouldPass: false, + }, { name: "CANNON with correct FaultDisputeGameConfig", gameConfig: DisputeGameConfig{