@etherisc/gif-next 0.0.2-e8ea5fe-337 → 0.0.2-e91c6be-472
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 +28 -7
 - package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
 - package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
 - package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
 - package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
 - package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -32
 - package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
 - package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
 - package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
 - package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
 - package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
 - package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
 - package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +162 -327
 - package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
 - package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
 - package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +102 -243
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
 - package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +180 -198
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +131 -107
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
 - package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +92 -81
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
 - package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +52 -0
 - package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
 - package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1429 -0
 - package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
 - package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1979 -0
 - package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
 - package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
 - package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1430 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1177 -0
 - package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1606 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
 - package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2281 -0
 - package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
 - package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstance.sol/IInstance.json +53 -31
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +31 -86
 - package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
 - package/artifacts/contracts/instance/Instance.sol/Instance.json +72 -123
 - package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +165 -138
 - package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +286 -83
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +96 -245
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +99 -87
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
 - package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +197 -116
 - 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/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 +1 -1
 - package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
 - package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
 - package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
 - 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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
 - package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +121 -286
 - package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
 - package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +87 -76
 - package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
 - package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
 - package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
 - package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +97 -238
 - package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
 - package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +107 -159
 - package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +99 -83
 - package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
 - package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +115 -256
 - package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleService.sol/BundleService.json +203 -208
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +135 -107
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
 - package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +72 -15
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
 - package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +107 -107
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
 - package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +272 -185
 - package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
 - package/artifacts/contracts/pool/Pool.sol/Pool.json +115 -267
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
 - package/artifacts/contracts/pool/PoolService.sol/PoolService.json +420 -366
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +128 -88
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
 - package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +87 -144
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +96 -80
 - package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
 - package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +156 -251
 - package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
 - package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
 - package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +202 -200
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +136 -104
 - package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
 - package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +29 -0
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
 - package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +64 -8
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
 - package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +147 -1
 - package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
 - package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +80 -51
 - package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
 - package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +146 -89
 - package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
 - package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +29 -0
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
 - package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +267 -167
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +127 -91
 - package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
 - package/artifacts/contracts/product/PricingService.sol/PricingService.json +170 -219
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +111 -91
 - package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
 - package/artifacts/contracts/product/Product.sol/Product.json +154 -249
 - package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
 - package/artifacts/contracts/product/RiskService.sol/RiskService.json +81 -138
 - package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +93 -77
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
 - package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +309 -33
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
 - package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
 - package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
 - package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
 - package/artifacts/contracts/registry/Registry.sol/Registry.json +515 -94
 - package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +296 -143
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +94 -284
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +91 -75
 - package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
 - package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
 - package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +131 -223
 - package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
 - package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
 - package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
 - package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
 - package/artifacts/contracts/shared/Component.sol/Component.json +76 -213
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +426 -263
 - package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +140 -110
 - package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
 - package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
 - package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
 - package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +111 -0
 - package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponent.sol/IComponent.json +66 -51
 - package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
 - package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +388 -19
 - package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +87 -76
 - package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
 - package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
 - package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
 - package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
 - package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
 - package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
 - package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
 - package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
 - package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
 - 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 +29 -0
 - package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
 - package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
 - package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
 - package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +97 -238
 - package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
 - package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
 - package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
 - package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
 - package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
 - package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
 - package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
 - package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
 - package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
 - package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
 - package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
 - package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
 - package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +388 -35
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
 - package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
 - package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
 - package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
 - package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
 - package/artifacts/contracts/staking/IStaking.sol/IStaking.json +84 -87
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
 - package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
 - package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
 - package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
 - package/artifacts/contracts/staking/Staking.sol/Staking.json +152 -311
 - package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
 - package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +112 -97
 - package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -12
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingService.sol/StakingService.json +87 -165
 - package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +95 -79
 - package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
 - package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +144 -103
 - package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
 - package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
 - package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
 - package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
 - package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
 - package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
 - package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
 - package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
 - 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 +2 -2
 - 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 +2 -2
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
 - package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
 - package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
 - package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
 - package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
 - package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
 - package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
 - package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
 - package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
 - 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 +15 -2
 - package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
 - package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
 - package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
 - package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
 - package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +71 -70
 - package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
 - package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
 - package/contracts/authorization/AccessAdmin.sol +64 -59
 - package/contracts/authorization/Authorization.sol +111 -39
 - package/contracts/authorization/IAccess.sol +1 -0
 - package/contracts/authorization/IAccessAdmin.sol +4 -3
 - package/contracts/authorization/IAuthorization.sol +13 -7
 - package/contracts/authorization/IServiceAuthorization.sol +3 -1
 - package/contracts/authorization/ReleaseAccessManager.sol +38 -0
 - package/contracts/authorization/ServiceAuthorization.sol +26 -10
 - package/contracts/distribution/BasicDistribution.sol +4 -3
 - package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
 - package/contracts/distribution/Distribution.sol +12 -23
 - package/contracts/distribution/DistributionService.sol +78 -60
 - package/contracts/distribution/DistributionServiceManager.sol +6 -6
 - package/contracts/distribution/IDistributionComponent.sol +1 -1
 - package/contracts/distribution/IDistributionService.sol +5 -6
 - package/contracts/examples/fire/DamageLevel.sol +59 -0
 - package/contracts/examples/fire/FirePool.sol +86 -0
 - package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
 - package/contracts/examples/fire/FireProduct.sol +431 -0
 - package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
 - package/contracts/examples/fire/FireUSD.sol +26 -0
 - package/contracts/examples/unpermissioned/SimpleDistribution.sol +58 -0
 - package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
 - package/contracts/examples/unpermissioned/SimplePool.sol +108 -0
 - package/contracts/examples/unpermissioned/SimpleProduct.sol +345 -0
 - package/contracts/instance/IInstance.sol +4 -1
 - package/contracts/instance/IInstanceService.sol +2 -23
 - package/contracts/instance/Instance.sol +22 -19
 - package/contracts/instance/InstanceAdmin.sol +23 -31
 - package/contracts/instance/InstanceAuthorizationV3.sol +9 -19
 - package/contracts/instance/InstanceReader.sol +83 -18
 - package/contracts/instance/InstanceService.sol +35 -88
 - package/contracts/instance/InstanceServiceManager.sol +6 -7
 - package/contracts/instance/module/IComponents.sol +10 -6
 - package/contracts/instance/module/IPolicy.sol +4 -3
 - package/contracts/oracle/BasicOracle.sol +0 -1
 - package/contracts/oracle/IOracleService.sol +2 -1
 - package/contracts/oracle/Oracle.sol +5 -16
 - package/contracts/oracle/OracleService.sol +56 -43
 - package/contracts/oracle/OracleServiceManager.sol +6 -6
 - package/contracts/pool/BasicPool.sol +33 -24
 - package/contracts/pool/BasicPoolAuthorization.sol +12 -2
 - package/contracts/pool/BundleService.sol +96 -49
 - package/contracts/pool/BundleServiceManager.sol +6 -6
 - package/contracts/pool/IBundleService.sol +11 -5
 - package/contracts/pool/IPoolComponent.sol +19 -15
 - package/contracts/pool/IPoolService.sol +42 -30
 - package/contracts/pool/Pool.sol +142 -123
 - package/contracts/pool/PoolService.sol +254 -143
 - package/contracts/pool/PoolServiceManager.sol +4 -4
 - package/contracts/product/ApplicationService.sol +20 -9
 - package/contracts/product/ApplicationServiceManager.sol +4 -4
 - package/contracts/product/BasicProduct.sol +8 -12
 - package/contracts/product/BasicProductAuthorization.sol +0 -1
 - package/contracts/product/ClaimService.sol +235 -108
 - package/contracts/product/ClaimServiceManager.sol +4 -4
 - package/contracts/product/IClaimService.sol +3 -2
 - package/contracts/product/IPolicyService.sol +13 -4
 - package/contracts/product/IPricingService.sol +9 -9
 - package/contracts/product/IProductComponent.sol +23 -3
 - package/contracts/product/PolicyService.sol +169 -47
 - package/contracts/product/PolicyServiceManager.sol +4 -4
 - package/contracts/product/PricingService.sol +12 -13
 - package/contracts/product/PricingServiceManager.sol +3 -3
 - package/contracts/product/Product.sol +77 -70
 - package/contracts/product/RiskService.sol +4 -5
 - package/contracts/product/RiskServiceManager.sol +4 -4
 - package/contracts/registry/ChainNft.sol +68 -38
 - package/contracts/registry/IRegistry.sol +56 -17
 - package/contracts/registry/IRegistryService.sol +5 -12
 - package/contracts/registry/ITransferInterceptor.sol +1 -2
 - package/contracts/registry/Registry.sol +349 -200
 - package/contracts/registry/RegistryAdmin.sol +146 -58
 - package/contracts/registry/RegistryService.sol +35 -46
 - package/contracts/registry/RegistryServiceManager.sol +2 -2
 - package/contracts/registry/ReleaseLifecycle.sol +6 -3
 - package/contracts/registry/ReleaseRegistry.sol +204 -204
 - package/contracts/registry/ServiceAuthorizationV3.sol +24 -20
 - package/contracts/shared/Component.sol +62 -101
 - package/contracts/shared/ComponentService.sol +291 -153
 - package/contracts/shared/ComponentServiceManager.sol +8 -5
 - package/contracts/shared/ComponentVerifyingService.sol +27 -16
 - package/contracts/shared/ContractLib.sol +54 -0
 - package/contracts/shared/IComponent.sol +10 -13
 - package/contracts/shared/IComponentService.sol +38 -16
 - package/contracts/shared/IInstanceLinkedComponent.sol +3 -11
 - package/contracts/shared/ILifecycle.sol +3 -1
 - package/contracts/shared/INftOwnable.sol +2 -0
 - package/contracts/shared/IPolicyHolder.sol +12 -22
 - package/contracts/shared/IRegisterable.sol +11 -0
 - package/contracts/shared/InitializableERC165.sol +2 -2
 - package/contracts/shared/InstanceLinkedComponent.sol +70 -37
 - package/contracts/shared/KeyValueStore.sol +1 -1
 - package/contracts/shared/Lifecycle.sol +15 -4
 - package/contracts/shared/NftOwnable.sol +26 -6
 - package/contracts/shared/PolicyHolder.sol +15 -52
 - package/contracts/shared/Registerable.sol +19 -11
 - package/contracts/shared/RegistryLinked.sol +9 -14
 - package/contracts/shared/Service.sol +20 -18
 - package/contracts/shared/TokenHandler.sol +324 -66
 - package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
 - package/contracts/staking/IStaking.sol +9 -4
 - package/contracts/staking/IStakingService.sol +0 -3
 - package/contracts/staking/Staking.sol +34 -27
 - package/contracts/staking/StakingManager.sol +8 -6
 - package/contracts/staking/StakingReader.sol +12 -5
 - package/contracts/staking/StakingService.sol +71 -25
 - package/contracts/staking/StakingServiceManager.sol +2 -2
 - package/contracts/type/Amount.sol +15 -0
 - package/contracts/type/ClaimId.sol +6 -1
 - package/contracts/type/NftId.sol +1 -0
 - package/contracts/type/ObjectType.sol +1 -0
 - package/contracts/type/PayoutId.sol +10 -10
 - package/contracts/type/RiskId.sol +16 -2
 - package/contracts/type/RoleId.sol +0 -12
 - package/contracts/type/StateId.sol +14 -1
 - package/contracts/type/UFixed.sol +4 -0
 - package/contracts/upgradeability/ProxyManager.sol +68 -34
 - package/contracts/upgradeability/Versionable.sol +2 -2
 - package/package.json +4 -3
 - package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
 - package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
 - package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
 - package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
 - package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
 - package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
 - package/contracts/authorization/IModuleAuthorization.sol +0 -21
 - package/contracts/authorization/ModuleAuthorization.sol +0 -78
 - package/contracts/shared/InitializableCustom.sol +0 -177
 
