@etherisc/gif-next 0.0.2-f36fd21-685 → 0.0.2-f47f21f-178
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 +19 -2
- 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 +163 -309
- 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 +91 -277
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +174 -292
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +99 -123
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +78 -92
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +78 -62
- 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 +1538 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2077 -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 +1471 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1231 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1592 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2095 -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 +29 -84
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +56 -123
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +166 -139
- 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 +459 -131
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +77 -242
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -87
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +330 -233
- 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/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +137 -283
- 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 +66 -80
- 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 +79 -265
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +91 -159
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +75 -83
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +109 -330
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +82 -22
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +359 -194
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +145 -97
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +178 -23
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +88 -130
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +384 -179
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +99 -313
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +506 -334
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +111 -87
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +76 -168
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +72 -92
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +136 -281
- 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 +303 -187
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +119 -103
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +34 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +176 -6
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +310 -118
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +124 -97
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +433 -327
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +119 -103
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +199 -309
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +96 -120
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +136 -281
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -0
- 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 +286 -34
- 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 +492 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +283 -143
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +78 -284
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -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 +129 -221
- 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 +65 -236
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +355 -283
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +122 -120
- 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 +92 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +55 -54
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +321 -19
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +66 -80
- 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 +79 -265
- 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 +330 -11
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +82 -55
- 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 +63 -93
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +176 -293
- 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 +106 -91
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +71 -165
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +71 -79
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +169 -128
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
- 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/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +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/Seconds.sol/SecondsLib.json +50 -2
- 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/Timestamp.sol/TimestampLib.json +23 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +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 +55 -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 -40
- 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 +2 -1
- package/contracts/distribution/Distribution.sol +7 -17
- package/contracts/distribution/DistributionService.sol +83 -65
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +9 -5
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +75 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
- package/contracts/examples/fire/FireProduct.sol +418 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
- package/contracts/instance/IInstance.sol +10 -30
- package/contracts/instance/IInstanceService.sol +0 -20
- package/contracts/instance/Instance.sol +29 -51
- package/contracts/instance/InstanceAdmin.sol +42 -31
- package/contracts/instance/InstanceAuthorizationV3.sol +11 -21
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +65 -97
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +11 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +10 -10
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/BasicOracle.sol +0 -1
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +6 -16
- package/contracts/oracle/OracleService.sol +47 -34
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +21 -31
- package/contracts/pool/BasicPoolAuthorization.sol +5 -3
- package/contracts/pool/BundleService.sol +213 -61
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +31 -8
- package/contracts/pool/IPoolComponent.sol +18 -8
- package/contracts/pool/IPoolService.sol +56 -39
- package/contracts/pool/Pool.sol +60 -53
- package/contracts/pool/PoolService.sol +250 -140
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +59 -30
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +7 -6
- package/contracts/product/BasicProductAuthorization.sol +0 -1
- package/contracts/product/ClaimService.sol +313 -118
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +31 -7
- package/contracts/product/IPolicyService.sol +34 -34
- package/contracts/product/IPricingService.sol +10 -10
- package/contracts/product/IProductComponent.sol +23 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +394 -196
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +54 -54
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +125 -71
- package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +68 -38
- package/contracts/registry/IRegistry.sol +55 -18
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +342 -201
- package/contracts/registry/RegistryAdmin.sol +134 -51
- 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 -188
- package/contracts/registry/ServiceAuthorizationV3.sol +16 -22
- package/contracts/shared/Component.sol +40 -55
- package/contracts/shared/ComponentService.sol +235 -151
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +23 -14
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +10 -6
- package/contracts/shared/IComponentService.sol +25 -13
- package/contracts/shared/IInstanceLinkedComponent.sol +7 -22
- 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 +72 -31
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +27 -7
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +19 -9
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +20 -18
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +2 -1
- package/contracts/staking/IStakingService.sol +0 -3
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +13 -32
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +11 -29
- package/contracts/staking/StakingServiceManager.sol +2 -2
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +15 -0
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/NftId.sol +1 -0
- package/contracts/type/ObjectType.sol +16 -11
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +15 -1
- package/contracts/type/RoleId.sol +0 -12
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +11 -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 +2 -1
- 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/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- 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/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
| @@ -1,45 +1,33 @@ | |
| 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 |  | 
| 11 7 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 12 | 
            -
            import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
         | 
| 13 8 | 
             
            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";
         | 
| 9 | 
            +
            import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
         | 
| 10 | 
            +
            import {Seconds} from "../type/Seconds.sol";
         | 
| 11 | 
            +
            import {StateId, SCHEDULED, DEPLOYING, DEPLOYED, SKIPPED, ACTIVE, PAUSED} from "../type/StateId.sol";
         | 
