@etherisc/gif-next 0.0.2-e802d97-251 → 0.0.2-e83e4a5-207
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 +18 -2
 - package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
 - package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1253 -0
 - package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
 - package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
 - package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
 - package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +358 -0
 - package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
 - package/artifacts/contracts/authorization/IAccess.sol/IAccess.json +10 -0
 - package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
 - package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1032 -0
 - package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +258 -0
 - package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +290 -0
 - package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +148 -0
 - package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +390 -0
 - package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +190 -0
 - package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
 - package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1505 -0
 - package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +410 -0
 - package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
 - package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +17 -242
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +138 -93
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +65 -57
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +71 -146
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +45 -16
 - package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +33 -108
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.json +58 -78
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +147 -40
 - package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
 - package/artifacts/contracts/instance/Instance.sol/Instance.json +72 -140
 - package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1208 -290
 - package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
 - package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +110 -76
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +210 -103
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +49 -49
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +84 -135
 - package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
 - package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
 - package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
 - package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
 - package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +182 -0
 - package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +3 -78
 - 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 +1 -1
 - 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/mock/Dip.sol/Dip.dbg.json +1 -1
 - package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
 - package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
 - package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1155 -0
 - package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
 - package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +43 -1
 - package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +13 -0
 - package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +13 -0
 - package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
 - package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +13 -96
 - package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
 - package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +66 -29
 - package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +44 -32
 - package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
 - package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1477 -0
 - package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.json +78 -49
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +50 -42
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +13 -0
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +7 -202
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +13 -0
 - package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
 - package/artifacts/contracts/pool/Pool.sol/Pool.json +7 -303
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.json +62 -41
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +42 -38
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +66 -37
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +44 -36
 - package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
 - package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1299 -0
 - package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +106 -69
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +64 -52
 - package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
 - package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +13 -0
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +13 -0
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +13 -0
 - package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
 - package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +13 -0
 - package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
 - package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +13 -42
 - package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
 - package/artifacts/contracts/product/IProductService.sol/IProductService.json +13 -0
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +84 -47
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +53 -41
 - package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
 - package/artifacts/contracts/product/PricingService.sol/PricingService.json +92 -63
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +57 -49
 - package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
 - package/artifacts/contracts/product/Product.sol/Product.json +13 -153
 - package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
 - package/artifacts/contracts/product/ProductService.sol/ProductService.json +54 -25
 - package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +38 -30
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +0 -44
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +13 -0
 - 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 +24 -68
 - package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1505 -166
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +50 -13
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +37 -25
 - package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
 - package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +164 -0
 - package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +185 -318
 - package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
 - package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +214 -0
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
 - package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +82 -85
 - package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +52 -60
 - package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +13 -0
 - 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/IComponent.sol/IComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +13 -0
 - package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +13 -0
 - package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +11 -5
 - package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
 - package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +0 -5
 - package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
 - 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/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
 - package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
 - package/artifacts/contracts/shared/IService.sol/IService.json +13 -0
 - package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
 - package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
 - package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +13 -53
 - package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +15 -89
 - package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
 - package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +4 -65
 - package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +1 -1
 - package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +22 -22
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -6
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +6 -6
 - package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
 - package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +14 -14
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -8
 - package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
 - package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
 - package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
 - package/artifacts/contracts/shared/Service.sol/Service.json +13 -0
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +6 -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/staking/IStaking.sol/IStaking.dbg.json +1 -1
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +49 -7
 - package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +44 -28
 - package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
 - package/artifacts/contracts/staking/Staking.sol/Staking.json +44 -84
 - package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
 - package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +164 -0
 - package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +40 -56
 - package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.json +92 -73
 - package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +39 -47
 - package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +197 -149
 - package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
 - package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +22 -22
 - package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
 - package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
 - package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Amount.sol/AmountLib.json +8 -8
 - package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +4 -4
 - package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
 - package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
 - package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Fee.sol/FeeLib.json +12 -12
 - package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
 - package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
 - package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/NftId.sol/NftIdLib.json +4 -4
 - package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
 - package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
 - package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
 - package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +136 -2
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +4 -4
 - package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
 - package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +4 -4
 - package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +4 -4
 - package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +219 -6
 - package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +2 -2
 - package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
 - package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
 - package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
 - package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
 - package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
 - package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
 - package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
 - package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +4 -4
 - package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
 - package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
 - package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
 - package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +21 -2
 - package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
 - package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Version.sol/VersionPartLib.json +2 -2
 - package/contracts/authorization/AccessAdmin.sol +591 -0
 - package/contracts/authorization/AccessManagerCloneable.sol +16 -0
 - package/contracts/authorization/Authorization.sol +218 -0
 - package/contracts/authorization/IAccess.sol +48 -0
 - package/contracts/authorization/IAccessAdmin.sol +136 -0
 - package/contracts/authorization/IAuthorization.sol +54 -0
 - package/contracts/authorization/IModuleAuthorization.sol +21 -0
 - package/contracts/authorization/IServiceAuthorization.sol +38 -0
 - package/contracts/authorization/ModuleAuthorization.sol +78 -0
 - package/contracts/authorization/ServiceAuthorization.sol +90 -0
 - package/contracts/distribution/BasicDistribution.sol +149 -0
 - package/contracts/distribution/BasicDistributionAuthorization.sol +43 -0
 - package/contracts/distribution/Distribution.sol +126 -104
 - package/contracts/distribution/DistributionService.sol +13 -9
 - package/contracts/distribution/IDistributionComponent.sol +17 -35
 - package/contracts/distribution/IDistributionService.sol +5 -1
 - package/contracts/instance/IInstance.sol +11 -7
 - package/contracts/instance/IInstanceService.sol +29 -18
 - package/contracts/instance/Instance.sol +103 -85
 - package/contracts/instance/InstanceAdmin.sol +202 -267
 - package/contracts/instance/InstanceAuthorizationV3.sol +202 -0
 - package/contracts/instance/InstanceReader.sol +24 -9
 - package/contracts/instance/InstanceService.sol +151 -70
 - package/contracts/instance/InstanceStore.sol +15 -20
 - package/contracts/instance/base/BalanceStore.sol +11 -6
 - package/contracts/instance/base/Cloneable.sol +2 -25
 - package/contracts/instance/base/ObjectLifecycle.sol +106 -0
 - package/contracts/instance/base/ObjectManager.sol +7 -10
 - package/contracts/oracle/BasicOracle.sol +48 -0
 - package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
 - package/contracts/oracle/IOracle.sol +16 -0
 - package/contracts/oracle/Oracle.sol +61 -49
 - package/contracts/oracle/OracleService.sol +5 -4
 - package/contracts/pool/BasicPool.sol +164 -0
 - package/contracts/pool/BasicPoolAuthorization.sol +49 -0
 - package/contracts/pool/BundleService.sol +19 -19
 - package/contracts/pool/IPoolComponent.sol +0 -60
 - package/contracts/pool/Pool.sol +143 -131
 - package/contracts/pool/PoolService.sol +7 -8
 - package/contracts/product/ApplicationService.sol +5 -5
 - package/contracts/product/BasicProduct.sol +82 -0
 - package/contracts/product/BasicProductAuthorization.sol +40 -0
 - package/contracts/product/ClaimService.sol +5 -5
 - package/contracts/product/IProductComponent.sol +6 -9
 - package/contracts/product/PolicyService.sol +5 -5
 - package/contracts/product/PricingService.sol +4 -5
 - package/contracts/product/Product.sol +103 -88
 - package/contracts/product/ProductService.sol +5 -5
 - package/contracts/registry/IRegistry.sol +5 -8
 - package/contracts/registry/Registry.sol +6 -4
 - package/contracts/registry/RegistryAdmin.sol +276 -148
 - package/contracts/registry/RegistryService.sol +5 -5
 - package/contracts/registry/RegistryServiceManager.sol +0 -5
 - package/contracts/registry/ReleaseLifecycle.sol +27 -0
 - package/contracts/registry/ReleaseManager.sol +161 -274
 - package/contracts/registry/ServiceAuthorizationV3.sol +200 -0
 - package/contracts/shared/ComponentService.sol +24 -61
 - package/contracts/shared/ComponentVerifyingService.sol +1 -1
 - package/contracts/shared/IInstanceLinkedComponent.sol +4 -0
 - package/contracts/shared/IKeyValueStore.sol +1 -0
 - package/contracts/shared/ILifecycle.sol +1 -2
 - package/contracts/shared/IService.sol +7 -0
 - package/contracts/shared/InstanceLinkedComponent.sol +26 -19
 - package/contracts/shared/KeyValueStore.sol +6 -2
 - package/contracts/shared/Lifecycle.sol +16 -69
 - package/contracts/shared/Service.sol +27 -21
 - package/contracts/staking/IStakingService.sol +11 -7
 - package/contracts/staking/StakeManagerLib.sol +52 -0
 - package/contracts/staking/Staking.sol +58 -96
 - package/contracts/staking/StakingLifecycle.sol +23 -0
 - package/contracts/staking/StakingService.sol +61 -56
 - package/contracts/staking/StakingServiceManager.sol +0 -1
 - package/contracts/staking/StakingStore.sol +82 -39
 - package/contracts/type/ObjectType.sol +169 -62
 - package/contracts/type/RoleId.sol +103 -75
 - package/contracts/type/Selector.sol +102 -0
 - package/contracts/type/String.sol +53 -0
 - package/contracts/type/UFixed.sol +6 -0
 - package/package.json +4 -1
 - package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
 - package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -228
 - package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.dbg.json +0 -4
 - package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.json +0 -137
 - package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +0 -4
 - package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +0 -1193
 - package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +0 -4
 - package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +0 -1715
 - package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +0 -4
 - package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +0 -1728
 - package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +0 -4
 - package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +0 -1806
 - package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +0 -4
 - package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +0 -1824
 - package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +0 -4
 - package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +0 -1562
 - package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +0 -4
 - package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +0 -1600
 - package/contracts/instance/InstanceAuthorizationsLib.sol +0 -377
 - package/contracts/registry/ServiceAuthorizationsLib.sol +0 -173
 - package/contracts/shared/AccessManagerCustom.sol +0 -736
 - package/contracts/shared/AccessManagerExtended.sol +0 -470
 - package/contracts/shared/AccessManagerExtendedInitializeable.sol +0 -13
 - package/contracts/shared/AccessManagerExtendedWithDisable.sol +0 -137
 - package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +0 -14
 - package/contracts/shared/IAccessManagerExtended.sol +0 -74
 - package/contracts/shared/IAccessManagerExtendedWithDisable.sol +0 -18
 