| 
         @@ -1,45 +1,34 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            // SPDX-License-Identifier: Apache-2.0
         
     | 
| 
       2 
2 
     | 
    
         
             
            pragma solidity ^0.8.20;
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
         
     | 
| 
       5 
4 
     | 
    
         
             
            import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
         
     | 
| 
       6 
     | 
    
         
            -
            import {IAccessManager} from "@openzeppelin/contracts/access/manager/IAccessManager.sol";
         
     | 
| 
       7 
     | 
    
         
            -
            import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
         
     | 
| 
       8 
5 
     | 
    
         
             
            import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
         
     | 
| 
       9 
     | 
    
         
            -
            import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
         
     | 
| 
       10 
6 
     | 
    
         | 
| 
      
 7 
     | 
    
         
            +
            import {ContractLib} from "../shared/ContractLib.sol";
         
     | 
| 
       11 
8 
     | 
    
         
             
            import {NftId} from "../type/NftId.sol";
         
     | 
| 
       12 
     | 
    
         
            -
            import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
         
     | 
| 
       13 
9 
     | 
    
         
             
            import {ObjectType, ObjectTypeLib, POOL, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
         
     | 
| 
       14 
     | 
    
         
            -
            import { 
     | 
| 
       15 
     | 
    
         
            -
            import { 
     | 
| 
       16 
     | 
    
         
            -
            import { 
     | 
| 
       17 
     | 
    
         
            -
            import { 
     | 
| 
       18 
     | 
    
         
            -
            import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
         
     | 
| 
      
 10 
     | 
    
         
            +
            import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
         
     | 
| 
      
 11 
     | 
    
         
            +
            import {Seconds} from "../type/Seconds.sol";
         
     | 
| 
      
 12 
     | 
    
         
            +
            import {StateId, SCHEDULED, DEPLOYING, DEPLOYED, SKIPPED, ACTIVE, PAUSED} from "../type/StateId.sol";
         
     | 
| 
      
 13 
     | 
    
         
            +
            import {VersionPart, VersionPartLib} from "../type/Version.sol";
         
     | 
| 
       19 
14 
     | 
    
         | 
| 
       20 
15 
     | 
    
         
             
            import {IService} from "../shared/IService.sol";
         
     | 
| 
       21 
     | 
    
         
            -
            import {ILifecycle} from "../shared/ILifecycle.sol";
         
     | 
| 
       22 
     | 
    
         
            -
            import {INftOwnable} from "../shared/INftOwnable.sol";
         
     | 
| 
       23 
16 
     | 
    
         
             
            import {IRegisterable} from "../shared/IRegisterable.sol";
         
     | 
| 
       24 
17 
     | 
    
         | 
| 
       25 
18 
     | 
    
         
             
            import {IRegistry} from "./IRegistry.sol";
         
     | 
| 
       26 
19 
     | 
    
         
             
            import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
         
     | 
| 
       27 
     | 
    
         
            -
            import {IRegistryService} from "./IRegistryService.sol";
         
     | 
| 
       28 
20 
     | 
    
         
             
            import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol";
         
     | 
| 
       29 
     | 
    
         
            -
            import {IAccessAdmin} from "../authorization/IAccessAdmin.sol";
         
     | 
| 
       30 
21 
     | 
    
         
             
            import {RegistryAdmin} from "./RegistryAdmin.sol";
         
     | 
| 
       31 
22 
     | 
    
         
             
            import {Registry} from "./Registry.sol";
         
     | 
| 
       32 
     | 
    
         
            -
            import {TokenRegistry} from "./TokenRegistry.sol";
         
     | 
| 
       33 
23 
     | 
    
         
             
            import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
         
     | 
| 
       34 
24 
     | 
    
         | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
       35 
26 
     | 
    
         
             
            contract ReleaseRegistry is 
         
     | 
| 
       36 
27 
     | 
    
         
             
                AccessManaged,
         
     | 
| 
       37 
28 
     | 
    
         
             
                ReleaseLifecycle, 
         
     | 
| 
       38 
29 
     | 
    
         
             
                IRegistryLinked
         
     | 
| 
       39 
30 
     | 
    
         
             
            {
         
     | 
| 
       40 
     | 
    
         
            -
                 
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                uint256 public constant INITIAL_GIF_VERSION = 3;
         
     | 
| 
      
 31 
     | 
    
         
            +
                uint256 public constant INITIAL_GIF_VERSION = 3;// first active version  
         
     | 
| 
       43 
32 
     | 
    
         | 
| 
       44 
33 
     | 
    
         
             
                event LogReleaseCreation(VersionPart version, bytes32 salt); 
         
     | 
| 
       45 
34 
     | 
    
         
             
                event LogReleaseActivation(VersionPart version);
         
     | 
| 
         @@ -49,35 +38,22 @@ contract ReleaseRegistry is 
     | 
|
| 
       49 
38 
     | 
    
         
             
                // constructor
         
     | 
| 
       50 
39 
     | 
    
         
             
                error ErrorReleaseRegistryNotRegistry(Registry registry);
         
     | 
| 
       51 
40 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                //  
     | 
| 
       53 
     | 
    
         
            -
                error  
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                 
     | 
| 
       56 
     | 
    
         
            -
                error ErrorReleaseRegistryReleasePreparationDisallowed(VersionPart version, StateId currentStateId);
         
     | 
| 
       57 
     | 
    
         
            -
                error ErrorReleaseRegistryReleaseAlreadyPrepared(VersionPart version, StateId currentStateId);
         
     | 
| 
       58 
     | 
    
         
            -
                error ErrorReleaseRegistryVersionMismatch(VersionPart expected, VersionPart actual);
         
     | 
| 
       59 
     | 
    
         
            -
                error ErrorReleaseRegistryNoDomains(VersionPart version);
         
     | 
| 
      
 41 
     | 
    
         
            +
                // _verifyServiceAuthorization
         
     | 
| 
      
 42 
     | 
    
         
            +
                error ErrorReleaseRegistryNotServiceAuth(address notAuth);
         
     | 
| 
      
 43 
     | 
    
         
            +
                error ErrorReleaseRegistryServiceAuthVersionMismatch(IServiceAuthorization auth, VersionPart expected, VersionPart actual);
         
     | 
| 
      
 44 
     | 
    
         
            +
                error ErrorReleaseRegistryServiceAuthDomainsZero(IServiceAuthorization auth, VersionPart version);
         
     | 
| 
       60 
45 
     | 
    
         | 
| 
       61 
46 
     | 
    
         
             
                // registerService
         
     | 
| 
       62 
     | 
    
         
            -
                error ErrorReleaseRegistryNoServiceRegistrationExpected();
         
     | 
| 
       63 
     | 
    
         
            -
                error ErrorReleaseRegistryServiceRegistrationDisallowed(StateId currentStateId);
         
     | 
| 
       64 
     | 
    
         
            -
                error ErrorReleaseRegistryServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
         
     | 
| 
       65 
     | 
    
         
            -
                error ErrorReleaseRegistryNotService(address notService);
         
     | 
| 
       66 
47 
     | 
    
         
             
                error ErrorReleaseRegistryServiceAddressMismatch(address expected, address actual);
         
     | 
| 
       67 
48 
     | 
    
         | 
| 
       68 
49 
     | 
    
         
             
                // activateNextRelease
         
     | 
| 
       69 
     | 
    
         
            -
                error  
     | 
| 
       70 
     | 
    
         
            -
                error ErrorReleaseRegistryReleaseNotCreated(VersionPart releaseVersion);
         
     | 
| 
       71 
     | 
    
         
            -
                error ErrorReleaseRegistryReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
         
     | 
| 
       72 
     | 
    
         
            -
                error ErrorReleaseRegistryReleaseAlreadyActivated(VersionPart releaseVersion);
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                // disableRelease
         
     | 
| 
       75 
     | 
    
         
            -
                error ErrorReleaseRegistryReleaseNotActivated(VersionPart releaseVersion);
         
     | 
| 
       76 
     | 
    
         
            -
                error ErrorReleaseRegistryReleaseAlreadyDisabled(VersionPart releaseVersion);
         
     | 
| 
      
 50 
     | 
    
         
            +
                error ErrorReleaseRegistryRegistryServiceMissing(VersionPart releaseVersion);
         
     | 
| 
       77 
51 
     | 
    
         | 
| 
       78 
52 
     | 
    
         
             
                // _verifyService
         
     | 
| 
       79 
     | 
    
         
            -
                error  
     | 
| 
       80 
     | 
    
         
            -
                error  
     | 
| 
      
 53 
     | 
    
         
            +
                error ErrorReleaseRegistryNotService(address notService);
         
     | 
| 
      
 54 
     | 
    
         
            +
                error ErrorReleaseRegistryServiceAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
         
     | 
| 
      
 55 
     | 
    
         
            +
                error ErrorReleaseRegistryServiceVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
         
     | 
| 
      
 56 
     | 
    
         
            +
                error ErrorReleaseRegistryServiceDomainMismatch(IService service, ObjectType expectedDomain, ObjectType actualDomain);
         
     | 
| 
       81 
57 
     | 
    
         | 
| 
       82 
58 
     | 
    
         
             
                // _verifyServiceInfo
         
     | 
| 
       83 
59 
     | 
    
         
             
                error ErrorReleaseRegistryServiceInfoAddressInvalid(IService service, address expected);
         
     | 
| 
         @@ -87,23 +63,13 @@ contract ReleaseRegistry is 
     | 
|
| 
       87 
63 
     | 
    
         
             
                error ErrorReleaseRegistryServiceSelfRegistration(IService service);
         
     | 
| 
       88 
64 
     | 
    
         
             
                error ErrorReleaseRegistryServiceOwnerRegistered(IService service, address owner);
         
     | 
| 
       89 
65 
     | 
    
         | 
| 
       90 
     | 
    
         
            -
                Seconds public constant MIN_DISABLE_DELAY = Seconds.wrap(60 * 24 * 365); // 1 year
         
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
66 
     | 
    
         
             
                RegistryAdmin public immutable _admin;
         
     | 
| 
       93 
67 
     | 
    
         
             
                Registry public immutable _registry;
         
     | 
| 
       94 
     | 
    
         
            -
                IRegisterable private _staking;
         
     | 
| 
       95 
     | 
    
         
            -
                address private _stakingOwner;
         
     | 
| 
       96 
68 
     | 
    
         | 
| 
       97 
69 
     | 
    
         
             
                mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
         
     | 
| 
       98 
     | 
    
         
            -
                 
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
                // TODO check where/why this is used
         
     | 
| 
       101 
     | 
    
         
            -
                mapping(address registryService => VersionPart version) _releaseVersionByAddress;
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
                VersionPart private _initial;// first active version    
         
     | 
| 
      
 70 
     | 
    
         
            +
                VersionPart [] internal _release; // array of all created releases
         
     | 
| 
       104 
71 
     | 
    
         
             
                VersionPart internal _latest; // latest active version
         
     | 
| 
       105 
72 
     | 
    
         
             
                VersionPart internal _next; // version to create and activate 
         
     | 
| 
       106 
     | 
    
         
            -
                mapping(VersionPart verson => StateId releaseState) private _state;
         
     | 
| 
       107 
73 
     | 
    
         | 
| 
       108 
74 
     | 
    
         
             
                uint256 internal _registeredServices;
         
     | 
| 
       109 
75 
     | 
    
         
             
                uint256 internal _servicesToRegister;
         
     | 
| 
         @@ -111,8 +77,7 @@ contract ReleaseRegistry is 
     | 
|
| 
       111 
77 
     | 
    
         
             
                constructor(Registry registry)
         
     | 
| 
       112 
78 
     | 
    
         
             
                    AccessManaged(msg.sender)
         
     | 
| 
       113 
79 
     | 
    
         
             
                {
         
     | 
| 
       114 
     | 
    
         
            -
                     
     | 
| 
       115 
     | 
    
         
            -
                    if(!_isRegistry(address(registry))) {
         
     | 
| 
      
 80 
     | 
    
         
            +
                    if (!ContractLib.isRegistry(address(registry))) {
         
     | 
| 
       116 
81 
     | 
    
         
             
                        revert ErrorReleaseRegistryNotRegistry(registry);
         
     | 
| 
       117 
82 
     | 
    
         
             
                    }
         
     | 
| 
       118 
83 
     | 
    
         | 
| 
         @@ -121,21 +86,30 @@ contract ReleaseRegistry is 
     | 
|
| 
       121 
86 
     | 
    
         
             
                    _registry = registry;
         
     | 
| 
       122 
87 
     | 
    
         
             
                    _admin = RegistryAdmin(_registry.getRegistryAdminAddress());
         
     | 
| 
       123 
88 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
                    _initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
         
     | 
| 
       125 
89 
     | 
    
         
             
                    _next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
         
     | 
| 
       126 
90 
     | 
    
         
             
                }
         
     | 
| 
       127 
91 
     | 
    
         | 
| 
       128 
     | 
    
         
            -
                /// @dev  
     | 
| 
      
 92 
     | 
    
         
            +
                /// @dev sets previous release into SKIPPED state if it was created but not activated
         
     | 
| 
       129 
93 
     | 
    
         
             
                /// sets next release into state SCHEDULED
         
     | 
| 
       130 
94 
     | 
    
         
             
                function createNextRelease()
         
     | 
| 
       131 
95 
     | 
    
         
             
                    external
         
     | 
| 
       132 
96 
     | 
    
         
             
                    restricted() // GIF_ADMIN_ROLE
         
     | 
| 
       133 
97 
     | 
    
         
             
                    returns(VersionPart)
         
     | 
| 
       134 
98 
     | 
    
         
             
                {
         
     | 
| 
       135 
     | 
    
         
            -
                     
     | 
| 
      
 99 
     | 
    
         
            +
                    VersionPart version = _next;
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                    if(isValidTransition(RELEASE(), _releaseInfo[version].state, SKIPPED())) {
         
     | 
| 
      
 102 
     | 
    
         
            +
                        _releaseInfo[version].state = SKIPPED();
         
     | 
| 
      
 103 
     | 
    
         
            +
                    }
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                    version = VersionPartLib.toVersionPart(version.toInt() + 1);
         
     | 
| 
      
 106 
     | 
    
         
            +
                    _release.push(version);
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                    _next = version;
         
     | 
| 
      
 109 
     | 
    
         
            +
                    _releaseInfo[version].version = version;
         
     | 
| 
      
 110 
     | 
    
         
            +
                    _releaseInfo[version].state = getInitialState(RELEASE());
         
     | 
| 
       136 
111 
     | 
    
         
             
                    _servicesToRegister = 0;
         
     | 
| 
       137 
112 
     | 
    
         
             
                    _registeredServices = 0;
         
     | 
| 
       138 
     | 
    
         
            -
                    _state[_next] = getInitialState(RELEASE());
         
     | 
| 
       139 
113 
     | 
    
         | 
| 
       140 
114 
     | 
    
         
             
                    return _next;
         
     | 
| 
       141 
115 
     | 
    
         
             
                }
         
     | 
| 
         @@ -147,182 +121,162 @@ contract ReleaseRegistry is 
     | 
|
| 
       147 
121 
     | 
    
         
             
                    external
         
     | 
| 
       148 
122 
     | 
    
         
             
                    restricted() // GIF_MANAGER_ROLE
         
     | 
| 
       149 
123 
     | 
    
         
             
                    returns(
         
     | 
| 
       150 
     | 
    
         
            -
                        address  
     | 
| 
       151 
     | 
    
         
            -
                        VersionPart  
     | 
| 
      
 124 
     | 
    
         
            +
                        address releaseAuthority, 
         
     | 
| 
      
 125 
     | 
    
         
            +
                        VersionPart releaseVersion, 
         
     | 
| 
       152 
126 
     | 
    
         
             
                        bytes32 releaseSalt
         
     | 
| 
       153 
127 
     | 
    
         
             
                    )
         
     | 
| 
       154 
128 
     | 
    
         
             
                {
         
     | 
| 
       155 
     | 
    
         
            -
                     
     | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
      
 129 
     | 
    
         
            +
                    releaseVersion = _next;
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                    // release can transition into DEPLOYING state
         
     | 
| 
      
 132 
     | 
    
         
            +
                    checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), SCHEDULED(), DEPLOYING());
         
     | 
| 
       157 
133 
     | 
    
         | 
| 
      
 134 
     | 
    
         
            +
                    uint256 serviceDomainsCount = _verifyServiceAuthorization(serviceAuthorization, releaseVersion, salt);
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                    releaseAuthority = _admin.authority();
         
     | 
| 
      
 137 
     | 
    
         
            +
                    releaseSalt = salt;
         
     | 
| 
       158 
138 
     | 
    
         
             
                    // ensures unique salt
         
     | 
| 
       159 
139 
     | 
    
         
             
                    // TODO CreateX have clones capability also
         
     | 
| 
       160 
140 
     | 
    
         
             
                    // what would releaseSalt look like if used with CreateX in pemissioned mode?
         
     | 
| 
       161 
     | 
    
         
            -
                    releaseSalt = keccak256(
         
     | 
| 
      
 141 
     | 
    
         
            +
                    /*releaseSalt = keccak256(
         
     | 
| 
       162 
142 
     | 
    
         
             
                        bytes.concat(
         
     | 
| 
       163 
     | 
    
         
            -
                            bytes32( 
     | 
| 
       164 
     | 
    
         
            -
                            salt)) 
     | 
| 
       165 
     | 
    
         
            -
             
     | 
| 
       166 
     | 
    
         
            -
                    // verify release in state SCHEDULED
         
     | 
| 
       167 
     | 
    
         
            -
                    if (!isValidTransition(RELEASE(), _state[version], DEPLOYING())) {
         
     | 
| 
       168 
     | 
    
         
            -
                        revert ErrorReleaseRegistryReleasePreparationDisallowed(version, _state[version]);
         
     | 
| 
       169 
     | 
    
         
            -
                    }
         
     | 
| 
       170 
     | 
    
         
            -
             
     | 
| 
       171 
     | 
    
         
            -
                    _state[version] = DEPLOYING();
         
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
       173 
     | 
    
         
            -
                    // verify authorizaion contract release matches with expected version
         
     | 
| 
       174 
     | 
    
         
            -
                    VersionPart releaseVersion = serviceAuthorization.getRelease();
         
     | 
| 
       175 
     | 
    
         
            -
                    if (releaseVersion != version) {
         
     | 
| 
       176 
     | 
    
         
            -
                        revert ErrorReleaseRegistryVersionMismatch(version, releaseVersion);
         
     | 
| 
       177 
     | 
    
         
            -
                    }
         
     | 
| 
       178 
     | 
    
         
            -
             
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
       180 
     | 
    
         
            -
                    // sanity check to ensure service domain list is not empty
         
     | 
| 
       181 
     | 
    
         
            -
                    uint256 serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
         
     | 
| 
       182 
     | 
    
         
            -
                    if (serviceDomainsCount == 0) {
         
     | 
| 
       183 
     | 
    
         
            -
                        revert ErrorReleaseRegistryNoDomains(version);
         
     | 
| 
       184 
     | 
    
         
            -
                    }
         
     | 
| 
       185 
     | 
    
         
            -
             
     | 
| 
       186 
     | 
    
         
            -
                    // verify prepareNextRelease is only called once per release
         
     | 
| 
       187 
     | 
    
         
            -
                    if(_servicesToRegister > 0) {
         
     | 
| 
       188 
     | 
    
         
            -
                        revert ErrorReleaseRegistryReleaseAlreadyPrepared(version, _state[version]);
         
     | 
| 
       189 
     | 
    
         
            -
                    }
         
     | 
| 
      
 143 
     | 
    
         
            +
                            bytes32(releaseVersion.toInt()),
         
     | 
| 
      
 144 
     | 
    
         
            +
                            salt));*/
         
     | 
| 
       190 
145 
     | 
    
         | 
| 
       191 
146 
     | 
    
         
             
                    _servicesToRegister = serviceDomainsCount;
         
     | 
| 
       192 
     | 
    
         
            -
                     
     | 
| 
      
 147 
     | 
    
         
            +
                    _releaseInfo[releaseVersion].state = DEPLOYING();
         
     | 
| 
      
 148 
     | 
    
         
            +
                    _releaseInfo[releaseVersion].salt = releaseSalt;
         
     | 
| 
      
 149 
     | 
    
         
            +
                    // TODO allow for the same serviceAuthorization address to be used for multiple releases?
         
     | 
| 
      
 150 
     | 
    
         
            +
                    _releaseInfo[releaseVersion].auth = serviceAuthorization;
         
     | 
| 
      
 151 
     | 
    
         
            +
                    //_releaseInfo[releaseVersion].authority = releaseAuthority;
         
     | 
| 
       193 
152 
     | 
    
         | 
| 
       194 
     | 
    
         
            -
                    emit LogReleaseCreation( 
     | 
| 
      
 153 
     | 
    
         
            +
                    emit LogReleaseCreation(releaseVersion, releaseSalt);
         
     | 
| 
       195 
154 
     | 
    
         
             
                }
         
     | 
| 
       196 
155 
     | 
    
         | 
| 
       197 
     | 
    
         
            -
                // TODO this function can have 0 args -> use stored addresses from prepareNextRelease()
         
     | 
| 
       198 
156 
     | 
    
         
             
                function registerService(IService service) 
         
     | 
| 
       199 
157 
     | 
    
         
             
                    external
         
     | 
| 
       200 
158 
     | 
    
         
             
                    restricted // GIF_MANAGER_ROLE
         
     | 
| 
       201 
159 
     | 
    
         
             
                    returns(NftId nftId)
         
     | 
| 
       202 
160 
     | 
    
         
             
                {
         
     | 
| 
       203 
161 
     | 
    
         
             
                    VersionPart releaseVersion = _next;
         
     | 
| 
       204 
     | 
    
         
            -
                    StateId state = _state[releaseVersion];
         
     | 
| 
       205 
162 
     | 
    
         | 
| 
       206 
     | 
    
         
            -
                    //  
     | 
| 
       207 
     | 
    
         
            -
                     
     | 
| 
       208 
     | 
    
         
            -
                        // TOOD name must represent failed state transition
         
     | 
| 
       209 
     | 
    
         
            -
                        revert ErrorReleaseRegistryServiceRegistrationDisallowed(state);
         
     | 
| 
       210 
     | 
    
         
            -
                    }
         
     | 
| 
      
 163 
     | 
    
         
            +
                    // release can transition to DEPLOYED state
         
     | 
| 
      
 164 
     | 
    
         
            +
                    checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), DEPLOYING(), DEPLOYED());
         
     | 
| 
       211 
165 
     | 
    
         | 
| 
       212 
     | 
    
         
            -
                     
     | 
| 
      
 166 
     | 
    
         
            +
                    address releaseAuthority = _admin.authority();
         
     | 
| 
      
 167 
     | 
    
         
            +
                    IServiceAuthorization serviceAuth = _releaseInfo[releaseVersion].auth;
         
     | 
| 
      
 168 
     | 
    
         
            +
                    ObjectType expectedDomain = serviceAuth.getServiceDomain(_registeredServices);
         
     | 
| 
       213 
169 
     | 
    
         | 
| 
       214 
     | 
    
         
            -
                    //  
     | 
| 
       215 
     | 
    
         
            -
                    if (_servicesToRegister == _registeredServices) {
         
     | 
| 
       216 
     | 
    
         
            -
                        revert ErrorReleaseRegistryNoServiceRegistrationExpected();
         
     | 
| 
       217 
     | 
    
         
            -
                    }
         
     | 
| 
       218 
     | 
    
         
            -
             
     | 
| 
       219 
     | 
    
         
            -
                    // service can work with release manager
         
     | 
| 
      
 170 
     | 
    
         
            +
                    // service can work with release registry and release version
         
     | 
| 
       220 
171 
     | 
    
         
             
                    (
         
     | 
| 
       221 
172 
     | 
    
         
             
                        IRegistry.ObjectInfo memory info,
         
     | 
| 
       222 
173 
     | 
    
         
             
                        ObjectType serviceDomain,
         
     | 
| 
       223 
174 
     | 
    
         
             
                        VersionPart serviceVersion
         
     | 
| 
       224 
     | 
    
         
            -
             
     | 
| 
      
 175 
     | 
    
         
            +
                        //,string memory serviceName
         
     | 
| 
      
 176 
     | 
    
         
            +
                    ) = _verifyService(
         
     | 
| 
      
 177 
     | 
    
         
            +
                        service, 
         
     | 
| 
      
 178 
     | 
    
         
            +
                        releaseAuthority, 
         
     | 
| 
      
 179 
     | 
    
         
            +
                        releaseVersion, 
         
     | 
| 
      
 180 
     | 
    
         
            +
                        expectedDomain
         
     | 
| 
      
 181 
     | 
    
         
            +
                    );
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
                    //_releaseInfo[releaseVersion].addresses.push(address(service)); // TODO get this info from auth contract?
         
     | 
| 
      
 184 
     | 
    
         
            +
                    //_releaseInfo[releaseVersion].domains.push(serviceDomain);
         
     | 
| 
      
 185 
     | 
    
         
            +
                    //_releaseInfo[releaseVersion].names.push(serviceName); // TODO if needed read in _verifyService()
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
                    _registeredServices++; // TODO use releaseInfo.someArray.length instead of _registeredServices
         
     | 
| 
       225 
188 
     | 
    
         | 
| 
       226 
     | 
    
         
            -
                    //  
     | 
| 
       227 
     | 
    
         
            -
                     
     | 
| 
       228 
     | 
    
         
            -
             
     | 
| 
       229 
     | 
    
         
            -
                        revert ErrorReleaseRegistryServiceDomainMismatch(expectedDomain, serviceDomain);
         
     | 
| 
      
 189 
     | 
    
         
            +
                    // release fully deployed
         
     | 
| 
      
 190 
     | 
    
         
            +
                    if(_servicesToRegister == _registeredServices) {
         
     | 
| 
      
 191 
     | 
    
         
            +
                        _releaseInfo[releaseVersion].state = DEPLOYED();
         
     | 
| 
       230 
192 
     | 
    
         
             
                    }
         
     | 
| 
       231 
193 
     | 
    
         | 
| 
       232 
     | 
    
         
            -
                    //  
     | 
| 
       233 
     | 
    
         
            -
                     
     | 
| 
       234 
     | 
    
         
            -
                    service.linkToRegisteredNftId();
         
     | 
| 
       235 
     | 
    
         
            -
                    _registeredServices++;
         
     | 
| 
      
 194 
     | 
    
         
            +
                    // TODO: service address matches defined in release auth (precalculated one)
         
     | 
| 
      
 195 
     | 
    
         
            +
                    // revert ErrorReleaseRegistryServiceAddressMismatch()
         
     | 
| 
       236 
196 
     | 
    
         | 
| 
       237 
197 
     | 
    
         
             
                    // setup service authorization
         
     | 
| 
       238 
198 
     | 
    
         
             
                    _admin.authorizeService(
         
     | 
| 
       239 
     | 
    
         
            -
                         
     | 
| 
       240 
     | 
    
         
            -
                        service 
     | 
| 
       241 
     | 
    
         
            -
             
     | 
| 
       242 
     | 
    
         
            -
             
     | 
| 
       243 
     | 
    
         
            -
                    // special roles for registry/staking/pool service
         
     | 
| 
       244 
     | 
    
         
            -
                    if (serviceDomain == STAKING() || serviceDomain == POOL()) {
         
     | 
| 
       245 
     | 
    
         
            -
                        // TODO rename to grantServiceDomainRole()
         
     | 
| 
       246 
     | 
    
         
            -
                        _admin.grantServiceRoleForAllVersions(service, serviceDomain);
         
     | 
| 
       247 
     | 
    
         
            -
                    }
         
     | 
| 
       248 
     | 
    
         
            -
                }
         
     | 
| 
       249 
     | 
    
         
            -
             
     | 
| 
      
 199 
     | 
    
         
            +
                        serviceAuth, 
         
     | 
| 
      
 200 
     | 
    
         
            +
                        service,
         
     | 
| 
      
 201 
     | 
    
         
            +
                        serviceDomain,
         
     | 
| 
      
 202 
     | 
    
         
            +
                        releaseVersion);
         
     | 
| 
       250 
203 
     | 
    
         | 
| 
      
 204 
     | 
    
         
            +
                    // register service with registry
         
     | 
| 
      
 205 
     | 
    
         
            +
                    nftId = _registry.registerService(info, serviceVersion, serviceDomain);
         
     | 
| 
      
 206 
     | 
    
         
            +
                    service.linkToRegisteredNftId();
         
     | 
| 
      
 207 
     | 
    
         
            +
                }
         
     | 
| 
      
 208 
     | 
    
         
            +
                // TODO return activated version
         
     | 
| 
       251 
209 
     | 
    
         
             
                function activateNextRelease() 
         
     | 
| 
       252 
210 
     | 
    
         
             
                    external 
         
     | 
| 
       253 
211 
     | 
    
         
             
                    restricted // GIF_ADMIN_ROLE
         
     | 
| 
       254 
212 
     | 
    
         
             
                {
         
     | 
| 
       255 
213 
     | 
    
         
             
                    VersionPart version = _next;
         
     | 
| 
       256 
     | 
    
         
            -
                    StateId state = _state[version];
         
     | 
| 
       257 
     | 
    
         
            -
                    StateId newState = ACTIVE();
         
     | 
| 
       258 
214 
     | 
    
         | 
| 
       259 
     | 
    
         
            -
                    //  
     | 
| 
       260 
     | 
    
         
            -
                     
     | 
| 
       261 
     | 
    
         
            -
                        revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
         
     | 
| 
       262 
     | 
    
         
            -
                    }
         
     | 
| 
      
 215 
     | 
    
         
            +
                    // release can transition to ACTIVE state
         
     | 
| 
      
 216 
     | 
    
         
            +
                    checkTransition(_releaseInfo[version].state, RELEASE(), DEPLOYED(), ACTIVE());
         
     | 
| 
       263 
217 
     | 
    
         | 
| 
       264 
     | 
    
         
            -
                     
     | 
| 
       265 
     | 
    
         
            -
                     
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
       267 
     | 
    
         
            -
                    }
         
     | 
| 
      
 218 
     | 
    
         
            +
                    _latest = version;
         
     | 
| 
      
 219 
     | 
    
         
            +
                    _releaseInfo[version].state = ACTIVE();
         
     | 
| 
      
 220 
     | 
    
         
            +
                    _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
         
     | 
| 
       268 
221 
     | 
    
         | 
| 
       269 
     | 
    
         
            -
                    //  
     | 
| 
      
 222 
     | 
    
         
            +
                    // grant special roles for registry/staking/pool services
         
     | 
| 
      
 223 
     | 
    
         
            +
                    // this will enable access to core contracts functions
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
                    // registry service MUST be registered for each release
         
     | 
| 
       270 
226 
     | 
    
         
             
                    address service = _registry.getServiceAddress(REGISTRY(), version);
         
     | 
| 
       271 
227 
     | 
    
         
             
                    if(service == address(0)) {
         
     | 
| 
       272 
     | 
    
         
            -
                        revert  
     | 
| 
      
 228 
     | 
    
         
            +
                        revert ErrorReleaseRegistryRegistryServiceMissing(version);
         
     | 
| 
       273 
229 
     | 
    
         
             
                    }
         
     | 
| 
       274 
230 
     | 
    
         | 
| 
       275 
     | 
    
         
            -
                     
     | 
| 
       276 
     | 
    
         
            -
                    _state[version] = newState;
         
     | 
| 
      
 231 
     | 
    
         
            +
                    _admin.grantServiceRoleForAllVersions(IService(service), REGISTRY());
         
     | 
| 
       277 
232 
     | 
    
         | 
| 
       278 
     | 
    
         
            -
                     
     | 
| 
       279 
     | 
    
         
            -
                     
     | 
| 
      
 233 
     | 
    
         
            +
                    service = _registry.getServiceAddress(STAKING(), version);
         
     | 
| 
      
 234 
     | 
    
         
            +
                    if(service != address(0)) {
         
     | 
| 
      
 235 
     | 
    
         
            +
                        _admin.grantServiceRoleForAllVersions(IService(service), STAKING());
         
     | 
| 
      
 236 
     | 
    
         
            +
                    }
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
      
 238 
     | 
    
         
            +
                    service = _registry.getServiceAddress(POOL(), version);
         
     | 
| 
      
 239 
     | 
    
         
            +
                    if(service != address(0)) {
         
     | 
| 
      
 240 
     | 
    
         
            +
                        _admin.grantServiceRoleForAllVersions(IService(service), POOL());
         
     | 
| 
      
 241 
     | 
    
         
            +
                    }
         
     | 
| 
      
 242 
     | 
    
         
            +
             
     | 
| 
      
 243 
     | 
    
         
            +
                    // TODO may run out of gas
         
     | 
| 
      
 244 
     | 
    
         
            +
                    // TODO test how many service can be locked in one transaction
         
     | 
| 
      
 245 
     | 
    
         
            +
                    // -> add to docs + each release must test for this -> add to release version tests (in test call with some gas limit?)
         
     | 
| 
      
 246 
     | 
    
         
            +
                    _setReleaseLocked(version, false);
         
     | 
| 
       280 
247 
     | 
    
         | 
| 
       281 
248 
     | 
    
         
             
                    emit LogReleaseActivation(version);
         
     | 
| 
       282 
249 
     | 
    
         
             
                }
         
     | 
| 
       283 
250 
     | 
    
         | 
| 
       284 
251 
     | 
    
         
             
                /// @dev stop all operations with release services
         
     | 
| 
       285 
252 
     | 
    
         
             
                function pauseRelease(VersionPart version)
         
     | 
| 
       286 
     | 
    
         
            -
                    external
         
     | 
| 
      
 253 
     | 
    
         
            +
                    external 
         
     | 
| 
       287 
254 
     | 
    
         
             
                    restricted // GIF_ADMIN_ROLE
         
     | 
| 
       288 
255 
     | 
    
         
             
                {
         
     | 
| 
       289 
     | 
    
         
            -
                     
     | 
| 
       290 
     | 
    
         
            -
                     
     | 
| 
      
 256 
     | 
    
         
            +
                    // release can transition to PAUSED state
         
     | 
| 
      
 257 
     | 
    
         
            +
                    checkTransition(_releaseInfo[version].state, RELEASE(), ACTIVE(), PAUSED());
         
     | 
| 
       291 
258 
     | 
    
         | 
| 
       292 
     | 
    
         
            -
                     
     | 
| 
       293 
     | 
    
         
            -
                    if (!isValidTransition(RELEASE(), state, newState)) {
         
     | 
| 
       294 
     | 
    
         
            -
                        revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
         
     | 
| 
       295 
     | 
    
         
            -
                    }
         
     | 
| 
       296 
     | 
    
         
            -
             
     | 
| 
       297 
     | 
    
         
            -
                    // TODO come up with a substitute
         
     | 
| 
       298 
     | 
    
         
            -
                    //_releaseAccessManager[version].disable();
         
     | 
| 
       299 
     | 
    
         
            -
             
     | 
| 
       300 
     | 
    
         
            -
                    _state[version] = newState;
         
     | 
| 
      
 259 
     | 
    
         
            +
                    _releaseInfo[version].state = PAUSED();
         
     | 
| 
       301 
260 
     | 
    
         
             
                    _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp();
         
     | 
| 
       302 
261 
     | 
    
         | 
| 
      
 262 
     | 
    
         
            +
                    _setReleaseLocked(version, true);
         
     | 
| 
      
 263 
     | 
    
         
            +
             
     | 
| 
       303 
264 
     | 
    
         
             
                    emit LogReleaseDisabled(version);
         
     | 
| 
       304 
265 
     | 
    
         
             
                }
         
     | 
| 
       305 
266 
     | 
    
         | 
| 
       306 
     | 
    
         
            -
                // TODO consider revert if some delay is expired -> becomes disabled automatically
         
     | 
| 
       307 
267 
     | 
    
         
             
                /// @dev resume operations with release services
         
     | 
| 
       308 
268 
     | 
    
         
             
                function unpauseRelease(VersionPart version)
         
     | 
| 
       309 
269 
     | 
    
         
             
                    external
         
     | 
| 
       310 
270 
     | 
    
         
             
                    restricted // GIF_ADMIN_ROLE
         
     | 
| 
       311 
271 
     | 
    
         
             
                {
         
     | 
| 
       312 
     | 
    
         
            -
                     
     | 
| 
       313 
     | 
    
         
            -
                     
     | 
| 
       314 
     | 
    
         
            -
             
     | 
| 
       315 
     | 
    
         
            -
                    // verify release in state PAUSED
         
     | 
| 
       316 
     | 
    
         
            -
                    if (!isValidTransition(RELEASE(), state, newState)) {
         
     | 
| 
       317 
     | 
    
         
            -
                        revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
         
     | 
| 
       318 
     | 
    
         
            -
                    }
         
     | 
| 
       319 
     | 
    
         
            -
             
     | 
| 
       320 
     | 
    
         
            -
                    // TODO come up with a substitute
         
     | 
| 
       321 
     | 
    
         
            -
                    // _releaseAccessManager[version].enable();
         
     | 
| 
      
 272 
     | 
    
         
            +
                    // release can transition to ACTIVE state
         
     | 
| 
      
 273 
     | 
    
         
            +
                    checkTransition(_releaseInfo[version].state, RELEASE(), PAUSED(), ACTIVE());
         
     | 
| 
       322 
274 
     | 
    
         | 
| 
       323 
     | 
    
         
            -
                     
     | 
| 
      
 275 
     | 
    
         
            +
                    _releaseInfo[version].state = ACTIVE();
         
     | 
| 
       324 
276 
     | 
    
         
             
                    _releaseInfo[version].disabledAt = zeroTimestamp();
         
     | 
| 
       325 
277 
     | 
    
         | 
| 
      
 278 
     | 
    
         
            +
                    _setReleaseLocked(version, false);
         
     | 
| 
      
 279 
     | 
    
         
            +
             
     | 
| 
       326 
280 
     | 
    
         
             
                    emit LogReleaseEnabled(version);
         
     | 
| 
       327 
281 
     | 
    
         
             
                }
         
     | 
| 
       328 
282 
     | 
    
         | 
| 
         @@ -336,33 +290,39 @@ contract ReleaseRegistry is 
     | 
|
| 
       336 
290 
     | 
    
         
             
                    return Clones.predictDeterministicAddress(implementation, salt, deployer);
         
     | 
| 
       337 
291 
     | 
    
         
             
                }
         
     | 
