@etherisc/gif-next 0.0.2-f12cf4d-104 → 0.0.2-f13fd28-503
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 +23 -1
- 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 +148 -62
- 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 +149 -21
- 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 +82 -12
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +68 -13
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +100 -102
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +152 -33
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +51 -53
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +140 -110
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +46 -48
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +38 -40
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +50 -3
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +102 -56
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +127 -40
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +260 -199
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +152 -33
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +140 -91
- 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 +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +95 -77
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +111 -62
- 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 +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +306 -161
- 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 +118 -39
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +75 -18
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +150 -59
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +362 -99
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +140 -40
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +549 -218
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +87 -73
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +20 -22
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +403 -353
- 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 +2 -2
- 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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +68 -70
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +126 -35
- 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 +38 -40
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +27 -3
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +52 -54
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +98 -83
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +40 -22
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +51 -53
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +127 -40
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +102 -310
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +33 -83
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +38 -122
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +38 -40
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +120 -175
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +51 -53
- 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 +241 -302
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +67 -45
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +91 -65
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +16 -22
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +157 -144
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +152 -33
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +244 -187
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +55 -65
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +61 -10
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +142 -20
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +105 -55
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +27 -3
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +144 -131
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +27 -3
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +198 -181
- 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 +51 -45
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +85 -78
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +31 -33
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +157 -144
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +76 -77
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +25 -19
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +26 -2
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +31 -7
- 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/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +64 -40
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +250 -221
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +51 -44
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +11 -13
- 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 +2 -2
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +316 -50
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
- 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 +51 -39
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +200 -472
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +50 -64
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +27 -16
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +435 -5
- 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 +38 -26
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +106 -305
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +38 -40
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +120 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +27 -3
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +51 -53
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -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 +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -62
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +27 -16
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +63 -162
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +118 -29
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +32 -32
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +41 -29
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +98 -3
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +49 -33
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +101 -60
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +31 -19
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +4 -4
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +137 -51
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +22 -20
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +129 -129
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +23 -23
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +3 -3
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
- 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 +2 -2
- 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 +62 -5
- 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/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/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 +2 -2
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +3 -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 +2 -2
- 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 +177 -84
- package/contracts/authorization/AccessManagerCloneable.sol +136 -3
- package/contracts/authorization/Authorization.sol +277 -229
- package/contracts/authorization/IAccessAdmin.sol +13 -7
- package/contracts/authorization/IAuthorization.sol +15 -1
- package/contracts/distribution/BasicDistribution.sol +6 -6
- package/contracts/distribution/BasicDistributionAuthorization.sol +22 -9
- package/contracts/distribution/Distribution.sol +32 -30
- package/contracts/distribution/DistributionService.sol +32 -30
- package/contracts/distribution/DistributionServiceManager.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +5 -6
- package/contracts/examples/fire/FirePool.sol +6 -2
- package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
- package/contracts/examples/fire/FireProduct.sol +8 -1
- package/contracts/examples/fire/FireProductAuthorization.sol +2 -1
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +6 -7
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +7 -9
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +32 -0
- package/contracts/instance/BundleSet.sol +42 -38
- package/contracts/instance/IInstance.sol +13 -9
- package/contracts/instance/IInstanceService.sol +7 -6
- package/contracts/instance/Instance.sol +33 -18
- package/contracts/instance/InstanceAdmin.sol +247 -82
- package/contracts/instance/InstanceAuthorizationV3.sol +50 -31
- package/contracts/instance/InstanceReader.sol +162 -32
- package/contracts/instance/InstanceService.sol +62 -72
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/InstanceStore.sol +13 -2
- package/contracts/instance/RiskSet.sol +118 -0
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +4 -2
- package/contracts/instance/base/ObjectSet.sol +31 -33
- package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
- package/contracts/instance/module/IComponents.sol +3 -2
- package/contracts/instance/module/IRisk.sol +3 -0
- package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
- package/contracts/oracle/Oracle.sol +1 -1
- package/contracts/oracle/OracleService.sol +92 -74
- package/contracts/oracle/OracleServiceManager.sol +1 -1
- package/contracts/pool/BasicPoolAuthorization.sol +21 -13
- package/contracts/pool/BundleService.sol +35 -125
- package/contracts/pool/BundleServiceManager.sol +1 -1
- package/contracts/pool/IBundleService.sol +13 -38
- package/contracts/pool/IPoolService.sol +49 -56
- package/contracts/pool/Pool.sol +9 -9
- package/contracts/pool/PoolLib.sol +216 -0
- package/contracts/pool/PoolService.sol +323 -186
- package/contracts/pool/PoolServiceManager.sol +1 -1
- package/contracts/product/ApplicationService.sol +15 -15
- package/contracts/product/ApplicationServiceManager.sol +1 -1
- package/contracts/product/BasicProduct.sol +2 -0
- package/contracts/product/BasicProductAuthorization.sol +24 -10
- package/contracts/product/ClaimService.sol +157 -139
- package/contracts/product/ClaimServiceManager.sol +1 -1
- package/contracts/product/IApplicationService.sol +5 -2
- package/contracts/product/IClaimService.sol +14 -2
- package/contracts/product/IPolicyService.sol +23 -10
- package/contracts/product/IProductComponent.sol +4 -1
- package/contracts/product/PolicyService.sol +269 -257
- package/contracts/product/PolicyServiceLib.sol +65 -0
- package/contracts/product/PolicyServiceManager.sol +1 -1
- package/contracts/product/PricingService.sol +23 -19
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +53 -7
- package/contracts/product/RiskService.sol +74 -25
- package/contracts/product/RiskServiceManager.sol +1 -1
- package/contracts/registry/ChainNft.sol +4 -2
- package/contracts/registry/IRegistry.sol +8 -15
- package/contracts/registry/IRelease.sol +26 -0
- package/contracts/registry/Registry.sol +7 -2
- package/contracts/registry/RegistryAdmin.sol +129 -237
- package/contracts/registry/RegistryService.sol +3 -3
- package/contracts/registry/RegistryServiceManager.sol +1 -1
- package/contracts/registry/ReleaseAdmin.sol +245 -0
- package/contracts/registry/ReleaseLifecycle.sol +2 -0
- package/contracts/registry/ReleaseRegistry.sol +127 -101
- package/contracts/registry/ServiceAuthorizationV3.sol +84 -40
- package/contracts/registry/TokenRegistry.sol +6 -8
- package/contracts/shared/Component.sol +40 -42
- package/contracts/shared/ComponentService.sol +199 -286
- package/contracts/shared/ComponentServiceManager.sol +1 -1
- package/contracts/shared/ComponentVerifyingService.sol +1 -1
- package/contracts/shared/ContractLib.sol +208 -9
- package/contracts/shared/IComponent.sol +3 -9
- package/contracts/shared/IComponentService.sol +9 -27
- package/contracts/shared/IInstanceLinkedComponent.sol +0 -11
- package/contracts/shared/IRegisterable.sol +15 -4
- package/contracts/shared/IService.sol +3 -5
- package/contracts/shared/InstanceLinkedComponent.sol +3 -11
- package/contracts/shared/NftOwnable.sol +4 -4
- package/contracts/shared/PolicyHolder.sol +1 -1
- package/contracts/shared/Registerable.sol +45 -19
- package/contracts/shared/RegistryLinked.sol +1 -1
- package/contracts/shared/Service.sol +8 -27
- package/contracts/shared/TokenHandler.sol +40 -96
- package/contracts/staking/IStaking.sol +1 -9
- package/contracts/staking/IStakingService.sol +11 -1
- package/contracts/staking/StakeManagerLib.sol +63 -7
- package/contracts/staking/Staking.sol +45 -20
- package/contracts/staking/StakingReader.sol +1 -1
- package/contracts/staking/StakingService.sol +53 -57
- package/contracts/staking/StakingServiceManager.sol +5 -4
- package/contracts/type/Key32.sol +2 -2
- package/contracts/type/Key32Set.sol +62 -0
- package/contracts/type/NftId.sol +6 -0
- package/contracts/type/ObjectType.sol +48 -21
- package/contracts/type/RiskId.sol +23 -6
- package/contracts/type/RoleId.sol +24 -4
- package/contracts/type/Selector.sol +5 -0
- package/contracts/type/Timestamp.sol +0 -5
- package/contracts/type/UFixed.sol +9 -119
- package/contracts/type/Version.sol +15 -5
- package/contracts/upgradeability/ProxyManager.sol +1 -1
- package/package.json +1 -1
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +0 -4
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +0 -1196
- 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/type/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
- package/contracts/authorization/ReleaseAccessManager.sol +0 -38
- package/contracts/instance/module/IAccess.sol +0 -46
| @@ -0,0 +1,245 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {AccessAdmin} from "../authorization/AccessAdmin.sol";
         | 
