@etherisc/gif-next 0.0.2-f1e0c66-773 → 0.0.2-f1f3b2c-994
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 +7 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +81 -63
- 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 +2 -2
- 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 +48 -30
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +21 -2
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +72 -9
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +63 -248
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -222
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +134 -286
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +84 -120
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +21 -37
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +49 -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 +1512 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1999 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -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 +1432 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1192 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1566 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2001 -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/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +10 -99
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +145 -111
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -124
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +39 -146
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +61 -81
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +285 -218
- 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 +45 -4
- 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 +47 -232
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
- 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 +15 -31
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +15 -216
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +37 -144
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +60 -80
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +51 -274
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +319 -188
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +130 -94
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +149 -23
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -88
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +360 -171
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +41 -270
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +492 -333
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +98 -82
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +36 -162
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +57 -89
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +43 -242
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +263 -181
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +104 -100
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +147 -6
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +282 -119
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +43 -57
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +399 -327
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +104 -100
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +115 -267
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -120
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +43 -242
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -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 +238 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +436 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +261 -143
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -313
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +52 -72
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +46 -5
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +117 -215
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +70 -12
- 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 +15 -205
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +89 -212
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +96 -114
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +5 -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 +15 -20
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +15 -31
- 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/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/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- 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 +15 -216
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +41 -0
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +41 -0
- 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 +6 -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 +8 -97
- 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 +5 -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 +42 -21
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- 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 +100 -256
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +45 -4
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +77 -88
- 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 +31 -138
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +56 -76
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +168 -127
- 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 +39 -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 +31 -24
- package/contracts/authorization/Authorization.sol +5 -2
- package/contracts/authorization/IAccessAdmin.sol +3 -2
- package/contracts/authorization/IServiceAuthorization.sol +4 -2
- package/contracts/authorization/ServiceAuthorization.sol +27 -11
- package/contracts/distribution/Distribution.sol +1 -1
- package/contracts/distribution/DistributionService.sol +32 -33
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- 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 +411 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -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 +7 -30
- package/contracts/instance/Instance.sol +10 -35
- package/contracts/instance/InstanceAdmin.sol +29 -7
- package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +63 -41
- 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 +4 -7
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/Oracle.sol +2 -1
- package/contracts/oracle/OracleService.sol +11 -8
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +7 -5
- package/contracts/pool/BasicPoolAuthorization.sol +5 -2
- package/contracts/pool/BundleService.sol +166 -46
- 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 +57 -36
- package/contracts/pool/Pool.sol +59 -34
- package/contracts/pool/PoolService.sol +231 -102
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +50 -29
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +1 -0
- package/contracts/product/ClaimService.sol +251 -87
- 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 +7 -7
- package/contracts/product/IProductComponent.sol +17 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +379 -192
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +46 -46
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +81 -50
- package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +65 -32
- package/contracts/registry/IRegistry.sol +51 -18
- package/contracts/registry/IRegistryService.sol +0 -9
- package/contracts/registry/Registry.sol +328 -197
- package/contracts/registry/RegistryAdmin.sol +134 -51
- package/contracts/registry/RegistryService.sol +55 -48
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +194 -183
- package/contracts/registry/ServiceAuthorizationV3.sol +8 -10
- package/contracts/shared/Component.sol +25 -29
- package/contracts/shared/ComponentService.sol +20 -30
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +2 -3
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +7 -4
- package/contracts/shared/IInstanceLinkedComponent.sol +8 -15
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +5 -6
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +13 -2
- package/contracts/shared/NftOwnable.sol +5 -5
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +4 -4
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +16 -11
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +2 -1
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +11 -29
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +10 -14
- 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/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 +67 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +2 -1
- 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/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
| @@ -1,37 +1,28 @@ | |
| 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 | 
            +
            // TODO rename to something that does not end with 'Manager' 
         | 
| 25 | 
            +
            // everywhere else *Manager points to an upgradeable contract
         | 
| 35 26 | 
             
            contract ReleaseRegistry is 
         | 
| 36 27 | 
             
                AccessManaged,
         | 
| 37 28 | 
             
                ReleaseLifecycle, 
         | 
| @@ -39,7 +30,7 @@ contract ReleaseRegistry is | |
| 39 30 | 
             
            {
         | 
| 40 31 | 
             
                using ObjectTypeLib for ObjectType;
         | 
| 41 32 |  | 
| 42 | 
            -
                uint256 public constant INITIAL_GIF_VERSION = 3 | 
| 33 | 
            +
                uint256 public constant INITIAL_GIF_VERSION = 3;// first active version  
         | 
| 43 34 |  | 
| 44 35 | 
             
                event LogReleaseCreation(VersionPart version, bytes32 salt); 
         | 
| 45 36 | 
             
                event LogReleaseActivation(VersionPart version);
         | 
| @@ -49,35 +40,22 @@ contract ReleaseRegistry is | |
| 49 40 | 
             
                // constructor
         | 
| 50 41 | 
             
                error ErrorReleaseRegistryNotRegistry(Registry registry);
         | 
| 51 42 |  | 
| 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);
         | 
