Skip to content

Commit 95f7dbd

Browse files
committed
Enable type removal during contract updates
1 parent 1399a6d commit 95f7dbd

7 files changed

+57
-177
lines changed

interpreter/config.go

-2
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,6 @@ type Config struct {
7272
CapabilityBorrowHandler CapabilityBorrowHandlerFunc
7373
// LegacyContractUpgradeEnabled specifies whether to fall back to the old parser when attempting a contract upgrade
7474
LegacyContractUpgradeEnabled bool
75-
// ContractUpdateTypeRemovalEnabled specifies if type removal is enabled in contract updates
76-
ContractUpdateTypeRemovalEnabled bool
7775
// ValidateAccountCapabilitiesGetHandler is used to handle when a capability of an account is got.
7876
ValidateAccountCapabilitiesGetHandler ValidateAccountCapabilitiesGetHandlerFunc
7977
// ValidateAccountCapabilitiesPublishHandler is used to handle when a capability of an account is got.

runtime/config.go

-2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,4 @@ type Config struct {
3737
CoverageReport *CoverageReport
3838
// LegacyContractUpgradeEnabled enabled specifies whether to use the old parser when parsing an old contract
3939
LegacyContractUpgradeEnabled bool
40-
// ContractUpdateTypeRemovalEnabled specifies if type removal is enabled in contract updates
41-
ContractUpdateTypeRemovalEnabled bool
4240
}

runtime/contract_update_validation_test.go

+27-108
Original file line numberDiff line numberDiff line change
@@ -177,31 +177,14 @@ func testWithValidatorsAndTypeRemovalEnabled(
177177
withC1Upgrade := withC1Upgrade
178178
name := name
179179

180-
for _, withTypeRemovalEnabled := range []bool{true, false} {
181-
withTypeRemovalEnabled := withTypeRemovalEnabled
182-
name := name
183-
184-
switch {
185-
case withC1Upgrade && withTypeRemovalEnabled:
186-
name = fmt.Sprintf("%s (with C1 validator and type removal enabled)", name)
187-
188-
case withC1Upgrade:
189-
name = fmt.Sprintf("%s (with C1 validator)", name)
190-
191-
case withTypeRemovalEnabled:
192-
name = fmt.Sprintf("%s (with type removal enabled)", name)
193-
}
194-
195-
t.Run(name, func(t *testing.T) {
196-
t.Parallel()
180+
t.Run(name, func(t *testing.T) {
181+
t.Parallel()
197182

198-
config := DefaultTestInterpreterConfig
199-
config.LegacyContractUpgradeEnabled = withC1Upgrade
200-
config.ContractUpdateTypeRemovalEnabled = withTypeRemovalEnabled
183+
config := DefaultTestInterpreterConfig
184+
config.LegacyContractUpgradeEnabled = withC1Upgrade
201185

202-
testFunc(t, config)
203-
})
204-
}
186+
testFunc(t, config)
187+
})
205188
}
206189
}
207190

@@ -3230,13 +3213,8 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
32303213
`
32313214

32323215
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3233-
3234-
if config.ContractUpdateTypeRemovalEnabled {
3235-
var expectedErr *stdlib.TypeRemovalPragmaRemovalError
3236-
require.ErrorAs(t, err, &expectedErr)
3237-
} else {
3238-
require.NoError(t, err)
3239-
}
3216+
var expectedErr *stdlib.TypeRemovalPragmaRemovalError
3217+
require.ErrorAs(t, err, &expectedErr)
32403218
},
32413219
)
32423220

@@ -3262,13 +3240,8 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
32623240
`
32633241

32643242
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3265-
3266-
if config.ContractUpdateTypeRemovalEnabled {
3267-
var expectedErr *stdlib.TypeRemovalPragmaRemovalError
3268-
require.ErrorAs(t, err, &expectedErr)
3269-
} else {
3270-
require.NoError(t, err)
3271-
}
3243+
var expectedErr *stdlib.TypeRemovalPragmaRemovalError
3244+
require.ErrorAs(t, err, &expectedErr)
32723245
},
32733246
)
32743247

