Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 14 additions & 19 deletions op-deployer/pkg/deployer/upgrade/embedded/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down
10 changes: 10 additions & 0 deletions op-deployer/pkg/deployer/upgrade/embedded/upgrade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down