| 43 | 
            +
                // _verifyServiceAuthorization
         | 
| 44 | 
            +
                error ErrorReleaseRegistryNotServiceAuth(address notAuth);
         | 
| 45 | 
            +
                error ErrorReleaseRegistryServiceAuthVersionMismatch(IServiceAuthorization auth, VersionPart expected, VersionPart actual);
         | 
| 46 | 
            +
                error ErrorReleaseRegistryServiceAuthDomainsZero(IServiceAuthorization auth, VersionPart version);
         | 
| 60 47 |  | 
| 61 48 | 
             
                // registerService
         | 
| 62 | 
            -
                error ErrorReleaseRegistryNoServiceRegistrationExpected();
         | 
| 63 | 
            -
                error ErrorReleaseRegistryServiceRegistrationDisallowed(StateId currentStateId);
         | 
| 64 | 
            -
                error ErrorReleaseRegistryServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
         | 
| 65 | 
            -
                error ErrorReleaseRegistryNotService(address notService);
         | 
| 66 49 | 
             
                error ErrorReleaseRegistryServiceAddressMismatch(address expected, address actual);
         | 
| 67 50 |  | 
| 68 51 | 
             
                // 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);
         | 
| 52 | 
            +
                error ErrorReleaseRegistryRegistryServiceMissing(VersionPart releaseVersion);
         | 
| 77 53 |  | 
| 78 54 | 
             
                // _verifyService
         | 
| 79 | 
            -
                error  | 
| 80 | 
            -
                error  | 
| 55 | 
            +
                error ErrorReleaseRegistryNotService(address notService);
         | 
| 56 | 
            +
                error ErrorReleaseRegistryServiceAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
         | 
| 57 | 
            +
                error ErrorReleaseRegistryServiceVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
         | 
| 58 | 
            +
                error ErrorReleaseRegistryServiceDomainMismatch(IService service, ObjectType expectedDomain, ObjectType actualDomain);
         | 
| 81 59 |  | 
| 82 60 | 
             
                // _verifyServiceInfo
         | 
| 83 61 | 
             
                error ErrorReleaseRegistryServiceInfoAddressInvalid(IService service, address expected);
         | 
| @@ -91,19 +69,12 @@ contract ReleaseRegistry is | |
| 91 69 |  | 
| 92 70 | 
             
                RegistryAdmin public immutable _admin;
         | 
| 93 71 | 
             
                Registry public immutable _registry;
         | 
| 94 | 
            -
                IRegisterable private _staking;
         | 
| 95 | 
            -
                address private _stakingOwner;
         | 
| 96 72 |  | 
| 97 73 | 
             
                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;
         | 
| 74 | 
            +
                uint256 _releases;
         | 
| 102 75 |  | 
| 103 | 
            -
                VersionPart private _initial;// first active version    
         | 
| 104 76 | 
             
                VersionPart internal _latest; // latest active version
         | 
| 105 77 | 
             
                VersionPart internal _next; // version to create and activate 
         | 
| 106 | 
            -
                mapping(VersionPart verson => StateId releaseState) private _state;
         | 
| 107 78 |  | 
| 108 79 | 
             
                uint256 internal _registeredServices;
         | 
| 109 80 | 
             
                uint256 internal _servicesToRegister;
         | 
| @@ -121,21 +92,29 @@ contract ReleaseRegistry is | |
| 121 92 | 
             
                    _registry = registry;
         | 
| 122 93 | 
             
                    _admin = RegistryAdmin(_registry.getRegistryAdminAddress());
         | 
| 123 94 |  | 
| 124 | 
            -
                    _initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
         | 
| 125 95 | 
             
                    _next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
         | 
| 126 96 | 
             
                }
         | 
| 127 97 |  | 
| 128 | 
            -
                /// @dev  | 
| 98 | 
            +
                /// @dev sets previous release into SKIPPED state if it was created but not activated
         | 
| 129 99 | 
             
                /// sets next release into state SCHEDULED
         | 
| 130 100 | 
             
                function createNextRelease()
         | 
| 131 101 | 
             
                    external
         | 
| 132 102 | 
             
                    restricted() // GIF_ADMIN_ROLE
         | 
| 133 103 | 
             
                    returns(VersionPart)
         | 