| 
         @@ -10,15 +10,14 @@ import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; 
     | 
|
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
       12 
12 
     | 
    
         
             
            import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
         
     | 
| 
       13 
     | 
    
         
            -
            import {ObjectType, ObjectTypeLib, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
         
     | 
| 
      
 13 
     | 
    
         
            +
            import {ObjectType, ObjectTypeLib, POOL, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
         
     | 
| 
       14 
14 
     | 
    
         
             
            import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
         
     | 
| 
       15 
15 
     | 
    
         
             
            import {Timestamp, TimestampLib, zeroTimestamp, ltTimestamp} from "../type/Timestamp.sol";
         
     | 
| 
       16 
16 
     | 
    
         
             
            import {Seconds, SecondsLib} from "../type/Seconds.sol";
         
     | 
| 
       17 
     | 
    
         
            -
            import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE} from "../type/StateId.sol";
         
     | 
| 
      
 17 
     | 
    
         
            +
            import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE, PAUSED, CLOSED} from "../type/StateId.sol";
         
     | 
| 
       18 
18 
     | 
    
         
             
            import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
            import {IService} from "../shared/IService.sol";
         
     | 
| 
       21 
     | 
    
         
            -
            import {AccessManagerExtendedWithDisableInitializeable} from "../shared/AccessManagerExtendedWithDisableInitializeable.sol";
         
     | 
| 
       22 
21 
     | 
    
         
             
            import {ILifecycle} from "../shared/ILifecycle.sol";
         
     | 
| 
       23 
22 
     | 
    
         
             
            import {INftOwnable} from "../shared/INftOwnable.sol";
         
     | 
| 
       24 
23 
     | 
    
         
             
            import {IRegisterable} from "../shared/IRegisterable.sol";
         
     | 
| 
         @@ -26,45 +25,50 @@ import {IRegisterable} from "../shared/IRegisterable.sol"; 
     | 
|
| 
       26 
25 
     | 
    
         
             
            import {IRegistry} from "./IRegistry.sol";
         
     | 
| 
       27 
26 
     | 
    
         
             
            import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
         
     | 
| 
       28 
27 
     | 
    
         
             
            import {IRegistryService} from "./IRegistryService.sol";
         
     | 
| 
      
 28 
     | 
    
         
            +
            import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol";
         
     | 
| 
      
 29 
     | 
    
         
            +
            import {IAccessAdmin} from "../authorization/IAccessAdmin.sol";
         
     | 
| 
       29 
30 
     | 
    
         
             
            import {RegistryAdmin} from "./RegistryAdmin.sol";
         
     | 
| 
       30 
31 
     | 
    
         
             
            import {Registry} from "./Registry.sol";
         
     | 
| 
       31 
32 
     | 
    
         
             
            import {TokenRegistry} from "./TokenRegistry.sol";
         
     | 