| 5 | 
            +
            import {AccessManagerCloneable} from "../authorization/AccessManagerCloneable.sol";
         | 
| 6 | 
            +
            import {IAccess} from "../authorization/IAccess.sol";
         | 
| 7 | 
            +
            import {IService} from "../shared/IService.sol";
         | 
| 8 | 
            +
            import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol";
         | 
| 9 | 
            +
            import {ObjectType, ObjectTypeLib, ALL} from "../type/ObjectType.sol";
         | 
| 10 | 
            +
            import {RoleId, RoleIdLib, ADMIN_ROLE, RELEASE_REGISTRY_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
         | 
| 11 | 
            +
            import {VersionPart} from "../type/Version.sol";
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            /// @dev The ReleaseAdmin contract implements the central authorization for the services of a specific release.
         | 
| 14 | 
            +
            /// There is one ReleaseAdmin contract per major GIF release.
         | 
| 15 | 
            +
            /// Locking/unlocking of all services of a release is implemented in function setReleaseLocked.
         | 
| 16 | 
            +
            contract ReleaseAdmin is
         | 
| 17 | 
            +
                AccessAdmin
         | 
| 18 | 
            +
            {
         | 
| 19 | 
            +
                event LogReleaseAdminReleaseLockChanged(VersionPart release, bool locked);
         | 
| 20 | 
            +
                event LogReleaseAdminServiceLockChanged(VersionPart release, address service, bool locked);
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                error ErrorReleaseAdminCallerNotReleaseRegistry(address caller);
         | 
| 23 | 
            +
                error ErrorReleaseAdminNotService(address notService);
         | 
| 24 | 
            +
                error ErrorReleaseAdminReleaseLockAlreadySetTo(bool locked);
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                /// @dev release core roles
         | 
| 27 | 
            +
                string public constant RELEASE_REGISTRY_ROLE_NAME = "ReleaseRegistryRole";
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                /// @dev release core targets
         | 
| 30 | 
            +
                string public constant RELEASE_ADMIN_TARGET_NAME = "ReleaseAdmin";
         | 
| 31 | 
            +
             | 
| 32 | 
            +
             | 
| 33 | 
            +
                modifier onlyReleaseRegistry() {
         | 
| 34 | 
            +
                    (bool isMember, ) = _authority.hasRole(RELEASE_REGISTRY_ROLE().toInt(), msg.sender);
         | 
| 35 | 
            +
                    if(!isMember) {
         | 
| 36 | 
            +
                        revert ErrorReleaseAdminCallerNotReleaseRegistry(msg.sender);
         | 
| 37 | 
            +
                    }
         | 
| 38 | 
            +
                    _;
         | 
| 39 | 
            +
                }
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                /// @dev Only used for master release admin.
         | 
| 42 | 
            +
                /// Contracts created via constructor come with disabled initializers.
         | 
| 43 | 
            +
                constructor() {
         | 
| 44 | 
            +
                    initialize(new AccessManagerCloneable());
         | 
| 45 | 
            +
                    _disableInitializers();
         | 
| 46 | 
            +
                }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                function completeSetup(
         | 
| 49 | 
            +
                    address registry,
         | 
| 50 | 
            +
                    address releaseRegistry,
         | 
| 51 | 
            +
                    VersionPart release
         | 
| 52 | 
            +
                )
         | 
| 53 | 
            +
                    external
         | 
| 54 | 
            +
                    reinitializer(uint64(release.toInt()))
         | 
| 55 | 
            +
                {
         | 
| 56 | 
            +
                    AccessManagerCloneable(
         | 
| 57 | 
            +
                        authority()).completeSetup(
         | 
| 58 | 
            +
                            registry, 
         | 
| 59 | 
            +
                            release); 
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                    _setupReleaseRegistry(releaseRegistry);
         | 
| 62 | 
            +
                }
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                /// @dev Sets up authorizaion for specified service.
         | 
| 65 | 
            +
                /// For all authorized services its authorized functions are enabled.
         | 
| 66 | 
            +
                /// Permissioned function: Access is restricted to release registry.
         | 
| 67 | 
            +
                function authorizeService(
         | 
| 68 | 
            +
                    IServiceAuthorization serviceAuthorization,
         | 
| 69 | 
            +
                    IService service,
         | 
| 70 | 
            +
                    ObjectType serviceDomain,
         | 
| 71 | 
            +
                    VersionPart releaseVersion
         | 
| 72 | 
            +
                )
         | 
| 73 | 
            +
                    external
         | 
| 74 | 
            +
                    restricted()
         | 
| 75 | 
            +
                {
         | 
| 76 | 
            +
                    _createServiceTargetAndRole(service, serviceDomain, releaseVersion);
         | 
| 77 | 
            +
                    _authorizeServiceFunctions(serviceAuthorization, service, serviceDomain, releaseVersion);
         | 
| 78 | 
            +
                }
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                /// @dev Locks/unlocks all release targets.
         | 
| 81 | 
            +
                /// For all authorized services of release its authorized functions are disabled/enabled.
         | 
| 82 | 
            +
                /// Permissioned function: Access is restricted to release registry.
         | 
| 83 | 
            +
                /// Note: onlyReleaseRegistry() modifier is used to prevent dead lock.
         | 
| 84 | 
            +
                function setReleaseLocked(bool locked)
         | 
| 85 | 
            +
                    external
         | 
| 86 | 
            +
                    onlyReleaseRegistry()
         | 
| 87 | 
            +
                {
         | 
| 88 | 
            +
                    // checks
         | 
| 89 | 
            +
                    AccessManagerCloneable accessManager = AccessManagerCloneable(authority());
         | 
| 90 | 
            +
                    if(accessManager.isLocked() == locked) {
         | 
| 91 | 
            +
                        revert ErrorReleaseAdminReleaseLockAlreadySetTo(locked);
         | 
| 92 | 
            +
                    }
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                    // effects
         | 
| 95 | 
            +
                    accessManager.setLocked(locked);
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                    emit LogReleaseAdminReleaseLockChanged(getRelease(), locked);
         | 
| 98 | 
            +
                }
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                /// @dev Lock/unlock specific service of release.
         | 
| 101 | 
            +
                /// Permissioned function: Access is restricted to release registry.
         | 
| 102 | 
            +
                function setServiceLocked(IService service, bool locked)
         | 
| 103 | 
            +
                    external
         | 
| 104 | 
            +
                    restricted()
         | 
| 105 | 
            +
                {
         | 
| 106 | 
            +
                    // assume all targets except release admin are services
         | 
| 107 | 
            +
                    // ensure release admin can not be locked
         | 
| 108 | 
            +
                    if(address(service) == address(this)) {
         | 
| 109 | 
            +
                        revert ErrorReleaseAdminNotService(address(service));
         | 
| 110 | 
            +
                    }
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                    _setTargetClosed(address(service), locked);
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                    emit LogReleaseAdminServiceLockChanged(service.getRelease(), address(service), locked);
         | 
| 115 | 
            +
                }
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                //--- view functions ----------------------------------------------------//
         | 
| 118 | 
            +
             | 
| 119 | 
            +
            /*
         | 
| 120 | 
            +
                function getReleaseAdminRole() external view returns (RoleId) {
         | 
| 121 | 
            +
                    return GIF_ADMIN_ROLE();
         | 
| 122 | 
            +
                }
         | 
| 123 | 
            +
            */
         | 
| 124 | 
            +
                //--- private functions -------------------------------------------------//
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                function _createServiceTargetAndRole(
         | 
| 127 | 
            +
                    IService service, 
         | 
| 128 | 
            +
                    ObjectType serviceDomain, 
         | 
| 129 | 
            +
                    VersionPart releaseVersion
         | 
| 130 | 
            +
                )
         | 
| 131 | 
            +
                    private
         | 
| 132 | 
            +
                {
         | 
| 133 | 
            +
                    string memory baseName = ObjectTypeLib.toName(serviceDomain);
         | 
| 134 | 
            +
                    uint256 versionInt = releaseVersion.toInt();
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                    // create service target
         | 
| 137 | 
            +
                    string memory serviceTargetName = ObjectTypeLib.toVersionedName(
         | 
| 138 | 
            +
                        baseName, "Service", versionInt);
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                    _createTarget(
         | 
| 141 | 
            +
                        address(service), 
         | 
| 142 | 
            +
                        serviceTargetName,
         | 
| 143 | 
            +
                        true,
         | 
| 144 | 
            +
                        false);
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                    // create service role
         | 
| 147 | 
            +
                    RoleId serviceRoleId = RoleIdLib.roleForTypeAndVersion(
         | 
| 148 | 
            +
                        serviceDomain, 
         | 
| 149 | 
            +
                        releaseVersion);
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                    if(!roleExists(serviceRoleId)) {
         | 
| 152 | 
            +
                        _createRole(
         | 
| 153 | 
            +
                            serviceRoleId, 
         | 
| 154 | 
            +
                            toRole({
         | 
| 155 | 
            +
                                adminRoleId: ADMIN_ROLE(),
         | 
| 156 | 
            +
                                roleType: RoleType.Contract,
         | 
| 157 | 
            +
                                maxMemberCount: 1,
         | 
| 158 | 
            +
                                name: ObjectTypeLib.toVersionedName(
         | 
| 159 | 
            +
                                    baseName, 
         | 
| 160 | 
            +
                                    "ServiceRole", 
         | 
| 161 | 
            +
                                    versionInt)}));
         | 
| 162 | 
            +
                    }
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                    _grantRoleToAccount( 
         | 
| 165 | 
            +
                        serviceRoleId,
         | 
| 166 | 
            +
                        address(service)); 
         | 
| 167 | 
            +
                }
         | 
| 168 | 
            +
             | 
| 169 | 
            +
             | 
| 170 | 
            +
                function _authorizeServiceFunctions(
         | 
| 171 | 
            +
                    IServiceAuthorization serviceAuthorization,
         | 
| 172 | 
            +
                    IService service,
         | 
| 173 | 
            +
                    ObjectType serviceDomain, 
         | 
| 174 | 
            +
                    VersionPart releaseVersion
         | 
| 175 | 
            +
                )
         | 
| 176 | 
            +
                    private
         | 
| 177 | 
            +
                {
         | 
| 178 | 
            +
                    ObjectType authorizedDomain;
         | 
| 179 | 
            +
                    RoleId authorizedRoleId;
         | 
| 180 | 
            +
             | 
| 181 | 
            +
                    ObjectType[] memory authorizedDomains = serviceAuthorization.getAuthorizedDomains(serviceDomain);
         | 
| 182 | 
            +
             | 
| 183 | 
            +
                    for (uint256 i = 0; i < authorizedDomains.length; i++) {
         | 
| 184 | 
            +
                        authorizedDomain = authorizedDomains[i];
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                        // derive authorized role from authorized domain
         | 
| 187 | 
            +
                        if (authorizedDomain == ALL()) {
         | 
| 188 | 
            +
                            authorizedRoleId = PUBLIC_ROLE();
         | 
| 189 | 
            +
                        } else {
         | 
| 190 | 
            +
                            authorizedRoleId = RoleIdLib.roleForTypeAndVersion(
         | 
| 191 | 
            +
                            authorizedDomain, 
         | 
| 192 | 
            +
                            releaseVersion);
         | 
| 193 | 
            +
                        }
         | 
| 194 | 
            +
             | 
| 195 | 
            +
                        if(!roleExists(authorizedRoleId)) {
         | 
| 196 | 
            +
                            // create role for authorized domain
         | 
| 197 | 
            +
                            _createRole(
         | 
| 198 | 
            +
                                authorizedRoleId, 
         | 
| 199 | 
            +
                                toRole({
         | 
| 200 | 
            +
                                    adminRoleId: ADMIN_ROLE(),
         | 
| 201 | 
            +
                                    roleType: RoleType.Contract,
         | 
| 202 | 
            +
                                    maxMemberCount: 1,
         | 
| 203 | 
            +
                                    name: ObjectTypeLib.toVersionedName(
         | 
| 204 | 
            +
                                        ObjectTypeLib.toName(authorizedDomain), 
         | 
| 205 | 
            +
                                        "Role", 
         | 
| 206 | 
            +
                                        releaseVersion.toInt())}));
         | 
| 207 | 
            +
                        }
         | 
| 208 | 
            +
             | 
| 209 | 
            +
                        // get authorized functions for authorized domain
         | 
| 210 | 
            +
                        IAccess.FunctionInfo[] memory authorizatedFunctions = serviceAuthorization.getAuthorizedFunctions(
         | 
| 211 | 
            +
                            serviceDomain, 
         | 
| 212 | 
            +
                            authorizedDomain);
         | 
| 213 | 
            +
             | 
| 214 | 
            +
                        _authorizeTargetFunctions(
         | 
| 215 | 
            +
                                address(service), 
         | 
| 216 | 
            +
                                authorizedRoleId, 
         | 
| 217 | 
            +
                                authorizatedFunctions);
         | 
| 218 | 
            +
                    }
         | 
| 219 | 
            +
                }
         | 
| 220 | 
            +
             | 
| 221 | 
            +
                //--- private initialization functions -------------------------------------------//
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                function _setupReleaseRegistry(address releaseRegistry)
         | 
| 224 | 
            +
                    private 
         | 
| 225 | 
            +
                    onlyInitializing()
         | 
| 226 | 
            +
                {
         | 
| 227 | 
            +
                    _createTarget(address(this), RELEASE_ADMIN_TARGET_NAME, false, false);
         | 
| 228 | 
            +
             | 
| 229 | 
            +
                    _createRole(
         | 
| 230 | 
            +
                        RELEASE_REGISTRY_ROLE(), 
         | 
| 231 | 
            +
                        toRole({
         | 
| 232 | 
            +
                            adminRoleId: ADMIN_ROLE(),
         | 
| 233 | 
            +
                            roleType: RoleType.Contract,
         | 
| 234 | 
            +
                            maxMemberCount: 1,
         | 
| 235 | 
            +
                            name: RELEASE_REGISTRY_ROLE_NAME}));
         | 
| 236 | 
            +
             | 
| 237 | 
            +
                    FunctionInfo[] memory functions;
         | 
| 238 | 
            +
                    functions = new FunctionInfo[](2);
         | 
| 239 | 
            +
                    functions[0] = toFunction(ReleaseAdmin.authorizeService.selector, "authorizeService");
         | 
| 240 | 
            +
                    functions[1] = toFunction(ReleaseAdmin.setServiceLocked.selector, "setServiceLocked");
         | 
| 241 | 
            +
                    _authorizeTargetFunctions(address(this), RELEASE_REGISTRY_ROLE(), functions);
         | 
| 242 | 
            +
             | 
| 243 | 
            +
                    _grantRoleToAccount(RELEASE_REGISTRY_ROLE(), releaseRegistry);
         | 
| 244 | 
            +
                }
         | 
| 245 | 
            +
            }
         | 
| @@ -5,6 +5,8 @@ import {RELEASE} from "../type/ObjectType.sol"; | |
| 5 5 | 
             
            import {SCHEDULED, DEPLOYING, DEPLOYED, SKIPPED, ACTIVE, PAUSED, CLOSED} from "../type/StateId.sol";
         | 
| 6 6 | 
             
            import {Lifecycle} from "../shared/Lifecycle.sol";
         | 
| 7 7 |  | 
| 8 | 
            +
            /// @dev Release lifeycle state machine.
         | 
| 9 | 
            +
            /// Helper contract for ReleaseRegistry.
         | 
| 8 10 | 
             
            contract ReleaseLifecycle is
         | 
| 9 11 | 
             
                Lifecycle
         | 
| 10 12 | 
             
            {
         | 
| @@ -13,27 +13,37 @@ import {StateId, SCHEDULED, DEPLOYING, DEPLOYED, SKIPPED, ACTIVE, PAUSED} from " | |
| 13 13 | 
             
            import {VersionPart, VersionPartLib} from "../type/Version.sol";
         | 
| 14 14 |  | 
| 15 15 | 
             
            import {IService} from "../shared/IService.sol";
         | 
| 16 | 
            -
             | 
| 16 | 
            +
             | 
| 17 | 
            +
            import {IAccessAdmin} from "../authorization/IAccessAdmin.sol";
         | 
| 18 | 
            +
            import {AccessManagerCloneable} from "../authorization/AccessManagerCloneable.sol";
         | 
| 17 19 |  | 
| 18 20 | 
             
            import {IRegistry} from "./IRegistry.sol";
         | 
| 21 | 
            +
            import {IRelease} from "./IRelease.sol";
         | 
| 19 22 | 
             
            import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
         | 
| 20 23 | 
             
            import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol";
         | 
| 21 24 | 
             
            import {RegistryAdmin} from "./RegistryAdmin.sol";
         | 
| 22 25 | 
             
            import {Registry} from "./Registry.sol";
         | 
| 23 26 | 
             
            import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
         | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 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.
         | 
| 26 36 | 
             
            contract ReleaseRegistry is 
         | 
| 27 37 | 
             
                AccessManaged,
         | 
| 28 38 | 
             
                ReleaseLifecycle, 
         | 
| 29 39 | 
             
                IRegistryLinked
         | 
| 30 40 | 
             
            {
         | 
| 31 | 
            -
                uint256 public constant INITIAL_GIF_VERSION = 3;// first active version  
         | 
| 41 | 
            +
                uint256 public constant INITIAL_GIF_VERSION = 3;// first active release version  
         | 
| 32 42 |  | 
| 33 | 
            -
                event LogReleaseCreation(VersionPart  | 
| 34 | 
            -
                event LogReleaseActivation(VersionPart  | 
| 35 | 
            -
                event LogReleaseDisabled(VersionPart  | 
| 36 | 
            -
                event LogReleaseEnabled(VersionPart  | 
| 43 | 
            +
                event LogReleaseCreation(IAccessAdmin admin, VersionPart release, bytes32 salt); 
         | 
| 44 | 
            +
                event LogReleaseActivation(VersionPart release);
         | 
| 45 | 
            +
                event LogReleaseDisabled(VersionPart release);
         | 
| 46 | 
            +
                event LogReleaseEnabled(VersionPart release);
         | 
| 37 47 |  | 
| 38 48 | 
             
                // constructor
         | 
| 39 49 | 
             
                error ErrorReleaseRegistryNotRegistry(Registry registry);
         | 
| @@ -41,7 +51,7 @@ contract ReleaseRegistry is | |
| 41 51 | 
             
                // _verifyServiceAuthorization
         | 
| 42 52 | 
             
                error ErrorReleaseRegistryNotServiceAuth(address notAuth);
         | 
| 43 53 | 
             
                error ErrorReleaseRegistryServiceAuthVersionMismatch(IServiceAuthorization auth, VersionPart expected, VersionPart actual);
         | 
| 44 | 
            -
                error ErrorReleaseRegistryServiceAuthDomainsZero(IServiceAuthorization auth, VersionPart  | 
| 54 | 
            +
                error ErrorReleaseRegistryServiceAuthDomainsZero(IServiceAuthorization auth, VersionPart release);
         | 
| 45 55 |  | 
| 46 56 | 
             
                // registerService
         | 
| 47 57 | 
             
                error ErrorReleaseRegistryServiceAddressMismatch(address expected, address actual);
         | 
| @@ -66,13 +76,16 @@ contract ReleaseRegistry is | |
| 66 76 | 
             
                RegistryAdmin public immutable _admin;
         | 
| 67 77 | 
             
                Registry public immutable _registry;
         | 
| 68 78 |  | 
| 69 | 
            -
                mapping(VersionPart  | 
| 70 | 
            -
                VersionPart [] internal _release; // array of all created releases
         | 
| 71 | 
            -
                 | 
| 72 | 
            -
                VersionPart internal _next; // version to create and activate 
         | 
| 79 | 
            +
                mapping(VersionPart release => IRelease.ReleaseInfo info) internal _releaseInfo;
         | 
| 80 | 
            +
                VersionPart [] internal _release; // array of all created releases    
         | 
| 81 | 
            +
                ReleaseAdmin internal _masterReleaseAdmin;
         | 
| 73 82 |  | 
| 74 | 
            -
                 | 
| 75 | 
            -
                 | 
| 83 | 
            +
                VersionPart internal _latest; // latest active release
         | 
| 84 | 
            +
                VersionPart internal _next; // release version to create and activate 
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                // counters per release
         | 
| 87 | 
            +
                uint256 internal _registeredServices = 0;
         | 
| 88 | 
            +
                uint256 internal _servicesToRegister = 0;
         | 
| 76 89 |  | 
| 77 90 | 
             
                constructor(Registry registry)
         | 
| 78 91 | 
             
                    AccessManaged(msg.sender)
         | 
| @@ -86,28 +99,31 @@ contract ReleaseRegistry is | |
| 86 99 | 
             
                    _registry = registry;
         | 
| 87 100 | 
             
                    _admin = RegistryAdmin(_registry.getRegistryAdminAddress());
         | 
| 88 101 |  | 
| 102 | 
            +
                    _masterReleaseAdmin = new ReleaseAdmin();
         | 
| 103 | 
            +
             | 
| 89 104 | 
             
                    _next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
         | 
| 90 105 | 
             
                }
         | 
| 91 106 |  | 
| 92 | 
            -
                /// @dev  | 
| 93 | 
            -
                ///  | 
| 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.
         | 
| 94 110 | 
             
                function createNextRelease()
         | 
| 95 111 | 
             
                    external
         | 
| 96 112 | 
             
                    restricted() // GIF_ADMIN_ROLE
         | 
| 97 113 | 
             
                    returns(VersionPart)
         | 
| 98 114 | 
             
                {
         | 
| 99 | 
            -
                    VersionPart  | 
| 115 | 
            +
                    VersionPart release = _next;
         | 
| 100 116 |  | 
| 101 | 
            -
                    if(isValidTransition(RELEASE(), _releaseInfo[ | 
| 102 | 
            -
                        _releaseInfo[ | 
| 117 | 
            +
                    if(isValidTransition(RELEASE(), _releaseInfo[release].state, SKIPPED())) {
         | 
| 118 | 
            +
                        _releaseInfo[release].state = SKIPPED();
         | 
| 103 119 | 
             
                    }
         | 
| 104 120 |  | 
| 105 | 
            -
                     | 
| 106 | 
            -
                    _release.push( | 
| 121 | 
            +
                    release = VersionPartLib.toVersionPart(release.toInt() + 1);
         | 
| 122 | 
            +
                    _release.push(release);
         | 
| 107 123 |  | 
| 108 | 
            -
                    _next =  | 
| 109 | 
            -
                    _releaseInfo[ | 
| 110 | 
            -
                    _releaseInfo[ | 
| 124 | 
            +
                    _next = release;
         | 
| 125 | 
            +
                    _releaseInfo[release].version = release;
         | 
| 126 | 
            +
                    _releaseInfo[release].state = getInitialState(RELEASE());
         | 
| 111 127 | 
             
                    _servicesToRegister = 0;
         | 
| 112 128 | 
             
                    _registeredServices = 0;
         | 
| 113 129 |  | 
| @@ -121,7 +137,7 @@ contract ReleaseRegistry is | |
| 121 137 | 
             
                    external
         | 
| 122 138 | 
             
                    restricted() // GIF_MANAGER_ROLE
         | 
| 123 139 | 
             
                    returns(
         | 
| 124 | 
            -
                         | 
| 140 | 
            +
                        ReleaseAdmin releaseAdmin, 
         | 
| 125 141 | 
             
                        VersionPart releaseVersion, 
         | 
| 126 142 | 
             
                        bytes32 releaseSalt
         | 
| 127 143 | 
             
                    )
         | 
| @@ -131,10 +147,13 @@ contract ReleaseRegistry is | |
| 131 147 | 
             
                    // release can transition into DEPLOYING state
         | 
| 132 148 | 
             
                    checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), SCHEDULED(), DEPLOYING());
         | 
| 133 149 |  | 
| 150 | 
            +
                    // verify authorizations
         | 
| 134 151 | 
             
                    uint256 serviceDomainsCount = _verifyServiceAuthorization(serviceAuthorization, releaseVersion, salt);
         | 
| 135 152 |  | 
| 136 | 
            -
                     | 
| 153 | 
            +
                    // create and initialize release admin
         | 
| 154 | 
            +
                    releaseAdmin = _cloneNewReleaseAdmin(releaseVersion);
         | 
| 137 155 | 
             
                    releaseSalt = salt;
         | 
| 156 | 
            +
             | 
| 138 157 | 
             
                    // ensures unique salt
         | 
| 139 158 | 
             
                    // TODO CreateX have clones capability also
         | 
| 140 159 | 
             
                    // what would releaseSalt look like if used with CreateX in pemissioned mode?
         | 
| @@ -148,9 +167,9 @@ contract ReleaseRegistry is | |
| 148 167 | 
             
                    _releaseInfo[releaseVersion].salt = releaseSalt;
         | 
| 149 168 | 
             
                    // TODO allow for the same serviceAuthorization address to be used for multiple releases?
         | 
| 150 169 | 
             
                    _releaseInfo[releaseVersion].auth = serviceAuthorization;
         | 
| 151 | 
            -
                     | 
| 170 | 
            +
                    _releaseInfo[releaseVersion].releaseAdmin = address(releaseAdmin);
         | 
| 152 171 |  | 
| 153 | 
            -
                    emit LogReleaseCreation(releaseVersion, releaseSalt);
         | 
| 172 | 
            +
                    emit LogReleaseCreation(releaseAdmin, releaseVersion, releaseSalt);
         | 
| 154 173 | 
             
                }
         | 
| 155 174 |  | 
| 156 175 | 
             
                function registerService(IService service) 
         | 
| @@ -163,9 +182,9 @@ contract ReleaseRegistry is | |
| 163 182 | 
             
                    // release can transition to DEPLOYED state
         | 
| 164 183 | 
             
                    checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), DEPLOYING(), DEPLOYED());
         | 
| 165 184 |  | 
| 166 | 
            -
                    address releaseAuthority =  | 
| 167 | 
            -
                    IServiceAuthorization  | 
| 168 | 
            -
                    ObjectType expectedDomain =  | 
| 185 | 
            +
                    address releaseAuthority = ReleaseAdmin(_releaseInfo[releaseVersion].releaseAdmin).authority();
         | 
| 186 | 
            +
                    IServiceAuthorization releaseAuth = _releaseInfo[releaseVersion].auth;
         | 
| 187 | 
            +
                    ObjectType expectedDomain = releaseAuth.getServiceDomain(_registeredServices);
         | 
| 169 188 |  | 
| 170 189 | 
             
                    // service can work with release registry and release version
         | 
| 171 190 | 
             
                    (
         | 
| @@ -195,89 +214,82 @@ contract ReleaseRegistry is | |
| 195 214 | 
             
                    // revert ErrorReleaseRegistryServiceAddressMismatch()
         | 
| 196 215 |  | 
| 197 216 | 
             
                    // setup service authorization
         | 
| 198 | 
            -
                     | 
| 199 | 
            -
             | 
| 217 | 
            +
                    ReleaseAdmin releaseAdmin = ReleaseAdmin(_releaseInfo[releaseVersion].releaseAdmin);
         | 
| 218 | 
            +
                    releaseAdmin.setReleaseLocked(false);
         | 
| 219 | 
            +
                    releaseAdmin.authorizeService(
         | 
| 220 | 
            +
                        releaseAuth, 
         | 
| 200 221 | 
             
                        service,
         | 
| 201 222 | 
             
                        serviceDomain,
         | 
| 202 223 | 
             
                        releaseVersion);
         | 
| 224 | 
            +
                    releaseAdmin.setReleaseLocked(true); 
         | 
| 203 225 |  | 
| 204 226 | 
             
                    // register service with registry
         | 
| 205 227 | 
             
                    nftId = _registry.registerService(info, serviceVersion, serviceDomain);
         | 
| 206 228 | 
             
                    service.linkToRegisteredNftId();
         | 
| 207 229 | 
             
                }
         | 
| 230 | 
            +
             | 
| 231 | 
            +
             | 
| 208 232 | 
             
                // TODO return activated version
         | 
| 209 233 | 
             
                function activateNextRelease() 
         | 
| 210 234 | 
             
                    external 
         | 
| 211 235 | 
             
                    restricted // GIF_ADMIN_ROLE
         | 
| 212 236 | 
             
                {
         | 
| 213 | 
            -
                    VersionPart  | 
| 237 | 
            +
                    VersionPart release = _next;
         | 
| 214 238 |  | 
| 215 239 | 
             
                    // release can transition to ACTIVE state
         | 
| 216 | 
            -
                    checkTransition(_releaseInfo[ | 
| 240 | 
            +
                    checkTransition(_releaseInfo[release].state, RELEASE(), DEPLOYED(), ACTIVE());
         | 
| 217 241 |  | 
| 218 | 
            -
                    _latest =  | 
| 219 | 
            -
                    _releaseInfo[ | 
| 220 | 
            -
                    _releaseInfo[ | 
| 242 | 
            +
                    _latest = release;
         | 
| 243 | 
            +
                    _releaseInfo[release].state = ACTIVE();
         | 
| 244 | 
            +
                    _releaseInfo[release].activatedAt = TimestampLib.blockTimestamp();
         | 
| 245 | 
            +
                    _releaseInfo[release].disabledAt = TimestampLib.max();
         | 
| 221 246 |  | 
| 222 247 | 
             
                    // grant special roles for registry/staking/pool services
         | 
| 223 248 | 
             
                    // this will enable access to core contracts functions
         | 
| 224 249 |  | 
| 225 250 | 
             
                    // registry service MUST be registered for each release
         | 
| 226 | 
            -
                    address service = _registry.getServiceAddress(REGISTRY(),  | 
| 251 | 
            +
                    address service = _registry.getServiceAddress(REGISTRY(), release);
         | 
| 227 252 | 
             
                    if(service == address(0)) {
         | 
| 228 | 
            -
                        revert ErrorReleaseRegistryRegistryServiceMissing( | 
| 253 | 
            +
                        revert ErrorReleaseRegistryRegistryServiceMissing(release);
         | 
| 229 254 | 
             
                    }
         | 
| 230 255 |  | 
| 231 256 | 
             
                    _admin.grantServiceRoleForAllVersions(IService(service), REGISTRY());
         | 
| 232 257 |  | 
| 233 | 
            -
                    service = _registry.getServiceAddress(STAKING(),  | 
| 258 | 
            +
                    service = _registry.getServiceAddress(STAKING(), release);
         | 
| 234 259 | 
             
                    if(service != address(0)) {
         | 
| 235 260 | 
             
                        _admin.grantServiceRoleForAllVersions(IService(service), STAKING());
         | 
| 236 261 | 
             
                    }
         | 
| 237 262 |  | 
| 238 | 
            -
                    service = _registry.getServiceAddress(POOL(),  | 
| 263 | 
            +
                    service = _registry.getServiceAddress(POOL(), release);
         | 
| 239 264 | 
             
                    if(service != address(0)) {
         | 
| 240 265 | 
             
                        _admin.grantServiceRoleForAllVersions(IService(service), POOL());
         | 
| 241 266 | 
             
                    }
         | 
| 242 267 |  | 
| 243 | 
            -
                     | 
| 244 | 
            -
                    // TODO test how many service can be locked in one transaction
         | 
| 245 | 
            -
                    // -> add to docs + each release must test for this -> add to release version tests (in test call with some gas limit?)
         | 
| 246 | 
            -
                    _setReleaseLocked(version, false);
         | 
| 268 | 
            +
                    _setReleaseLocked(release, false);
         | 
| 247 269 |  | 
| 248 | 
            -
                    emit LogReleaseActivation( | 
| 270 | 
            +
                    emit LogReleaseActivation(release);
         | 
| 249 271 | 
             
                }
         | 
| 250 272 |  | 
| 251 | 
            -
                /// @dev stop  | 
| 252 | 
            -
                function  | 
| 253 | 
            -
                     | 
| 254 | 
            -
                    restricted | 
| 273 | 
            +
                /// @dev stop/resume operations with restricted functions
         | 
| 274 | 
            +
                function setActive(VersionPart release, bool active) 
         | 
| 275 | 
            +
                    public
         | 
| 276 | 
            +
                    restricted
         | 
| 255 277 | 
             
                {
         | 
| 256 | 
            -
                     | 
| 257 | 
            -
             | 
| 258 | 
            -
             | 
| 259 | 
            -
             | 
| 260 | 
            -
             | 
| 261 | 
            -
             | 
| 262 | 
            -
             | 
| 263 | 
            -
             | 
| 264 | 
            -
             | 
| 265 | 
            -
             | 
| 266 | 
            -
             | 
| 267 | 
            -
             | 
| 268 | 
            -
             | 
| 269 | 
            -
                    external
         | 
| 270 | 
            -
                    restricted // GIF_ADMIN_ROLE
         | 
| 271 | 
            -
                {
         | 
| 272 | 
            -
                    // release can transition to ACTIVE state
         | 
| 273 | 
            -
                    checkTransition(_releaseInfo[version].state, RELEASE(), PAUSED(), ACTIVE());
         | 
| 274 | 
            -
                    
         | 
| 275 | 
            -
                    _releaseInfo[version].state = ACTIVE();
         | 
| 276 | 
            -
                    _releaseInfo[version].disabledAt = zeroTimestamp();
         | 
| 277 | 
            -
             | 
| 278 | 
            -
                    _setReleaseLocked(version, false);
         | 
| 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);
         | 
| 290 | 
            +
                    }
         | 
| 279 291 |  | 
| 280 | 
            -
                     | 
| 292 | 
            +
                    _setReleaseLocked(release, !active);
         | 
| 281 293 | 
             
                }
         | 
| 282 294 |  | 
| 283 295 | 
             
                //--- view functions ----------------------------------------------------//
         | 
| @@ -290,12 +302,12 @@ contract ReleaseRegistry is | |
| 290 302 | 
             
                    return Clones.predictDeterministicAddress(implementation, salt, deployer);
         | 
| 291 303 | 
             
                }
         | 
| 292 304 |  | 
| 293 | 
            -
                function isActiveRelease(VersionPart  | 
| 294 | 
            -
                    return _releaseInfo[ | 
| 305 | 
            +
                function isActiveRelease(VersionPart release) public view returns(bool) {
         | 
| 306 | 
            +
                    return _releaseInfo[release].state == ACTIVE();
         | 
| 295 307 | 
             
                }
         | 
| 296 308 |  | 
| 297 | 
            -
                function getReleaseInfo(VersionPart  | 
| 298 | 
            -
                    return _releaseInfo[ | 
| 309 | 
            +
                function getReleaseInfo(VersionPart release) external view returns(IRelease.ReleaseInfo memory) {
         | 
| 310 | 
            +
                    return _releaseInfo[release];
         | 
| 299 311 | 
             
                }
         | 
| 300 312 |  | 
| 301 313 | 
             
                /// @dev Returns the number of created releases.
         | 
| @@ -306,7 +318,7 @@ contract ReleaseRegistry is | |
| 306 318 |  | 
| 307 319 | 
             
                /// @dev Returns the n-th release version.
         | 
| 308 320 | 
             
                /// Valid values for idx [0 .. releases() - 1]
         | 
| 309 | 
            -
                function getVersion(uint256 idx) external view returns (VersionPart  | 
| 321 | 
            +
                function getVersion(uint256 idx) external view returns (VersionPart release) {
         | 
| 310 322 | 
             
                    // return _releases;
         | 
| 311 323 | 
             
                    return _release[idx];
         | 
| 312 324 | 
             
                }
         | 
| @@ -321,20 +333,20 @@ contract ReleaseRegistry is | |
| 321 333 | 
             
                    return _latest;
         | 
| 322 334 | 
             
                }
         | 
| 323 335 |  | 
| 324 | 
            -
                function getState(VersionPart  | 
| 325 | 
            -
                    return _releaseInfo[ | 
| 336 | 
            +
                function getState(VersionPart release) external view returns (StateId stateId) {
         | 
| 337 | 
            +
                    return _releaseInfo[release].state;
         | 
| 326 338 | 
             
                }
         | 
| 327 339 |  | 
| 328 340 | 
             
                function getRemainingServicesToRegister() external view returns (uint256 services) {
         | 
| 329 341 | 
             
                    return _servicesToRegister - _registeredServices;
         | 
| 330 342 | 
             
                }
         | 
| 331 343 |  | 
| 332 | 
            -
                function getServiceAuthorization(VersionPart  | 
| 344 | 
            +
                function getServiceAuthorization(VersionPart release)
         | 
| 333 345 | 
             
                    external
         | 
| 334 346 | 
             
                    view
         | 
| 335 347 | 
             
                    returns (IServiceAuthorization serviceAuthorization)
         | 
| 336 348 | 
             
                {
         | 
| 337 | 
            -
                    return _releaseInfo[ | 
| 349 | 
            +
                    return _releaseInfo[release].auth;
         | 
| 338 350 | 
             
                }
         | 
| 339 351 |  | 
| 340 352 | 
             
                function getRegistryAdmin() external view returns (address) {
         | 
| @@ -349,27 +361,41 @@ contract ReleaseRegistry is | |
| 349 361 |  | 
| 350 362 | 
             
                //--- private functions ----------------------------------------------------//
         | 
| 351 363 |  | 
| 352 | 
            -
                 | 
| 353 | 
            -
                function _setReleaseLocked(VersionPart version, bool locked)
         | 
| 364 | 
            +
                function _setReleaseLocked(VersionPart release, bool locked)
         | 
| 354 365 | 
             
                    private
         | 
| 355 366 | 
             
                {
         | 
| 356 | 
            -
                     | 
| 357 | 
            -
             | 
| 358 | 
            -
             | 
| 359 | 
            -
             | 
| 360 | 
            -
                    ObjectType[] memory domains = auth.getServiceDomains();
         | 
| 361 | 
            -
                    for(uint idx = 0; idx < domains.length; idx++)
         | 
| 362 | 
            -
                    {
         | 
| 363 | 
            -
                        domain = domains[idx];
         | 
| 364 | 
            -
                        service = _registry.getServiceAddress(domain, version);
         | 
| 365 | 
            -
                        assert(service != address(0));
         | 
| 366 | 
            -
             | 
| 367 | 
            -
                        _admin.setServiceLocked(IService(service), locked);
         | 
| 368 | 
            -
                    }
         | 
| 367 | 
            +
                    ReleaseAdmin(
         | 
| 368 | 
            +
                        _releaseInfo[release].releaseAdmin).setReleaseLocked(locked);
         | 
| 369 | 
            +
                }
         | 
| 370 | 
            +
             | 
| 369 371 |  | 
| 370 | 
            -
             | 
| 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);
         | 
| 371 396 | 
             
                }
         | 
| 372 397 |  | 
| 398 | 
            +
             | 
| 373 399 | 
             
                function _verifyServiceAuthorization(
         | 
| 374 400 | 
             
                    IServiceAuthorization serviceAuthorization,
         | 
| 375 401 | 
             
                    VersionPart releaseVersion,
         |