From 6b46b3bcd10e1f665fc108263ffcb84860ec54b7 Mon Sep 17 00:00:00 2001 From: Giovanni Sanchez <108043524+sisyphusSmiling@users.noreply.github.com> Date: Tue, 7 May 2024 11:16:43 -0500 Subject: [PATCH] add temporary local migration report --- ...-capability-value-migrator_1715098464.json | 1 + ...adence-link-value-migrator_1715098464.json | 1 + .../cadence-value-migration_1715098464.json | 1 + report/contract-checking_1715098464.json | 1 + .../staged-contracts-migrator_1715098464.json | 26 +++++++++++++++++++ .../system-contracts-migrator_1715098464.json | 1 + 6 files changed, 31 insertions(+) create mode 100644 report/cadence-capability-value-migrator_1715098464.json create mode 100644 report/cadence-link-value-migrator_1715098464.json create mode 100644 report/cadence-value-migration_1715098464.json create mode 100644 report/contract-checking_1715098464.json create mode 100644 report/staged-contracts-migrator_1715098464.json create mode 100644 report/system-contracts-migrator_1715098464.json diff --git a/report/cadence-capability-value-migrator_1715098464.json b/report/cadence-capability-value-migrator_1715098464.json new file mode 100644 index 0000000..e5f1ca4 --- /dev/null +++ b/report/cadence-capability-value-migrator_1715098464.json @@ -0,0 +1 @@ +[{"kind":"capability-migration-success","account_address":"0xf8d6e0586b0a20c7","address":"0xf8d6e0586b0a20c7","path":"/private/flowStakingAdminEpochOperations","borrow_type":"\u0026A.f8d6e0586b0a20c7.FlowIDTableStaking.Admin"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"storage","key":"flowStakingAdminEpochOperations","migration":"CapabilityValueMigration"},{"kind":"capability-migration-success","account_address":"0xf8d6e0586b0a20c7","address":"0xf8d6e0586b0a20c7","path":"/private/flowQCAdminEpochOperations","borrow_type":"\u0026A.f8d6e0586b0a20c7.FlowClusterQC.Admin"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"storage","key":"flowQCAdminEpochOperations","migration":"CapabilityValueMigration"},{"kind":"capability-migration-success","account_address":"0xf8d6e0586b0a20c7","address":"0xf8d6e0586b0a20c7","path":"/private/flowDKGAdminEpochOperations","borrow_type":"\u0026A.f8d6e0586b0a20c7.FlowDKG.Admin"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"storage","key":"flowDKGAdminEpochOperations","migration":"CapabilityValueMigration"}] \ No newline at end of file diff --git a/report/cadence-link-value-migrator_1715098464.json b/report/cadence-link-value-migrator_1715098464.json new file mode 100644 index 0000000..f4f5314 --- /dev/null +++ b/report/cadence-link-value-migrator_1715098464.json @@ -0,0 +1 @@ +[{"kind":"link-migration-success","account_address":"0x0ae53cb6e3f42a79","path":"/public/flowTokenReceiver","capability_id":1},{"kind":"cadence-value-migration-success","account_address":"0x0ae53cb6e3f42a79","domain":"public","key":"flowTokenReceiver","migration":"LinkValueMigration"},{"kind":"link-migration-success","account_address":"0x0ae53cb6e3f42a79","path":"/public/flowTokenBalance","capability_id":2},{"kind":"cadence-value-migration-success","account_address":"0x0ae53cb6e3f42a79","domain":"public","key":"flowTokenBalance","migration":"LinkValueMigration"},{"kind":"link-migration-success","account_address":"0xee82856bf20e2aa6","path":"/public/flowTokenReceiver","capability_id":1},{"kind":"cadence-value-migration-success","account_address":"0xee82856bf20e2aa6","domain":"public","key":"flowTokenReceiver","migration":"LinkValueMigration"},{"kind":"link-migration-success","account_address":"0xee82856bf20e2aa6","path":"/public/flowTokenBalance","capability_id":2},{"kind":"cadence-value-migration-success","account_address":"0xee82856bf20e2aa6","domain":"public","key":"flowTokenBalance","migration":"LinkValueMigration"},{"kind":"link-migration-success","account_address":"0xf8d6e0586b0a20c7","path":"/private/flowStakingAdminEpochOperations","capability_id":1},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"private","key":"flowStakingAdminEpochOperations","migration":"LinkValueMigration"},{"kind":"link-migration-success","account_address":"0xf8d6e0586b0a20c7","path":"/private/lockedTokenAdmin","capability_id":2},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"private","key":"lockedTokenAdmin","migration":"LinkValueMigration"},{"kind":"link-migration-success","account_address":"0xf8d6e0586b0a20c7","path":"/private/flowDKGAdminEpochOperations","capability_id":3},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"private","key":"flowDKGAdminEpochOperations","migration":"LinkValueMigration"},{"kind":"link-migration-success","account_address":"0xe5a8b7f23e8b548f","path":"/public/flowTokenReceiver","capability_id":1},{"kind":"cadence-value-migration-success","account_address":"0xe5a8b7f23e8b548f","domain":"public","key":"flowTokenReceiver","migration":"LinkValueMigration"},{"kind":"link-migration-success","account_address":"0xe5a8b7f23e8b548f","path":"/public/flowTokenBalance","capability_id":2},{"kind":"cadence-value-migration-success","account_address":"0xe5a8b7f23e8b548f","domain":"public","key":"flowTokenBalance","migration":"LinkValueMigration"},{"kind":"link-migration-success","account_address":"0xf8d6e0586b0a20c7","path":"/private/flowQCAdminEpochOperations","capability_id":4},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"private","key":"flowQCAdminEpochOperations","migration":"LinkValueMigration"},{"kind":"link-migration-success","account_address":"0xf8d6e0586b0a20c7","path":"/public/flowTokenBalance","capability_id":5},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"public","key":"flowTokenBalance","migration":"LinkValueMigration"},{"kind":"link-migration-success","account_address":"0xf8d6e0586b0a20c7","path":"/public/flowTokenReceiver","capability_id":6},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"public","key":"flowTokenReceiver","migration":"LinkValueMigration"}] \ No newline at end of file diff --git a/report/cadence-value-migration_1715098464.json b/report/cadence-value-migration_1715098464.json new file mode 100644 index 0000000..54dd011 --- /dev/null +++ b/report/cadence-value-migration_1715098464.json @@ -0,0 +1 @@ +[{"kind":"cadence-value-migration-success","account_address":"0x0ae53cb6e3f42a79","domain":"public","key":"flowTokenReceiver","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0x0ae53cb6e3f42a79","domain":"public","key":"flowTokenBalance","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xe5a8b7f23e8b548f","domain":"public","key":"flowTokenReceiver","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xe5a8b7f23e8b548f","domain":"public","key":"flowTokenBalance","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"storage","key":"flowStakingAdminEpochOperations","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xee82856bf20e2aa6","domain":"public","key":"flowTokenReceiver","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xee82856bf20e2aa6","domain":"public","key":"flowTokenBalance","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"storage","key":"flowQCAdminEpochOperations","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"storage","key":"flowDKGAdminEpochOperations","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"private","key":"flowStakingAdminEpochOperations","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"private","key":"lockedTokenAdmin","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"private","key":"flowDKGAdminEpochOperations","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"private","key":"flowQCAdminEpochOperations","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"public","key":"flowTokenBalance","migration":"StaticTypeMigration"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"public","key":"flowTokenBalance","migration":"EntitlementsMigration"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"public","key":"flowTokenReceiver","migration":"StaticTypeMigration"},{"kind":"cadence-value-migration-success","account_address":"0xf8d6e0586b0a20c7","domain":"public","key":"flowTokenReceiver","migration":"EntitlementsMigration"}] \ No newline at end of file diff --git a/report/contract-checking_1715098464.json b/report/contract-checking_1715098464.json new file mode 100644 index 0000000..8fe4e68 --- /dev/null +++ b/report/contract-checking_1715098464.json @@ -0,0 +1 @@ +[{"address":"0xf8d6e0586b0a20c7","name":"NFTProviderFactory","error":"error: error getting program f8d6e0586b0a20c7.NFTProviderFactory: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :4:0\n |\n4 | pub contract NFTProviderFactory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :5:4\n |\n5 | pub struct Factory: CapabilityFactory.Factory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :6:8\n |\n6 | pub fun getCapability(acct: \u0026AuthAccount, path: CapabilityPath): Capability {\n | ^^^\n\n--\u003e f8d6e0586b0a20c7.NFTProviderFactory\n"},{"address":"0xf8d6e0586b0a20c7","name":"NFTCollectionPublicFactory","error":"error: error getting program f8d6e0586b0a20c7.NFTCollectionPublicFactory: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :4:0\n |\n4 | pub contract NFTCollectionPublicFactory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :5:4\n |\n5 | pub struct Factory: CapabilityFactory.Factory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :6:8\n |\n6 | pub fun getCapability(acct: \u0026AuthAccount, path: CapabilityPath): Capability {\n | ^^^\n\n--\u003e f8d6e0586b0a20c7.NFTCollectionPublicFactory\n"},{"address":"0xf8d6e0586b0a20c7","name":"CapabilityFilter","error":"error: error getting program f8d6e0586b0a20c7.CapabilityFilter: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :9:0\n |\n9 | pub contract CapabilityFilter {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :13:4\n |\n13 | pub let StoragePath: StoragePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :14:4\n |\n14 | pub let PublicPath: PublicPath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :15:4\n |\n15 | pub let PrivatePath: PrivatePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :19:4\n |\n19 | pub event FilterUpdated(id: UInt64, filterType: Type, type: Type, active: Bool)\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :24:4\n |\n24 | pub resource interface Filter {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :25:8\n |\n25 | pub fun allowed(cap: Capability): Bool\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :26:8\n |\n26 | pub fun getDetails(): AnyStruct\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :31:4\n |\n31 | pub resource DenylistFilter: Filter {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :42:8\n |\n42 | pub fun addType(_ type: Type) {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :51:8\n |\n51 | pub fun removeType(_ type: Type) {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :59:8\n |\n59 | pub fun removeAllTypes() {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :70:8\n |\n70 | pub fun allowed(cap: Capability): Bool {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :83:8\n |\n83 | pub fun getDetails(): AnyStruct {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :97:4\n |\n97 | pub resource AllowlistFilter: Filter {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :109:8\n |\n109 | pub fun addType(_ type: Type) {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :118:8\n |\n118 | pub fun removeType(_ type: Type) {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :126:8\n |\n126 | pub fun removeAllTypes() {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :137:8\n |\n137 | pub fun allowed(cap: Capability): Bool {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :150:8\n |\n150 | pub fun getDetails(): AnyStruct {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :164:4\n |\n164 | pub resource AllowAllFilter: Filter {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :170:8\n |\n170 | pub fun allowed(cap: Capability): Bool {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :179:8\n |\n179 | pub fun getDetails(): AnyStruct {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :191:4\n |\n191 | pub fun create(_ t: Type): @AnyResource{Filter} {\n | ^^^\n\nerror: expected identifier after start of function declaration, got keyword create\n --\u003e :191:12\n |\n191 | pub fun create(_ t: Type): @AnyResource{Filter} {\n | ^\n\n--\u003e f8d6e0586b0a20c7.CapabilityFilter\n"},{"address":"0xf8d6e0586b0a20c7","name":"NFTProviderAndCollectionFactory","error":"error: error getting program f8d6e0586b0a20c7.NFTProviderAndCollectionFactory: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :4:0\n |\n4 | pub contract NFTProviderAndCollectionFactory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :5:4\n |\n5 | pub struct Factory: CapabilityFactory.Factory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :6:8\n |\n6 | pub fun getCapability(acct: \u0026AuthAccount, path: CapabilityPath): Capability {\n | ^^^\n\n--\u003e f8d6e0586b0a20c7.NFTProviderAndCollectionFactory\n"},{"address":"0xf8d6e0586b0a20c7","name":"FTProviderFactory","error":"error: error getting program f8d6e0586b0a20c7.FTProviderFactory: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :4:0\n |\n4 | pub contract FTProviderFactory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :5:4\n |\n5 | pub struct Factory: CapabilityFactory.Factory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :6:8\n |\n6 | pub fun getCapability(acct: \u0026AuthAccount, path: CapabilityPath): Capability {\n | ^^^\n\n--\u003e f8d6e0586b0a20c7.FTProviderFactory\n"},{"address":"0xf8d6e0586b0a20c7","name":"HybridCustody","error":"error: error getting program f8d6e0586b0a20c7.HybridCustody: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :30:0\n |\n30 | pub contract HybridCustody {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :36:4\n |\n36 | pub let OwnedAccountStoragePath: StoragePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :37:4\n |\n37 | pub let OwnedAccountPublicPath: PublicPath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :38:4\n |\n38 | pub let OwnedAccountPrivatePath: PrivatePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :40:4\n |\n40 | pub let ManagerStoragePath: StoragePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :41:4\n |\n41 | pub let ManagerPublicPath: PublicPath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :42:4\n |\n42 | pub let ManagerPrivatePath: PrivatePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :44:4\n |\n44 | pub let LinkedAccountPrivatePath: PrivatePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :45:4\n |\n45 | pub let BorrowableAccountPrivatePath: PrivatePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :50:4\n |\n50 | pub event CreatedManager(id: UInt64)\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :52:4\n |\n52 | pub event CreatedOwnedAccount(id: UInt64, child: Address)\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :56:4\n |\n56 | pub event AccountUpdated(id: UInt64?, child: Address, parent: Address, active: Bool)\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :60:4\n |\n60 | pub event OwnershipUpdated(id: UInt64, child: Address, previousOwner: Address?, owner: Address?, active: Bool)\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :62:4\n |\n62 | pub event ChildAccountPublished(\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :73:4\n |\n73 | pub event OwnershipGranted(ownedAcctID: UInt64, child: Address, previousOwner: Address?, pendingOwner: Address)\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :75:4\n |\n75 | pub event AccountSealed(id: UInt64, address: Address, parents: [Address])\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :79:4\n |\n79 | pub resource interface BorrowableAccount {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :81:8\n |\n81 | pub fun check(): Bool\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :86:4\n |\n86 | pub resource interface OwnedAccountPublic {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :88:8\n |\n88 | pub fun getParentAddresses(): [Address]\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :91:8\n |\n91 | pub fun getParentStatuses(): {Address: Bool}\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :96:8\n |\n96 | pub fun getRedeemedStatus(addr: Address): Bool?\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :104:4\n |\n104 | pub resource interface OwnedAccountPrivate {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :107:8\n |\n107 | pub fun removeParent(parent: Address): Bool\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :113:8\n |\n113 | pub fun publishToParent(\n | ^^^\n\nerror: restricted types have been removed; replace with the concrete type or an equivalent intersection type\n --\u003e :115:59\n |\n115 | factory: Capability\u003c\u0026CapabilityFactory.Manager{CapabilityFactory.Getter}\u003e,\n | ^^^^^^^^^^^^^^^^^\n\n--\u003e f8d6e0586b0a20c7.HybridCustody\n"},{"address":"0xf8d6e0586b0a20c7","name":"CapabilityDelegator","error":"error: error getting program f8d6e0586b0a20c7.CapabilityDelegator: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :10:0\n |\n10 | pub contract CapabilityDelegator {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :14:4\n |\n14 | pub let StoragePath: StoragePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :15:4\n |\n15 | pub let PrivatePath: PrivatePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :16:4\n |\n16 | pub let PublicPath: PublicPath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :20:4\n |\n20 | pub event DelegatorCreated(id: UInt64)\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :21:4\n |\n21 | pub event DelegatorUpdated(id: UInt64, capabilityType: Type, isPublic: Bool, active: Bool)\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :25:4\n |\n25 | pub resource interface GetterPrivate {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :26:8\n |\n26 | pub fun getPrivateCapability(_ type: Type): Capability? {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :31:8\n |\n31 | pub fun findFirstPrivateType(_ type: Type): Type?\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :32:8\n |\n32 | pub fun getAllPrivate(): [Capability]\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :37:4\n |\n37 | pub resource interface GetterPublic {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :38:8\n |\n38 | pub fun getPublicCapability(_ type: Type): Capability? {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :44:8\n |\n44 | pub fun findFirstPublicType(_ type: Type): Type?\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :45:8\n |\n45 | pub fun getAllPublic(): [Capability]\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :51:4\n |\n51 | pub resource Delegator: GetterPublic, GetterPrivate {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :59:8\n |\n59 | pub fun getPublicCapability(_ type: Type): Capability? {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :69:8\n |\n69 | pub fun getPrivateCapability(_ type: Type): Capability? {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :77:8\n |\n77 | pub fun getAllPublic(): [Capability] {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :85:8\n |\n85 | pub fun getAllPrivate(): [Capability] {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :94:8\n |\n94 | pub fun findFirstPublicType(_ type: Type): Type? {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :109:8\n |\n109 | pub fun findFirstPrivateType(_ type: Type): Type? {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :125:8\n |\n125 | pub fun addCapability(cap: Capability, isPublic: Bool) {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :141:8\n |\n141 | pub fun removeCapability(cap: Capability) {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :161:4\n |\n161 | pub fun createDelegator(): @Delegator {\n | ^^^\n\n--\u003e f8d6e0586b0a20c7.CapabilityDelegator\n"},{"address":"0xf8d6e0586b0a20c7","name":"FTBalanceFactory","error":"error: error getting program f8d6e0586b0a20c7.FTBalanceFactory: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :4:0\n |\n4 | pub contract FTBalanceFactory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :5:4\n |\n5 | pub struct Factory: CapabilityFactory.Factory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :6:8\n |\n6 | pub fun getCapability(acct: \u0026AuthAccount, path: CapabilityPath): Capability {\n | ^^^\n\n--\u003e f8d6e0586b0a20c7.FTBalanceFactory\n"},{"address":"0xf8d6e0586b0a20c7","name":"FTReceiverFactory","error":"error: error getting program f8d6e0586b0a20c7.FTReceiverFactory: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :4:0\n |\n4 | pub contract FTReceiverFactory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :5:4\n |\n5 | pub struct Factory: CapabilityFactory.Factory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :6:8\n |\n6 | pub fun getCapability(acct: \u0026AuthAccount, path: CapabilityPath): Capability {\n | ^^^\n\n--\u003e f8d6e0586b0a20c7.FTReceiverFactory\n"},{"address":"0xf8d6e0586b0a20c7","name":"FTAllFactory","error":"error: error getting program f8d6e0586b0a20c7.FTAllFactory: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :4:0\n |\n4 | pub contract FTAllFactory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :5:4\n |\n5 | pub struct Factory: CapabilityFactory.Factory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :6:8\n |\n6 | pub fun getCapability(acct: \u0026AuthAccount, path: CapabilityPath): Capability {\n | ^^^\n\n--\u003e f8d6e0586b0a20c7.FTAllFactory\n"},{"address":"0xf8d6e0586b0a20c7","name":"CapabilityFactory","error":"error: error getting program f8d6e0586b0a20c7.CapabilityFactory: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :16:0\n |\n16 | pub contract CapabilityFactory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :18:4\n |\n18 | pub let StoragePath: StoragePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :19:4\n |\n19 | pub let PrivatePath: PrivatePath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :20:4\n |\n20 | pub let PublicPath: PublicPath\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :24:4\n |\n24 | pub struct interface Factory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :25:8\n |\n25 | pub fun getCapability(acct: \u0026AuthAccount, path: CapabilityPath): Capability\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :30:4\n |\n30 | pub resource interface Getter {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :31:8\n |\n31 | pub fun getSupportedTypes(): [Type]\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :32:8\n |\n32 | pub fun getFactory(_ t: Type): {CapabilityFactory.Factory}?\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :38:4\n |\n38 | pub resource Manager: Getter {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :40:8\n |\n40 | pub let factories: {Type: {CapabilityFactory.Factory}}\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :46:8\n |\n46 | pub fun getSupportedTypes(): [Type] {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :54:8\n |\n54 | pub fun getFactory(_ t: Type): {CapabilityFactory.Factory}? {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :63:8\n |\n63 | pub fun addFactory(_ t: Type, _ f: {CapabilityFactory.Factory}) {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :75:8\n |\n75 | pub fun updateFactory(_ t: Type, _ f: {CapabilityFactory.Factory}) {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :83:8\n |\n83 | pub fun removeFactory(_ t: Type): {CapabilityFactory.Factory}? {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :95:4\n |\n95 | pub fun createFactoryManager(): @Manager {\n | ^^^\n\n--\u003e f8d6e0586b0a20c7.CapabilityFactory\n"},{"address":"0xf8d6e0586b0a20c7","name":"FTReceiverBalanceFactory","error":"error: error getting program f8d6e0586b0a20c7.FTReceiverBalanceFactory: failed to derive value: load program failed: Parsing failed:\nerror: `pub` is no longer a valid access keyword\n --\u003e :4:0\n |\n4 | pub contract FTReceiverBalanceFactory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :5:4\n |\n5 | pub struct Factory: CapabilityFactory.Factory {\n | ^^^\n\nerror: `pub` is no longer a valid access keyword\n --\u003e :6:8\n |\n6 | pub fun getCapability(acct: \u0026AuthAccount, path: CapabilityPath): Capability {\n | ^^^\n\n--\u003e f8d6e0586b0a20c7.FTReceiverBalanceFactory\n"}] \ No newline at end of file diff --git a/report/staged-contracts-migrator_1715098464.json b/report/staged-contracts-migrator_1715098464.json new file mode 100644 index 0000000..821830e --- /dev/null +++ b/report/staged-contracts-migrator_1715098464.json @@ -0,0 +1,26 @@ +[ + { + "kind": "contract-update-failure", + "account_address": "0xf8d6e0586b0a20c7", + "contract_name": "HybridCustody", + "error": "error: mismatching field `factory` in `ChildAccount`\n --> f8d6e0586b0a20c7.HybridCustody:532:34\n |\n532 | access(self) var factory: Capability<&{CapabilityFactory.Getter}>\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ incompatible type annotations. expected `CapabilityFactory.Manager`, found `{CapabilityFactory.Getter}`\n\nerror: mismatching field `delegator` in `ChildAccount`\n --> f8d6e0586b0a20c7.HybridCustody:544:36\n |\n544 | access(self) let delegator: Capability\n | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ incompatible type annotations. expected `CapabilityDelegator.Delegator`, found `{CapabilityDelegator.GetterPublic, CapabilityDelegator.GetterPrivate}`\n" + }, + { + "kind": "contract-update-failure", + "account_address": "0xf8d6e0586b0a20c7", + "contract_name": "CapabilityFactory", + "error": "error: unsafe access modifiers on CapabilityFactory.Manager: the entitlements migration would grant references to this type CapabilityFactory.Owner, CapabilityFactory.Add, CapabilityFactory.Delete authorization, which is too permissive.\n --> f8d6e0586b0a20c7.CapabilityFactory:42:4\n |\n42 | access(all) resource Manager: Getter {\n43 | /// Mapping of Factories indexed on Type of Capability they retrieve\n44 | access(all) let factories: {Type: {CapabilityFactory.Factory}}\n45 | \n46 | /// Retrieves a list of Types supported by contained Factories\n47 | ///\n48 | /// @return List of Types supported by the Manager\n49 | ///\n50 | access(all) view fun getSupportedTypes(): [Type] {\n51 | return self.factories.keys\n52 | }\n53 | \n54 | /// Retrieves a Factory from the Manager, returning it or nil if it doesn't exist\n55 | ///\n56 | /// @param t: Type the Factory is indexed on\n57 | ///\n58 | access(all) view fun getFactory(_ t: Type): {CapabilityFactory.Factory}? {\n59 | return self.factories[t]\n60 | }\n61 | \n62 | /// Adds a Factory to the Manager, conditioned on the Factory not already existing\n63 | ///\n64 | /// @param t: Type of Capability the Factory retrieves\n65 | /// @param f: Factory to add\n66 | ///\n67 | access(Owner | Add) fun addFactory(_ t: Type, _ f: {CapabilityFactory.Factory}) {\n68 | pre {\n69 | !self.factories.containsKey(t): \"Factory of given type already exists\"\n70 | }\n71 | self.factories[t] = f\n72 | }\n73 | \n74 | /// Updates a Factory in the Manager, adding if it didn't already exist\n75 | ///\n76 | /// @param t: Type of Capability the Factory retrieves\n77 | /// @param f: Factory to replace existing Factory\n78 | ///\n79 | access(Owner | Add) fun updateFactory(_ t: Type, _ f: {CapabilityFactory.Factory}) {\n80 | self.factories[t] = f\n81 | }\n82 | \n83 | /// Removes a Factory from the Manager, returning it or nil if it didn't exist\n84 | ///\n85 | /// @param t: Type the Factory is indexed on\n86 | ///\n87 | access(Owner | Delete) fun removeFactory(_ t: Type): {CapabilityFactory.Factory}? {\n88 | return self.factories.remove(key: t)\n89 | }\n90 | \n91 | init () {\n92 | self.factories = {}\n93 | }\n94 | }\n | ^ Consider removing any disjunction access modifiers\n" + }, + { + "kind": "contract-update-failure", + "account_address": "0xf8d6e0586b0a20c7", + "contract_name": "CapabilityFilter", + "error": "error: unsafe access modifiers on CapabilityFilter.DenylistFilter: the entitlements migration would grant references to this type CapabilityFilter.Owner, CapabilityFilter.Add, CapabilityFilter.Delete authorization, which is too permissive.\n --> f8d6e0586b0a20c7.CapabilityFilter:34:4\n |\n34 | access(all) resource DenylistFilter: Filter {\n35 | \n36 | /// Represents the underlying types which should not ever be returned by a RestrictedChildAccount. The filter\n37 | /// will borrow a requested capability, and make sure that the type it gets back is not in the list of denied\n38 | /// types\n39 | access(self) let deniedTypes: {Type: Bool}\n40 | \n41 | /// Adds a type to the mapping of denied types with a value of true\n42 | /// \n43 | /// @param type: The type to add to the denied types mapping\n44 | ///\n45 | access(Owner | Add) fun addType(_ type: Type) {\n46 | self.deniedTypes.insert(key: type, true)\n47 | emit FilterUpdated(id: self.uuid, filterType: self.getType(), type: type, active: true)\n48 | }\n49 | \n50 | /// Removes a type from the mapping of denied types\n51 | ///\n52 | /// @param type: The type to remove from the denied types mapping\n53 | ///\n54 | access(Owner | Delete) fun removeType(_ type: Type) {\n55 | if let removed = self.deniedTypes.remove(key: type) {\n56 | emit FilterUpdated(id: self.uuid, filterType: self.getType(), type: type, active: false)\n57 | }\n58 | }\n59 | \n60 | /// Removes all types from the mapping of denied types\n61 | ///\n62 | access(Owner | Delete) fun removeAllTypes() {\n63 | for type in self.deniedTypes.keys {\n64 | self.removeType(type)\n65 | }\n66 | }\n67 | \n68 | /// Determines if a requested capability is allowed by this `Filter`\n69 | ///\n70 | /// @param cap: The capability to check\n71 | /// @return: true if the capability is allowed, false otherwise\n72 | ///\n73 | access(all) view fun allowed(cap: Capability): Bool {\n74 | if let item = cap.borrow<&AnyResource>() {\n75 | return !self.deniedTypes.containsKey(item.getType())\n76 | }\n77 | \n78 | return false\n79 | }\n80 | \n81 | /// Returns details about this filter\n82 | ///\n83 | /// @return A struct containing details about this filter including this Filter's Type indexed on the `type`\n84 | /// key as well as types denied indexed on the `deniedTypes` key\n85 | ///\n86 | access(all) view fun getDetails(): AnyStruct {\n87 | return {\n88 | \"type\": self.getType(),\n89 | \"deniedTypes\": self.deniedTypes.keys\n90 | }\n91 | }\n92 | \n93 | init() {\n94 | self.deniedTypes = {}\n95 | }\n96 | }\n | ^ Consider removing any disjunction access modifiers\n\nerror: unsafe access modifiers on CapabilityFilter.AllowlistFilter: the entitlements migration would grant references to this type CapabilityFilter.Owner, CapabilityFilter.Add, CapabilityFilter.Delete authorization, which is too permissive.\n --> f8d6e0586b0a20c7.CapabilityFilter:100:4\n |\n100 | access(all) resource AllowlistFilter: Filter {\n101 | // allowedTypes\n102 | // Represents the set of underlying types which are allowed to be \n103 | // returned by a RestrictedChildAccount. The filter will borrow\n104 | // a requested capability, and make sure that the type it gets back is\n105 | // in the list of allowed types\n106 | access(self) let allowedTypes: {Type: Bool}\n107 | \n108 | /// Adds a type to the mapping of allowed types with a value of true\n109 | /// \n110 | /// @param type: The type to add to the allowed types mapping\n111 | ///\n112 | access(Owner | Add) fun addType(_ type: Type) {\n113 | self.allowedTypes.insert(key: type, true)\n114 | emit FilterUpdated(id: self.uuid, filterType: self.getType(), type: type, active: true)\n115 | }\n116 | \n117 | /// Removes a type from the mapping of allowed types\n118 | ///\n119 | /// @param type: The type to remove from the denied types mapping\n120 | ///\n121 | access(Owner | Delete) fun removeType(_ type: Type) {\n122 | if let removed = self.allowedTypes.remove(key: type) {\n123 | emit FilterUpdated(id: self.uuid, filterType: self.getType(), type: type, active: false)\n124 | }\n125 | }\n126 | \n127 | /// Removes all types from the mapping of denied types\n128 | ///\n129 | access(Owner | Delete) fun removeAllTypes() {\n130 | for type in self.allowedTypes.keys {\n131 | self.removeType(type)\n132 | }\n133 | }\n134 | \n135 | /// Determines if a requested capability is allowed by this `Filter`\n136 | ///\n137 | /// @param cap: The capability to check\n138 | /// @return: true if the capability is allowed, false otherwise\n139 | ///\n140 | access(all) view fun allowed(cap: Capability): Bool {\n141 | if let item = cap.borrow<&AnyResource>() {\n142 | return self.allowedTypes.containsKey(item.getType())\n143 | }\n144 | \n145 | return false\n146 | }\n147 | \n148 | /// Returns details about this filter\n149 | ///\n150 | /// @return A struct containing details about this filter including this Filter's Type indexed on the `type`\n151 | /// key as well as types allowed indexed on the `allowedTypes` key\n152 | ///\n153 | access(all) view fun getDetails(): AnyStruct {\n154 | return {\n155 | \"type\": self.getType(),\n156 | \"allowedTypes\": self.allowedTypes.keys\n157 | }\n158 | }\n159 | \n160 | init() {\n161 | self.allowedTypes = {}\n162 | }\n163 | }\n | ^ Consider removing any disjunction access modifiers\n" + }, + { + "kind": "contract-update-failure", + "account_address": "0xf8d6e0586b0a20c7", + "contract_name": "CapabilityDelegator", + "error": "error: unsafe access modifiers on CapabilityDelegator.Delegator: the entitlements migration would grant references to this type CapabilityDelegator.Get, CapabilityDelegator.Owner, CapabilityDelegator.Add, CapabilityDelegator.Delete authorization, which is too permissive.\n --> f8d6e0586b0a20c7.CapabilityDelegator:55:4\n |\n 55 | access(all) resource Delegator: GetterPublic, GetterPrivate {\n 56 | access(self) let privateCapabilities: {Type: Capability}\n 57 | access(self) let publicCapabilities: {Type: Capability}\n 58 | \n 59 | // ------ Begin Getter methods\n 60 | //\n 61 | /// Returns the public Capability of the given Type if it exists\n 62 | ///\n 63 | access(all) view fun getPublicCapability(_ type: Type): Capability? {\n 64 | return self.publicCapabilities[type]\n 65 | }\n 66 | \n 67 | /// Returns the private Capability of the given Type if it exists\n 68 | ///\n 69 | ///\n 70 | /// @param type: Type of the Capability to retrieve\n 71 | /// @return Capability of the given Type if it exists, nil otherwise\n 72 | ///\n 73 | access(Get) view fun getPrivateCapability(_ type: Type): Capability? {\n 74 | return self.privateCapabilities[type]\n 75 | }\n 76 | \n 77 | /// Returns all public Capabilities\n 78 | ///\n 79 | /// @return List of all public Capabilities\n 80 | ///\n 81 | access(all) view fun getAllPublic(): [Capability] {\n 82 | return self.publicCapabilities.values\n 83 | }\n 84 | \n 85 | /// Returns all private Capabilities\n 86 | ///\n 87 | /// @return List of all private Capabilities\n 88 | ///\n 89 | access(Get) fun getAllPrivate(): [Capability] {\n 90 | return self.privateCapabilities.values\n 91 | }\n 92 | \n 93 | /// Returns the first public Type that is a subtype of the given Type\n 94 | ///\n 95 | /// @param type: Type to check for subtypes\n 96 | /// @return First public Type that is a subtype of the given Type, nil otherwise\n 97 | ///\n 98 | access(all) view fun findFirstPublicType(_ type: Type): Type? {\n 99 | for t in self.publicCapabilities.keys {\n100 | if t.isSubtype(of: type) {\n101 | return t\n102 | }\n103 | }\n104 | \n105 | return nil\n106 | }\n107 | \n108 | /// Returns the first private Type that is a subtype of the given Type\n109 | ///\n110 | /// @param type: Type to check for subtypes\n111 | /// @return First private Type that is a subtype of the given Type, nil otherwise\n112 | ///\n113 | access(all) view fun findFirstPrivateType(_ type: Type): Type? {\n114 | for t in self.privateCapabilities.keys {\n115 | if t.isSubtype(of: type) {\n116 | return t\n117 | }\n118 | }\n119 | \n120 | return nil\n121 | }\n122 | // ------- End Getter methods\n123 | \n124 | /// Adds a Capability to the Delegator\n125 | ///\n126 | /// @param cap: Capability to add\n127 | /// @param isPublic: Whether the Capability should be public or private\n128 | ///\n129 | access(Owner | Add) fun addCapability(cap: Capability, isPublic: Bool) {\n130 | pre {\n131 | cap.check<&AnyResource>(): \"Invalid Capability provided\"\n132 | }\n133 | if isPublic {\n134 | self.publicCapabilities.insert(key: cap.getType(), cap)\n135 | } else {\n136 | self.privateCapabilities.insert(key: cap.getType(), cap)\n137 | }\n138 | emit DelegatorUpdated(id: self.uuid, capabilityType: cap.getType(), isPublic: isPublic, active: true)\n139 | }\n140 | \n141 | /// Removes a Capability from the Delegator\n142 | ///\n143 | /// @param cap: Capability to remove\n144 | ///\n145 | access(Owner | Delete) fun removeCapability(cap: Capability) {\n146 | if let removedPublic = self.publicCapabilities.remove(key: cap.getType()) {\n147 | emit DelegatorUpdated(id: self.uuid, capabilityType: cap.getType(), isPublic: true, active: false)\n148 | }\n149 | \n150 | if let removedPrivate = self.privateCapabilities.remove(key: cap.getType()) {\n151 | emit DelegatorUpdated(id: self.uuid, capabilityType: cap.getType(), isPublic: false, active: false)\n152 | }\n153 | }\n154 | \n155 | init() {\n156 | self.privateCapabilities = {}\n157 | self.publicCapabilities = {}\n158 | }\n159 | }\n | ^ Consider removing any disjunction access modifiers\n" + } +] \ No newline at end of file diff --git a/report/system-contracts-migrator_1715098464.json b/report/system-contracts-migrator_1715098464.json new file mode 100644 index 0000000..5ac3e1b --- /dev/null +++ b/report/system-contracts-migrator_1715098464.json @@ -0,0 +1 @@ +[{"kind":"contract-update-success","account_address":"0xee82856bf20e2aa6","contract_name":"FungibleTokenMetadataViews"},{"kind":"contract-update-success","account_address":"0xee82856bf20e2aa6","contract_name":"FungibleToken"},{"kind":"contract-update-success","account_address":"0xe5a8b7f23e8b548f","contract_name":"FlowFees"},{"kind":"contract-update-success","account_address":"0x0ae53cb6e3f42a79","contract_name":"FlowToken"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"NonFungibleToken"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"MetadataViews"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"ViewResolver"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"RandomBeaconHistory"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"FlowIDTableStaking"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"FlowServiceAccount"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"NodeVersionBeacon"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"FlowEpoch"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"FlowClusterQC"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"FlowStorageFees"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"FlowStakingCollection"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"StakingProxy"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"LockedTokens"},{"kind":"contract-update-success","account_address":"0xf8d6e0586b0a20c7","contract_name":"FlowDKG"}] \ No newline at end of file