@etherisc/gif-next 0.0.2-fe88ad7-208 → 0.0.2-ff8087d-237
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 -13
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +873 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +903 -202
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +237 -83
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +879 -31
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +879 -59
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +720 -16
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +760 -195
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +564 -141
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +15 -15
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +69 -79
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1474 -483
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +248 -218
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1152 -794
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +462 -179
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +414 -267
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +482 -346
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +355 -91
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +11 -40
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +263 -164
- 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/IAccess.sol/IAccess.json +58 -75
- 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 +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1124 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +688 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +641 -303
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +343 -79
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1384 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +752 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1434 -280
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +469 -73
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IApplicationService.sol/IApplicationService.json} +342 -189
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +310 -249
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +743 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +757 -144
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +262 -275
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +703 -125
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +71 -165
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +632 -344
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +367 -91
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1119 -224
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +361 -73
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +297 -210
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +298 -78
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +117 -5
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +99 -217
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +131 -27
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +18 -18
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +205 -250
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +287 -81
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +81 -68
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +138 -50
- 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 +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -34
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +71 -165
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +107 -27
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +283 -63
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +116 -51
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +173 -153
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
- 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 +2 -152
- 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 +116 -51
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +191 -203
- 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 +8 -190
- 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/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
- 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 +179 -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 +74 -19
- 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 +209 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
- 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 +38 -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 +272 -0
- package/contracts/components/Distribution.sol +204 -82
- package/contracts/components/IComponent.sol +90 -0
- package/contracts/components/IDistributionComponent.sol +44 -17
- package/contracts/components/IPoolComponent.sol +90 -42
- package/contracts/components/IProductComponent.sol +15 -9
- package/contracts/components/Pool.sol +217 -186
- package/contracts/components/Product.sol +246 -166
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +2 -12
- package/contracts/instance/BundleManager.sol +17 -20
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +67 -25
- package/contracts/instance/IInstanceService.sol +34 -11
- package/contracts/instance/Instance.sol +158 -116
- package/contracts/instance/InstanceAccessManager.sol +389 -165
- package/contracts/instance/InstanceReader.sol +87 -36
- package/contracts/instance/InstanceService.sol +295 -161
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/ObjectManager.sol +10 -29
- package/contracts/instance/base/ComponentService.sol +130 -0
- package/contracts/instance/base/KeyValueStore.sol +13 -36
- package/contracts/instance/base/Lifecycle.sol +26 -6
- package/contracts/instance/module/IAccess.sol +22 -16
- package/contracts/instance/module/IBundle.sol +8 -5
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +3 -0
- package/contracts/instance/module/IPolicy.sol +43 -11
- package/contracts/instance/module/ISetup.sol +7 -20
- package/contracts/instance/service/ApplicationService.sol +356 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +244 -119
- package/contracts/instance/service/BundleServiceManager.sol +1 -1
- package/contracts/instance/service/ClaimService.sol +443 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +360 -41
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +79 -0
- package/contracts/instance/service/IBundleService.sol +93 -20
- package/contracts/instance/service/IClaimService.sol +90 -0
- package/contracts/instance/service/IDistributionService.sol +89 -0
- package/contracts/instance/service/IPolicyService.sol +44 -51
- package/contracts/instance/service/IPoolService.sol +97 -3
- package/contracts/instance/service/PolicyService.sol +233 -364
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +319 -40
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/ProductService.sol +90 -50
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +18 -8
- package/contracts/registry/IRegistryService.sol +21 -13
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +142 -71
- package/contracts/registry/RegistryAccessManager.sol +31 -25
- package/contracts/registry/RegistryService.sol +93 -134
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +103 -127
- package/contracts/registry/TokenRegistry.sol +19 -13
- package/contracts/shared/ERC165.sol +14 -12
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +40 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +11 -0
- package/contracts/shared/IService.sol +6 -4
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +64 -80
- package/contracts/shared/PolicyHolder.sol +94 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +24 -39
- package/contracts/shared/RegistryLinked.sol +43 -0
- package/contracts/shared/Service.sol +36 -22
- package/contracts/shared/TokenHandler.sol +14 -6
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +109 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +75 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/Fee.sol +17 -8
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +11 -6
- package/contracts/types/PayoutId.sol +82 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +18 -11
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +7 -2
- package/contracts/types/Timestamp.sol +18 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -397
- 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/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/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
- package/contracts/components/BaseComponent.sol +0 -159
- package/contracts/components/IBaseComponent.sol +0 -34
- 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
- package/contracts/instance/IInstanceBase.sol +0 -26
- package/contracts/instance/InstanceBase.sol +0 -41
- package/contracts/instance/base/ComponentServiceBase.sol +0 -82
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/service/ComponentOwnerService.sol +0 -315
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -6,7 +6,7 @@ import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManage
|
|
6
6
|
import {NftId} from "../types/NftId.sol";
|
7
7
|
import {RoleId} from "../types/RoleId.sol";
|
8
8
|
import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../types/ObjectType.sol";
|
9
|
-
import {VersionPart, VersionPartLib} from "../types/Version.sol";
|
9
|
+
import {Version, VersionLib, VersionPart, VersionPartLib} from "../types/Version.sol";
|
10
10
|
import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
|
11
11
|
|
12
12
|
import {IService} from "../shared/IService.sol";
|
@@ -21,7 +21,7 @@ contract ReleaseManager is AccessManaged
|
|
21
21
|
{
|
22
22
|
using ObjectTypeLib for ObjectType;
|
23
23
|
|
24
|
-
event LogReleaseCreation(VersionPart version
|
24
|
+
event LogReleaseCreation(VersionPart version);
|
25
25
|
event LogReleaseActivation(VersionPart version);
|
26
26
|
|
27
27
|
// createNextRelease
|
@@ -30,11 +30,10 @@ contract ReleaseManager is AccessManaged
|
|
30
30
|
|
31
31
|
// registerService
|
32
32
|
error NotService();
|
33
|
-
error ServiceNotInRelease(IService service, ObjectType serviceDomain);
|
34
33
|
|
35
34
|
// activateNextRelease
|
36
|
-
|
37
|
-
|
35
|
+
error ReleaseNotCreated();
|
36
|
+
error ReleaseRegistrationNotFinished();
|
38
37
|
|
39
38
|
// _getAndVerifyContractInfo
|
40
39
|
error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
|
@@ -42,7 +41,7 @@ contract ReleaseManager is AccessManaged
|
|
42
41
|
error SelfRegistration();
|
43
42
|
error RegisterableOwnerIsRegistered();
|
44
43
|
|
45
|
-
//
|
44
|
+
// _verifyService
|
46
45
|
error UnexpectedServiceVersion(VersionPart expected, VersionPart found);
|
47
46
|
error UnexpectedServiceDomain(ObjectType expected, ObjectType found);
|
48
47
|
|
@@ -56,17 +55,20 @@ contract ReleaseManager is AccessManaged
|
|
56
55
|
RegistryAccessManager private immutable _accessManager;
|
57
56
|
IRegistry private immutable _registry;
|
58
57
|
|
59
|
-
VersionPart
|
60
|
-
VersionPart
|
58
|
+
VersionPart immutable _initial;// first active major version
|
59
|
+
VersionPart _latest;// latest active major version
|
60
|
+
VersionPart _next;// major version to create and activate
|
61
61
|
|
62
|
-
mapping(VersionPart
|
62
|
+
mapping(VersionPart majorVersion => IRegistry.ReleaseInfo info) _release;
|
63
63
|
|
64
|
-
mapping(VersionPart
|
64
|
+
mapping(VersionPart majorVersion => mapping(ObjectType serviceDomain => bytes4[])) _selectors; // registry service function selector assigned to domain
|
65
65
|
|
66
66
|
uint _awaitingRegistration; // "services left to register" counter
|
67
67
|
|
68
68
|
mapping(address registryService => bool isActive) _active;
|
69
69
|
|
70
|
+
mapping(VersionPart majorVersion => bool isValid) _valid; // TODO refactor to use _active only
|
71
|
+
|
70
72
|
constructor(
|
71
73
|
RegistryAccessManager accessManager,
|
72
74
|
VersionPart initialVersion)
|
@@ -77,46 +79,82 @@ contract ReleaseManager is AccessManaged
|
|
77
79
|
_accessManager = accessManager;
|
78
80
|
|
79
81
|
_initial = initialVersion;
|
82
|
+
_next = initialVersion;
|
80
83
|
|
81
84
|
_registry = new Registry();
|
82
85
|
}
|
83
86
|
|
87
|
+
/// @dev skips previous release if was not activated
|
88
|
+
function createNextRelease()
|
89
|
+
external
|
90
|
+
restricted // GIF_ADMIN_ROLE
|
91
|
+
{
|
92
|
+
// allow to register new registry service for next version
|
93
|
+
VersionPartLib.toVersionPart(_next.toInt() + 1);
|
94
|
+
// disallow registration of regular services for next version while registry service is not registered
|
95
|
+
_awaitingRegistration = 0;
|
96
|
+
|
97
|
+
emit LogReleaseCreation(_next);
|
98
|
+
}
|
99
|
+
|
100
|
+
function activateNextRelease()
|
101
|
+
external
|
102
|
+
restricted // GIF_ADMIN_ROLE
|
103
|
+
{
|
104
|
+
VersionPart version = _next;
|
105
|
+
address service = _registry.getServiceAddress(REGISTRY(), version);
|
106
|
+
|
107
|
+
// release was created
|
108
|
+
if(service == address(0)) {
|
109
|
+
revert ReleaseNotCreated();
|
110
|
+
}
|
111
|
+
|
112
|
+
// release fully deployed
|
113
|
+
if(_awaitingRegistration > 0) {
|
114
|
+
revert ReleaseRegistrationNotFinished();
|
115
|
+
}
|
116
|
+
|
117
|
+
//setTargetClosed(service, false);
|
118
|
+
|
119
|
+
_latest = version;
|
120
|
+
|
121
|
+
_active[service] = true;
|
122
|
+
_valid[version] = true;
|
123
|
+
|
124
|
+
emit LogReleaseActivation(version);
|
125
|
+
}
|
126
|
+
|
84
127
|
// TODO deploy proxy and initialize with given implementation instead of using given proxy?
|
85
128
|
// IMPORTANT: MUST never be possible to create with access/release manager, token registry
|
86
|
-
|
129
|
+
// callable once per release after release creation, can not register regular services while registry service is not registered
|
130
|
+
function registerRegistryService(IRegistryService service)
|
87
131
|
external
|
88
|
-
restricted //
|
132
|
+
restricted // GIF_MANAGER_ROLE
|
89
133
|
returns(NftId nftId)
|
90
134
|
{
|
91
135
|
if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
|
92
136
|
revert NotRegistryService();
|
93
137
|
}
|
138
|
+
|
94
139
|
// TODO unreliable! MUST guarantee the same authority -> how?
|
95
|
-
|
140
|
+
address serviceAuthority = service.authority();
|
141
|
+
if(serviceAuthority != authority()) {
|
96
142
|
revert UnexpectedServiceAuthority(
|
97
143
|
authority(),
|
98
|
-
|
144
|
+
serviceAuthority);
|
99
145
|
}
|
100
146
|
|
101
|
-
(
|
102
|
-
IRegistry.ObjectInfo memory info,
|
103
|
-
bytes memory data
|
104
|
-
) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
147
|
+
IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
105
148
|
|
106
|
-
VersionPart
|
149
|
+
VersionPart majorVersion = _next;
|
107
150
|
ObjectType domain = REGISTRY();
|
108
|
-
|
109
|
-
|
110
|
-
_createRelease(data);
|
111
|
-
|
112
|
-
//setTargetClosed(service, true);
|
151
|
+
_verifyService(service, majorVersion, domain);
|
152
|
+
_createRelease(service.getFunctionConfigs());
|
113
153
|
|
114
|
-
nftId = _registry.registerService(info,
|
154
|
+
nftId = _registry.registerService(info, majorVersion, domain);
|
115
155
|
|
116
156
|
// external call
|
117
157
|
service.linkToRegisteredNftId();
|
118
|
-
|
119
|
-
emit LogReleaseCreation(version, service);
|
120
158
|
}
|
121
159
|
|
122
160
|
// TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
|
@@ -130,70 +168,29 @@ contract ReleaseManager is AccessManaged
|
|
130
168
|
revert NotService();
|
131
169
|
}
|
132
170
|
|
133
|
-
(
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
revert ServiceNotInRelease(service, domain);
|
171
|
+
IRegistry.ObjectInfo memory info = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
172
|
+
VersionPart majorVersion = getNextVersion();
|
173
|
+
ObjectType domain = _release[majorVersion].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
|
174
|
+
_verifyService(service, majorVersion, domain);
|
175
|
+
|
176
|
+
// setup and grant unique role if service does registrations
|
177
|
+
bytes4[] memory selectors = _selectors[majorVersion][domain];
|
178
|
+
address registryService = _registry.getServiceAddress(REGISTRY(), majorVersion);
|
179
|
+
if(selectors.length > 0) {
|
180
|
+
_accessManager.setAndGrantUniqueRole(
|
181
|
+
address(service),
|
182
|
+
registryService,
|
183
|
+
selectors);
|
147
184
|
}
|
148
|
-
|
149
|
-
// setup and grant unique role
|
150
|
-
address registryService = _registry.getServiceAddress(REGISTRY(), version);
|
151
|
-
_accessManager.setAndGrantUniqueRole(
|
152
|
-
address(service),
|
153
|
-
registryService,
|
154
|
-
selector);
|
155
|
-
|
185
|
+
|
156
186
|
_awaitingRegistration--;
|
157
187
|
|
158
|
-
|
159
|
-
if(_awaitingRegistration == 0) {
|
160
|
-
_latest = version;
|
161
|
-
_active[registryService] = true;
|
162
|
-
|
163
|
-
emit LogReleaseActivation(version);
|
164
|
-
}
|
165
|
-
|
166
|
-
nftId = _registry.registerService(info, version, domain);
|
188
|
+
nftId = _registry.registerService(info, majorVersion, domain);
|
167
189
|
|
168
190
|
// external call
|
169
191
|
service.linkToRegisteredNftId();
|
170
192
|
}
|
171
193
|
|
172
|
-
/*function activateNextRelease()
|
173
|
-
external
|
174
|
-
restricted // GIF_ADMIN_ROLE
|
175
|
-
{
|
176
|
-
VersionPart version = getNextVersion();
|
177
|
-
address service = _registry.getServiceAddress(REGISTRY(), version);
|
178
|
-
|
179
|
-
// release was created
|
180
|
-
if(service == address(0)) {
|
181
|
-
revert ReleaseNotCreated();
|
182
|
-
}
|
183
|
-
|
184
|
-
// release fully deployed
|
185
|
-
if(_awaitingRegistration > 0) {
|
186
|
-
revert ReleaseRegistrationNotFinished();
|
187
|
-
}
|
188
|
-
|
189
|
-
//setTargetClosed(service, false);
|
190
|
-
|
191
|
-
_latest = version;
|
192
|
-
_active[service] = true;
|
193
|
-
|
194
|
-
LogReleaseActivation(version);
|
195
|
-
}*/
|
196
|
-
|
197
194
|
//--- view functions ----------------------------------------------------//
|
198
195
|
|
199
196
|
function isActiveRegistryService(address service) external view returns(bool)
|
@@ -201,6 +198,11 @@ contract ReleaseManager is AccessManaged
|
|
201
198
|
return _active[service];
|
202
199
|
}
|
203
200
|
|
201
|
+
function isValidRelease(VersionPart version) external view returns(bool)
|
202
|
+
{
|
203
|
+
return _valid[version];
|
204
|
+
}
|
205
|
+
|
204
206
|
function getRegistry() external view returns(address)
|
205
207
|
{
|
206
208
|
return (address(_registry));
|
@@ -213,11 +215,7 @@ contract ReleaseManager is AccessManaged
|
|
213
215
|
|
214
216
|
function getNextVersion() public view returns(VersionPart)
|
215
217
|
{
|
216
|
-
|
217
|
-
|
218
|
-
return latest == 0 ?
|
219
|
-
_initial : // no active releases yet
|
220
|
-
VersionPartLib.toVersionPart(latest + 1);
|
218
|
+
return _next;
|
221
219
|
}
|
222
220
|
|
223
221
|
function getLatestVersion() external view returns(VersionPart) {
|
@@ -236,13 +234,12 @@ contract ReleaseManager is AccessManaged
|
|
236
234
|
address expectedOwner // assume always valid, can not be 0
|
237
235
|
)
|
238
236
|
internal
|
239
|
-
view
|
237
|
+
// view
|
240
238
|
returns(
|
241
|
-
IRegistry.ObjectInfo memory info
|
242
|
-
bytes memory data
|
239
|
+
IRegistry.ObjectInfo memory info
|
243
240
|
)
|
244
241
|
{
|
245
|
-
|
242
|
+
info = service.getInitialInfo();
|
246
243
|
info.objectAddress = address(service);
|
247
244
|
info.isInterceptor = false; // service is never interceptor, at least now
|
248
245
|
|
@@ -259,27 +256,14 @@ contract ReleaseManager is AccessManaged
|
|
259
256
|
if(owner == address(service)) {
|
260
257
|
revert SelfRegistration();
|
261
258
|
}
|
262
|
-
|
263
|
-
/*if(owner == address(0)) { // never 0
|
264
|
-
revert();// RegisterableOwnerIsZero();
|
265
|
-
}*/
|
266
259
|
|
267
260
|
if(_registry.isRegistered(owner)) {
|
268
261
|
revert RegisterableOwnerIsRegistered();
|
269
262
|
}
|
270
|
-
|
271
|
-
/*NftId parentNftId = info.parentNftId;
|
272
|
-
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(parentNftId);
|
273
|
-
|
274
|
-
if(parentInfo.objectType != parentType) { // parent registration + type
|
275
|
-
revert InvalidParent(parentNftId);
|
276
|
-
}*/
|
277
|
-
|
278
|
-
return(info, data);
|
279
263
|
}
|
280
264
|
|
281
|
-
function
|
282
|
-
|
265
|
+
function _verifyService(
|
266
|
+
IService service,
|
283
267
|
VersionPart expectedVersion,
|
284
268
|
ObjectType expectedDomain
|
285
269
|
)
|
@@ -287,30 +271,24 @@ contract ReleaseManager is AccessManaged
|
|
287
271
|
view
|
288
272
|
returns(ObjectType)
|
289
273
|
{
|
290
|
-
(
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
if(version != expectedVersion) {
|
296
|
-
revert UnexpectedServiceVersion(expectedVersion, version);
|
274
|
+
Version version = service.getVersion();
|
275
|
+
VersionPart majorVersion = version.toMajorPart();
|
276
|
+
if(majorVersion != expectedVersion) {
|
277
|
+
revert UnexpectedServiceVersion(expectedVersion, majorVersion);
|
297
278
|
}
|
298
279
|
|
299
|
-
if(
|
300
|
-
|
301
|
-
revert UnexpectedServiceDomain(expectedDomain, domain);
|
302
|
-
}
|
280
|
+
if(service.getDomain() != expectedDomain) {
|
281
|
+
revert UnexpectedServiceDomain(expectedDomain, service.getDomain());
|
303
282
|
}
|
304
283
|
|
305
|
-
return
|
284
|
+
return expectedDomain;
|
306
285
|
}
|
307
286
|
|
308
287
|
// TODO check if registry supports types specified in the config array
|
309
|
-
function _createRelease(
|
288
|
+
function _createRelease(IRegistryService.FunctionConfig[] memory config)
|
310
289
|
internal
|
311
290
|
{
|
312
291
|
VersionPart version = getNextVersion();
|
313
|
-
IRegistryService.FunctionConfig[] memory config = abi.decode(configBytes, (IRegistryService.FunctionConfig[]));
|
314
292
|
|
315
293
|
if(config.length == 0) {
|
316
294
|
revert ConfigMissing();
|
@@ -320,23 +298,21 @@ contract ReleaseManager is AccessManaged
|
|
320
298
|
for(uint idx = 0; idx < config.length; idx++)
|
321
299
|
{
|
322
300
|
ObjectType domain = config[idx].serviceDomain;
|
323
|
-
bytes4 selector = config[idx].selector;
|
324
|
-
|
325
301
|
// not "registry service" / zero domain
|
326
302
|
if(
|
327
303
|
domain == REGISTRY() ||
|
328
304
|
domain.eqz()
|
329
305
|
) { revert ConfigServiceDomainInvalid(idx, domain); }
|
330
306
|
|
331
|
-
|
332
|
-
if(selector == 0) { revert ConfigSelectorZero(idx); }
|
307
|
+
bytes4[] memory selectors = config[idx].selectors;
|
333
308
|
|
309
|
+
// TODO can be zero -> e.g. duplicate domain, first with zero selector, second with non zero selector -> need to check _release[version].domains.contains(domain) instead
|
334
310
|
// no overwrite
|
335
|
-
if(
|
311
|
+
if(_selectors[version][domain].length > 0) {
|
336
312
|
revert SelectorAlreadyExists(version, domain);
|
337
313
|
}
|
338
314
|
|
339
|
-
|
315
|
+
_selectors[version][domain] = selectors;
|
340
316
|
_release[version].domains.push(domain);
|
341
317
|
}
|
342
318
|
// TODO set when activated?
|
@@ -26,21 +26,32 @@ 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(
|
30
|
-
|
31
|
-
|
29
|
+
constructor(
|
30
|
+
address registry
|
31
|
+
)
|
32
|
+
{
|
33
|
+
initialize(registry);
|
34
|
+
}
|
35
|
+
|
36
|
+
function initialize(address registry)
|
37
|
+
public
|
38
|
+
initializer()
|
39
|
+
{
|
40
|
+
initializeNftOwnable(msg.sender, registry);
|
41
|
+
}
|
32
42
|
|
33
43
|
|
34
44
|
/// @dev link ownership of token registry to nft owner of registry service
|
45
|
+
// TODO latter registry service will get new release, new address, new nft, TokenRegistry will not catch that -> use AccessManaged only for services
|
35
46
|
function linkToNftOwnable(address registryAddress)
|
36
47
|
external
|
37
48
|
onlyOwner
|
38
49
|
{
|
39
50
|
IRegistry registry = IRegistry(registryAddress);
|
40
|
-
// TODO use _latest instead of
|
41
|
-
address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.
|
51
|
+
// TODO use _latest instead of _initial -> but _latest is 0 before first release activation
|
52
|
+
address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getNextVersion());
|
42
53
|
|
43
|
-
_linkToNftOwnable(
|
54
|
+
_linkToNftOwnable(registryServiceAddress);
|
44
55
|
}
|
45
56
|
|
46
57
|
/// @dev token state is informative, registry have no clue about used tokens
|
@@ -58,7 +69,7 @@ contract TokenRegistry is
|
|
58
69
|
// verify valid major version
|
59
70
|
// ensure major version increments is one
|
60
71
|
uint256 version = majorVersion.toInt();
|
61
|
-
if (
|
72
|
+
if (!getRegistry().isValidRelease(majorVersion)) {
|
62
73
|
revert TokenMajorVersionInvalid(majorVersion);
|
63
74
|
}
|
64
75
|
|
@@ -91,12 +102,7 @@ contract TokenRegistry is
|
|
91
102
|
revert NotContract(token);
|
92
103
|
}
|
93
104
|
|
94
|
-
// MUST
|
95
|
-
if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
|
96
|
-
revert NotToken(token);
|
97
|
-
}
|
98
|
-
|
99
|
-
// MUST have decimals > 0
|
105
|
+
// MUST have decimals > 0 (indicator that this is in fact an erc20 token)
|
100
106
|
IERC20Metadata erc20 = IERC20Metadata(token);
|
101
107
|
if(erc20.decimals() == 0) {
|
102
108
|
revert TokenDecimalsZero();
|
@@ -2,24 +2,26 @@
|
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
6
|
|
6
|
-
contract ERC165 is
|
7
|
+
contract ERC165 is
|
8
|
+
Initializable,
|
9
|
+
IERC165
|
10
|
+
{
|
7
11
|
mapping(bytes4 => bool) private _isSupported;
|
8
12
|
|
9
|
-
|
10
|
-
|
11
|
-
}
|
12
|
-
|
13
|
-
function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
|
14
|
-
return _isSupported[interfaceId];
|
15
|
-
}
|
16
|
-
|
17
|
-
// @dev register support for ERC165 itself
|
18
|
-
function _initializeERC165() internal {
|
13
|
+
// @dev initializes with support for ERC165
|
14
|
+
function initializeERC165() public onlyInitializing() {
|
19
15
|
_isSupported[type(IERC165).interfaceId] = true;
|
20
16
|
}
|
21
17
|
|
22
|
-
|
18
|
+
// @dev register support for provided interfaceId
|
19
|
+
// includes initialization for ERC165_ID if not yet done
|
20
|
+
function registerInterface(bytes4 interfaceId) public onlyInitializing() {
|
23
21
|
_isSupported[interfaceId] = true;
|
24
22
|
}
|
23
|
+
|
24
|
+
function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
|
25
|
+
return _isSupported[interfaceId];
|
26
|
+
}
|
25
27
|
}
|
@@ -1,22 +1,23 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
|
6
|
+
import {IRegistryLinked} from "./IRegistryLinked.sol";
|
5
7
|
import {NftId} from "../types/NftId.sol";
|
6
8
|
|
7
|
-
interface INftOwnable
|
8
|
-
|
9
|
+
interface INftOwnable is
|
10
|
+
IERC165,
|
11
|
+
IRegistryLinked
|
12
|
+
{
|
13
|
+
error ErrorNftOwnableInitialOwnerZero();
|
14
|
+
error ErrorNftOwnableNotOwner(address account);
|
9
15
|
|
10
|
-
error
|
11
|
-
error
|
12
|
-
error ErrorRegistryNotInitialized();
|
13
|
-
error ErrorRegistryAddressZero();
|
14
|
-
error ErrorNotRegistry(address registryAddress);
|
15
|
-
error ErrorContractNotRegistered(address contractAddress);
|
16
|
+
error ErrorNftOwnableAlreadyLinked(NftId nftId);
|
17
|
+
error ErrorNftOwnableContractNotRegistered(address contractAddress);
|
16
18
|
|
17
19
|
function linkToRegisteredNftId() external;
|
18
20
|
|
19
|
-
function getRegistry() external view returns (IRegistry);
|
20
21
|
function getNftId() external view returns (NftId);
|
21
22
|
function getOwner() external view returns (address);
|
22
23
|
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
|
6
|
+
|
7
|
+
import {Amount} from "../types/Amount.sol";
|
8
|
+
import {ClaimId} from "../types/ClaimId.sol";
|
9
|
+
import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
|
10
|
+
import {NftId} from "../types/NftId.sol";
|
11
|
+
import {PayoutId} from "../types/PayoutId.sol";
|
12
|
+
|
13
|
+
/// @dev generic interface for contracts that need to hold policies and receive payouts
|
14
|
+
/// GIF will notify policy holder contracts for policy creation and payout execution
|
15
|
+
interface IPolicyHolder is
|
16
|
+
IERC165,
|
17
|
+
IERC721Receiver,
|
18
|
+
IRegistryLinked
|
19
|
+
{
|
20
|
+
|
21
|
+
/// @dev callback function that will be called after successful policy activation
|
22
|
+
/// active policies may open claims under the activated policy
|
23
|
+
function policyActivated(NftId policyNftId) external;
|
24
|
+
|
25
|
+
/// @dev callback function to indicate the specified policy has expired
|
26
|
+
/// expired policies may no longer open claims
|
27
|
+
/// it is optional for products to notifiy policy holder of expired claims
|
28
|
+
function policyExpired(NftId policyNftId) external;
|
29
|
+
|
30
|
+
/// @dev callback function to notify the confirmation of the specified claim
|
31
|
+
/// active policies may open claims under the activated policy
|
32
|
+
function claimConfirmed(NftId policyNftId, ClaimId claimId, Amount amount) external;
|
33
|
+
|
34
|
+
/// @dev callback function that will be called after a successful payout
|
35
|
+
function payoutExecuted(NftId policyNftId, PayoutId payoutId, address beneficiary, Amount amount) external;
|
36
|
+
|
37
|
+
/// @dev determines policy and claim specific beneficiary address
|
38
|
+
/// returned address will override GIF default where the policy nft holder is treated as beneficiary
|
39
|
+
function getBeneficiary(NftId policyNftId, ClaimId claimId) external view returns (address beneficiary);
|
40
|
+
}
|
@@ -1,17 +1,15 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
-
|
6
4
|
import {INftOwnable} from "./INftOwnable.sol";
|
7
5
|
import {IRegistry} from "../registry/IRegistry.sol";
|
8
|
-
import {NftId} from "../types/NftId.sol";
|
9
|
-
import {ObjectType} from "../types/ObjectType.sol";
|
10
6
|
|
11
|
-
interface IRegisterable is
|
7
|
+
interface IRegisterable is
|
8
|
+
INftOwnable
|
9
|
+
{
|
12
10
|
|
13
11
|
function getInitialInfo()
|
14
12
|
external
|
15
13
|
view
|
16
|
-
returns (IRegistry.ObjectInfo memory
|
14
|
+
returns (IRegistry.ObjectInfo memory);
|
17
15
|
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
5
|
+
|
6
|
+
interface IRegistryLinked {
|
7
|
+
|
8
|
+
error ErrorNotRegistry(address registryAddress);
|
9
|
+
|
10
|
+
function getRegistry() external view returns (IRegistry);
|
11
|
+
}
|
@@ -1,16 +1,18 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {
|
5
|
-
import {ObjectType} from "../types/ObjectType.sol";
|
4
|
+
import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
|
6
5
|
|
7
6
|
import {IRegisterable} from "./IRegisterable.sol";
|
8
7
|
import {IVersionable} from "./IVersionable.sol";
|
8
|
+
import {ObjectType} from "../types/ObjectType.sol";
|
9
9
|
|
10
10
|
interface IService is
|
11
11
|
IRegisterable,
|
12
|
-
IVersionable
|
12
|
+
IVersionable,
|
13
|
+
IAccessManaged
|
13
14
|
{
|
15
|
+
error ErrorServiceNotImplemented();
|
16
|
+
|
14
17
|
function getDomain() external pure returns(ObjectType serviceDomain);
|
15
|
-
function getMajorVersion() external view returns(VersionPart majorVersion);
|
16
18
|
}
|