| 
       32 
     | 
    
         
            -
            import { 
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
      
 33 
     | 
    
         
            +
            import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
      
 35 
     | 
    
         
            +
            // TODO rename to something that does not end with 'Manager' 
         
     | 
| 
      
 36 
     | 
    
         
            +
            // everywhere else *Manager points to an upgradeable contract
         
     | 
| 
       35 
37 
     | 
    
         
             
            contract ReleaseManager is 
         
     | 
| 
       36 
     | 
    
         
            -
                AccessManaged, 
     | 
| 
       37 
     | 
    
         
            -
                 
     | 
| 
      
 38 
     | 
    
         
            +
                AccessManaged,
         
     | 
| 
      
 39 
     | 
    
         
            +
                ReleaseLifecycle, 
         
     | 
| 
       38 
40 
     | 
    
         
             
                IRegistryLinked
         
     | 
| 
       39 
41 
     | 
    
         
             
            {
         
     | 
| 
       40 
42 
     | 
    
         
             
                using ObjectTypeLib for ObjectType;
         
     | 
| 
       41 
43 
     | 
    
         | 
| 
       42 
44 
     | 
    
         
             
                uint256 public constant INITIAL_GIF_VERSION = 3;
         
     | 
| 
       43 
45 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
                event LogReleaseCreation(VersionPart version, bytes32 salt 
     | 
| 
      
 46 
     | 
    
         
            +
                event LogReleaseCreation(VersionPart version, bytes32 salt); 
         
     | 
| 
       45 
47 
     | 
    
         
             
                event LogReleaseActivation(VersionPart version);
         
     | 
| 
      
 48 
     | 
    
         
            +
                event LogReleaseDisabled(VersionPart version);
         
     | 
| 
      
 49 
     | 
    
         
            +
                event LogReleaseEnabled(VersionPart version);
         
     | 
| 
       46 
50 
     | 
    
         | 
| 
       47 
51 
     | 
    
         
             
                // constructor
         
     | 
| 
       48 
52 
     | 
    
         
             
                error ErrorReleaseManagerNotRegistry(Registry registry);
         
     | 
| 
       49 
53 
     | 
    
         | 
| 
       50 
54 
     | 
    
         
             
                // createNextRelease
         
     | 
| 
       51 
     | 
    
         
            -
                error ErrorReleaseManagerReleaseCreationDisallowed(StateId currentStateId);
         
     | 
| 
      
 55 
     | 
    
         
            +
                error ErrorReleaseManagerReleaseCreationDisallowed(VersionPart version, StateId currentStateId);
         
     | 
| 
       52 
56 
     | 
    
         | 
| 
       53 
57 
     | 
    
         
             
                // prepareRelease
         
     | 
| 
       54 
     | 
    
         
            -
                error ErrorReleaseManagerReleasePreparationDisallowed(StateId currentStateId);
         
     | 
| 
       55 
     | 
    
         
            -
                error ErrorReleaseManagerReleaseAlreadyPrepared(VersionPart version);
         
     | 
| 
       56 
     | 
    
         
            -
                
         
     | 
| 
       57 
     | 
    
         
            -
                 
     | 
| 
       58 
     | 
    
         
            -
                //error ErrorReleaseManagerStakingAlreadySet(address stakingAddress);
         
     | 
| 
      
 58 
     | 
    
         
            +
                error ErrorReleaseManagerReleasePreparationDisallowed(VersionPart version, StateId currentStateId);
         
     | 
| 
      
 59 
     | 
    
         
            +
                error ErrorReleaseManagerReleaseAlreadyPrepared(VersionPart version, StateId currentStateId);
         
     | 
| 
      
 60 
     | 
    
         
            +
                error ErrorReleaseManagerVersionMismatch(VersionPart expected, VersionPart actual);
         
     | 
| 
      
 61 
     | 
    
         
            +
                error ErrorReleaseManagerNoDomains(VersionPart version);
         
     | 
| 
       59 
62 
     | 
    
         | 
| 
       60 
63 
     | 
    
         
             
                // registerService
         
     | 
| 
       61 
64 
     | 
    
         
             
                error ErrorReleaseManagerNoServiceRegistrationExpected();
         
     | 
| 
       62 
65 
     | 
    
         
             
                error ErrorReleaseManagerServiceRegistrationDisallowed(StateId currentStateId);
         
     | 
| 
       63 
     | 
    
         
            -
                error  
     | 
| 
       64 
     | 
    
         
            -
                error  
     | 
| 
      
 66 
     | 
    
         
            +
                error ErrorReleaseManagerServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
         
     | 
| 
      
 67 
     | 
    
         
            +
                error ErrorReleaseManagerNotService(address notService);
         
     | 
| 
      
 68 
     | 
    
         
            +
                error ErrorReleaseManagerServiceAddressMismatch(address expected, address actual);
         
     | 
| 
       65 
69 
     | 
    
         | 
| 
       66 
70 
     | 
    
         
             
                // activateNextRelease
         
     | 
| 
       67 
     | 
    
         
            -
                error ErrorReleaseManagerReleaseActivationDisallowed(StateId currentStateId);
         
     | 
| 
      
 71 
     | 
    
         
            +
                error ErrorReleaseManagerReleaseActivationDisallowed(VersionPart releaseVersion, StateId currentStateId);
         
     | 
| 
       68 
72 
     | 
    
         
             
                error ErrorReleaseManagerReleaseNotCreated(VersionPart releaseVersion);
         
     | 
| 
       69 
73 
     | 
    
         
             
                error ErrorReleaseManagerReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
         
     | 
| 
       70 
74 
     | 
    
         
             
                error ErrorReleaseManagerReleaseAlreadyActivated(VersionPart releaseVersion);
         
     | 
| 
         @@ -85,30 +89,27 @@ contract ReleaseManager is 
     | 
|
| 
       85 
89 
     | 
    
         
             
                error ErrorReleaseManagerServiceSelfRegistration(IService service);
         
     | 
| 
       86 
90 
     | 
    
         
             
                error ErrorReleaseManagerServiceOwnerRegistered(IService service, address owner);
         
     | 
| 
       87 
91 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
                // _verifyReleaseAuthorizations
         
     | 
| 
       89 
     | 
    
         
            -
                error ErrorReleaseManagerReleaseEmpty();
         
     | 
| 
       90 
     | 
    
         
            -
                error ErrorReleaseManagerReleaseServiceRoleInvalid(uint serviceIdx, address service, RoleId role);
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
92 
     | 
    
         
             
                Seconds public constant MIN_DISABLE_DELAY = Seconds.wrap(60 * 24 * 365); // 1 year
         
     | 
| 
       93 
93 
     | 
    
         | 
| 
       94 
94 
     | 
    
         
             
                RegistryAdmin public immutable _admin;
         
     | 
| 
       95 
     | 
    
         
            -
                address public immutable _releaseAccessManagerCodeAddress;
         
     | 
| 
       96 
95 
     | 
    
         
             
                Registry public immutable _registry;
         
     | 
| 
       97 
96 
     | 
    
         
             
                IRegisterable private _staking;
         
     | 
| 
       98 
97 
     | 
    
         
             
                address private _stakingOwner;
         
     | 
| 
       99 
98 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
                mapping(VersionPart version => AccessManagerExtendedWithDisableInitializeable accessManager) internal _releaseAccessManager;
         
     | 
| 
       101 
99 
     | 
    
         
             
                mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
         
     | 
| 
      
 100 
     | 
    
         
            +
                mapping(VersionPart version => IServiceAuthorization authz) internal _serviceAuthorization;
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                // TODO check where/why this is used
         
     | 
| 
       102 
103 
     | 
    
         
             
                mapping(address registryService => VersionPart version) _releaseVersionByAddress;
         
     | 
| 
       103 
104 
     | 
    
         | 
| 
       104 
     | 
    
         
            -
                VersionPart  
     | 
| 
      
 105 
     | 
    
         
            +
                VersionPart private _initial;// first active version    
         
     | 
| 
       105 
106 
     | 
    
         
             
                VersionPart internal _latest; // latest active version
         
     | 
| 
       106 
107 
     | 
    
         
             
                VersionPart internal _next; // version to create and activate 
         
     | 
| 
       107 
     | 
    
         
            -
                 
     | 
| 
      
 108 
     | 
    
         
            +
                mapping(VersionPart verson => StateId releaseState) private _state;
         
     | 
| 
       108 
109 
     | 
    
         | 
| 
       109 
     | 
    
         
            -
                uint256 internal  
     | 
| 
      
 110 
     | 
    
         
            +
                uint256 internal _registeredServices;
         
     | 
| 
      
 111 
     | 
    
         
            +
                uint256 internal _servicesToRegister;
         
     | 
| 
       110 
112 
     | 
    
         | 
| 
       111 
     | 
    
         
            -
                // deployer of this contract must be gif admin
         
     | 
| 
       112 
113 
     | 
    
         
             
                constructor(Registry registry)
         
     | 
| 
       113 
114 
     | 
    
         
             
                    AccessManaged(msg.sender)
         
     | 
| 
       114 
115 
     | 
    
         
             
                {
         
     | 
| 
         @@ -117,154 +118,135 @@ contract ReleaseManager is 
     | 
|
| 
       117 
118 
     | 
    
         
             
                        revert ErrorReleaseManagerNotRegistry(registry);
         
     | 
| 
       118 
119 
     | 
    
         
             
                    }
         
     | 
| 
       119 
120 
     | 
    
         | 
| 
      
 121 
     | 
    
         
            +
                    setAuthority(registry.getAuthority());
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
       120 
123 
     | 
    
         
             
                    _registry = registry;
         
     | 
| 
       121 
     | 
    
         
            -
                    setAuthority(_registry.getAuthority());
         
     | 
| 
       122 
124 
     | 
    
         
             
                    _admin = RegistryAdmin(_registry.getRegistryAdminAddress());
         
     | 
| 
       123 
125 
     | 
    
         | 
| 
       124 
126 
     | 
    
         
             
                    _initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
         
     | 
| 
       125 
127 
     | 
    
         
             
                    _next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
         
     | 
| 
       126 
     | 
    
         
            -
                    _state = getInitialState(RELEASE());
         
     | 
| 
       127 
     | 
    
         
            -
                    
         
     | 
| 
       128 
     | 
    
         
            -
                    AccessManagerExtendedWithDisableInitializeable masterReleaseAccessManager = new AccessManagerExtendedWithDisableInitializeable();
         
     | 
| 
       129 
     | 
    
         
            -
                    masterReleaseAccessManager.initialize(_registry.NFT_LOCK_ADDRESS(), VersionLib.toVersionPart(0));
         
     | 
| 
       130 
     | 
    
         
            -
                    //masterReleaseAccessManager.disable();
         
     | 
| 
       131 
     | 
    
         
            -
                    _releaseAccessManagerCodeAddress = address(masterReleaseAccessManager);
         
     | 
| 
       132 
128 
     | 
    
         
             
                }
         
     | 
| 
       133 
129 
     | 
    
         | 
| 
       134 
130 
     | 
    
         
             
                /// @dev skips previous release if was not activated
         
     | 
| 
       135 
     | 
    
         
            -
                /// sets release  
     | 
| 
      
 131 
     | 
    
         
            +
                /// sets next release into state SCHEDULED
         
     | 
| 
       136 
132 
     | 
    
         
             
                function createNextRelease()
         
     | 
| 
       137 
133 
     | 
    
         
             
                    external
         
     | 
| 
       138 
134 
     | 
    
         
             
                    restricted() // GIF_ADMIN_ROLE
         
     | 
| 
       139 
135 
     | 
    
         
             
                    returns(VersionPart)
         
     | 
| 
       140 
136 
     | 
    
         
             
                {
         
     | 
| 
       141 
     | 
    
         
            -
                    if (!isValidTransition(RELEASE(), _state, SCHEDULED())) {
         
     | 
| 
       142 
     | 
    
         
            -
                        revert ErrorReleaseManagerReleaseCreationDisallowed(_state);
         
     | 
| 
       143 
     | 
    
         
            -
                    }
         
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
137 
     | 
    
         
             
                    _next = VersionPartLib.toVersionPart(_next.toInt() + 1);
         
     | 
| 
       146 
     | 
    
         
            -
                     
     | 
| 
       147 
     | 
    
         
            -
                     
     | 
| 
      
 138 
     | 
    
         
            +
                    _servicesToRegister = 0;
         
     | 
| 
      
 139 
     | 
    
         
            +
                    _registeredServices = 0;
         
     | 
| 
      
 140 
     | 
    
         
            +
                    _state[_next] = getInitialState(RELEASE());
         
     | 
| 
       148 
141 
     | 
    
         | 
| 
       149 
142 
     | 
    
         
             
                    return _next;
         
     | 
| 
       150 
143 
     | 
    
         
             
                }
         
     | 
| 
       151 
144 
     | 
    
         | 
| 
       152 
     | 
    
         
            -
                // TODO order of events
         
     | 
| 
       153 
145 
     | 
    
         
             
                function prepareNextRelease(
         
     | 
| 
       154 
     | 
    
         
            -
                     
     | 
| 
       155 
     | 
    
         
            -
                    string[] memory names, 
         
     | 
| 
       156 
     | 
    
         
            -
                    RoleId[][] memory serviceRoles,
         
     | 
| 
       157 
     | 
    
         
            -
                    string[][] memory serviceRoleNames,
         
     | 
| 
       158 
     | 
    
         
            -
                    RoleId[][] memory functionRoles,
         
     | 
| 
       159 
     | 
    
         
            -
                    string[][] memory functionRoleNames,
         
     | 
| 
       160 
     | 
    
         
            -
                    bytes4[][][] memory selectors, 
         
     | 
| 
      
 146 
     | 
    
         
            +
                    IServiceAuthorization serviceAuthorization,
         
     | 
| 
       161 
147 
     | 
    
         
             
                    bytes32 salt
         
     | 
| 
       162 
148 
     | 
    
         
             
                )
         
     | 
| 
       163 
149 
     | 
    
         
             
                    external
         
     | 
| 
       164 
150 
     | 
    
         
             
                    restricted() // GIF_MANAGER_ROLE
         
     | 
| 
       165 
151 
     | 
    
         
             
                    returns(
         
     | 
| 
       166 
     | 
    
         
            -
                        address  
     | 
| 
      
 152 
     | 
    
         
            +
                        address authority, 
         
     | 
| 
       167 
153 
     | 
    
         
             
                        VersionPart version, 
         
     | 
| 
       168 
154 
     | 
    
         
             
                        bytes32 releaseSalt
         
     | 
| 
       169 
155 
     | 
    
         
             
                    )
         
     | 
| 
       170 
156 
     | 
    
         
             
                {
         
     | 
| 
       171 
     | 
    
         
            -
                     
     | 
| 
      
 157 
     | 
    
         
            +
                    authority = _admin.authority();
         
     | 
| 
      
 158 
     | 
    
         
            +
                    version = _next;
         
     | 
| 
       172 
159 
     | 
    
         | 
| 
       173 
160 
     | 
    
         
             
                    // ensures unique salt
         
     | 
| 
      
 161 
     | 
    
         
            +
                    // TODO CreateX have clones capability also
         
     | 
| 
      
 162 
     | 
    
         
            +
                    // what would releaseSalt look like if used with CreateX in pemissioned mode?
         
     | 
| 
       174 
163 
     | 
    
         
             
                    releaseSalt = keccak256(
         
     | 
| 
       175 
164 
     | 
    
         
             
                        bytes.concat(
         
     | 
| 
       176 
165 
     | 
    
         
             
                            bytes32(version.toInt()),
         
     | 
| 
       177 
166 
     | 
    
         
             
                            salt));
         
     | 
| 
       178 
167 
     | 
    
         | 
| 
       179 
     | 
    
         
            -
                     
     | 
| 
       180 
     | 
    
         
            -
                     
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
      
 168 
     | 
    
         
            +
                    // verify release in state SCHEDULED
         
     | 
| 
      
 169 
     | 
    
         
            +
                    if (!isValidTransition(RELEASE(), _state[version], DEPLOYING())) {
         
     | 
| 
      
 170 
     | 
    
         
            +
                        revert ErrorReleaseManagerReleasePreparationDisallowed(version, _state[version]);
         
     | 
| 
      
 171 
     | 
    
         
            +
                    }
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                    _state[version] = DEPLOYING();
         
     | 
| 
       182 
174 
     | 
    
         | 
| 
       183 
     | 
    
         
            -
                     
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
      
 175 
     | 
    
         
            +
                    // verify authorizaion contract release matches with expected version
         
     | 
| 
      
 176 
     | 
    
         
            +
                    VersionPart releaseVersion = serviceAuthorization.getRelease();
         
     | 
| 
      
 177 
     | 
    
         
            +
                    if (releaseVersion != version) {
         
     | 
| 
      
 178 
     | 
    
         
            +
                        revert ErrorReleaseManagerVersionMismatch(version, releaseVersion);
         
     | 
| 
       185 
179 
     | 
    
         
             
                    }
         
     | 
| 
       186 
180 
     | 
    
         | 
| 
       187 
     | 
    
         
            -
                    _verifyReleaseAuthorizations(addresses, serviceRoles, functionRoles, selectors);
         
     | 
| 
       188 
181 
     | 
    
         | 
| 
       189 
     | 
    
         
            -
                     
     | 
| 
       190 
     | 
    
         
            -
             
     | 
| 
      
 182 
     | 
    
         
            +
                    // sanity check to ensure service domain list is not empty
         
     | 
| 
      
 183 
     | 
    
         
            +
                    uint256 serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
         
     | 
| 
      
 184 
     | 
    
         
            +
                    if (serviceDomainsCount == 0) {
         
     | 
| 
      
 185 
     | 
    
         
            +
                        revert ErrorReleaseManagerNoDomains(version);
         
     | 
| 
      
 186 
     | 
    
         
            +
                    }
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
                    // verify prepareNextRelease is only called once per release
         
     | 
| 
      
 189 
     | 
    
         
            +
                    if(_servicesToRegister > 0) {
         
     | 
| 
      
 190 
     | 
    
         
            +
                        revert ErrorReleaseManagerReleaseAlreadyPrepared(version, _state[version]);
         
     | 
| 
       191 
191 
     | 
    
         
             
                    }
         
     | 
| 
       192 
     | 
    
         
            -
                    // TODO instead of copying just set ServiceAuthorizationsLib for release and array of domains???
         
     | 
| 
       193 
     | 
    
         
            -
                    _releaseInfo[version].version = version;
         
     | 
| 
       194 
     | 
    
         
            -
                    _releaseInfo[version].salt = releaseSalt;
         
     | 
| 
       195 
     | 
    
         
            -
                    _releaseInfo[version].addresses = addresses;
         
     | 
| 
       196 
     | 
    
         
            -
                    _releaseInfo[version].names = names;
         
     | 
| 
       197 
     | 
    
         
            -
                    _releaseInfo[version].serviceRoles = serviceRoles;
         
     | 
| 
       198 
     | 
    
         
            -
                    _releaseInfo[version].serviceRoleNames = serviceRoleNames;
         
     | 
| 
       199 
     | 
    
         
            -
                    _releaseInfo[version].functionRoles = functionRoles;
         
     | 
| 
       200 
     | 
    
         
            -
                    _releaseInfo[version].functionRoleNames = functionRoleNames;
         
     | 
| 
       201 
     | 
    
         
            -
                    _releaseInfo[version].selectors = selectors;
         
     | 
| 
       202 
     | 
    
         
            -
                    _awaitingRegistration = addresses.length;
         
     | 
| 
       203 
     | 
    
         
            -
                    _state = DEPLOYING();        
         
     | 
| 
       204 
     | 
    
         
            -
                    _releaseAccessManager[version] = releaseAccessManager;
         
     | 
| 
       205 
     | 
    
         
            -
             
     | 
| 
       206 
     | 
    
         
            -
                    emit LogReleaseCreation(version, releaseSalt, releaseAccessManager);
         
     | 
| 
       207 
     | 
    
         
            -
                }
         
     | 
| 
       208 
192 
     | 
    
         | 
| 
      
 193 
     | 
    
         
            +
                    _servicesToRegister = serviceDomainsCount;
         
     | 
| 
      
 194 
     | 
    
         
            +
                    _serviceAuthorization[version] = serviceAuthorization;
         
     | 
| 
      
 195 
     | 
    
         
            +
             
     | 
| 
      
 196 
     | 
    
         
            +
                    emit LogReleaseCreation(version, releaseSalt);
         
     | 
| 
      
 197 
     | 
    
         
            +
                }
         
     | 
| 
       209 
198 
     | 
    
         | 
| 
      
 199 
     | 
    
         
            +
                // TODO this function can have 0 args -> use stored addresses from prepareNextRelease()
         
     | 
| 
       210 
200 
     | 
    
         
             
                function registerService(IService service) 
         
     | 
| 
       211 
201 
     | 
    
         
             
                    external
         
     | 
| 
       212 
202 
     | 
    
         
             
                    restricted // GIF_MANAGER_ROLE
         
     | 
| 
       213 
203 
     | 
    
         
             
                    returns(NftId nftId)
         
     | 
| 
       214 
204 
     | 
    
         
             
                {
         
     | 
| 
       215 
     | 
    
         
            -
                     
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
      
 205 
     | 
    
         
            +
                    VersionPart releaseVersion = _next;
         
     | 
| 
      
 206 
     | 
    
         
            +
                    StateId state = _state[releaseVersion];
         
     | 
| 
      
 207 
     | 
    
         
            +
             
     | 
| 
      
 208 
     | 
    
         
            +
                    // verify release in state DEPLOYING
         
     | 
| 
      
 209 
     | 
    
         
            +
                    if (!isValidTransition(RELEASE(), state, DEPLOYING())) {
         
     | 
| 
      
 210 
     | 
    
         
            +
                        // TOOD name must represent failed state transition
         
     | 
| 
      
 211 
     | 
    
         
            +
                        revert ErrorReleaseManagerServiceRegistrationDisallowed(state);
         
     | 
| 
      
 212 
     | 
    
         
            +
                    }
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
                    _state[releaseVersion] = DEPLOYING();
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
                    // not all services are registered
         
     | 
| 
      
 217 
     | 
    
         
            +
                    if (_servicesToRegister == _registeredServices) {
         
     | 
| 
      
 218 
     | 
    
         
            +
                        revert ErrorReleaseManagerNoServiceRegistrationExpected();
         
     | 
| 
       217 
219 
     | 
    
         
             
                    }
         
     | 
| 
       218 
220 
     | 
    
         | 
| 
      
 221 
     | 
    
         
            +
                    // service can work with release manager
         
     | 
| 
       219 
222 
     | 
    
         
             
                    (
         
     | 
| 
       220 
223 
     | 
    
         
             
                        IRegistry.ObjectInfo memory info,
         
     | 
| 
       221 
     | 
    
         
            -
                        ObjectType  
     | 
| 
       222 
     | 
    
         
            -
                        VersionPart  
     | 
| 
      
 224 
     | 
    
         
            +
                        ObjectType serviceDomain,
         
     | 
| 
      
 225 
     | 
    
         
            +
                        VersionPart serviceVersion
         
     | 
| 
       223 
226 
     | 
    
         
             
                    ) = _verifyService(service);
         
     | 
| 
       224 
227 
     | 
    
         | 
| 
       225 
     | 
    
         
            -
                    //  
     | 
| 
       226 
     | 
    
         
            -
                     
     | 
| 
       227 
     | 
    
         
            -
             
     | 
| 
      
 228 
     | 
    
         
            +
                    // service domain matches defined in release config
         
     | 
| 
      
 229 
     | 
    
         
            +
                    ObjectType expectedDomain = _serviceAuthorization[releaseVersion].getServiceDomain(_registeredServices);
         
     | 
| 
      
 230 
     | 
    
         
            +
                    if (serviceDomain != expectedDomain) {
         
     | 
| 
      
 231 
     | 
    
         
            +
                        revert ErrorReleaseManagerServiceDomainMismatch(expectedDomain, serviceDomain);
         
     | 
| 
       228 
232 
     | 
    
         
             
                    }
         
     | 
| 
       229 
233 
     | 
    
         | 
| 
       230 
     | 
    
         
            -
                     
     | 
| 
       231 
     | 
    
         
            -
                     
     | 
| 
       232 
     | 
    
         
            -
                    // TODO temp, while typescript addresses computation is not implemented 
         
     | 
| 
       233 
     | 
    
         
            -
                    /*if(address(service) != serviceAddress) {
         
     | 
| 
       234 
     | 
    
         
            -
                        revert ErrorReleaseManagerServiceAddressInvalid(service, serviceAddress);
         
     | 
| 
       235 
     | 
    
         
            -
                    }*/
         
     | 
| 
       236 
     | 
    
         
            -
             
     | 
| 
       237 
     | 
    
         
            -
                    _setServiceAuthorizations(
         
     | 
| 
       238 
     | 
    
         
            -
                        _releaseAccessManager[version],
         
     | 
| 
       239 
     | 
    
         
            -
                        // TODO temp, while typescript addresses computation is not implemented
         
     | 
| 
       240 
     | 
    
         
            -
                        address(service),//serviceAddress, 
         
     | 
| 
       241 
     | 
    
         
            -
                        _releaseInfo[version].names[serviceIdx], 
         
     | 
| 
       242 
     | 
    
         
            -
                        _releaseInfo[version].serviceRoles[serviceIdx],
         
     | 
| 
       243 
     | 
    
         
            -
                        _releaseInfo[version].serviceRoleNames[serviceIdx],
         
     | 
| 
       244 
     | 
    
         
            -
                        _releaseInfo[version].functionRoles[serviceIdx],
         
     | 
| 
       245 
     | 
    
         
            -
                        _releaseInfo[version].functionRoleNames[serviceIdx],
         
     | 
| 
       246 
     | 
    
         
            -
                        _releaseInfo[version].selectors[serviceIdx]);
         
     | 
| 
       247 
     | 
    
         
            -
             
     | 
| 
       248 
     | 
    
         
            -
                    // TODO decide for one of the approaches
         
     | 
| 
       249 
     | 
    
         
            -
                    // // service to service authorization
         
     | 
| 
       250 
     | 
    
         
            -
                    // ServiceAuthorizationsLib.ServiceAuthorization memory authz = ServiceAuthorizationsLib.getAuthorizations(domain);
         
     | 
| 
       251 
     | 
    
         
            -
                    // for(uint8 idx = 0; idx < authz.authorizedRole.length; idx++) {
         
     | 
| 
       252 
     | 
    
         
            -
                    //     _accessManager.setTargetFunctionRole(
         
     | 
| 
       253 
     | 
    
         
            -
                    //         address(service), 
         
     | 
| 
       254 
     | 
    
         
            -
                    //         authz.authorizedSelectors[idx], 
         
     | 
| 
       255 
     | 
    
         
            -
                    //         authz.authorizedRole[idx]);
         
     | 
| 
       256 
     | 
    
         
            -
                    // }
         
     | 
| 
       257 
     | 
    
         
            -
             
     | 
| 
       258 
     | 
    
         
            -
                    _awaitingRegistration = serviceIdx;
         
     | 
| 
       259 
     | 
    
         
            -
                    // TODO end state depends on (_awaitingRegistration == 0)
         
     | 
| 
       260 
     | 
    
         
            -
                    _state = DEPLOYING();
         
     | 
| 
       261 
     | 
    
         
            -
             
     | 
| 
       262 
     | 
    
         
            -
                    // checked in registry
         
     | 
| 
       263 
     | 
    
         
            -
                    _releaseInfo[version].domains.push(domain);
         
     | 
| 
       264 
     | 
    
         
            -
             
     | 
| 
       265 
     | 
    
         
            -
                    nftId = _registry.registerService(info, version, domain);
         
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
      
 234 
     | 
    
         
            +
                    // register service with registry
         
     | 
| 
      
 235 
     | 
    
         
            +
                    nftId = _registry.registerService(info, serviceVersion, serviceDomain);
         
     | 
| 
       267 
236 
     | 
    
         
             
                    service.linkToRegisteredNftId();
         
     | 
| 
      
 237 
     | 
    
         
            +
                    _registeredServices++;
         
     | 
| 
      
 238 
     | 
    
         
            +
             
     | 
| 
      
 239 
     | 
    
         
            +
                    // setup service authorization
         
     | 
| 
      
 240 
     | 
    
         
            +
                    _admin.authorizeService(
         
     | 
| 
      
 241 
     | 
    
         
            +
                        _serviceAuthorization[releaseVersion], 
         
     | 
| 
      
 242 
     | 
    
         
            +
                        service);
         
     | 
| 
      
 243 
     | 
    
         
            +
             
     | 
| 
      
 244 
     | 
    
         
            +
                    // TODO consider to extend this to REGISTRY
         
     | 
| 
      
 245 
     | 
    
         
            +
                    // special roles for registry/staking/pool service
         
     | 
| 
      
 246 
     | 
    
         
            +
                    if (serviceDomain == STAKING() || serviceDomain == POOL()) {
         
     | 
| 
      
 247 
     | 
    
         
            +
                        // TODO rename to grantServiceDomainRole()
         
     | 
| 
      
 248 
     | 
    
         
            +
                        _admin.grantServiceRoleForAllVersions(service, serviceDomain);
         
     | 
| 
      
 249 
     | 
    
         
            +
                    }
         
     | 
| 
       268 
250 
     | 
    
         
             
                }
         
     | 
| 
       269 
251 
     | 
    
         | 
| 
       270 
252 
     | 
    
         | 
| 
         @@ -272,31 +254,28 @@ contract ReleaseManager is 
     | 
|
| 
       272 
254 
     | 
    
         
             
                    external 
         
     | 
| 
       273 
255 
     | 
    
         
             
                    restricted // GIF_ADMIN_ROLE
         
     | 
| 
       274 
256 
     | 
    
         
             
                {
         
     | 
| 
       275 
     | 
    
         
            -
                    if (!isValidTransition(RELEASE(), _state, ACTIVE())) {
         
     | 
| 
       276 
     | 
    
         
            -
                        revert ErrorReleaseManagerReleaseActivationDisallowed(_state);
         
     | 
| 
       277 
     | 
    
         
            -
                    }
         
     | 
| 
       278 
     | 
    
         
            -
             
     | 
| 
       279 
257 
     | 
    
         
             
                    VersionPart version = _next;
         
     | 
| 
       280 
     | 
    
         
            -
                     
     | 
| 
      
 258 
     | 
    
         
            +
                    StateId state = _state[version];
         
     | 
| 
      
 259 
     | 
    
         
            +
                    StateId newState = ACTIVE();
         
     | 
| 
       281 
260 
     | 
    
         | 
| 
       282 
     | 
    
         
            -
                    // release  
     | 
| 
       283 
     | 
    
         
            -
                     
     | 
| 
       284 
     | 
    
         
            -
             
     | 
| 
       285 
     | 
    
         
            -
                        revert ErrorReleaseManagerReleaseNotCreated(version);
         
     | 
| 
      
 261 
     | 
    
         
            +
                    // verify release in state DEPLOYING
         
     | 
| 
      
 262 
     | 
    
         
            +
                    if (!isValidTransition(RELEASE(), state, newState)) {
         
     | 
| 
      
 263 
     | 
    
         
            +
                        revert ErrorReleaseManagerReleaseActivationDisallowed(version, state);
         
     | 
| 
       286 
264 
     | 
    
         
             
                    }
         
     | 
| 
       287 
265 
     | 
    
         | 
| 
       288 
266 
     | 
    
         
             
                    // release fully deployed
         
     | 
| 
       289 
     | 
    
         
            -
                    if( 
     | 
| 
       290 
     | 
    
         
            -
                        revert ErrorReleaseManagerReleaseRegistrationNotFinished(version,  
     | 
| 
      
 267 
     | 
    
         
            +
                    if(_registeredServices < _servicesToRegister) {
         
     | 
| 
      
 268 
     | 
    
         
            +
                        revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _servicesToRegister - _registeredServices);
         
     | 
| 
       291 
269 
     | 
    
         
             
                    }
         
     | 
| 
       292 
270 
     | 
    
         | 
| 
       293 
     | 
    
         
            -
                    // release  
     | 
| 
       294 
     | 
    
         
            -
                     
     | 
| 
       295 
     | 
    
         
            -
             
     | 
| 
      
 271 
     | 
    
         
            +
                    // release exists, registry service MUST exist
         
     | 
| 
      
 272 
     | 
    
         
            +
                    address service = _registry.getServiceAddress(REGISTRY(), version);
         
     | 
| 
      
 273 
     | 
    
         
            +
                    if(service == address(0)) {
         
     | 
| 
      
 274 
     | 
    
         
            +
                        revert ErrorReleaseManagerReleaseNotCreated(version);
         
     | 
| 
       296 
275 
     | 
    
         
             
                    }
         
     | 
| 
       297 
276 
     | 
    
         | 
| 
       298 
277 
     | 
    
         
             
                    _latest = version;
         
     | 
| 
       299 
     | 
    
         
            -
                    _state =  
     | 
| 
      
 278 
     | 
    
         
            +
                    _state[version] = newState;
         
     | 
| 
       300 
279 
     | 
    
         | 
| 
       301 
280 
     | 
    
         
             
                    _releaseVersionByAddress[service] = version;
         
     | 
| 
       302 
281 
     | 
    
         
             
                    _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
         
     | 
| 
         @@ -304,41 +283,49 @@ contract ReleaseManager is 
     | 
|
| 
       304 
283 
     | 
    
         
             
                    emit LogReleaseActivation(version);
         
     | 
| 
       305 
284 
     | 
    
         
             
                }
         
     | 
| 
       306 
285 
     | 
    
         | 
| 
       307 
     | 
    
         
            -
                 
     | 
| 
       308 
     | 
    
         
            -
                function  
     | 
| 
      
 286 
     | 
    
         
            +
                /// @dev stop all operations with release services
         
     | 
| 
      
 287 
     | 
    
         
            +
                function pauseRelease(VersionPart version)
         
     | 
| 
       309 
288 
     | 
    
         
             
                    external
         
     | 
| 
       310 
289 
     | 
    
         
             
                    restricted // GIF_ADMIN_ROLE
         
     | 
| 
       311 
290 
     | 
    
         
             
                {
         
     | 
| 
       312 
     | 
    
         
            -
                     
     | 
| 
       313 
     | 
    
         
            -
                     
     | 
| 
       314 
     | 
    
         
            -
                        revert ErrorReleaseManagerReleaseNotActivated(version);
         
     | 
| 
       315 
     | 
    
         
            -
                    }
         
     | 
| 
      
 291 
     | 
    
         
            +
                    StateId state = _state[version];
         
     | 
| 
      
 292 
     | 
    
         
            +
                    StateId newState = PAUSED();
         
     | 
| 
       316 
293 
     | 
    
         | 
| 
       317 
     | 
    
         
            -
                    // release  
     | 
| 
       318 
     | 
    
         
            -
                    if( 
     | 
| 
       319 
     | 
    
         
            -
                        revert  
     | 
| 
      
 294 
     | 
    
         
            +
                    // verify release in state ACTIVE
         
     | 
| 
      
 295 
     | 
    
         
            +
                    if (!isValidTransition(RELEASE(), state, newState)) {
         
     | 
| 
      
 296 
     | 
    
         
            +
                        revert ErrorReleaseManagerReleaseActivationDisallowed(version, state);
         
     | 
| 
       320 
297 
     | 
    
         
             
                    }
         
     | 
| 
       321 
298 
     | 
    
         | 
| 
       322 
     | 
    
         
            -
                     
     | 
| 
      
 299 
     | 
    
         
            +
                    // TODO come up with a substitute
         
     | 
| 
      
 300 
     | 
    
         
            +
                    //_releaseAccessManager[version].disable();
         
     | 
| 
       323 
301 
     | 
    
         | 
| 
       324 
     | 
    
         
            -
                     
     | 
| 
      
 302 
     | 
    
         
            +
                    _state[version] = newState;
         
     | 
| 
      
 303 
     | 
    
         
            +
                    _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp();
         
     | 
| 
       325 
304 
     | 
    
         | 
| 
       326 
     | 
    
         
            -
                     
     | 
| 
      
 305 
     | 
    
         
            +
                    emit LogReleaseDisabled(version);
         
     | 
| 
       327 
306 
     | 
    
         
             
                }
         
     | 
| 
       328 
     | 
    
         
            -
             
     | 
| 
       329 
     | 
    
         
            -
                 
     | 
| 
      
 307 
     | 
    
         
            +
             
     | 
| 
      
 308 
     | 
    
         
            +
                // TODO consider revert if some delay is expired -> becomes disabled automatically
         
     | 
| 
      
 309 
     | 
    
         
            +
                /// @dev resume operations with release services
         
     | 
| 
      
 310 
     | 
    
         
            +
                function unpauseRelease(VersionPart version)
         
     | 
| 
       330 
311 
     | 
    
         
             
                    external
         
     | 
| 
       331 
312 
     | 
    
         
             
                    restricted // GIF_ADMIN_ROLE
         
     | 
| 
       332 
313 
     | 
    
         
             
                {
         
     | 
| 
       333 
     | 
    
         
            -
                     
     | 
| 
       334 
     | 
    
         
            -
                     
     | 
| 
       335 
     | 
    
         
            -
             
     | 
| 
       336 
     | 
    
         
            -
                    // 
     | 
| 
      
 314 
     | 
    
         
            +
                    StateId state = _state[version];
         
     | 
| 
      
 315 
     | 
    
         
            +
                    StateId newState = ACTIVE();
         
     | 
| 
      
 316 
     | 
    
         
            +
             
     | 
| 
      
 317 
     | 
    
         
            +
                    // verify release in state PAUSED
         
     | 
| 
      
 318 
     | 
    
         
            +
                    if (!isValidTransition(RELEASE(), state, newState)) {
         
     | 
| 
      
 319 
     | 
    
         
            +
                        revert ErrorReleaseManagerReleaseActivationDisallowed(version, state);
         
     | 
| 
      
 320 
     | 
    
         
            +
                    }
         
     | 
| 
       337 
321 
     | 
    
         | 
| 
       338 
     | 
    
         
            -
                    //  
     | 
| 
       339 
     | 
    
         
            -
                    _releaseAccessManager[version].enable();
         
     | 
| 
      
 322 
     | 
    
         
            +
                    // TODO come up with a substitute
         
     | 
| 
      
 323 
     | 
    
         
            +
                    // _releaseAccessManager[version].enable();
         
     | 
| 
       340 
324 
     | 
    
         | 
| 
      
 325 
     | 
    
         
            +
                    _state[version] = newState;
         
     | 
| 
       341 
326 
     | 
    
         
             
                    _releaseInfo[version].disabledAt = zeroTimestamp();
         
     | 
| 
      
 327 
     | 
    
         
            +
             
     | 
| 
      
 328 
     | 
    
         
            +
                    emit LogReleaseEnabled(version);
         
     | 
| 
       342 
329 
     | 
    
         
             
                }
         
     | 
| 
       343 
330 
     | 
    
         | 
| 
       344 
331 
     | 
    
         
             
                //--- view functions ----------------------------------------------------//
         
     | 
| 
         @@ -357,7 +344,7 @@ contract ReleaseManager is 
     | 
|
| 
       357 
344 
     | 
    
         
             
                }
         
     | 
| 
       358 
345 
     | 
    
         | 
| 
       359 
346 
     | 
    
         
             
                function isActiveRelease(VersionPart version) public view returns(bool) {
         
     | 
| 
       360 
     | 
    
         
            -
                    return  
     | 
| 
      
 347 
     | 
    
         
            +
                    return _state[version] == ACTIVE();
         
     | 
| 
       361 
348 
     | 
    
         
             
                }
         
     | 
| 
       362 
349 
     | 
    
         | 
| 
       363 
350 
     | 
    
         
             
                function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
         
     | 
| 
         @@ -376,18 +363,22 @@ contract ReleaseManager is 
     | 
|
| 
       376 
363 
     | 
    
         
             
                    return _initial;
         
     | 
| 
       377 
364 
     | 
    
         
             
                }
         
     | 