| 
       338 
292 
     | 
    
         | 
| 
       339 
     | 
    
         
            -
                function isActiveRegistryService(address service) external view returns(bool) {
         
     | 
| 
       340 
     | 
    
         
            -
                    VersionPart version = _releaseVersionByAddress[service];
         
     | 
| 
       341 
     | 
    
         
            -
                    return isActiveRelease(version);
         
     | 
| 
       342 
     | 
    
         
            -
                }
         
     | 
| 
       343 
     | 
    
         
            -
             
     | 
| 
       344 
293 
     | 
    
         
             
                function isActiveRelease(VersionPart version) public view returns(bool) {
         
     | 
| 
       345 
     | 
    
         
            -
                    return  
     | 
| 
      
 294 
     | 
    
         
            +
                    return _releaseInfo[version].state == ACTIVE();
         
     | 
| 
       346 
295 
     | 
    
         
             
                }
         
     | 
| 
       347 
296 
     | 
    
         | 
| 
       348 
297 
     | 
    
         
             
                function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
         
     | 
| 
       349 
298 
     | 
    
         
             
                    return _releaseInfo[version];
         
     | 
| 
       350 
299 
     | 
    
         
             
                }
         
     | 
| 
       351 
300 
     | 
    
         | 
| 
      
 301 
     | 
    
         
            +
                /// @dev Returns the number of created releases.
         
     | 