| 134 104 | 
             
                {
         | 
| 135 | 
            -
                     | 
| 105 | 
            +
                    VersionPart version = _next;
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                    if(isValidTransition(RELEASE(), _releaseInfo[version].state, SKIPPED())) {
         | 
| 108 | 
            +
                        _releaseInfo[version].state = SKIPPED();
         | 
| 109 | 
            +
                    }
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                    version = VersionPartLib.toVersionPart(version.toInt() + 1);
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                    _next = version;
         | 
| 114 | 
            +
                    _releaseInfo[version].version = version;
         | 
| 115 | 
            +
                    _releaseInfo[version].state = getInitialState(RELEASE());
         | 
| 136 116 | 
             
                    _servicesToRegister = 0;
         | 
| 137 117 | 
             
                    _registeredServices = 0;
         | 
| 138 | 
            -
                    _state[_next] = getInitialState(RELEASE());
         | 
| 139 118 |  | 
| 140 119 | 
             
                    return _next;
         | 
| 141 120 | 
             
                }
         | 
| @@ -147,182 +126,163 @@ contract ReleaseRegistry is | |
| 147 126 | 
             
                    external
         | 
| 148 127 | 
             
                    restricted() // GIF_MANAGER_ROLE
         | 
| 149 128 | 
             
                    returns(
         | 
| 150 | 
            -
                        address  | 
| 151 | 
            -
                        VersionPart  | 
| 129 | 
            +
                        address releaseAuthority, 
         | 
| 130 | 
            +
                        VersionPart releaseVersion, 
         | 
| 152 131 | 
             
                        bytes32 releaseSalt
         | 
| 153 132 | 
             
                    )
         | 
| 154 133 | 
             
                {
         | 
| 155 | 
            -
                     | 
| 156 | 
            -
             | 
| 134 | 
            +
                    releaseVersion = _next;
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                    // release can transition into DEPLOYING state
         | 
| 137 | 
            +
                    checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), SCHEDULED(), DEPLOYING());
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                    uint256 serviceDomainsCount = _verifyServiceAuthorization(serviceAuthorization, releaseVersion, salt);
         | 
| 157 140 |  | 
| 141 | 
            +
                    releaseAuthority = _admin.authority();
         | 
| 142 | 
            +
                    releaseSalt = salt;
         | 
| 158 143 | 
             
                    // ensures unique salt
         | 
| 159 144 | 
             
                    // TODO CreateX have clones capability also
         | 
| 160 145 | 
             
                    // what would releaseSalt look like if used with CreateX in pemissioned mode?
         | 
| 161 | 
            -
                    releaseSalt = keccak256(
         | 
| 146 | 
            +
                    /*releaseSalt = keccak256(
         | 
| 162 147 | 
             
                        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 | 
            -
                    }
         | 
| 148 | 
            +
                            bytes32(releaseVersion.toInt()),
         | 
| 149 | 
            +
                            salt));*/
         | 
| 190 150 |  | 
| 191 151 | 
             
                    _servicesToRegister = serviceDomainsCount;
         | 
| 192 | 
            -
                     | 
| 152 | 
            +
                    _releaseInfo[releaseVersion].state = DEPLOYING();
         | 
| 153 | 
            +
                    _releaseInfo[releaseVersion].salt = releaseSalt;
         | 
| 154 | 
            +
                    // TODO allow for the same serviceAuthorization address to be used for multiple releases?
         | 
| 155 | 
            +
                    _releaseInfo[releaseVersion].auth = serviceAuthorization;
         | 
| 156 | 
            +
                    //_releaseInfo[releaseVersion].authority = releaseAuthority;
         | 
| 193 157 |  | 
| 194 | 
            -
                    emit LogReleaseCreation( | 
| 158 | 
            +
                    emit LogReleaseCreation(releaseVersion, releaseSalt);
         | 
| 195 159 | 
             
                }
         | 
| 196 160 |  | 
| 197 | 
            -
                // TODO this function can have 0 args -> use stored addresses from prepareNextRelease()
         | 
| 198 161 | 
             
                function registerService(IService service) 
         | 
| 199 162 | 
             
                    external
         | 
| 200 163 | 
             
                    restricted // GIF_MANAGER_ROLE
         | 
| 201 164 | 
             
                    returns(NftId nftId)
         | 
| 202 165 | 
             
                {
         | 
| 203 166 | 
             
                    VersionPart releaseVersion = _next;
         | 
| 204 | 
            -
                    StateId state = _state[releaseVersion];
         | 
| 205 | 
            -
             | 
| 206 | 
            -
                    // verify release in state DEPLOYING
         | 
| 207 | 
            -
                    if (!isValidTransition(RELEASE(), state, DEPLOYING())) {
         | 
| 208 | 
            -
                        // TOOD name must represent failed state transition
         | 
| 209 | 
            -
                        revert ErrorReleaseRegistryServiceRegistrationDisallowed(state);
         | 
| 210 | 
            -
                    }
         | 
| 211 167 |  | 
| 212 | 
            -
                     | 
| 168 | 
            +
                    // release can transition to DEPLOYED state
         | 
| 169 | 
            +
                    checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), DEPLOYING(), DEPLOYED());
         | 
| 213 170 |  | 
| 214 | 
            -
                     | 
| 215 | 
            -
                     | 
| 216 | 
            -
             | 
| 217 | 
            -
                    }
         | 