| 
       378 
365 
     | 
    
         | 
| 
       379 
     | 
    
         
            -
                function getState() external view returns (StateId stateId) {
         
     | 
| 
       380 
     | 
    
         
            -
                    return _state;
         
     | 
| 
      
 366 
     | 
    
         
            +
                function getState(VersionPart version) external view returns (StateId stateId) {
         
     | 
| 
      
 367 
     | 
    
         
            +
                    return _state[version];
         
     | 
| 
       381 
368 
     | 
    
         
             
                }
         
     | 
| 
       382 
369 
     | 
    
         | 
| 
       383 
370 
     | 
    
         
             
                function getRemainingServicesToRegister() external view returns (uint256 services) {
         
     | 
| 
       384 
     | 
    
         
            -
                    return  
     | 
| 
      
 371 
     | 
    
         
            +
                    return _servicesToRegister - _registeredServices;
         
     | 
| 
       385 
372 
     | 
    
         
             
                }
         
     | 
| 
       386 
373 
     | 
    
         | 
| 
       387 
     | 
    
         
            -
                function  
     | 
| 
       388 
     | 
    
         
            -
                     
     | 
| 
      
 374 
     | 
    
         
            +
                function getServiceAuthorization(VersionPart version)
         
     | 
| 
      
 375 
     | 
    
         
            +
                    external
         
     | 
| 
      
 376 
     | 
    
         
            +
                    view
         
     | 
| 
      
 377 
     | 
    
         
            +
                    returns (IServiceAuthorization serviceAuthorization)
         
     | 
| 
      
 378 
     | 
    
         
            +
                {
         
     | 
| 
      
 379 
     | 
    
         
            +
                    return _serviceAuthorization[version];
         
     | 
| 
       389 
380 
     | 
    
         
             
                }
         
     | 
| 
       390 
     | 
    
         
            -
             
     | 
| 
      
 381 
     | 
    
         
            +
             
     | 
| 
       391 
382 
     | 
    
         
             
                function getRegistryAdmin() external view returns (address) {
         
     | 
| 
       392 
383 
     | 
    
         
             
                    return address(_admin);
         
     | 
| 
       393 
384 
     | 
    
         
             
                }
         
     | 
| 
         @@ -398,37 +389,6 @@ contract ReleaseManager is 
     | 
|
| 
       398 
389 
     | 
    
         
             
                    return _registry;
         
     | 
| 
       399 
390 
     | 
    
         
             
                }
         
     | 