| 
      
 302 
     | 
    
         
            +
                /// Releases might be in another state than ACTIVE.
         
     | 
| 
      
 303 
     | 
    
         
            +
                function releases() external view returns (uint) {
         
     | 
| 
      
 304 
     | 
    
         
            +
                    return _release.length;
         
     | 
| 
      
 305 
     | 
    
         
            +
                }
         
     | 
| 
      
 306 
     | 
    
         
            +
             
     | 
| 
      
 307 
     | 
    
         
            +
                /// @dev Returns the n-th release version.
         
     | 
| 
      
 308 
     | 
    
         
            +
                /// Valid values for idx [0 .. releases() - 1]
         
     | 
| 
      
 309 
     | 
    
         
            +
                function getVersion(uint256 idx) external view returns (VersionPart version) {
         
     | 
| 
      
 310 
     | 
    
         
            +
                    // return _releases;
         
     | 
| 
      
 311 
     | 
    
         
            +
                    return _release[idx];
         
     | 
| 
      
 312 
     | 
    
         
            +
                }
         
     | 
| 
      
 313 
     | 
    
         
            +
             
     | 
| 
       352 
314 
     | 
    
         
             
                function getNextVersion() public view returns(VersionPart) {
         
     | 
| 
       353 
315 
     | 
    
         
             
                    return _next;
         
     | 
| 
       354 
316 
     | 
    
         
             
                }
         
     | 