| 171 | 
            +
                    address releaseAuthority = _admin.authority();
         | 
| 172 | 
            +
                    IServiceAuthorization serviceAuth = _releaseInfo[releaseVersion].auth;
         | 
| 173 | 
            +
                    ObjectType expectedDomain = serviceAuth.getServiceDomain(_registeredServices);
         | 
| 218 174 |  | 
| 219 | 
            -
                    // service can work with release  | 
| 175 | 
            +
                    // service can work with release registry and release version
         | 
| 220 176 | 
             
                    (
         | 
| 221 177 | 
             
                        IRegistry.ObjectInfo memory info,
         | 
| 222 178 | 
             
                        ObjectType serviceDomain,
         | 
| 223 179 | 
             
                        VersionPart serviceVersion
         | 
| 224 | 
            -
             | 
| 180 | 
            +
                        //,string memory serviceName
         | 
| 181 | 
            +
                    ) = _verifyService(
         | 
| 182 | 
            +
                        service, 
         | 
| 183 | 
            +
                        releaseAuthority, 
         | 
| 184 | 
            +
                        releaseVersion, 
         | 
| 185 | 
            +
                        expectedDomain
         | 
| 186 | 
            +
                    );
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                    //_releaseInfo[releaseVersion].addresses.push(address(service)); // TODO get this info from auth contract?
         | 
| 189 | 
            +
                    //_releaseInfo[releaseVersion].domains.push(serviceDomain);
         | 
| 190 | 
            +
                    //_releaseInfo[releaseVersion].names.push(serviceName); // TODO if needed read in _verifyService()
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                    _registeredServices++; // TODO use releaseInfo.someArray.length instead of _registeredServices
         | 
| 225 193 |  | 
| 226 | 
            -
                    //  | 
| 227 | 
            -
                     | 
| 228 | 
            -
             | 
| 229 | 
            -
                        revert ErrorReleaseRegistryServiceDomainMismatch(expectedDomain, serviceDomain);
         | 
| 194 | 
            +
                    // release fully deployed
         | 
| 195 | 
            +
                    if(_servicesToRegister == _registeredServices) {
         | 
| 196 | 
            +
                        _releaseInfo[releaseVersion].state = DEPLOYED();
         | 
| 230 197 | 
             
                    }
         | 
| 231 198 |  | 
| 232 | 
            -
                    //  | 
| 233 | 
            -
                     | 
| 234 | 
            -
                    service.linkToRegisteredNftId();
         | 
| 235 | 
            -
                    _registeredServices++;
         | 
| 199 | 
            +
                    // TODO: service address matches defined in release auth (precalculated one)
         | 
| 200 | 
            +
                    // revert ErrorReleaseRegistryServiceAddressMismatch()
         | 
| 236 201 |  | 
| 237 202 | 
             
                    // setup service authorization
         | 
| 238 203 | 
             
                    _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 | 
            -
             | 
| 204 | 
            +
                        serviceAuth, 
         | 
| 205 | 
            +
                        service,
         | 
| 206 | 
            +
                        serviceDomain,
         | 
| 207 | 
            +
                        releaseVersion);
         | 
| 250 208 |  | 
| 209 | 
            +
                    // register service with registry
         | 
| 210 | 
            +
                    nftId = _registry.registerService(info, serviceVersion, serviceDomain);
         | 
| 211 | 
            +
                    service.linkToRegisteredNftId();
         | 
| 212 | 
            +
                }
         | 
| 213 | 
            +
                // TODO return activated version
         | 
| 251 214 | 
             
                function activateNextRelease() 
         | 
| 252 215 | 
             
                    external 
         | 
| 253 216 | 
             
                    restricted // GIF_ADMIN_ROLE
         | 
| 254 217 | 
             
                {
         | 
| 255 218 | 
             
                    VersionPart version = _next;
         | 
| 256 | 
            -
                    StateId state = _state[version];
         | 
| 257 | 
            -
                    StateId newState = ACTIVE();
         | 
| 258 219 |  | 
| 259 | 
            -
                    //  | 
| 260 | 
            -
                     | 
| 261 | 
            -
                        revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
         | 
| 262 | 
            -
                    }
         | 
| 220 | 
            +
                    // release can transition to ACTIVE state
         | 
| 221 | 
            +
                    checkTransition(_releaseInfo[version].state, RELEASE(), DEPLOYED(), ACTIVE());
         | 
| 263 222 |  | 
| 264 | 
            -
                     | 
| 265 | 
            -
                     | 
| 266 | 
            -
             | 
| 267 | 
            -
                     | 
| 223 | 
            +
                    _latest = version;
         | 
| 224 | 
            +
                    _releases++;
         | 
| 225 | 
            +
                    _releaseInfo[version].state = ACTIVE();
         | 
| 226 | 
            +
                    _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                    // grant special roles for registry/staking/pool services
         | 
| 229 | 
            +
                    // this will enable access to core contracts functions
         | 