| 12 | 
            +
            import {VersionPart, VersionPartLib} from "../type/Version.sol";
         | 
| 19 13 |  | 
| 20 14 | 
             
            import {IService} from "../shared/IService.sol";
         | 
| 21 | 
            -
            import {ILifecycle} from "../shared/ILifecycle.sol";
         | 
| 22 | 
            -
            import {INftOwnable} from "../shared/INftOwnable.sol";
         | 
| 23 15 | 
             
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 24 16 |  | 
| 25 17 | 
             
            import {IRegistry} from "./IRegistry.sol";
         | 
| 26 18 | 
             
            import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
         | 
| 27 | 
            -
            import {IRegistryService} from "./IRegistryService.sol";
         | 
| 28 19 | 
             
            import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol";
         | 
| 29 | 
            -
            import {IAccessAdmin} from "../authorization/IAccessAdmin.sol";
         | 
| 30 20 | 
             
            import {RegistryAdmin} from "./RegistryAdmin.sol";
         | 
| 31 21 | 
             
            import {Registry} from "./Registry.sol";
         | 
| 32 | 
            -
            import {TokenRegistry} from "./TokenRegistry.sol";
         | 
| 33 22 | 
             
            import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
         | 
| 34 23 |  | 
| 24 | 
            +
             | 
| 35 25 | 
             
            contract ReleaseRegistry is 
         | 
| 36 26 | 
             
                AccessManaged,
         | 
| 37 27 | 
             
                ReleaseLifecycle, 
         | 
| 38 28 | 
             
                IRegistryLinked
         | 
| 39 29 | 
             
            {
         | 
| 40 | 
            -
                 | 
| 41 | 
            -
             | 
| 42 | 
            -
                uint256 public constant INITIAL_GIF_VERSION = 3;
         | 
| 30 | 
            +
                uint256 public constant INITIAL_GIF_VERSION = 3;// first active version  
         | 
| 43 31 |  | 
| 44 32 | 
             
                event LogReleaseCreation(VersionPart version, bytes32 salt); 
         | 
| 45 33 | 
             
                event LogReleaseActivation(VersionPart version);
         | 
| @@ -49,35 +37,22 @@ contract ReleaseRegistry is | |
| 49 37 | 
             
                // constructor
         | 
| 50 38 | 
             
                error ErrorReleaseRegistryNotRegistry(Registry registry);
         | 
| 51 39 |  | 
| 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);
         | 
| 40 | 
            +
                // _verifyServiceAuthorization
         | 
| 41 | 
            +
                error ErrorReleaseRegistryNotServiceAuth(address notAuth);
         | 
| 42 | 
            +
                error ErrorReleaseRegistryServiceAuthVersionMismatch(IServiceAuthorization auth, VersionPart expected, VersionPart actual);
         | 
| 43 | 
            +
                error ErrorReleaseRegistryServiceAuthDomainsZero(IServiceAuthorization auth, VersionPart version);
         | 
| 60 44 |  | 
| 61 45 | 
             
                // registerService
         | 
| 62 | 
            -
                error ErrorReleaseRegistryNoServiceRegistrationExpected();
         | 
| 63 | 
            -
                error ErrorReleaseRegistryServiceRegistrationDisallowed(StateId currentStateId);
         | 
| 64 | 
            -
                error ErrorReleaseRegistryServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
         | 
| 65 | 
            -
                error ErrorReleaseRegistryNotService(address notService);
         | 
| 66 46 | 
             
                error ErrorReleaseRegistryServiceAddressMismatch(address expected, address actual);
         | 
| 67 47 |  | 
| 68 48 | 
             
                // 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);
         | 
| 49 | 
            +
                error ErrorReleaseRegistryRegistryServiceMissing(VersionPart releaseVersion);
         | 
| 77 50 |  | 
| 78 51 | 
             
                // _verifyService
         | 
| 79 | 
            -
                error  | 
| 80 | 
            -
                error  | 
| 52 | 
            +
                error ErrorReleaseRegistryNotService(address notService);
         | 
| 53 | 
            +
                error ErrorReleaseRegistryServiceAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
         | 
| 54 | 
            +
                error ErrorReleaseRegistryServiceVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
         | 
| 55 | 
            +
                error ErrorReleaseRegistryServiceDomainMismatch(IService service, ObjectType expectedDomain, ObjectType actualDomain);
         | 
| 81 56 |  | 
| 82 57 | 
             
                // _verifyServiceInfo
         | 
| 83 58 | 
             
                error ErrorReleaseRegistryServiceInfoAddressInvalid(IService service, address expected);
         | 