| 
       400 
391 
     | 
    
         | 
| 
       401 
     | 
    
         
            -
                //--- ILifecycle -----------------------------------------------------------//
         
     | 
| 
       402 
     | 
    
         
            -
             
     | 
| 
       403 
     | 
    
         
            -
                function hasLifecycle(ObjectType objectType) external pure returns (bool) { return objectType == RELEASE(); }
         
     | 
| 
       404 
     | 
    
         
            -
             
     | 
| 
       405 
     | 
    
         
            -
                function getInitialState(ObjectType objectType) public pure returns (StateId stateId) { 
         
     | 
| 
       406 
     | 
    
         
            -
                    if (objectType == RELEASE()) {
         
     | 
| 
       407 
     | 
    
         
            -
                        stateId = INITIAL();
         
     | 
| 
       408 
     | 
    
         
            -
                    }
         
     | 
| 
       409 
     | 
    
         
            -
                }
         
     | 
| 
       410 
     | 
    
         
            -
             
     | 
| 
       411 
     | 
    
         
            -
                function isValidTransition(
         
     | 
| 
       412 
     | 
    
         
            -
                    ObjectType objectType,
         
     | 
| 
       413 
     | 
    
         
            -
                    StateId fromId,
         
     | 
| 
       414 
     | 
    
         
            -
                    StateId toId
         
     | 
| 
       415 
     | 
    
         
            -
                )
         
     | 