| 268 230 |  | 
| 269 | 
            -
                    //  | 
| 231 | 
            +
                    // registry service MUST be registered for each release
         | 
| 270 232 | 
             
                    address service = _registry.getServiceAddress(REGISTRY(), version);
         | 
| 271 233 | 
             
                    if(service == address(0)) {
         | 
| 272 | 
            -
                        revert  | 
| 234 | 
            +
                        revert ErrorReleaseRegistryRegistryServiceMissing(version);
         | 
| 273 235 | 
             
                    }
         | 
| 274 236 |  | 
| 275 | 
            -
                     | 
| 276 | 
            -
                    _state[version] = newState;
         | 
| 237 | 
            +
                    _admin.grantServiceRoleForAllVersions(IService(service), REGISTRY());
         | 
| 277 238 |  | 
| 278 | 
            -
                     | 
| 279 | 
            -
                     | 
| 239 | 
            +
                    service = _registry.getServiceAddress(STAKING(), version);
         | 
| 240 | 
            +
                    if(service != address(0)) {
         | 
| 241 | 
            +
                        _admin.grantServiceRoleForAllVersions(IService(service), STAKING());
         | 
| 242 | 
            +
                    }
         | 
| 243 | 
            +
             | 
| 244 | 
            +
                    service = _registry.getServiceAddress(POOL(), version);
         | 
| 245 | 
            +
                    if(service != address(0)) {
         | 
| 246 | 
            +
                        _admin.grantServiceRoleForAllVersions(IService(service), POOL());
         | 
| 247 | 
            +
                    }
         | 
| 248 | 
            +
             | 
| 249 | 
            +
                    // TODO may run out of gas
         | 
| 250 | 
            +
                    // TODO test how many service can be locked in one transaction
         | 
| 251 | 
            +
                    // -> add to docs + each release must test for this -> add to release version tests (in test call with some gas limit?)
         | 
| 252 | 
            +
                    _setReleaseLocked(version, false);
         | 
| 280 253 |  | 
| 281 254 | 
             
                    emit LogReleaseActivation(version);
         | 
| 282 255 | 
             
                }
         | 
| 283 256 |  | 
| 284 257 | 
             
                /// @dev stop all operations with release services
         | 
| 285 258 | 
             
                function pauseRelease(VersionPart version)
         | 
| 286 | 
            -
                    external
         | 
| 259 | 
            +
                    external 
         | 
| 287 260 | 
             
                    restricted // GIF_ADMIN_ROLE
         | 
| 288 261 | 
             
                {
         | 
| 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();
         | 
| 262 | 
            +
                    // release can transition to PAUSED state
         | 
| 263 | 
            +
                    checkTransition(_releaseInfo[version].state, RELEASE(), ACTIVE(), PAUSED());
         | 
| 299 264 |  | 
| 300 | 
            -
                     | 
| 265 | 
            +
                    _releaseInfo[version].state = PAUSED();
         | 
| 301 266 | 
             
                    _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp();
         | 
| 302 267 |  | 
| 268 | 
            +
                    _setReleaseLocked(version, true);
         | 
| 269 | 
            +
             | 
| 303 270 | 
             
                    emit LogReleaseDisabled(version);
         | 
| 304 271 | 
             
                }
         | 
| 305 272 |  | 
| 306 | 
            -
                // TODO consider revert if some delay is expired -> becomes disabled automatically
         | 
| 307 273 | 
             
                /// @dev resume operations with release services
         | 
| 308 274 | 
             
                function unpauseRelease(VersionPart version)
         | 
| 309 275 | 
             
                    external
         | 
| 310 276 | 
             
                    restricted // GIF_ADMIN_ROLE
         | 
| 311 277 | 
             
                {
         | 
| 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();
         | 
| 278 | 
            +
                    // release can transition to ACTIVE state
         | 
| 279 | 
            +
                    checkTransition(_releaseInfo[version].state, RELEASE(), PAUSED(), ACTIVE());
         | 
| 322 280 |  | 
| 323 | 
            -
                     | 
| 281 | 
            +
                    _releaseInfo[version].state = ACTIVE();
         | 
| 324 282 | 
             
                    _releaseInfo[version].disabledAt = zeroTimestamp();
         | 
| 325 283 |  | 
| 284 | 
            +
                    _setReleaseLocked(version, false);
         | 
| 285 | 
            +
             | 
| 326 286 | 
             
                    emit LogReleaseEnabled(version);
         | 
| 327 287 | 
             
                }
         | 
| 328 288 |  | 
| @@ -336,19 +296,18 @@ contract ReleaseRegistry is | |
| 336 296 | 
             
                    return Clones.predictDeterministicAddress(implementation, salt, deployer);
         | 
| 337 297 | 
             
                }
         | 