@@ -3313,13 +3286,8 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
33133286
`
33143287

33153288
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3316-
3317-
if config.ContractUpdateTypeRemovalEnabled {
3318-
var expectedErr *stdlib.InvalidTypeRemovalPragmaError
3319-
require.ErrorAs(t, err, &expectedErr)
3320-
} else {
3321-
require.NoError(t, err)
3322-
}
3289+
var expectedErr *stdlib.InvalidTypeRemovalPragmaError
3290+
require.ErrorAs(t, err, &expectedErr)
33233291
},
33243292
)
33253293

@@ -3342,13 +3310,8 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
33423310
`
33433311

33443312
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3345-
3346-
if config.ContractUpdateTypeRemovalEnabled {
3347-
var expectedErr *stdlib.InvalidTypeRemovalPragmaError
3348-
require.ErrorAs(t, err, &expectedErr)
3349-
} else {
3350-
require.NoError(t, err)
3351-
}
3313+
var expectedErr *stdlib.InvalidTypeRemovalPragmaError
3314+
require.ErrorAs(t, err, &expectedErr)
33523315
},
33533316
)
33543317

@@ -3368,14 +3331,8 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
33683331
`
33693332

33703333
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3371-
3372-
if config.ContractUpdateTypeRemovalEnabled {
3373-
3374-
var expectedErr *stdlib.InvalidTypeRemovalPragmaError
3375-
require.ErrorAs(t, err, &expectedErr)
3376-
} else {
3377-
require.NoError(t, err)
3378-
}
3334+
var expectedErr *stdlib.InvalidTypeRemovalPragmaError
3335+
require.ErrorAs(t, err, &expectedErr)
33793336
},
33803337
)
33813338

@@ -3395,13 +3352,8 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
33953352
`
33963353

33973354
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3398-
3399-
if config.ContractUpdateTypeRemovalEnabled {
3400-
var expectedErr *stdlib.InvalidTypeRemovalPragmaError
3401-
require.ErrorAs(t, err, &expectedErr)
3402-
} else {
3403-
require.NoError(t, err)
3404-
}
3355+
var expectedErr *stdlib.InvalidTypeRemovalPragmaError
3356+
require.ErrorAs(t, err, &expectedErr)
34053357
},
34063358
)
34073359

@@ -3422,13 +3374,7 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
34223374
`
34233375

34243376
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3425-
3426-
if config.ContractUpdateTypeRemovalEnabled {
3427-
require.NoError(t, err)
3428-
} else {
3429-
var expectedErr *stdlib.MissingDeclarationError
3430-
require.ErrorAs(t, err, &expectedErr)
3431-
}
3377+
require.NoError(t, err)
34323378
},
34333379
)
34343380

@@ -3451,13 +3397,7 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
34513397
`
34523398

34533399
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3454-
3455-
if config.ContractUpdateTypeRemovalEnabled {
3456-
require.NoError(t, err)
3457-
} else {
3458-
var expectedErr *stdlib.MissingDeclarationError
3459-
require.ErrorAs(t, err, &expectedErr)
3460-
}
3400+
require.NoError(t, err)
34613401
},
34623402
)
34633403

@@ -3526,13 +3466,7 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
35263466
`
35273467

35283468
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3529-
3530-
if config.ContractUpdateTypeRemovalEnabled {
3531-
require.NoError(t, err)
3532-
} else {
3533-
var expectedErr *stdlib.MissingDeclarationError
3534-
require.ErrorAs(t, err, &expectedErr)
3535-
}
3469+
require.NoError(t, err)
35363470
},
35373471
)
35383472

@@ -3574,13 +3508,8 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
35743508
`
35753509

35763510
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3577-
3578-
if config.ContractUpdateTypeRemovalEnabled {
3579-
var expectedErr *stdlib.UseOfRemovedTypeError
3580-
require.ErrorAs(t, err, &expectedErr)
3581-
} else {
3582-
require.NoError(t, err)
3583-
}
3511+
var expectedErr *stdlib.UseOfRemovedTypeError
3512+
require.ErrorAs(t, err, &expectedErr)
35843513
},
35853514
)
35863515

