From 133df1ec39ec966c5bacbff811928d45be5d45a4 Mon Sep 17 00:00:00 2001 From: Supun Setunga Date: Thu, 22 Feb 2024 18:26:33 +0530 Subject: [PATCH] Add value migration test for untyped capabilities --- cmd/util/ledger/migrations/cadence.go | 2 +- .../migrations/cadence_values_migration.go | 10 +++--- .../cadence_values_migration_test.go | 32 ++++++++++++++++-- .../snapshot_cadence_v0.42.6 | Bin 962560 -> 991232 bytes .../store_transaction.cdc | 10 ++++-- go.mod | 2 +- go.sum | 4 +-- insecure/go.mod | 2 +- insecure/go.sum | 4 +-- integration/go.mod | 2 +- integration/go.sum | 4 +-- 11 files changed, 53 insertions(+), 19 deletions(-) diff --git a/cmd/util/ledger/migrations/cadence.go b/cmd/util/ledger/migrations/cadence.go index 837b29dcff4..3200dad6687 100644 --- a/cmd/util/ledger/migrations/cadence.go +++ b/cmd/util/ledger/migrations/cadence.go @@ -160,7 +160,7 @@ func NewCadence1ValueMigrations( // Populated by CadenceLinkValueMigrator, // used by CadenceCapabilityValueMigrator - capabilityIDs := &capcons.CapabilityIDMapping{} + capabilityIDs := &capcons.CapabilityMapping{} for _, accountBasedMigration := range []AccountBasedMigration{ NewCadence1ValueMigrator( diff --git a/cmd/util/ledger/migrations/cadence_values_migration.go b/cmd/util/ledger/migrations/cadence_values_migration.go index b8d68268fa6..b3b345a2a43 100644 --- a/cmd/util/ledger/migrations/cadence_values_migration.go +++ b/cmd/util/ledger/migrations/cadence_values_migration.go @@ -171,7 +171,7 @@ func NewCadence1ValueMigrator( // It populates the given map with the IDs of the capability controller it issues. func NewCadence1LinkValueMigrator( rwf reporters.ReportWriterFactory, - capabilityIDs *capcons.CapabilityIDMapping, + capabilityMapping *capcons.CapabilityMapping, ) *CadenceBaseMigrator { return &CadenceBaseMigrator{ name: "cadence-link-value-migration", @@ -188,7 +188,7 @@ func NewCadence1LinkValueMigrator( ) return []migrations.ValueMigration{ &capcons.LinkValueMigration{ - CapabilityIDs: capabilityIDs, + CapabilityMapping: capabilityMapping, AccountIDGenerator: idGenerator, Reporter: reporter, }, @@ -203,7 +203,7 @@ func NewCadence1LinkValueMigrator( // generated by the link value migration. func NewCadence1CapabilityValueMigrator( rwf reporters.ReportWriterFactory, - capabilityIDs *capcons.CapabilityIDMapping, + capabilityMapping *capcons.CapabilityMapping, ) *CadenceBaseMigrator { return &CadenceBaseMigrator{ name: "cadence-capability-value-migration", @@ -215,8 +215,8 @@ func NewCadence1CapabilityValueMigrator( ) []migrations.ValueMigration { return []migrations.ValueMigration{ &capcons.CapabilityValueMigration{ - CapabilityIDs: capabilityIDs, - Reporter: reporter, + CapabilityMapping: capabilityMapping, + Reporter: reporter, }, } }, diff --git a/cmd/util/ledger/migrations/cadence_values_migration_test.go b/cmd/util/ledger/migrations/cadence_values_migration_test.go index d3021bb4113..d620b9bc8c9 100644 --- a/cmd/util/ledger/migrations/cadence_values_migration_test.go +++ b/cmd/util/ledger/migrations/cadence_values_migration_test.go @@ -119,7 +119,7 @@ func checkMigratedPayloads( storageMap := mr.Storage.GetStorageMap(address, common.PathDomainStorage.Identifier(), false) require.NotNil(t, storageMap) - require.Equal(t, 11, int(storageMap.Count())) + require.Equal(t, 12, int(storageMap.Count())) iterator := storageMap.Iterator(mr.Interpreter) @@ -241,7 +241,7 @@ func checkMigratedPayloads( common.CompositeKindResource, []interpreter.CompositeField{ { - Value: interpreter.NewUnmeteredUInt64Value(1369094286720630784), + Value: interpreter.NewUnmeteredUInt64Value(360287970189639680), Name: "uuid", }, }, @@ -256,6 +256,12 @@ func checkMigratedPayloads( ), ), + interpreter.NewUnmeteredCapabilityValue( + interpreter.NewUnmeteredUInt64Value(2), + interpreter.NewAddressValue(nil, address), + interpreter.NewReferenceStaticType(nil, entitlementAuthorization(), rResourceType), + ), + interpreter.NewDictionaryValue( mr.Interpreter, interpreter.EmptyLocationRange, @@ -500,6 +506,28 @@ func checkReporters( common.PathDomainPublic, ), + // untyped capability + capConsPathCapabilityMigrationEntry{ + AccountAddress: address, + AddressPath: interpreter.AddressPath{ + Address: address, + Path: interpreter.NewUnmeteredPathValue( + common.PathDomainPublic, + "linkR", + ), + }, + BorrowType: interpreter.NewReferenceStaticType( + nil, + entitlementAuthorization(), + rResourceType, + ), + }, + newCadenceValueMigrationReportEntry( + "CapabilityValueMigration", + "untyped_capability", + common.PathDomainStorage, + ), + // Account-typed keys in dictionary acctTypedDictKeyMigrationReportEntry, acctTypedDictKeyMigrationReportEntry, diff --git a/cmd/util/ledger/migrations/test-data/cadence_values_migration/snapshot_cadence_v0.42.6 b/cmd/util/ledger/migrations/test-data/cadence_values_migration/snapshot_cadence_v0.42.6 index aa49c7e3764b6e0c11f5e12569a6ca9e592570a1..f890fbacadb0be1a6b39aa7091ce16315851d64b 100644 GIT binary patch delta 29156 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 Nrte>{XUvrF{{R^SBRK#7 delta 20843 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/public/linkR, target: /storage/r) - acct.save(cap, to: /storage/capability) + + // Typed capability + var cap1: Capability<&Test.R>? = acct.link<&Test.R>(/public/linkR, target: /storage/r) + acct.save(cap1, to: /storage/capability) + + // Untyped capability + var cap2: Capability = acct.getCapability(/public/linkR) + acct.save(cap2, to: /storage/untyped_capability) // account-typed keys in dictionary acct.save( diff --git a/go.mod b/go.mod index 019de61a755..601714760aa 100644 --- a/go.mod +++ b/go.mod @@ -51,7 +51,7 @@ require ( github.com/multiformats/go-multiaddr-dns v0.3.1 github.com/multiformats/go-multihash v0.2.3 github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f - github.com/onflow/cadence v1.0.0-M7 + github.com/onflow/cadence v1.0.0-preview.2.0.20240222003354-3e6a1d143a4d github.com/onflow/crypto v0.25.0 github.com/onflow/flow v0.3.4 github.com/onflow/flow-core-contracts/lib/go/contracts v0.15.2-0.20240206003101-928bf99024d7 diff --git a/go.sum b/go.sum index 52fff0fe388..fc2661802a3 100644 --- a/go.sum +++ b/go.sum @@ -2487,8 +2487,8 @@ github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f/go.mod h1:xvP61FoOs github.com/onflow/boxo v0.0.0-20240201202436-f2477b92f483 h1:LpiQhTAfM9CAmNVEs0n//cBBgCg+vJSiIxTHYUklZ84= github.com/onflow/boxo v0.0.0-20240201202436-f2477b92f483/go.mod h1:pIZgTWdm3k3pLF9Uq6MB8JEcW07UDwNJjlXW1HELW80= github.com/onflow/cadence v1.0.0-M3/go.mod h1:odXGZZ/wGNA5mwT8bC9v8u8EXACHllB2ABSZK65TGL8= -github.com/onflow/cadence v1.0.0-M7 h1:hb4LK9lUbFdnDdfU8oqJGSVJtmkOzxwKomhmDcP/Faw= -github.com/onflow/cadence v1.0.0-M7/go.mod h1:a4mccDU90hmuxCLUFzs9J/ANG/rYbFa36h4Z0bBAqNU= +github.com/onflow/cadence v1.0.0-preview.2.0.20240222003354-3e6a1d143a4d h1:Giws8CtHL9mh216kdkb3T+J2Gt4MloYWtOnElC8U6GU= +github.com/onflow/cadence v1.0.0-preview.2.0.20240222003354-3e6a1d143a4d/go.mod h1:a4mccDU90hmuxCLUFzs9J/ANG/rYbFa36h4Z0bBAqNU= github.com/onflow/crypto v0.25.0 h1:BeWbLsh3ZD13Ej+Uky6kg1PL1ZIVBDVX+2MVBNwqddg= github.com/onflow/crypto v0.25.0/go.mod h1:C8FbaX0x8y+FxWjbkHy0Q4EASCDR9bSPWZqlpCLYyVI= github.com/onflow/flow v0.3.4 h1:FXUWVdYB90f/rjNcY0Owo30gL790tiYff9Pb/sycXYE= diff --git a/insecure/go.mod b/insecure/go.mod index 90c5be1812e..5d792abb453 100644 --- a/insecure/go.mod +++ b/insecure/go.mod @@ -205,7 +205,7 @@ require ( github.com/multiformats/go-varint v0.0.7 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f // indirect - github.com/onflow/cadence v1.0.0-M7 // indirect + github.com/onflow/cadence v1.0.0-preview.2.0.20240222003354-3e6a1d143a4d // indirect github.com/onflow/flow-core-contracts/lib/go/contracts v0.15.2-0.20240206003101-928bf99024d7 // indirect github.com/onflow/flow-core-contracts/lib/go/templates v0.15.2-0.20240206003101-928bf99024d7 // indirect github.com/onflow/flow-ft/lib/go/contracts v0.7.1-0.20240205224107-320aa3cf09e0 // indirect diff --git a/insecure/go.sum b/insecure/go.sum index b395e18c463..8756b313be8 100644 --- a/insecure/go.sum +++ b/insecure/go.sum @@ -2472,8 +2472,8 @@ github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6 github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f h1:Z8/PgTqOgOg02MTRpTBYO2k16FE6z4wEOtaC2WBR9Xo= github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f/go.mod h1:xvP61FoOs95K7IYdIYRnNcYQGf4nbF/uuJ0tHf4DRuM= github.com/onflow/cadence v1.0.0-M3/go.mod h1:odXGZZ/wGNA5mwT8bC9v8u8EXACHllB2ABSZK65TGL8= -github.com/onflow/cadence v1.0.0-M7 h1:hb4LK9lUbFdnDdfU8oqJGSVJtmkOzxwKomhmDcP/Faw= -github.com/onflow/cadence v1.0.0-M7/go.mod h1:a4mccDU90hmuxCLUFzs9J/ANG/rYbFa36h4Z0bBAqNU= +github.com/onflow/cadence v1.0.0-preview.2.0.20240222003354-3e6a1d143a4d h1:Giws8CtHL9mh216kdkb3T+J2Gt4MloYWtOnElC8U6GU= +github.com/onflow/cadence v1.0.0-preview.2.0.20240222003354-3e6a1d143a4d/go.mod h1:a4mccDU90hmuxCLUFzs9J/ANG/rYbFa36h4Z0bBAqNU= github.com/onflow/crypto v0.25.0 h1:BeWbLsh3ZD13Ej+Uky6kg1PL1ZIVBDVX+2MVBNwqddg= github.com/onflow/crypto v0.25.0/go.mod h1:C8FbaX0x8y+FxWjbkHy0Q4EASCDR9bSPWZqlpCLYyVI= github.com/onflow/flow-core-contracts/lib/go/contracts v0.15.2-0.20240206003101-928bf99024d7 h1:OI/4F2NK/X/4x3dTUFFDGtuOsSa9pX+jjBeSEcBrY/M= diff --git a/integration/go.mod b/integration/go.mod index 2aabec7ffa4..a8ac026f965 100644 --- a/integration/go.mod +++ b/integration/go.mod @@ -20,7 +20,7 @@ require ( github.com/ipfs/go-datastore v0.6.0 github.com/ipfs/go-ds-badger2 v0.1.3 github.com/ipfs/go-ipfs-blockstore v1.3.0 - github.com/onflow/cadence v1.0.0-M7 + github.com/onflow/cadence v1.0.0-preview.2.0.20240222003354-3e6a1d143a4d github.com/onflow/crypto v0.25.0 github.com/onflow/flow-core-contracts/lib/go/contracts v0.15.2-0.20240206003101-928bf99024d7 github.com/onflow/flow-core-contracts/lib/go/templates v0.15.2-0.20240206003101-928bf99024d7 diff --git a/integration/go.sum b/integration/go.sum index 9174c4a250a..d7a50047c86 100644 --- a/integration/go.sum +++ b/integration/go.sum @@ -2548,8 +2548,8 @@ github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6 github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f h1:Z8/PgTqOgOg02MTRpTBYO2k16FE6z4wEOtaC2WBR9Xo= github.com/onflow/atree v0.6.1-0.20230711151834-86040b30171f/go.mod h1:xvP61FoOs95K7IYdIYRnNcYQGf4nbF/uuJ0tHf4DRuM= github.com/onflow/cadence v1.0.0-M3/go.mod h1:odXGZZ/wGNA5mwT8bC9v8u8EXACHllB2ABSZK65TGL8= -github.com/onflow/cadence v1.0.0-M7 h1:hb4LK9lUbFdnDdfU8oqJGSVJtmkOzxwKomhmDcP/Faw= -github.com/onflow/cadence v1.0.0-M7/go.mod h1:a4mccDU90hmuxCLUFzs9J/ANG/rYbFa36h4Z0bBAqNU= +github.com/onflow/cadence v1.0.0-preview.2.0.20240222003354-3e6a1d143a4d h1:Giws8CtHL9mh216kdkb3T+J2Gt4MloYWtOnElC8U6GU= +github.com/onflow/cadence v1.0.0-preview.2.0.20240222003354-3e6a1d143a4d/go.mod h1:a4mccDU90hmuxCLUFzs9J/ANG/rYbFa36h4Z0bBAqNU= github.com/onflow/crypto v0.25.0 h1:BeWbLsh3ZD13Ej+Uky6kg1PL1ZIVBDVX+2MVBNwqddg= github.com/onflow/crypto v0.25.0/go.mod h1:C8FbaX0x8y+FxWjbkHy0Q4EASCDR9bSPWZqlpCLYyVI= github.com/onflow/flow-core-contracts/lib/go/contracts v0.15.2-0.20240206003101-928bf99024d7 h1:OI/4F2NK/X/4x3dTUFFDGtuOsSa9pX+jjBeSEcBrY/M=