| 338 298 |  | 
| 339 | 
            -
                function isActiveRegistryService(address service) external view returns(bool) {
         | 
| 340 | 
            -
                    VersionPart version = _releaseVersionByAddress[service];
         | 
| 341 | 
            -
                    return isActiveRelease(version);
         | 
| 342 | 
            -
                }
         | 
| 343 | 
            -
             | 
| 344 299 | 
             
                function isActiveRelease(VersionPart version) public view returns(bool) {
         | 
| 345 | 
            -
                    return  | 
| 300 | 
            +
                    return _releaseInfo[version].state == ACTIVE();
         | 
| 346 301 | 
             
                }
         | 
| 347 302 |  | 
| 348 303 | 
             
                function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
         | 
| 349 304 | 
             
                    return _releaseInfo[version];
         | 
| 350 305 | 
             
                }
         | 
| 351 306 |  | 
| 307 | 
            +
                function releases() external view returns (uint) {
         | 
| 308 | 
            +
                    return _releases;
         | 
| 309 | 
            +
                }
         | 
| 310 | 
            +
             | 
| 352 311 | 
             
                function getNextVersion() public view returns(VersionPart) {
         | 
| 353 312 | 
             
                    return _next;
         | 
| 354 313 | 
             
                }
         | 
| @@ -357,12 +316,8 @@ contract ReleaseRegistry is | |
| 357 316 | 
             
                    return _latest;
         | 
| 358 317 | 
             
                }
         | 
| 359 318 |  | 
| 360 | 
            -
                function getInitialVersion() external view returns(VersionPart) {
         | 
| 361 | 
            -
                    return _initial;
         | 
| 362 | 
            -
                }
         | 
| 363 | 
            -
             | 
| 364 319 | 
             
                function getState(VersionPart version) external view returns (StateId stateId) {
         | 
| 365 | 
            -
                    return  | 
| 320 | 
            +
                    return _releaseInfo[version].state;
         | 
| 366 321 | 
             
                }
         | 