| 
       416 
     | 
    
         
            -
                    public 
         
     | 
| 
       417 
     | 
    
         
            -
                    pure 
         
     | 
| 
       418 
     | 
    
         
            -
                    returns (bool isValid)
         
     | 
| 
       419 
     | 
    
         
            -
                {
         
     | 
| 
       420 
     | 
    
         
            -
                    if (objectType != RELEASE()) { return false; }
         
     | 
| 
       421 
     | 
    
         
            -
             
     | 
| 
       422 
     | 
    
         
            -
                    if (fromId == INITIAL() && toId == SCHEDULED()) { return true; }
         
     | 
| 
       423 
     | 
    
         
            -
                    if (fromId == SCHEDULED() && toId == DEPLOYING()) { return true; }
         
     | 
| 
       424 
     | 
    
         
            -
                    if (fromId == DEPLOYING() && toId == SCHEDULED()) { return true; }
         
     | 
| 
       425 
     | 
    
         
            -
                    if (fromId == DEPLOYING() && toId == DEPLOYING()) { return true; }
         
     | 
| 
       426 
     | 
    
         
            -
                    if (fromId == DEPLOYING() && toId == ACTIVE()) { return true; }
         
     | 
| 
       427 
     | 
    
         
            -
                    // TODO active -> scheduled missing, add tests to cover this and more scenarios (#358)
         
     | 
| 
       428 
     | 
    
         
            -
             
     | 
| 
       429 
     | 
    
         
            -
                    return false;
         
     | 
| 
       430 
     | 
    
         
            -
                }
         
     | 
