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