| @@ -87,23 +62,13 @@ contract ReleaseRegistry is | |
| 87 62 | 
             
                error ErrorReleaseRegistryServiceSelfRegistration(IService service);
         | 
| 88 63 | 
             
                error ErrorReleaseRegistryServiceOwnerRegistered(IService service, address owner);
         | 
| 89 64 |  | 
| 90 | 
            -
                Seconds public constant MIN_DISABLE_DELAY = Seconds.wrap(60 * 24 * 365); // 1 year
         | 
| 91 | 
            -
             | 
| 92 65 | 
             
                RegistryAdmin public immutable _admin;
         | 
| 93 66 | 
             
                Registry public immutable _registry;
         | 
| 94 | 
            -
                IRegisterable private _staking;
         | 
| 95 | 
            -
                address private _stakingOwner;
         | 
| 96 67 |  | 
| 97 68 | 
             
                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    
         | 
| 69 | 
            +
                VersionPart [] internal _release; // array of all created releases
         | 
| 104 70 | 
             
                VersionPart internal _latest; // latest active version
         | 
| 105 71 | 
             
                VersionPart internal _next; // version to create and activate 
         | 
| 106 | 
            -
                mapping(VersionPart verson => StateId releaseState) private _state;
         | 
| 107 72 |  | 
| 108 73 | 
             
                uint256 internal _registeredServices;
         | 
| 109 74 | 
             
                uint256 internal _servicesToRegister;
         | 
| @@ -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());
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                    uint256 serviceDomainsCount = _verifyServiceAuthorization(serviceAuthorization, releaseVersion, salt);
         | 
| 157 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 | 
            -
                    }
         | 
| 211 | 
            -
             | 
| 212 | 
            -
                    _state[releaseVersion] = DEPLOYING();
         | 
| 163 | 
            +
                    // release can transition to DEPLOYED state
         | 
| 164 | 
            +
                    checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), DEPLOYING(), DEPLOYED());
         | 
| 213 165 |  | 
| 214 | 
            -
                     | 
| 215 | 
            -
                     | 
| 216 | 
            -
             | 
| 217 | 
            -
                    }
         | 
| 166 | 
            +
                    address releaseAuthority = _admin.authority();
         | 
| 167 | 
            +
                    IServiceAuthorization serviceAuth = _releaseInfo[releaseVersion].auth;
         | 
| 168 | 
            +
                    ObjectType expectedDomain = serviceAuth.getServiceDomain(_registeredServices);
         | 
| 218 169 |  | 
| 219 | 
            -
                    // service can work with release  | 
| 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 | 
            +
                    );
         | 
| 225 182 |  | 
| 226 | 
            -
                    // | 
| 227 | 
            -
                     | 
| 228 | 
            -
                    if  | 
| 229 | 
            -
             | 
| 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
         | 
| 188 | 
            +
             | 
| 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 | 
            -
                     | 
| 291 | 
            -
             | 
| 292 | 
            -
                    // verify release in state ACTIVE
         | 
| 293 | 
            -
                    if (!isValidTransition(RELEASE(), state, newState)) {
         | 
| 294 | 
            -
                        revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
         | 
| 295 | 
            -
                    }
         | 
| 296 | 
            -
             | 
| 297 | 
            -
                    // TODO come up with a substitute
         | 
| 298 | 
            -
                    //_releaseAccessManager[version].disable();
         | 
| 256 | 
            +
                    // release can transition to PAUSED state
         | 
| 257 | 
            +
                    checkTransition(_releaseInfo[version].state, RELEASE(), ACTIVE(), PAUSED());
         | 
| 299 258 |  | 
| 300 | 
            -
                     | 
| 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
         | 
| @@ -472,10 +489,9 @@ contract ReleaseRegistry is | |
| 472 489 | 
             
                    if (registryAddress == address(0)) {
         | 
| 473 490 | 
             
                        return false;
         | 
| 474 491 | 
             
                    }
         | 
| 475 | 
            -
                    // TODO try catch and return false in case of revert
         | 
| 476 | 
            -
                    // or just panic
         | 
| 492 | 
            +
                    // TODO try catch and return false in case of revert or just panic
         | 
| 477 493 | 
             
                    // check if contract returns a zero nft id for its own address
         | 
| 478 | 
            -
                    if (IRegistry(registryAddress). | 
| 494 | 
            +
                    if (IRegistry(registryAddress).getNftIdForAddress(registryAddress).eqz()) {
         | 
| 479 495 | 
             
                        return false;
         | 
| 480 496 | 
             
                    }
         | 
| 481 497 |  |