| 
       355 
317 
     | 
    
         | 
| 
      
 318 
     | 
    
         
            +
                /// @dev Returns the latest activated relase version.
         
     | 
| 
      
 319 
     | 
    
         
            +
                /// There is no guarantee that the release is not currently paused.
         
     | 
| 
       356 
320 
     | 
    
         
             
                function getLatestVersion() external view returns(VersionPart) {
         
     | 
| 
       357 
321 
     | 
    
         
             
                    return _latest;
         
     | 
| 
       358 
322 
     | 
    
         
             
                }
         
     | 
| 
       359 
323 
     | 
    
         | 
| 
       360 
     | 
    
         
            -
                function getInitialVersion() external view returns(VersionPart) {
         
     | 
| 
       361 
     | 
    
         
            -
                    return _initial;
         
     | 
| 
       362 
     | 
    
         
            -
                }
         
     | 
| 
       363 
     | 
    
         
            -
             
     | 
| 
       364 
324 
     | 
    
         
             
                function getState(VersionPart version) external view returns (StateId stateId) {
         
     | 
| 
       365 
     | 
    
         
            -
                    return  
     | 
| 
      
 325 
     | 
    
         
            +
                    return _releaseInfo[version].state;
         
     | 
| 
       366 
326 
     | 
    
         
             
                }
         
     | 
