@etherisc/gif-next 0.0.2-2a59cd5-352 → 0.0.2-2af39ab-356
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +62 -145
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +112 -226
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +59 -92
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +90 -171
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +247 -205
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +63 -164
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +264 -292
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +67 -218
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +30 -11
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +415 -522
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +19 -184
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +501 -633
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +2 -2
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +120 -222
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +70 -284
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +196 -113
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +18 -220
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +182 -331
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +141 -366
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +182 -107
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +645 -268
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +300 -109
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +124 -206
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +89 -257
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +369 -167
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +25 -290
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +69 -153
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +12 -177
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +65 -443
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +188 -141
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +108 -249
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +183 -104
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +42 -272
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +179 -104
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +12 -177
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +31 -261
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +182 -113
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +11 -11
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +34 -67
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +4 -30
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +4 -30
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -21
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +12 -177
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -150
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +10 -62
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -23
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +171 -88
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +11 -74
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -23
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +13 -215
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -150
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +11 -74
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +31 -269
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +6 -188
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/Component.sol +88 -83
- package/contracts/components/Distribution.sol +16 -31
- package/contracts/components/IComponent.sol +40 -16
- package/contracts/components/IDistributionComponent.sol +1 -22
- package/contracts/components/IPoolComponent.sol +73 -47
- package/contracts/components/IProductComponent.sol +3 -2
- package/contracts/components/Pool.sol +171 -126
- package/contracts/components/Product.sol +38 -23
- package/contracts/instance/BundleManager.sol +7 -5
- package/contracts/instance/IInstance.sol +10 -3
- package/contracts/instance/IInstanceService.sol +2 -1
- package/contracts/instance/Instance.sol +25 -11
- package/contracts/instance/InstanceReader.sol +4 -3
- package/contracts/instance/InstanceService.sol +59 -11
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/base/KeyValueStore.sol +5 -2
- package/contracts/instance/base/Lifecycle.sol +11 -2
- package/contracts/instance/module/IBundle.sol +2 -1
- package/contracts/instance/module/IComponents.sol +35 -0
- package/contracts/instance/module/IDistribution.sol +2 -0
- package/contracts/instance/module/IPolicy.sol +30 -3
- package/contracts/instance/module/ISetup.sol +23 -7
- package/contracts/instance/service/ApplicationService.sol +139 -57
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +76 -38
- package/contracts/instance/service/BundleServiceManager.sol +1 -1
- package/contracts/instance/service/ClaimService.sol +151 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +133 -21
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +9 -9
- package/contracts/instance/service/IBundleService.sol +19 -11
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +23 -2
- package/contracts/instance/service/IPolicyService.sol +17 -35
- package/contracts/instance/service/IPoolService.sol +17 -2
- package/contracts/instance/service/PolicyService.sol +61 -175
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +72 -18
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/IRegistryService.sol +7 -7
- package/contracts/registry/RegistryService.sol +51 -45
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +10 -19
- package/contracts/registry/TokenRegistry.sol +13 -10
- package/contracts/shared/ERC165.sol +2 -1
- package/contracts/shared/INftOwnable.sol +4 -9
- package/contracts/shared/IRegistryLinked.sol +0 -3
- package/contracts/shared/IService.sol +2 -0
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +10 -80
- package/contracts/shared/ProxyManager.sol +98 -24
- package/contracts/shared/Registerable.sol +3 -10
- package/contracts/shared/RegistryLinked.sol +10 -26
- package/contracts/shared/Service.sol +10 -12
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/shared/Versionable.sol +1 -90
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/Fee.sol +1 -0
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +5 -4
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/RoleId.sol +10 -5
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +1 -0
- package/contracts/types/Timestamp.sol +13 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
- package/contracts/experiment/cloning/Cloner.sol +0 -47
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
|
@@ -22,32 +22,32 @@ contract RegistryServiceManager is
|
|
|
22
22
|
/// @dev initializes proxy manager with registry service implementation and deploys registry
|
|
23
23
|
constructor(
|
|
24
24
|
address initialAuthority, // used by implementation
|
|
25
|
-
address
|
|
26
|
-
ProxyManager()
|
|
25
|
+
address registryAddress) // used by implementation
|
|
26
|
+
ProxyManager(registryAddress)
|
|
27
27
|
{
|
|
28
28
|
require(initialAuthority > address(0), "RegistryServiceManager: initial authority is 0");
|
|
29
|
-
require(
|
|
29
|
+
require(registryAddress > address(0), "RegistryServiceManager: registry is 0");
|
|
30
30
|
|
|
31
31
|
// implementation's initializer func `data` argument
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
registry);
|
|
35
|
-
|
|
32
|
+
RegistryService srv = new RegistryService();
|
|
33
|
+
bytes memory data = abi.encode(registryAddress, initialAuthority);
|
|
36
34
|
IVersionable versionable = deploy(
|
|
37
|
-
address(
|
|
38
|
-
|
|
35
|
+
address(srv),
|
|
36
|
+
data);
|
|
39
37
|
|
|
40
38
|
_registryService = RegistryService(address(versionable));
|
|
39
|
+
|
|
40
|
+
// _linkToNftOwnable(address(_registryService));
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
// from IRegisterable
|
|
43
|
+
// // from IRegisterable
|
|
44
44
|
|
|
45
|
-
// IMPORTANT: registry here and in constructor MUST be the same
|
|
46
|
-
function
|
|
45
|
+
// // IMPORTANT: registry here and in constructor MUST be the same
|
|
46
|
+
function linkOwnershipToServiceNft()
|
|
47
47
|
public
|
|
48
48
|
onlyOwner
|
|
49
49
|
{
|
|
50
|
-
_linkToNftOwnable(
|
|
50
|
+
_linkToNftOwnable(address(_registryService));
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
//--- view functions ----------------------------------------------------//
|
|
@@ -41,7 +41,7 @@ contract ReleaseManager is AccessManaged
|
|
|
41
41
|
error SelfRegistration();
|
|
42
42
|
error RegisterableOwnerIsRegistered();
|
|
43
43
|
|
|
44
|
-
//
|
|
44
|
+
// _verifyService
|
|
45
45
|
error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
|
|
46
46
|
error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
|
|
47
47
|
|
|
@@ -148,12 +148,8 @@ contract ReleaseManager is AccessManaged
|
|
|
148
148
|
|
|
149
149
|
VersionPart version = _next;
|
|
150
150
|
ObjectType domain = REGISTRY();
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
// data: config bytes
|
|
151
|
+
_verifyService(service, version, domain);
|
|
154
152
|
_createRelease(service.getFunctionConfigs());
|
|
155
|
-
|
|
156
|
-
//setTargetClosed(service, true);
|
|
157
153
|
|
|
158
154
|
nftId = _registry.registerService(info, version, domain);
|
|
159
155
|
|
|
@@ -175,7 +171,7 @@ contract ReleaseManager is AccessManaged
|
|
|
175
171
|
IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
|
176
172
|
VersionPart version = getNextVersion();
|
|
177
173
|
ObjectType domain = _release[version].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
|
|
178
|
-
|
|
174
|
+
_verifyService(service, version, domain);
|
|
179
175
|
|
|
180
176
|
// setup and grant unique role if service does registrations
|
|
181
177
|
bytes4[] memory selectors = _selectors[version][domain];
|
|
@@ -266,8 +262,8 @@ contract ReleaseManager is AccessManaged
|
|
|
266
262
|
}
|
|
267
263
|
}
|
|
268
264
|
|
|
269
|
-
function
|
|
270
|
-
|
|
265
|
+
function _verifyService(
|
|
266
|
+
IService service,
|
|
271
267
|
VersionPart expectedVersion,
|
|
272
268
|
ObjectType expectedDomain
|
|
273
269
|
)
|
|
@@ -275,20 +271,15 @@ contract ReleaseManager is AccessManaged
|
|
|
275
271
|
view
|
|
276
272
|
returns(ObjectType)
|
|
277
273
|
{
|
|
278
|
-
(
|
|
279
|
-
|
|
280
|
-
VersionPart version
|
|
281
|
-
) = abi.decode(info.data, (ObjectType, VersionPart));
|
|
282
|
-
|
|
283
|
-
if(version != expectedVersion) {
|
|
284
|
-
revert UnexpectedServiceVersion(expectedVersion, version);
|
|
274
|
+
if(service.getMajorVersion() != expectedVersion) {
|
|
275
|
+
revert UnexpectedServiceVersion(expectedVersion, service.getMajorVersion());
|
|
285
276
|
}
|
|
286
277
|
|
|
287
|
-
if(
|
|
288
|
-
revert UnexpectedServiceDomain(expectedDomain,
|
|
278
|
+
if(service.getDomain() != expectedDomain) {
|
|
279
|
+
revert UnexpectedServiceDomain(expectedDomain, service.getDomain());
|
|
289
280
|
}
|
|
290
281
|
|
|
291
|
-
return
|
|
282
|
+
return expectedDomain;
|
|
292
283
|
}
|
|
293
284
|
|
|
294
285
|
// TODO check if registry supports types specified in the config array
|
|
@@ -26,9 +26,18 @@ contract TokenRegistry is
|
|
|
26
26
|
mapping(address token => bool registered) internal _registered;
|
|
27
27
|
mapping(address token => mapping(VersionPart majorVersion => bool isActive)) internal _active;
|
|
28
28
|
|
|
29
|
-
constructor(
|
|
29
|
+
constructor(
|
|
30
|
+
address registry
|
|
31
|
+
)
|
|
30
32
|
{
|
|
31
|
-
|
|
33
|
+
initialize(registry);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function initialize(address registry)
|
|
37
|
+
public
|
|
38
|
+
initializer()
|
|
39
|
+
{
|
|
40
|
+
initializeNftOwnable(msg.sender, registry);
|
|
32
41
|
}
|
|
33
42
|
|
|
34
43
|
|
|
@@ -41,9 +50,8 @@ contract TokenRegistry is
|
|
|
41
50
|
IRegistry registry = IRegistry(registryAddress);
|
|
42
51
|
// TODO use _latest instead of _initial -> but _latest is 0 before first release activation
|
|
43
52
|
address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getNextVersion());
|
|
44
|
-
//address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getInitialVersion());
|
|
45
53
|
|
|
46
|
-
_linkToNftOwnable(
|
|
54
|
+
_linkToNftOwnable(registryServiceAddress);
|
|
47
55
|
}
|
|
48
56
|
|
|
49
57
|
/// @dev token state is informative, registry have no clue about used tokens
|
|
@@ -94,12 +102,7 @@ contract TokenRegistry is
|
|
|
94
102
|
revert NotContract(token);
|
|
95
103
|
}
|
|
96
104
|
|
|
97
|
-
// MUST
|
|
98
|
-
if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
|
|
99
|
-
revert NotToken(token);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// MUST have decimals > 0
|
|
105
|
+
// MUST have decimals > 0 (indicator that this is in fact an erc20 token)
|
|
103
106
|
IERC20Metadata erc20 = IERC20Metadata(token);
|
|
104
107
|
if(erc20.decimals() == 0) {
|
|
105
108
|
revert TokenDecimalsZero();
|
|
@@ -10,12 +10,13 @@ contract ERC165 is
|
|
|
10
10
|
{
|
|
11
11
|
mapping(bytes4 => bool) private _isSupported;
|
|
12
12
|
|
|
13
|
-
// @dev
|
|
13
|
+
// @dev initializes with support for ERC165
|
|
14
14
|
function initializeERC165() public onlyInitializing() {
|
|
15
15
|
_isSupported[type(IERC165).interfaceId] = true;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
// @dev register support for provided interfaceId
|
|
19
|
+
// includes initialization for ERC165_ID if not yet done
|
|
19
20
|
function registerInterface(bytes4 interfaceId) public onlyInitializing() {
|
|
20
21
|
_isSupported[interfaceId] = true;
|
|
21
22
|
}
|
|
@@ -3,7 +3,6 @@ pragma solidity ^0.8.20;
|
|
|
3
3
|
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
|
5
5
|
|
|
6
|
-
import {IRegistry} from "../registry/IRegistry.sol";
|
|
7
6
|
import {IRegistryLinked} from "./IRegistryLinked.sol";
|
|
8
7
|
import {NftId} from "../types/NftId.sol";
|
|
9
8
|
|
|
@@ -11,15 +10,11 @@ interface INftOwnable is
|
|
|
11
10
|
IERC165,
|
|
12
11
|
IRegistryLinked
|
|
13
12
|
{
|
|
14
|
-
error
|
|
15
|
-
error
|
|
13
|
+
error ErrorNftOwnableInitialOwnerZero();
|
|
14
|
+
error ErrorNftOwnableNotOwner(address account);
|
|
16
15
|
|
|
17
|
-
error
|
|
18
|
-
|
|
19
|
-
// error ErrorRegistryNotInitialized();
|
|
20
|
-
// error ErrorRegistryAddressZero();
|
|
21
|
-
// error ErrorNotRegistry(address registryAddress);
|
|
22
|
-
error ErrorContractNotRegistered(address contractAddress);
|
|
16
|
+
error ErrorNftOwnableAlreadyLinked(NftId nftId);
|
|
17
|
+
error ErrorNftOwnableContractNotRegistered(address contractAddress);
|
|
23
18
|
|
|
24
19
|
function linkToRegisteredNftId() external;
|
|
25
20
|
|
|
@@ -5,9 +5,6 @@ import {IRegistry} from "../registry/IRegistry.sol";
|
|
|
5
5
|
|
|
6
6
|
interface IRegistryLinked {
|
|
7
7
|
|
|
8
|
-
error ErrorRegistryAlreadyInitialized(address registry);
|
|
9
|
-
error ErrorRegistryNotInitialized();
|
|
10
|
-
error ErrorRegistryAddressZero();
|
|
11
8
|
error ErrorNotRegistry(address registryAddress);
|
|
12
9
|
|
|
13
10
|
function getRegistry() external view returns (IRegistry);
|
|
@@ -11,6 +11,8 @@ interface IService is
|
|
|
11
11
|
IRegisterable,
|
|
12
12
|
IVersionable
|
|
13
13
|
{
|
|
14
|
+
error ErrorIServiceCallerUnknown(address caller);
|
|
15
|
+
|
|
14
16
|
function getDomain() external pure returns(ObjectType serviceDomain);
|
|
15
17
|
function getMajorVersion() external view returns(VersionPart majorVersion);
|
|
16
18
|
}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
|
-
import {Blocknumber} from "../types/Blocknumber.sol";
|
|
5
|
-
import {Timestamp} from "../types/Timestamp.sol";
|
|
6
4
|
import {Version} from "../types/Version.sol";
|
|
7
5
|
|
|
8
|
-
|
|
9
6
|
/// IMPORTANT
|
|
10
7
|
// Upgradeable contract MUST:
|
|
11
8
|
// 1) inherit from Versionable
|
|
@@ -14,7 +11,7 @@ import {Version} from "../types/Version.sol";
|
|
|
14
11
|
// 4) implement internal _upgrade() function with onlyInitializing modifier (1st version MUST revert)
|
|
15
12
|
// 5) have onlyInitialising modifier for each function callable inside _initialize()/_upgrade() (MUST use different functions for initialization/upgrade and normal operations)
|
|
16
13
|
// 6) use default empty constructor -> _disableInitializer() is called from Versionable contructor
|
|
17
|
-
// 7) use namespace storage
|
|
14
|
+
// 7) use namespace storage (should this be needed)
|
|
18
15
|
// 8) since now inheritance is used for upgradability, contract MUST BE inherited ONLY by the next version
|
|
19
16
|
// Upgradeable contract SHOULD:
|
|
20
17
|
// 9) define all non private methods as virtual (in order to be able to upgrade them latter)
|
|
@@ -22,48 +19,29 @@ import {Version} from "../types/Version.sol";
|
|
|
22
19
|
// in some cases this ok but not in the others...
|
|
23
20
|
//
|
|
24
21
|
// IMPORTANT
|
|
25
|
-
//
|
|
22
|
+
// If introducting/amending storage related to Versionable version MUST:
|
|
26
23
|
// 1) define namespace storage struct if accessing storage
|
|
27
24
|
// - DO NOT use structs inside, except
|
|
28
25
|
// - CAN use structs ONLY inside mappings
|
|
29
26
|
// 2) ALWAYS define private getter if accessing storage
|
|
30
27
|
// - MUST use default implementation, CAN change ONLY return type
|
|
31
|
-
// - MUST use the same "LOCATION_V1"
|
|
32
28
|
|
|
33
29
|
interface IVersionable {
|
|
34
30
|
|
|
35
|
-
struct VersionInfo {
|
|
36
|
-
Version version;
|
|
37
|
-
address implementation;
|
|
38
|
-
address activatedBy;
|
|
39
|
-
Timestamp activatedAt;
|
|
40
|
-
Blocknumber activatedIn;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
event LogVersionableInitialized(Version version, address implementation, address activatedBy);
|
|
44
|
-
|
|
45
|
-
// TODO uncomment when all implementations are ready
|
|
46
31
|
/**
|
|
47
32
|
* @dev IMPORTANT
|
|
48
33
|
* implementation MUST be guarded by initializer modifier
|
|
49
|
-
* implementation MUST call internal function Versionable._updateVersionHistory
|
|
50
34
|
* new version MUST inherit from previous version
|
|
51
35
|
*/
|
|
52
|
-
function initializeVersionable(address
|
|
36
|
+
function initializeVersionable(address activatedBy, bytes memory activationData) external;
|
|
53
37
|
|
|
54
38
|
/**
|
|
55
39
|
* @dev
|
|
56
40
|
* implementation MUST be guarded by reinitializer(version().toUint64()) modifier
|
|
57
|
-
* implementation MUST call internal function Versionable._updateVersionHistory
|
|
58
41
|
* new version MUST inherit from previous version
|
|
59
42
|
* the first verion MUST revert
|
|
60
43
|
*/
|
|
61
|
-
function upgradeVersionable(
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* @dev returns true if the specified version has been activated for the current contract
|
|
65
|
-
*/
|
|
66
|
-
function isInitialized(Version version) external view returns(bool);
|
|
44
|
+
function upgradeVersionable(bytes memory upgradeData) external;
|
|
67
45
|
|
|
68
46
|
/**
|
|
69
47
|
* @dev returns version of this contract
|
|
@@ -72,25 +50,4 @@ interface IVersionable {
|
|
|
72
50
|
*/
|
|
73
51
|
function getVersion() external pure returns(Version);
|
|
74
52
|
|
|
75
|
-
/**
|
|
76
|
-
* @dev returns the number of all deployed versions of this contract
|
|
77
|
-
*/
|
|
78
|
-
function getVersionCount() external view returns(uint256 numberOfVersions);
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* @dev returns the i-th (index) version of this contract
|
|
82
|
-
*/
|
|
83
|
-
function getVersion(uint256 index) external view returns(Version version);
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* @dev returns the i-th (index) version info of this contract
|
|
87
|
-
*/
|
|
88
|
-
function getVersionInfo(Version version) external view returns(VersionInfo memory versionInfo);
|
|
89
|
-
|
|
90
|
-
// TODO make sure it is needed here
|
|
91
|
-
/**
|
|
92
|
-
* @dev returns currently active version
|
|
93
|
-
*/
|
|
94
|
-
function getInitializedVersion() external view returns(uint64);
|
|
95
|
-
|
|
96
53
|
}
|
|
@@ -5,8 +5,7 @@ pragma solidity ^0.8.20;
|
|
|
5
5
|
|
|
6
6
|
import {ERC165} from "./ERC165.sol";
|
|
7
7
|
import {INftOwnable} from "./INftOwnable.sol";
|
|
8
|
-
import {
|
|
9
|
-
import {NftId, zeroNftId} from "../types/NftId.sol";
|
|
8
|
+
import {NftId} from "../types/NftId.sol";
|
|
10
9
|
import {RegistryLinked} from "./RegistryLinked.sol";
|
|
11
10
|
|
|
12
11
|
contract NftOwnable is
|
|
@@ -18,7 +17,6 @@ contract NftOwnable is
|
|
|
18
17
|
bytes32 public constant NFT_OWNABLE_STORAGE_LOCATION_V1 = 0x07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00;
|
|
19
18
|
|
|
20
19
|
struct NftOwnableStorage {
|
|
21
|
-
// IRegistry _registry;
|
|
22
20
|
NftId _nftId;
|
|
23
21
|
address _initialOwner;
|
|
24
22
|
}
|
|
@@ -26,7 +24,7 @@ contract NftOwnable is
|
|
|
26
24
|
/// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
|
|
27
25
|
modifier onlyOwner() {
|
|
28
26
|
if (msg.sender != getOwner()) {
|
|
29
|
-
revert
|
|
27
|
+
revert ErrorNftOwnableNotOwner(msg.sender);
|
|
30
28
|
}
|
|
31
29
|
_;
|
|
32
30
|
}
|
|
@@ -42,21 +40,14 @@ contract NftOwnable is
|
|
|
42
40
|
virtual
|
|
43
41
|
onlyInitializing()
|
|
44
42
|
{
|
|
45
|
-
_setInitialOwner(initialOwner);
|
|
46
|
-
|
|
47
43
|
initializeRegistryLinked(registryAddress);
|
|
48
44
|
initializeERC165();
|
|
49
|
-
registerInterface(type(INftOwnable).interfaceId);
|
|
50
|
-
}
|
|
51
45
|
|
|
46
|
+
if(initialOwner == address(0)) {
|
|
47
|
+
revert ErrorNftOwnableInitialOwnerZero();
|
|
48
|
+
}
|
|
52
49
|
|
|
53
|
-
|
|
54
|
-
public
|
|
55
|
-
initializer()
|
|
56
|
-
{
|
|
57
|
-
_setInitialOwner(initialOwner);
|
|
58
|
-
initializeERC165();
|
|
59
|
-
registerInterface(type(INftOwnable).interfaceId);
|
|
50
|
+
_getNftOwnableStorage()._initialOwner = initialOwner;
|
|
60
51
|
}
|
|
61
52
|
|
|
62
53
|
|
|
@@ -71,35 +62,22 @@ contract NftOwnable is
|
|
|
71
62
|
NftOwnableStorage storage $ = _getNftOwnableStorage();
|
|
72
63
|
|
|
73
64
|
if ($._nftId.gtz()) {
|
|
74
|
-
revert
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (address(getRegistry()) == address(0)) {
|
|
78
|
-
revert ErrorRegistryNotInitialized();
|
|
65
|
+
revert ErrorNftOwnableAlreadyLinked($._nftId);
|
|
79
66
|
}
|
|
80
67
|
|
|
81
68
|
address contractAddress = address(this);
|
|
82
69
|
|
|
83
70
|
if (!getRegistry().isRegistered(contractAddress)) {
|
|
84
|
-
revert
|
|
71
|
+
revert ErrorNftOwnableContractNotRegistered(contractAddress);
|
|
85
72
|
}
|
|
86
73
|
|
|
87
74
|
$._nftId = getRegistry().getNftId(contractAddress);
|
|
88
75
|
}
|
|
89
76
|
|
|
90
|
-
|
|
91
|
-
// function getRegistry() public view virtual override returns (IRegistry) {
|
|
92
|
-
// return _getNftOwnableStorage()._registry;
|
|
93
|
-
// }
|
|
94
|
-
|
|
95
77
|
function getNftId() public view virtual override returns (NftId) {
|
|
96
78
|
return _getNftOwnableStorage()._nftId;
|
|
97
79
|
}
|
|
98
80
|
|
|
99
|
-
function getInitialOwner() public view returns (address) {
|
|
100
|
-
return _getNftOwnableStorage()._initialOwner;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
81
|
function getOwner() public view virtual override returns (address) {
|
|
104
82
|
NftOwnableStorage storage $ = _getNftOwnableStorage();
|
|
105
83
|
|
|
@@ -110,41 +88,22 @@ contract NftOwnable is
|
|
|
110
88
|
return $._initialOwner;
|
|
111
89
|
}
|
|
112
90
|
|
|
113
|
-
/// @dev set initialOwner
|
|
114
|
-
/// initial owner may only be set during initialization
|
|
115
|
-
function _setInitialOwner(address initialOwner)
|
|
116
|
-
internal
|
|
117
|
-
virtual
|
|
118
|
-
onlyInitializing()
|
|
119
|
-
{
|
|
120
|
-
if(initialOwner == address(0)) {
|
|
121
|
-
revert ErrorInitialOwnerZero();
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
_getNftOwnableStorage()._initialOwner = initialOwner;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// TODO check if function can be refactored to work with a registry address set in an initializer
|
|
128
91
|
/// @dev used in constructor of registry service manager
|
|
129
92
|
// links ownership of registry service manager ot nft owner of registry service
|
|
130
93
|
function _linkToNftOwnable(
|
|
131
|
-
address registryAddress,
|
|
132
94
|
address nftOwnableAddress
|
|
133
95
|
)
|
|
134
96
|
internal
|
|
135
|
-
onlyOwner()
|
|
136
97
|
returns (NftId)
|
|
137
98
|
{
|
|
138
99
|
NftOwnableStorage storage $ = _getNftOwnableStorage();
|
|
139
100
|
|
|
140
101
|
if ($._nftId.gtz()) {
|
|
141
|
-
revert
|
|
102
|
+
revert ErrorNftOwnableAlreadyLinked($._nftId);
|
|
142
103
|
}
|
|
143
104
|
|
|
144
|
-
_setRegistry(registryAddress);
|
|
145
|
-
|
|
146
105
|
if (!getRegistry().isRegistered(nftOwnableAddress)) {
|
|
147
|
-
revert
|
|
106
|
+
revert ErrorNftOwnableContractNotRegistered(nftOwnableAddress);
|
|
148
107
|
}
|
|
149
108
|
|
|
150
109
|
$._nftId = getRegistry().getNftId(nftOwnableAddress);
|
|
@@ -153,35 +112,6 @@ contract NftOwnable is
|
|
|
153
112
|
}
|
|
154
113
|
|
|
155
114
|
|
|
156
|
-
// function _setRegistry(address registryAddress)
|
|
157
|
-
// private
|
|
158
|
-
// {
|
|
159
|
-
// NftOwnableStorage storage $ = _getNftOwnableStorage();
|
|
160
|
-
|
|
161
|
-
// if (address($._registry) != address(0)) {
|
|
162
|
-
// revert ErrorRegistryAlreadyInitialized(address($._registry));
|
|
163
|
-
// }
|
|
164
|
-
|
|
165
|
-
// if (registryAddress == address(0)) {
|
|
166
|
-
// revert ErrorRegistryAddressZero();
|
|
167
|
-
// }
|
|
168
|
-
|
|
169
|
-
// if (registryAddress.code.length == 0) {
|
|
170
|
-
// revert ErrorNotRegistry(registryAddress);
|
|
171
|
-
// }
|
|
172
|
-
|
|
173
|
-
// $._registry = IRegistry(registryAddress);
|
|
174
|
-
|
|
175
|
-
// try $._registry.supportsInterface(type(IRegistry).interfaceId) returns (bool isRegistry) {
|
|
176
|
-
// if (!isRegistry) {
|
|
177
|
-
// revert ErrorNotRegistry(registryAddress);
|
|
178
|
-
// }
|
|
179
|
-
// } catch {
|
|
180
|
-
// revert ErrorNotRegistry(registryAddress);
|
|
181
|
-
// }
|
|
182
|
-
// }
|
|
183
|
-
|
|
184
|
-
|
|
185
115
|
function _getNftOwnableStorage() private pure returns (NftOwnableStorage storage $) {
|
|
186
116
|
assembly {
|
|
187
117
|
$.slot := NFT_OWNABLE_STORAGE_LOCATION_V1
|
|
@@ -1,34 +1,56 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
|
-
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
|
|
5
|
-
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
|
|
6
4
|
import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
|
|
7
5
|
|
|
6
|
+
import {Blocknumber, blockNumber} from "../types/Blocknumber.sol";
|
|
8
7
|
import {IVersionable} from "./IVersionable.sol";
|
|
9
8
|
import {NftOwnable} from "./NftOwnable.sol";
|
|
9
|
+
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
|
|
10
|
+
import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
|
|
11
|
+
import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
|
|
10
12
|
import {UpgradableProxyWithAdmin} from "./UpgradableProxyWithAdmin.sol";
|
|
13
|
+
import {Version, VersionLib} from "../types/Version.sol";
|
|
11
14
|
|
|
12
15
|
/// @dev manages proxy deployments for upgradable contracs of type IVersionable
|
|
13
16
|
contract ProxyManager is
|
|
14
17
|
NftOwnable
|
|
15
18
|
{
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
struct VersionInfo {
|
|
21
|
+
Version version;
|
|
22
|
+
address implementation;
|
|
23
|
+
address activatedBy;
|
|
24
|
+
Timestamp activatedAt;
|
|
25
|
+
Blocknumber activatedIn;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
event LogProxyManagerVersionableDeployed(address indexed proxy, address initialImplementation);
|
|
29
|
+
event LogProxyManagerVersionableUpgraded(address indexed proxy, address upgradedImplementation);
|
|
20
30
|
|
|
21
|
-
error
|
|
22
|
-
error
|
|
23
|
-
|
|
31
|
+
error ErrorProxyManagerAlreadyDeployed();
|
|
32
|
+
error ErrorProxyManagerNotYetDeployed();
|
|
33
|
+
|
|
34
|
+
error ErrorProxyManagerZeroVersion();
|
|
35
|
+
error ErrorProxyManagerNextVersionNotIncreasing(Version nextVersion);
|
|
24
36
|
|
|
25
37
|
UpgradableProxyWithAdmin internal _proxy;
|
|
26
|
-
|
|
38
|
+
|
|
39
|
+
// state to keep version history
|
|
40
|
+
mapping(Version version => VersionInfo info) _versionHistory;
|
|
41
|
+
Version [] _versions;
|
|
27
42
|
|
|
28
43
|
/// @dev only used to capture proxy owner
|
|
29
|
-
constructor()
|
|
44
|
+
constructor(address registry)
|
|
30
45
|
{
|
|
31
|
-
|
|
46
|
+
initializeProxyManager(registry);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function initializeProxyManager(address registry)
|
|
50
|
+
public
|
|
51
|
+
initializer()
|
|
52
|
+
{
|
|
53
|
+
initializeNftOwnable(msg.sender, registry);
|
|
32
54
|
}
|
|
33
55
|
|
|
34
56
|
/// @dev deploy initial contract
|
|
@@ -38,22 +60,23 @@ contract ProxyManager is
|
|
|
38
60
|
onlyOwner()
|
|
39
61
|
returns (IVersionable versionable)
|
|
40
62
|
{
|
|
41
|
-
if (
|
|
42
|
-
|
|
63
|
+
if (_versions.length > 0) {
|
|
64
|
+
revert ErrorProxyManagerAlreadyDeployed();
|
|
65
|
+
}
|
|
43
66
|
|
|
44
67
|
address currentProxyOwner = getOwner(); // used by implementation
|
|
45
68
|
address initialProxyAdminOwner = address(this); // used by proxy
|
|
46
|
-
bytes memory data = getDeployData(initialImplementation, currentProxyOwner, initializationData);
|
|
47
69
|
|
|
48
70
|
_proxy = new UpgradableProxyWithAdmin(
|
|
49
71
|
initialImplementation,
|
|
50
72
|
initialProxyAdminOwner,
|
|
51
|
-
|
|
73
|
+
getDeployData(currentProxyOwner, initializationData)
|
|
52
74
|
);
|
|
53
75
|
|
|
54
76
|
versionable = IVersionable(address(_proxy));
|
|
77
|
+
_updateVersionHistory(versionable.getVersion(), initialImplementation, currentProxyOwner);
|
|
55
78
|
|
|
56
|
-
emit
|
|
79
|
+
emit LogProxyManagerVersionableDeployed(address(_proxy), initialImplementation);
|
|
57
80
|
}
|
|
58
81
|
|
|
59
82
|
/// @dev upgrade existing contract
|
|
@@ -63,33 +86,84 @@ contract ProxyManager is
|
|
|
63
86
|
onlyOwner()
|
|
64
87
|
returns (IVersionable versionable)
|
|
65
88
|
{
|
|
66
|
-
if (
|
|
89
|
+
if (_versions.length == 0) {
|
|
90
|
+
revert ErrorProxyManagerNotYetDeployed();
|
|
91
|
+
}
|
|
67
92
|
|
|
68
93
|
address currentProxyOwner = getOwner();
|
|
69
94
|
ProxyAdmin proxyAdmin = getProxy().getProxyAdmin();
|
|
70
95
|
ITransparentUpgradeableProxy proxy = ITransparentUpgradeableProxy(address(_proxy));
|
|
71
|
-
bytes memory data = getUpgradeData(newImplementation, currentProxyOwner, upgradeData);
|
|
72
96
|
|
|
73
97
|
proxyAdmin.upgradeAndCall(
|
|
74
98
|
proxy,
|
|
75
99
|
newImplementation,
|
|
76
|
-
|
|
100
|
+
getUpgradeData(upgradeData));
|
|
77
101
|
|
|
78
102
|
versionable = IVersionable(address(_proxy));
|
|
103
|
+
_updateVersionHistory(versionable.getVersion(), newImplementation, currentProxyOwner);
|
|
79
104
|
|
|
80
|
-
emit
|
|
105
|
+
emit LogProxyManagerVersionableUpgraded(address(_proxy), newImplementation);
|
|
81
106
|
|
|
82
107
|
}
|
|
83
108
|
|
|
84
|
-
function getDeployData(address
|
|
85
|
-
return abi.encodeWithSelector(
|
|
109
|
+
function getDeployData(address proxyOwner, bytes memory deployData) public pure returns (bytes memory data) {
|
|
110
|
+
return abi.encodeWithSelector(
|
|
111
|
+
IVersionable.initializeVersionable.selector,
|
|
112
|
+
proxyOwner,
|
|
113
|
+
deployData);
|
|
86
114
|
}
|
|
87
115
|
|
|
88
|
-
function getUpgradeData(
|
|
89
|
-
return abi.encodeWithSelector(
|
|
116
|
+
function getUpgradeData(bytes memory upgradeData) public pure returns (bytes memory data) {
|
|
117
|
+
return abi.encodeWithSelector(
|
|
118
|
+
IVersionable.upgradeVersionable.selector,
|
|
119
|
+
upgradeData);
|
|
90
120
|
}
|
|
91
121
|
|
|
92
122
|
function getProxy() public returns (UpgradableProxyWithAdmin) {
|
|
93
123
|
return _proxy;
|
|
94
124
|
}
|
|
125
|
+
|
|
126
|
+
function getVersion() external view virtual returns(Version) {
|
|
127
|
+
return IVersionable(address(_proxy)).getVersion();
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function getVersionCount() external view returns(uint256) {
|
|
131
|
+
return _versions.length;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function getVersion(uint256 idx) external view returns(Version) {
|
|
135
|
+
return _versions[idx];
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function getVersionInfo(Version _version) external view returns(VersionInfo memory) {
|
|
139
|
+
return _versionHistory[_version];
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function _updateVersionHistory(
|
|
143
|
+
Version newVersion,
|
|
144
|
+
address implementation,
|
|
145
|
+
address activatedBy
|
|
146
|
+
)
|
|
147
|
+
private
|
|
148
|
+
{
|
|
149
|
+
if(newVersion == VersionLib.zeroVersion()) {
|
|
150
|
+
revert ErrorProxyManagerZeroVersion();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if(_versions.length > 0) {
|
|
154
|
+
if(newVersion.toInt() <= _versions[_versions.length-1].toInt()) {
|
|
155
|
+
revert ErrorProxyManagerNextVersionNotIncreasing(newVersion);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// update version history
|
|
160
|
+
_versions.push(newVersion);
|
|
161
|
+
_versionHistory[newVersion] = VersionInfo(
|
|
162
|
+
newVersion,
|
|
163
|
+
implementation,
|
|
164
|
+
activatedBy,
|
|
165
|
+
TimestampLib.blockTimestamp(),
|
|
166
|
+
blockNumber()
|
|
167
|
+
);
|
|
168
|
+
}
|
|
95
169
|
}
|