@@ -3602,13 +3531,8 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
36023531
`
36033532

36043533
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3605-
3606-
if config.ContractUpdateTypeRemovalEnabled {
3607-
var expectedErr *stdlib.UseOfRemovedTypeError
3608-
require.ErrorAs(t, err, &expectedErr)
3609-
} else {
3610-
require.NoError(t, err)
3611-
}
3534+
var expectedErr *stdlib.UseOfRemovedTypeError
3535+
require.ErrorAs(t, err, &expectedErr)
36123536
},
36133537
)
36143538

@@ -3630,13 +3554,8 @@ func TestTypeRemovalPragmaUpdates(t *testing.T) {
36303554
`
36313555

36323556
err := testDeployAndUpdate(t, "Test", oldCode, newCode, config)
3633-
3634-
if config.ContractUpdateTypeRemovalEnabled {
3635-
var expectedErr *stdlib.UseOfRemovedTypeError
3636-
require.ErrorAs(t, err, &expectedErr)
3637-
} else {
3638-
require.NoError(t, err)
3639-
}
3557+
var expectedErr *stdlib.UseOfRemovedTypeError
3558+
require.ErrorAs(t, err, &expectedErr)
36403559
},
36413560
)
36423561

runtime/environment.go

-1
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,6 @@ func (e *interpreterEnvironment) newInterpreterConfig() *interpreter.Config {
196196
CapabilityBorrowHandler: e.newCapabilityBorrowHandler(),
197197
CapabilityCheckHandler: e.newCapabilityCheckHandler(),
198198
LegacyContractUpgradeEnabled: e.config.LegacyContractUpgradeEnabled,
199-
ContractUpdateTypeRemovalEnabled: e.config.ContractUpdateTypeRemovalEnabled,
200199
ValidateAccountCapabilitiesGetHandler: e.newValidateAccountCapabilitiesGetHandler(),
201200
ValidateAccountCapabilitiesPublishHandler: e.newValidateAccountCapabilitiesPublishHandler(),
202201
}

stdlib/account.go

-3
Original file line numberDiff line numberDiff line change
@@ -1678,7 +1678,6 @@ func changeAccountContracts(
16781678

16791679
memoryGauge := invocation.Interpreter.SharedState.Config.MemoryGauge
16801680
legacyUpgradeEnabled := invocation.Interpreter.SharedState.Config.LegacyContractUpgradeEnabled
1681-
contractUpdateTypeRemovalEnabled := invocation.Interpreter.SharedState.Config.ContractUpdateTypeRemovalEnabled
16821681

16831682
var oldProgram *ast.Program
16841683

@@ -1731,8 +1730,6 @@ func changeAccountContracts(
17311730
)
17321731
}
17331732

1734-
validator = validator.WithTypeRemovalEnabled(contractUpdateTypeRemovalEnabled)
1735-
17361733
err = validator.Validate()
17371734
handleContractUpdateError(err, newCode)
17381735
}

stdlib/cadence_v0.42_to_v1_contract_upgrade_validator.go

-11
Original file line numberDiff line numberDiff line change
@@ -75,24 +75,13 @@ func (validator *CadenceV042ToV1ContractUpdateValidator) Location() common.Locat
7575
return validator.underlyingUpdateValidator.location
7676
}
7777

78-
func (validator *CadenceV042ToV1ContractUpdateValidator) isTypeRemovalEnabled() bool {
79-
return validator.underlyingUpdateValidator.isTypeRemovalEnabled()
80-
}
81-
8278
func (validator *CadenceV042ToV1ContractUpdateValidator) WithUserDefinedTypeChangeChecker(
8379
typeChangeCheckFunc func(oldTypeID common.TypeID, newTypeID common.TypeID) (checked, valid bool),
8480
) *CadenceV042ToV1ContractUpdateValidator {
8581
validator.checkUserDefinedType = typeChangeCheckFunc
8682
return validator
8783
}
8884

89-
func (validator *CadenceV042ToV1ContractUpdateValidator) WithTypeRemovalEnabled(
90-
enabled bool,
91-
) UpdateValidator {
92-
validator.underlyingUpdateValidator.WithTypeRemovalEnabled(enabled)
93-
return validator
94-
}
95-
9685
func (validator *CadenceV042ToV1ContractUpdateValidator) getCurrentDeclaration() ast.Declaration {
9786
return validator.underlyingUpdateValidator.getCurrentDeclaration()
9887
}

0 commit comments

Comments
 (0)