| 
       367 
327 
     | 
    
         | 
| 
       368 
328 
     | 
    
         
             
                function getRemainingServicesToRegister() external view returns (uint256 services) {
         
     | 
| 
         @@ -374,7 +334,7 @@ contract ReleaseRegistry is 
     | 
|
| 
       374 
334 
     | 
    
         
             
                    view
         
     | 
| 
       375 
335 
     | 
    
         
             
                    returns (IServiceAuthorization serviceAuthorization)
         
     | 
| 
       376 
336 
     | 
    
         
             
                {
         
     | 
| 
       377 
     | 
    
         
            -
                    return  
     | 
| 
      
 337 
     | 
    
         
            +
                    return _releaseInfo[version].auth;
         
     | 
| 
       378 
338 
     | 
    
         
             
                }
         
     | 
| 
       379 
339 
     | 
    
         | 
| 
       380 
340 
     | 
    
         
             
                function getRegistryAdmin() external view returns (address) {
         
     | 
| 
         @@ -389,7 +349,61 @@ contract ReleaseRegistry is 
     | 
|
| 
       389 
349 
     | 
    
         | 
| 
       390 
350 
     | 
    
         
             
                //--- private functions ----------------------------------------------------//
         
     | 
| 
       391 
351 
     | 
    
         | 
| 
       392 
     | 
    
         
            -
                 
     | 
| 
      
 352 
     | 
    
         
            +
                // close / open service targets instead of revoking / granting roles
         
     | 
| 
      
 353 
     | 
    
         
            +
                function _setReleaseLocked(VersionPart version, bool locked)
         
     | 
| 
      
 354 
     | 
    
         
            +
                    private
         
     | 
| 
      
 355 
     | 
    
         
            +
                {
         
     | 
| 
      
 356 
     | 
    
         
            +
                    address service;
         
     | 
| 
      
 357 
     | 
    
         
            +
                    ObjectType domain;
         
     | 
| 
      
 358 
     | 
    
         
            +
                    IServiceAuthorization auth = _releaseInfo[version].auth;
         
     | 
| 
      
 359 
     | 
    
         
            +
             
     | 
| 
      
 360 
     | 
    
         
            +
                    ObjectType[] memory domains = auth.getServiceDomains();
         
     | 
| 
      
 361 
     | 
    
         
            +
                    for(uint idx = 0; idx < domains.length; idx++)
         
     | 
| 
      
 362 
     | 
    
         
            +
                    {
         
     | 
| 
      
 363 
     | 
    
         
            +
                        domain = domains[idx];
         
     | 
| 
      
 364 
     | 
    
         
            +
                        service = _registry.getServiceAddress(domain, version);
         
     | 
| 
      
 365 
     | 
    
         
            +
                        assert(service != address(0));
         
     | 
| 
      
 366 
     | 
    
         
            +
             
     | 
| 
      
 367 
     | 
    
         
            +
                        _admin.setServiceLocked(IService(service), locked);
         
     | 
| 
      
 368 
     | 
    
         
            +
                    }
         
     | 
| 
      
 369 
     | 
    
         
            +
             
     | 
| 
      
 370 
     | 
    
         
            +
                    // TODO add check for active/disabled release to core contracts functions interacting with releases
         
     | 
| 
      
 371 
     | 
    
         
            +
                }
         
     | 
| 
      
 372 
     | 
    
         
            +
             
     | 
| 
      
 373 
     | 
    
         
            +
                function _verifyServiceAuthorization(
         
     | 
| 
      
 374 
     | 
    
         
            +
                    IServiceAuthorization serviceAuthorization,
         
     | 
| 
      
 375 
     | 
    
         
            +
                    VersionPart releaseVersion,
         
     | 
| 
      
 376 
     | 
    
         
            +
                    bytes32 salt
         
     | 
| 
      
 377 
     | 
    
         
            +
                )
         
     | 
| 
      
 378 
     | 
    
         
            +
                    private
         
     | 
| 
      
 379 
     | 
    
         
            +
                    view
         
     | 
| 
      
 380 
     | 
    
         
            +
                    returns (uint256 serviceDomainsCount)
         
     | 
| 
      
 381 
     | 
    
         
            +
                {
         
     | 
| 
      
 382 
     | 
    
         
            +
                    // authorization contract supports IServiceAuthorization interface
         
     | 
| 
      
 383 
     | 
    
         
            +
                    if(!serviceAuthorization.supportsInterface(type(IServiceAuthorization).interfaceId)) {
         
     | 
| 
      
 384 
     | 
    
         
            +
                            revert ErrorReleaseRegistryNotServiceAuth(address(serviceAuthorization));
         
     | 
| 
      
 385 
     | 
    
         
            +
                    }
         
     | 
| 
      
 386 
     | 
    
         
            +
             
     | 
| 
      
 387 
     | 
    
         
            +
                    // authorizaions contract version matches with release version
         
     | 
| 
      
 388 
     | 
    
         
            +
                    VersionPart authVersion = serviceAuthorization.getRelease();
         
     | 
| 
      
 389 
     | 
    
         
            +
                    if (releaseVersion != authVersion) {
         
     | 
| 
      
 390 
     | 
    
         
            +
                        revert ErrorReleaseRegistryServiceAuthVersionMismatch(serviceAuthorization, releaseVersion, authVersion);
         
     | 
| 
      
 391 
     | 
    
         
            +
                    }
         
     | 
| 
      
 392 
     | 
    
         
            +
             
     | 
| 
      
 393 
     | 
    
         
            +
                    // sanity check to ensure service domain list is not empty
         
     | 
| 
      
 394 
     | 
    
         
            +
                    serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
         
     | 
| 
      
 395 
     | 
    
         
            +
                    if (serviceDomainsCount == 0) {
         
     | 
| 
      
 396 
     | 
    
         
            +
                        revert ErrorReleaseRegistryServiceAuthDomainsZero(serviceAuthorization, releaseVersion);
         
     | 
| 
      
 397 
     | 
    
         
            +
                    }
         
     | 
| 
      
 398 
     | 
    
         
            +
                }
         
     | 
| 
      
 399 
     | 
    
         
            +
             
     | 
| 
      
 400 
     | 
    
         
            +
                // TODO get service names 
         
     | 
| 
      
 401 
     | 
    
         
            +
                function _verifyService(
         
     | 
| 
      
 402 
     | 
    
         
            +
                    IService service, 
         
     | 
| 
      
 403 
     | 
    
         
            +
                    address expectedAuthority, 
         
     | 
| 
      
 404 
     | 
    
         
            +
                    VersionPart expectedVersion,
         
     | 
| 
      
 405 
     | 
    
         
            +
                    ObjectType expectedDomain
         
     | 
| 
      
 406 
     | 
    
         
            +
                )
         
     | 
| 
       393 
407 
     | 
    
         
             
                    internal
         
     | 
| 
       394 
408 
     | 
    
         
             
                    view
         
     | 
| 
       395 
409 
     | 
    
         
             
                    returns(
         
     | 
| 
         @@ -410,22 +424,25 @@ contract ReleaseRegistry is 
     | 
|
| 
       410 
424 
     | 
    
         | 
| 
       411 
425 
     | 
    
         
             
                    _verifyServiceInfo(service, serviceInfo, owner);
         
     | 
| 
       412 
426 
     | 
    
         | 
| 
       413 
     | 
    
         
            -
                    VersionPart releaseVersion = _next; // never 0
         
     | 
| 
       414 
     | 
    
         
            -
                    address expectedAuthority = _admin.authority(); // can be zero if registering service when release is not created
         
     | 
| 
       415 
     | 
    
         
            -
             
     | 
| 
       416 
     | 
    
         
            -
                    // IMPORTANT: can not guarantee service access is actually controlled by authority
         
     | 
| 
       417 
427 
     | 
    
         
             
                    if(serviceAuthority != expectedAuthority) {
         
     | 
| 
       418 
     | 
    
         
            -
                        revert  
     | 
| 
      
 428 
     | 
    
         
            +
                        revert ErrorReleaseRegistryServiceAuthorityMismatch(
         
     | 
| 
       419 
429 
     | 
    
         
             
                            service,
         
     | 
| 
       420 
430 
     | 
    
         
             
                            serviceAuthority,
         
     | 
| 
       421 
431 
     | 
    
         
             
                            expectedAuthority);
         
     | 
| 
       422 
432 
     | 
    
         
             
                    }
         
     | 
| 
       423 
433 
     | 
    
         | 
| 
       424 
     | 
    
         
            -
                    if(serviceVersion !=  
     | 
| 
       425 
     | 
    
         
            -
                        revert  
     | 
| 
      
 434 
     | 
    
         
            +
                    if(serviceVersion != expectedVersion) {
         
     | 
| 
      
 435 
     | 
    
         
            +
                        revert ErrorReleaseRegistryServiceVersionMismatch(
         
     | 
| 
       426 
436 
     | 
    
         
             
                            service,
         
     | 
| 
       427 
437 
     | 
    
         
             
                            serviceVersion,
         
     | 
| 
       428 
     | 
    
         
            -
                             
     | 
| 
      
 438 
     | 
    
         
            +
                            expectedVersion);            
         
     | 
| 
      
 439 
     | 
    
         
            +
                    }
         
     | 
| 
      
 440 
     | 
    
         
            +
             
     | 
| 
      
 441 
     | 
    
         
            +
                    if(serviceDomain != expectedDomain) {
         
     | 
| 
      
 442 
     | 
    
         
            +
                        revert ErrorReleaseRegistryServiceDomainMismatch(
         
     | 
| 
      
 443 
     | 
    
         
            +
                            service,
         
     | 
| 
      
 444 
     | 
    
         
            +
                            expectedDomain,
         
     | 
| 
      
 445 
     | 
    
         
            +
                            serviceDomain);
         
     | 
| 
       429 
446 
     | 
    
         
             
                    }
         
     | 
| 
       430 
447 
     | 
    
         
             
                }
         
     | 
| 
       431 
448 
     | 
    
         | 
| 
         @@ -439,7 +456,7 @@ contract ReleaseRegistry is 
     | 
|
| 
       439 
456 
     | 
    
         
             
                    view
         
     | 
| 
       440 
457 
     | 
    
         
             
                {
         
     | 
| 
       441 
458 
     | 
    
         
             
                    if(info.objectAddress != address(service)) {
         
     | 
| 
       442 
     | 
    
         
            -
                        revert ErrorReleaseRegistryServiceInfoAddressInvalid(service,  
     | 
| 
      
 459 
     | 
    
         
            +
                        revert ErrorReleaseRegistryServiceInfoAddressInvalid(service, info.objectAddress);
         
     | 
| 
       443 
460 
     | 
    
         
             
                    }
         
     | 
| 
       444 
461 
     | 
    
         | 
| 
       445 
462 
     | 
    
         
             
                    if(info.isInterceptor != false) { // service is never interceptor
         
     | 
| 
         @@ -464,22 +481,5 @@ contract ReleaseRegistry is 
     | 
|
| 
       464 
481 
     | 
    
         
             
                        revert ErrorReleaseRegistryServiceOwnerRegistered(service, owner);
         
     | 
| 
       465 
482 
     | 
    
         
             
                    }
         
     | 
| 
       466 
483 
     | 
    
         
             
                }
         
     | 
| 
       467 
     | 
    
         
            -
             
     | 
| 
       468 
     | 
    
         
            -
                /// @dev returns true iff a the address passes some simple proxy tests.
         
     | 
| 
       469 
     | 
    
         
            -
                function _isRegistry(address registryAddress) internal view returns (bool) {
         
     | 
| 
       470 
     | 
    
         
            -
             
     | 
| 
       471 
     | 
    
         
            -
                    // zero address is certainly not registry
         
     | 
| 
       472 
     | 
    
         
            -
                    if (registryAddress == address(0)) {
         
     | 
| 
       473 
     | 
    
         
            -
                        return false;
         
     | 
| 
       474 
     | 
    
         
            -
                    }
         
     | 
| 
       475 
     | 
    
         
            -
                    // TODO try catch and return false in case of revert
         
     | 
| 
       476 
     | 
    
         
            -
                    // or just panic
         
     | 
| 
       477 
     | 
    
         
            -
                    // check if contract returns a zero nft id for its own address
         
     | 
| 
       478 
     | 
    
         
            -
                    if (IRegistry(registryAddress).getNftIdForAddress(registryAddress).eqz()) {
         
     | 
| 
       479 
     | 
    
         
            -
                        return false;
         
     | 
| 
       480 
     | 
    
         
            -
                    }
         
     | 
| 
       481 
     | 
    
         
            -
             
     | 
| 
       482 
     | 
    
         
            -
                    return true;
         
     | 
| 
       483 
     | 
    
         
            -
                }
         
     | 
| 
       484 
484 
     | 
    
         
             
            }
         
     | 
| 
       485 
485 
     | 
    
         |