| 
       431 
     | 
    
         
            -
             
     | 
| 
       432 
392 
     | 
    
         
             
                //--- private functions ----------------------------------------------------//
         
     | 
| 
       433 
393 
     | 
    
         | 
| 
       434 
394 
     | 
    
         
             
                function _verifyService(IService service)
         
     | 
| 
         @@ -441,7 +401,7 @@ contract ReleaseManager is 
     | 
|
| 
       441 
401 
     | 
    
         
             
                    )
         
     | 
| 
       442 
402 
     | 
    
         
             
                {
         
     | 
| 
       443 
403 
     | 
    
         
             
                    if(!service.supportsInterface(type(IService).interfaceId)) {
         
     | 
| 
       444 
     | 
    
         
            -
                        revert ErrorReleaseManagerNotService(service);
         
     | 
| 
      
 404 
     | 
    
         
            +
                        revert ErrorReleaseManagerNotService(address(service));
         
     | 
| 
       445 
405 
     | 
    
         
             
                    }
         
     | 
| 
       446 
406 
     | 
    
         | 
| 
       447 
407 
     | 
    
         
             
                    address owner = msg.sender;
         
     | 
| 
         @@ -452,15 +412,15 @@ contract ReleaseManager is 
     | 
|
| 
       452 
412 
     | 
    
         | 
| 
       453 
413 
     | 
    
         
             
                    _verifyServiceInfo(service, serviceInfo, owner);
         
     | 
| 
       454 
414 
     | 
    
         | 
| 
       455 
     | 
    
         
            -
                    VersionPart releaseVersion =  
     | 
| 
       456 
     | 
    
         
            -
                    address  
     | 
| 
      
 415 
     | 
    
         
            +
                    VersionPart releaseVersion = _next; // never 0
         
     | 
| 
      
 416 
     | 
    
         
            +
                    address expectedAuthority = _admin.authority(); // can be zero if registering service when release is not created
         
     | 
| 
       457 
417 
     | 
    
         | 
| 
       458 
418 
     | 
    
         
             
                    // IMPORTANT: can not guarantee service access is actually controlled by authority
         
     | 
| 
       459 
     | 
    
         
            -
                    if(serviceAuthority !=  
     | 
| 
      
 419 
     | 
    
         
            +
                    if(serviceAuthority != expectedAuthority) {
         
     | 
| 
       460 
420 
     | 
    
         
             
                        revert ErrorReleaseManagerServiceReleaseAuthorityMismatch(
         
     | 
| 
       461 
421 
     | 
    
         
             
                            service,
         
     | 
| 
       462 
422 
     | 
    
         
             
                            serviceAuthority,
         
     | 
| 
       463 
     | 
    
         
            -
                             
     | 
| 
      
 423 
     | 
    
         
            +
                            expectedAuthority);
         
     | 
| 
       464 
424 
     | 
    
         
             
                    }
         
     | 
| 
       465 
425 
     | 
    
         | 
| 
       466 
426 
     | 
    
         
             
                    if(serviceVersion != releaseVersion) {
         
     | 
| 
         @@ -488,7 +448,7 @@ contract ReleaseManager is 
     | 
|
| 
       488 
448 
     | 
    
         
             
                        revert ErrorReleaseManagerServiceInfoInterceptorInvalid(service, info.isInterceptor);
         
     | 
| 
       489 
449 
     | 
    
         
             
                    }
         
     | 
| 
       490 
450 
     | 
    
         | 
| 
       491 
     | 
    
         
            -
                    if(info.objectType != SERVICE()) { 
     | 
| 
      
 451 
     | 
    
         
            +
                    if(info.objectType != SERVICE()) {
         
     | 
| 
       492 
452 
     | 
    
         
             
                        revert ErrorReleaseManagerServiceInfoTypeInvalid(service, SERVICE(), info.objectType);
         
     | 
| 
       493 
453 
     | 
    
         
             
                    }
         
     | 
| 
       494 
454 
     | 
    
         | 
| 
         @@ -507,81 +467,7 @@ contract ReleaseManager is 
     | 
|
| 
       507 
467 
     | 
    
         
             
                    }
         
     | 
| 
       508 
468 
     | 
    
         
             
                }
         
     | 
| 
       509 
469 
     | 
    
         | 
| 
       510 
     | 
    
         
            -
             
     | 
| 
       511 
     | 
    
         
            -
                function _verifyReleaseAuthorizations(
         
     | 
| 
       512 
     | 
    
         
            -
                    address[] memory serviceAddress,
         
     | 
| 
       513 
     | 
    
         
            -
                    RoleId[][] memory serviceRoles,
         
     | 
| 
       514 
     | 
    
         
            -
                    RoleId[][] memory functionRoles,
         
     | 
| 
       515 
     | 
    
         
            -
                    bytes4[][][] memory selectors
         
     | 
| 
       516 
     | 
    
         
            -
                )
         
     | 
| 
       517 
     | 
    
         
            -
                    internal
         
     | 
| 
       518 
     | 
    
         
            -
                    pure
         
     | 
| 
       519 
     | 
    
         
            -
                {
         
     | 
| 
       520 
     | 
    
         
            -
                    if(serviceAddress.length == 0) {
         
     | 
| 
       521 
     | 
    
         
            -
                        revert ErrorReleaseManagerReleaseEmpty();
         
     | 
| 
       522 
     | 
    
         
            -
                    }
         
     | 
| 
       523 
     | 
    
         
            -
             
     | 
| 
       524 
     | 
    
         
            -
                    for(uint serviceIdx = 0; serviceIdx < serviceAddress.length; serviceIdx++)
         
     | 
| 
       525 
     | 
    
         
            -
                    {
         
     | 
| 
       526 
     | 
    
         
            -
                        for(uint roleIdx = 0; roleIdx < serviceRoles[serviceIdx].length; roleIdx++)
         
     | 
| 
       527 
     | 
    
         
            -
                        {
         
     | 
| 
       528 
     | 
    
         
            -
                            RoleId role = serviceRoles[serviceIdx][roleIdx];
         
     | 
| 
       529 
     | 
    
         
            -
                            if(role == ADMIN_ROLE() || role == PUBLIC_ROLE()) {
         
     | 
| 
       530 
     | 
    
         
            -
                                revert ErrorReleaseManagerReleaseServiceRoleInvalid(serviceIdx, serviceAddress[serviceIdx], role);
         
     | 
| 
       531 
     | 
    
         
            -
                            }
         
     | 
| 
       532 
     | 
    
         
            -
                        }
         
     | 
| 
       533 
     | 
    
         
            -
                    }
         
     | 
| 
       534 
     | 
    
         
            -
             
     | 
| 
       535 
     | 
    
         
            -
                    // TODO no duplicate service "domain" role per release
         
     | 
| 
       536 
     | 
    
         
            -
                    // TODO no duplicate service roles per service
         
     | 
| 
       537 
     | 
    
         
            -
                    // TODO no duplicate service function roles per service
         
     | 
| 
       538 
     | 
    
         
            -
                    // TODO no duplicate service function selectors per service
         
     | 
| 
       539 
     | 
    
         
            -
                }
         
     | 
| 
       540 
     | 
    
         
            -
             
     | 
| 
       541 
     | 
    
         
            -
                function _setServiceAuthorizations(
         
     | 
| 
       542 
     | 
    
         
            -
                    AccessManagerExtendedWithDisableInitializeable accessManager, // release access manager
         
     | 
| 
       543 
     | 
    
         
            -
                    address serviceAddress,
         
     | 
| 
       544 
     | 
    
         
            -
                    string memory serviceName,
         
     | 
| 
       545 
     | 
    
         
            -
                    RoleId[] memory serviceRoles,
         
     | 
| 
       546 
     | 
    
         
            -
                    string[] memory serviceRoleNames,
         
     | 
| 
       547 
     | 
    
         
            -
                    RoleId[] memory functionRoles,
         
     | 
| 
       548 
     | 
    
         
            -
                    string[] memory functionRoleNames,
         
     | 
| 
       549 
     | 
    
         
            -
                    bytes4[][] memory selectors
         
     | 
| 
       550 
     | 
    
         
            -
                )
         
     | 
| 
       551 
     | 
    
         
            -
                    internal
         
     | 
| 
       552 
     | 
    
         
            -
                {
         
     | 
| 
       553 
     | 
    
         
            -
                    accessManager.createTarget(serviceAddress, serviceName);
         
     | 
| 
       554 
     | 
    
         
            -
             
     | 
| 
       555 
     | 
    
         
            -
                    for(uint idx = 0; idx < functionRoles.length; idx++)
         
     | 
| 
       556 
     | 
    
         
            -
                    {
         
     | 
| 
       557 
     | 
    
         
            -
                        uint64 roleInt = functionRoles[idx].toInt();
         
     | 
| 
       558 
     | 
    
         
            -
             
     | 
| 
       559 
     | 
    
         
            -
                        if(!accessManager.isRoleExists(roleInt)) {
         
     | 
| 
       560 
     | 
    
         
            -
                            accessManager.createRole(roleInt, functionRoleNames[idx]);
         
     | 
| 
       561 
     | 
    
         
            -
                        }
         
     | 
| 
       562 
     | 
    
         
            -
             
     | 
| 
       563 
     | 
    
         
            -
                        accessManager.setTargetFunctionRole(
         
     | 
| 
       564 
     | 
    
         
            -
                            serviceAddress, 
         
     | 
| 
       565 
     | 
    
         
            -
                            selectors[idx],
         
     | 
| 
       566 
     | 
    
         
            -
                            functionRoles[idx].toInt());
         
     | 
| 
       567 
     | 
    
         
            -
                    }
         
     | 
| 
       568 
     | 
    
         
            -
                
         
     | 
| 
       569 
     | 
    
         
            -
                    for(uint idx = 0; idx < serviceRoles.length; idx++)
         
     | 
| 
       570 
     | 
    
         
            -
                    {
         
     | 
| 
       571 
     | 
    
         
            -
                        uint64 roleInt = serviceRoles[idx].toInt();
         
     | 
| 
       572 
     | 
    
         
            -
             
     | 
| 
       573 
     | 
    
         
            -
                        if(!accessManager.isRoleExists(roleInt)) {
         
     | 
| 
       574 
     | 
    
         
            -
                            accessManager.createRole(roleInt, serviceRoleNames[idx]);
         
     | 
| 
       575 
     | 
    
         
            -
                        }
         
     | 
| 
       576 
     | 
    
         
            -
             
     | 
| 
       577 
     | 
    
         
            -
                        accessManager.grantRole(
         
     | 
| 
       578 
     | 
    
         
            -
                            serviceRoles[idx].toInt(),
         
     | 
| 
       579 
     | 
    
         
            -
                            serviceAddress, 
         
     | 
| 
       580 
     | 
    
         
            -
                            0);
         
     | 
| 
       581 
     | 
    
         
            -
                    }
         
     | 
| 
       582 
     | 
    
         
            -
                }
         
     | 
| 
       583 
     | 
    
         
            -
             
     | 
| 
       584 
     | 
    
         
            -
                // returns true iff a the address passes some simple proxy tests.
         
     | 
| 
      
 470 
     | 
    
         
            +
                /// @dev returns true iff a the address passes some simple proxy tests.
         
     | 
| 
       585 
471 
     | 
    
         
             
                function _isRegistry(address registryAddress) internal view returns (bool) {
         
     | 
| 
       586 
472 
     | 
    
         | 
| 
       587 
473 
     | 
    
         
             
                    // zero address is certainly not registry
         
     | 
| 
         @@ -589,7 +475,7 @@ contract ReleaseManager is 
     | 
|
| 
       589 
475 
     | 
    
         
             
                        return false;
         
     | 
| 
       590 
476 
     | 
    
         
             
                    }
         
     | 
| 
       591 
477 
     | 
    
         
             
                    // TODO try catch and return false in case of revert
         
     | 
| 
       592 
     | 
    
         
            -
                    //  
     | 
| 
      
 478 
     | 
    
         
            +
                    // or just panic
         
     | 
| 
       593 
479 
     | 
    
         
             
                    // check if contract returns a zero nft id for its own address
         
     | 
| 
       594 
480 
     | 
    
         
             
                    if (IRegistry(registryAddress).getNftId(registryAddress).eqz()) {
         
     | 
| 
       595 
481 
     | 
    
         
             
                        return false;
         
     | 
| 
         @@ -598,3 +484,4 @@ contract ReleaseManager is 
     | 
|
| 
       598 
484 
     | 
    
         
             
                    return true;
         
     | 
| 
       599 
485 
     | 
    
         
             
                }
         
     | 
| 
       600 
486 
     | 
    
         
             
            }
         
     | 
| 
      
 487 
     | 
    
         
            +
             
     |