| 367 322 |  | 
| 368 323 | 
             
                function getRemainingServicesToRegister() external view returns (uint256 services) {
         | 
| @@ -374,7 +329,7 @@ contract ReleaseRegistry is | |
| 374 329 | 
             
                    view
         | 
| 375 330 | 
             
                    returns (IServiceAuthorization serviceAuthorization)
         | 
| 376 331 | 
             
                {
         | 
| 377 | 
            -
                    return  | 
| 332 | 
            +
                    return _releaseInfo[version].auth;
         | 
| 378 333 | 
             
                }
         | 
| 379 334 |  | 
| 380 335 | 
             
                function getRegistryAdmin() external view returns (address) {
         | 
| @@ -389,7 +344,61 @@ contract ReleaseRegistry is | |
| 389 344 |  | 
| 390 345 | 
             
                //--- private functions ----------------------------------------------------//
         | 
| 391 346 |  | 
| 392 | 
            -
                 | 
| 347 | 
            +
                // close / open service targets instead of revoking / granting roles
         | 
| 348 | 
            +
                function _setReleaseLocked(VersionPart version, bool locked)
         | 
| 349 | 
            +
                    private
         | 
| 350 | 
            +
                {
         | 
| 351 | 
            +
                    address service;
         | 
| 352 | 
            +
                    ObjectType domain;
         | 
| 353 | 
            +
                    IServiceAuthorization auth = _releaseInfo[version].auth;
         | 
| 354 | 
            +
             | 
| 355 | 
            +
                    ObjectType[] memory domains = auth.getServiceDomains();
         | 
| 356 | 
            +
                    for(uint idx = 0; idx < domains.length; idx++)
         | 
| 357 | 
            +
                    {
         | 
| 358 | 
            +
                        domain = domains[idx];
         | 
| 359 | 
            +
                        service = _registry.getServiceAddress(domain, version);
         | 
| 360 | 
            +
                        assert(service != address(0));
         | 
| 361 | 
            +
             | 
| 362 | 
            +
                        _admin.setServiceLocked(IService(service), locked);
         | 
| 363 | 
            +
                    }
         | 
| 364 | 
            +
             | 
| 365 | 
            +
                    // TODO add check for active/disabled release to core contracts functions interacting with releases
         | 
| 366 | 
            +
                }
         | 
| 367 | 
            +
             | 
| 368 | 
            +
                function _verifyServiceAuthorization(
         | 
| 369 | 
            +
                    IServiceAuthorization serviceAuthorization,
         | 
| 370 | 
            +
                    VersionPart releaseVersion,
         | 
| 371 | 
            +
                    bytes32 salt
         | 
| 372 | 
            +
                )
         | 
| 373 | 
            +
                    private
         | 
| 374 | 
            +
                    view
         | 
| 375 | 
            +
                    returns (uint256 serviceDomainsCount)
         | 
| 376 | 
            +
                {
         | 
| 377 | 
            +
                    // authorization contract supports IServiceAuthorization interface
         | 
| 378 | 
            +
                    if(!serviceAuthorization.supportsInterface(type(IServiceAuthorization).interfaceId)) {
         | 
| 379 | 
            +
                            revert ErrorReleaseRegistryNotServiceAuth(address(serviceAuthorization));
         | 
| 380 | 
            +
                    }
         | 
| 381 | 
            +
             | 
| 382 | 
            +
                    // authorizaions contract version matches with release version
         | 
| 383 | 
            +
                    VersionPart authVersion = serviceAuthorization.getRelease();
         | 
| 384 | 
            +
                    if (releaseVersion != authVersion) {
         | 
| 385 | 
            +
                        revert ErrorReleaseRegistryServiceAuthVersionMismatch(serviceAuthorization, releaseVersion, authVersion);
         | 
| 386 | 
            +
                    }
         | 
| 387 | 
            +
             | 
| 388 | 
            +
                    // sanity check to ensure service domain list is not empty
         | 
| 389 | 
            +
                    serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
         | 
| 390 | 
            +
                    if (serviceDomainsCount == 0) {
         | 
| 391 | 
            +
                        revert ErrorReleaseRegistryServiceAuthDomainsZero(serviceAuthorization, releaseVersion);
         | 
| 392 | 
            +
                    }
         | 
| 393 | 
            +
                }
         | 
| 394 | 
            +
             | 
| 395 | 
            +
                // TODO get service names 
         | 
| 396 | 
            +
                function _verifyService(
         | 
| 397 | 
            +
                    IService service, 
         | 
| 398 | 
            +
                    address expectedAuthority, 
         | 
| 399 | 
            +
                    VersionPart expectedVersion,
         | 
| 400 | 
            +
                    ObjectType expectedDomain
         | 
| 401 | 
            +
                )
         | 
| 393 402 | 
             
                    internal
         | 
| 394 403 | 
             
                    view
         | 
| 395 404 | 
             
                    returns(
         | 
| @@ -410,22 +419,25 @@ contract ReleaseRegistry is | |
| 410 419 |  | 
| 411 420 | 
             
                    _verifyServiceInfo(service, serviceInfo, owner);
         | 
| 412 421 |  | 
| 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 422 | 
             
                    if(serviceAuthority != expectedAuthority) {
         | 
| 418 | 
            -
                        revert  | 
| 423 | 
            +
                        revert ErrorReleaseRegistryServiceAuthorityMismatch(
         | 
| 419 424 | 
             
                            service,
         | 
| 420 425 | 
             
                            serviceAuthority,
         | 
| 421 426 | 
             
                            expectedAuthority);
         | 
| 422 427 | 
             
                    }
         | 
| 423 428 |  | 
| 424 | 
            -
                    if(serviceVersion !=  | 
| 425 | 
            -
                        revert  | 
| 429 | 
            +
                    if(serviceVersion != expectedVersion) {
         | 
| 430 | 
            +
                        revert ErrorReleaseRegistryServiceVersionMismatch(
         | 
| 426 431 | 
             
                            service,
         | 
| 427 432 | 
             
                            serviceVersion,
         | 
| 428 | 
            -
                             | 
| 433 | 
            +
                            expectedVersion);            
         | 
| 434 | 
            +
                    }
         | 
| 435 | 
            +
             | 
| 436 | 
            +
                    if(serviceDomain != expectedDomain) {
         | 
| 437 | 
            +
                        revert ErrorReleaseRegistryServiceDomainMismatch(
         | 
| 438 | 
            +
                            service,
         | 
| 439 | 
            +
                            expectedDomain,
         | 
| 440 | 
            +
                            serviceDomain);
         | 
| 429 441 | 
             
                    }
         | 
| 430 442 | 
             
                }
         | 
| 431 443 |  | 
| @@ -439,7 +451,7 @@ contract ReleaseRegistry is | |
| 439 451 | 
             
                    view
         | 
| 440 452 | 
             
                {
         | 
| 441 453 | 
             
                    if(info.objectAddress != address(service)) {
         | 
| 442 | 
            -
                        revert ErrorReleaseRegistryServiceInfoAddressInvalid(service,  | 
| 454 | 
            +
                        revert ErrorReleaseRegistryServiceInfoAddressInvalid(service, info.objectAddress);
         | 
| 443 455 | 
             
                    }
         | 
| 444 456 |  | 
| 445 457 | 
             
                    if(info.isInterceptor != false) { // service is never interceptor
         | 
| @@ -472,10 +484,9 @@ contract ReleaseRegistry is | |
| 472 484 | 
             
                    if (registryAddress == address(0)) {
         | 
| 473 485 | 
             
                        return false;
         | 
| 474 486 | 
             
                    }
         | 
| 475 | 
            -
                    // TODO try catch and return false in case of revert
         | 
| 476 | 
            -
                    // or just panic
         | 
| 487 | 
            +
                    // TODO try catch and return false in case of revert or just panic
         | 
| 477 488 | 
             
                    // check if contract returns a zero nft id for its own address
         | 
| 478 | 
            -
                    if (IRegistry(registryAddress). | 
| 489 | 
            +
                    if (IRegistry(registryAddress).getNftIdForAddress(registryAddress).eqz()) {
         | 
| 479 490 | 
             
                        return false;
         | 
| 480 491 | 
             
                    }
         | 
| 481 492 |  | 
| @@ -2,14 +2,12 @@ | |
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 4 | 
             
            import {
         | 
| 5 | 
            -
                 ALL, REGISTRY,  | 
| 5 | 
            +
                 ALL, REGISTRY, PRODUCT, ORACLE, POOL, INSTANCE, COMPONENT, DISTRIBUTION, DISTRIBUTOR, APPLICATION, POLICY, CLAIM, BUNDLE, STAKING, PRICE
         | 
| 6 6 | 
             
            } from "../../contracts/type/ObjectType.sol";
         | 
| 7 7 |  | 
| 8 | 
            -
            import {ComponentService} from "../shared/ComponentService.sol";
         | 
| 9 8 | 
             
            import {IAccess} from "../authorization/IAccess.sol";
         | 
| 10 9 | 
             
            import {IBundleService} from "../pool/IBundleService.sol";
         | 
| 11 10 | 
             
            import {IDistributionService} from "../distribution/IDistributionService.sol";
         | 
| 12 | 
            -
            import {InstanceService} from "../instance/InstanceService.sol";
         | 
| 13 11 | 
             
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 14 12 | 
             
            import {IPoolService} from "../pool/IPoolService.sol";
         | 
| 15 13 | 
             
            import {IStakingService} from "../staking/IStakingService.sol";
         | 
| @@ -21,8 +19,8 @@ contract ServiceAuthorizationV3 | |
| 21 19 | 
             
                 is ServiceAuthorization
         | 
| 22 20 | 
             
            {
         | 
| 23 21 |  | 
| 24 | 
            -
                 constructor( | 
| 25 | 
            -
                      ServiceAuthorization(commitHash)
         | 
| 22 | 
            +
                 constructor(bytes memory commitHash)
         | 
| 23 | 
            +
                      ServiceAuthorization(commitHash, 3)
         | 
| 26 24 | 
             
                 {}
         | 
| 27 25 |  | 
| 28 26 | 
             
                 function _setupDomains()
         | 
| @@ -39,9 +37,9 @@ contract ServiceAuthorizationV3 | |
| 39 37 | 
             
                      _authorizeDomain(POOL(), address(8));
         | 
| 40 38 | 
             
                      _authorizeDomain(ORACLE(), address(9));
         | 
| 41 39 | 
             
                      _authorizeDomain(PRODUCT(), address(10));
         | 
| 42 | 
            -
                      _authorizeDomain( | 
| 43 | 
            -
                      _authorizeDomain( | 
| 44 | 
            -
                      _authorizeDomain( | 
| 40 | 
            +
                      _authorizeDomain(POLICY(), address(11));
         | 
| 41 | 
            +
                      _authorizeDomain(CLAIM(), address(12));
         | 
| 42 | 
            +
                      _authorizeDomain(APPLICATION(), address(13));
         | 
| 45 43 | 
             
                 }
         | 
| 46 44 |  | 
| 47 45 |  | 
| @@ -163,6 +161,7 @@ contract ServiceAuthorizationV3 | |
| 163 161 |  | 
| 164 162 | 
             
                      functions = _authorizeForService(DISTRIBUTION(), POLICY());
         | 
| 165 163 | 
             
                      _authorize(functions, IDistributionService.processSale.selector, "processSale");
         | 
| 164 | 
            +
                      _authorize(functions, IDistributionService.processReferral.selector, "processReferral");
         | 
| 166 165 | 
             
                 }
         | 
| 167 166 |  | 
| 168 167 |  | 
| @@ -175,11 +174,10 @@ contract ServiceAuthorizationV3 | |
| 175 174 | 
             
                      functions = _authorizeForService(POOL(), POLICY());
         | 
| 176 175 | 
             
                      _authorize(functions, IPoolService.lockCollateral.selector, "lockCollateral");
         | 
| 177 176 | 
             
                      _authorize(functions, IPoolService.releaseCollateral.selector, "releaseCollateral");
         | 
| 178 | 
            -
                      _authorize(functions, IPoolService.reduceCollateral.selector, "reduceCollateral");
         | 
| 179 177 | 
             
                      _authorize(functions, IPoolService.processSale.selector, "processSale");
         | 
| 180 178 |  | 
| 181 179 | 
             
                      functions = _authorizeForService(POOL(), CLAIM());
         | 
| 182 | 
            -
                      _authorize(functions, IPoolService. | 
| 180 | 
            +
                      _authorize(functions, IPoolService.processPayout.selector, "processPayout");
         | 
| 183 181 | 
             
                 }
         | 
| 184 182 |  | 
| 185 183 |  |