@etherisc/gif-next 0.0.2-edd8f00-238 → 0.0.2-ee0f913-209

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.
Files changed (214) hide show
  1. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  2. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  3. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +2 -2
  4. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  5. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +2 -2
  6. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  7. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  8. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  9. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  10. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  11. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  12. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  13. package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
  14. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  15. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +2 -2
  16. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +1 -1
  17. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +2 -2
  18. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  19. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
  20. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  21. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
  22. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  23. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
  24. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +84 -83
  26. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  27. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  28. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  29. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  30. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +2 -2
  31. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  32. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  33. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  34. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  35. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  36. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  37. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  38. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  39. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  40. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  41. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  42. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  43. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  44. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  45. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  46. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  47. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +2 -2
  48. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  49. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +2 -2
  50. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  51. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  52. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  53. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  54. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  55. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +2 -2
  56. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  57. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +2 -2
  58. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  59. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
  60. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  61. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
  62. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  63. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +2 -2
  64. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
  66. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  67. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  68. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  69. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  70. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  71. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  72. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  73. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +2 -2
  74. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +2 -2
  76. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  77. package/artifacts/contracts/product/PricingService.sol/PricingService.json +2 -2
  78. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  79. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  80. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  81. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  82. package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
  83. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  84. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
  85. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  86. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  87. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  88. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  89. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.json +0 -19
  90. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  91. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  92. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  93. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  94. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +2 -2
  95. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  96. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  97. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  98. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  99. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  100. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +154 -170
  101. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  102. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +4 -23
  103. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  104. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +4 -23
  105. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  106. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  107. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  108. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +1 -1
  109. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +1 -1
  110. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +1 -1
  111. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +1 -1
  112. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +1 -1
  113. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  114. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  115. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +26 -26
  116. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  117. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +14 -14
  118. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  119. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  120. package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  121. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +1 -1
  122. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  126. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +5 -11
  128. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  129. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +5 -0
  130. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  135. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  136. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  137. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  138. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  139. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +22 -21
  140. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  141. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -4
  142. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +1 -1
  143. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  145. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  147. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  148. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  149. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  150. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  151. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  152. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  153. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  154. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  155. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
  156. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  157. package/artifacts/contracts/staking/Staking.sol/Staking.json +2 -2
  158. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  159. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +2 -2
  160. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  161. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  162. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  163. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +2 -2
  164. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  165. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
  166. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  167. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +143 -142
  168. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  169. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  170. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  171. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  172. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  173. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  174. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  175. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  176. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  177. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  178. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  179. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  180. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  182. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  185. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  186. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  187. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  188. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  190. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  191. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  192. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  193. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  194. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  195. package/contracts/instance/InstanceStore.sol +3 -6
  196. package/contracts/registry/IServiceAuthorization.sol +0 -3
  197. package/contracts/registry/ReleaseManager.sol +133 -129
  198. package/contracts/registry/ServiceAuthorization.sol +0 -4
  199. package/contracts/shared/ComponentService.sol +1 -4
  200. package/contracts/shared/IKeyValueStore.sol +0 -1
  201. package/contracts/shared/ILifecycle.sol +2 -1
  202. package/contracts/shared/KeyValueStore.sol +1 -5
  203. package/contracts/shared/Lifecycle.sol +66 -7
  204. package/contracts/staking/StakingStore.sol +1 -3
  205. package/package.json +1 -1
  206. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +0 -4
  207. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +0 -182
  208. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +0 -4
  209. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +0 -187
  210. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
  211. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -187
  212. package/contracts/instance/base/ObjectLifecycle.sol +0 -96
  213. package/contracts/registry/ReleaseLifecycle.sol +0 -28
  214. package/contracts/staking/StakingLifecycle.sol +0 -24
@@ -14,7 +14,7 @@ import {ObjectType, ObjectTypeLib, POOL, RELEASE, REGISTRY, SERVICE, STAKING} fr
14
14
  import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
15
15
  import {Timestamp, TimestampLib, zeroTimestamp, ltTimestamp} from "../type/Timestamp.sol";
16
16
  import {Seconds, SecondsLib} from "../type/Seconds.sol";
17
- import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE, PAUSED, CLOSED} from "../type/StateId.sol";
17
+ import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE} from "../type/StateId.sol";
18
18
  import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
19
19
 
20
20
  import {IService} from "../shared/IService.sol";
@@ -31,12 +31,11 @@ import {IAccessAdmin} from "../shared/IAccessAdmin.sol";
31
31
  import {RegistryAdmin} from "./RegistryAdmin.sol";
32
32
  import {Registry} from "./Registry.sol";
33
33
  import {TokenRegistry} from "./TokenRegistry.sol";
34
- import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
35
34
 
36
35
 
37
36
  contract ReleaseManager is
38
- AccessManaged,
39
- ReleaseLifecycle,
37
+ AccessManaged,
38
+ ILifecycle,
40
39
  IRegistryLinked
41
40
  {
42
41
  using ObjectTypeLib for ObjectType;
@@ -45,31 +44,31 @@ contract ReleaseManager is
45
44
 
46
45
  event LogReleaseCreation(VersionPart version, bytes32 salt, address authority);
47
46
  event LogReleaseActivation(VersionPart version);
48
- event LogReleaseDisabled(VersionPart version);
49
- event LogReleaseEnabled(VersionPart version);
50
- event LogReleaseClosed(VersionPart version);
51
47
 
52
48
  // constructor
53
49
  error ErrorReleaseManagerNotRegistry(Registry registry);
54
50
 
55
51
  // createNextRelease
56
- error ErrorReleaseManagerReleaseCreationDisallowed(VersionPart version, StateId currentStateId);
52
+ error ErrorReleaseManagerReleaseCreationDisallowed(StateId currentStateId);
57
53
 
58
54
  // prepareRelease
59
- error ErrorReleaseManagerReleasePreparationDisallowed(VersionPart version, StateId currentStateId);
60
- error ErrorReleaseManagerReleaseAlreadyPrepared(VersionPart version, StateId currentStateId);
61
- error ErrorReleaseManagerVersionMismatch(VersionPart expected, VersionPart actual);
55
+ error ErrorReleaseManagerReleasePreparationDisallowed(StateId currentStateId);
56
+ error ErrorReleaseManagerReleaseAlreadyPrepared(VersionPart version);
57
+ error ErrorReleaseManagerVersionMismatch(VersionPart expectedVersion, VersionPart providedVersion);
62
58
  error ErrorReleaseManagerNoDomains(VersionPart version);
63
59
 
60
+ // register staking
61
+ //error ErrorReleaseManagerStakingAlreadySet(address stakingAddress);
62
+
64
63
  // registerService
65
64
  error ErrorReleaseManagerNoServiceRegistrationExpected();
66
65
  error ErrorReleaseManagerServiceRegistrationDisallowed(StateId currentStateId);
67
66
  error ErrorReleaseManagerServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
68
- error ErrorReleaseManagerNotService(address notService);
69
- error ErrorReleaseManagerServiceAddressMismatch(address expected, address actual);
67
+ error ErrorReleaseManagerNotService(IService service);
68
+ error ErrorReleaseManagerServiceAddressInvalid(IService given, address expected);
70
69
 
71
70
  // activateNextRelease
72
- error ErrorReleaseManagerReleaseActivationDisallowed(VersionPart releaseVersion, StateId currentStateId);
71
+ error ErrorReleaseManagerReleaseActivationDisallowed(StateId currentStateId);
73
72
  error ErrorReleaseManagerReleaseNotCreated(VersionPart releaseVersion);
74
73
  error ErrorReleaseManagerReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
75
74
  error ErrorReleaseManagerReleaseAlreadyActivated(VersionPart releaseVersion);
@@ -92,9 +91,11 @@ contract ReleaseManager is
92
91
 
93
92
  Seconds public constant MIN_DISABLE_DELAY = Seconds.wrap(60 * 24 * 365); // 1 year
94
93
 
95
- RegistryAdmin private _admin;
96
- address public _releaseAccessManagerCodeAddress;
97
- Registry private _registry;
94
+ RegistryAdmin public immutable _admin;
95
+ address public immutable _releaseAccessManagerCodeAddress;
96
+ Registry public immutable _registry;
97
+ IRegisterable private _staking;
98
+ address private _stakingOwner;
98
99
 
99
100
  // TODO remove once it's clear that release authority will always be registry authority
100
101
  mapping(VersionPart version => address authority) internal _releaseAccessManager;
@@ -103,14 +104,15 @@ contract ReleaseManager is
103
104
 
104
105
  mapping(VersionPart version => IServiceAuthorization authz) internal _serviceAuthorization;
105
106
 
106
- VersionPart private _initial;// first active version
107
+ VersionPart immutable internal _initial;// first active version
107
108
  VersionPart internal _latest; // latest active version
108
109
  VersionPart internal _next; // version to create and activate
109
- mapping(VersionPart verson => StateId releaseState) private _state;
110
+ StateId internal _state; // current state of release manager
110
111
 
111
112
  uint256 internal _registeredServices;
112
113
  uint256 internal _servicesToRegister;
113
114
 
115
+ // deployer of this contract must be gif admin
114
116
  constructor(Registry registry)
115
117
  AccessManaged(msg.sender)
116
118
  {
@@ -119,31 +121,35 @@ contract ReleaseManager is
119
121
  revert ErrorReleaseManagerNotRegistry(registry);
120
122
  }
121
123
 
122
- setAuthority(registry.getAuthority());
123
-
124
124
  _registry = registry;
125
+ setAuthority(_registry.getAuthority());
125
126
  _admin = RegistryAdmin(_registry.getRegistryAdminAddress());
126
127
 
127
128
  _initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
128
129
  _next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
129
-
130
- //AccessManagerExtendedWithDisableInitializeable masterReleaseAccessManager = new AccessManagerExtendedWithDisableInitializeable();
131
- //masterReleaseAccessManager.initialize(address(this));
132
- //masterReleaseAccessManager.disable();
133
- //_releaseAccessManagerCodeAddress = address(masterReleaseAccessManager);
130
+ _state = getInitialState(RELEASE());
131
+
132
+ AccessManagerExtendedWithDisableInitializeable masterReleaseAccessManager = new AccessManagerExtendedWithDisableInitializeable();
133
+ masterReleaseAccessManager.initialize(_registry.NFT_LOCK_ADDRESS(), VersionLib.toVersionPart(0));
134
+ //masterReleaseAccessManager.disable();
135
+ _releaseAccessManagerCodeAddress = address(masterReleaseAccessManager);
134
136
  }
135
137
 
136
138
  /// @dev skips previous release if was not activated
137
- /// sets next release into state SCHEDULED
139
+ /// sets release manager into state SCHEDULED
138
140
  function createNextRelease()
139
141
  external
140
142
  restricted() // GIF_ADMIN_ROLE
141
143
  returns(VersionPart)
142
144
  {
145
+ if (!isValidTransition(RELEASE(), _state, SCHEDULED())) {
146
+ revert ErrorReleaseManagerReleaseCreationDisallowed(_state);
147
+ }
148
+
143
149
  _next = VersionPartLib.toVersionPart(_next.toInt() + 1);
144
150
  _servicesToRegister = 0;
145
151
  _registeredServices = 0;
146
- _state[_next] = getInitialState(RELEASE());
152
+ _state = SCHEDULED();
147
153
 
148
154
  return _next;
149
155
  }
@@ -160,6 +166,8 @@ contract ReleaseManager is
160
166
  bytes32 releaseSalt
161
167
  )
162
168
  {
169
+ // TODO Any call to serviceAuthorization contract must be treated as a call to an external malicious contract
170
+ // How can wrong authorizations tamper the core, releases or instances?
163
171
  (
164
172
  VersionPart releaseVersion,
165
173
  uint serviceDomainsCount
@@ -175,99 +183,87 @@ contract ReleaseManager is
175
183
  revert ErrorReleaseManagerNoDomains(_next);
176
184
  }
177
185
 
178
- version = _next;
179
- StateId state = _state[version];
180
- StateId newState = DEPLOYING();
181
-
182
- // verify release in state SCHEDULED
183
- if (!isValidTransition(RELEASE(), state, newState)) {
184
- revert ErrorReleaseManagerReleasePreparationDisallowed(version, state);
186
+ // verify release manager is in proper state to start deploying a next release
187
+ if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
188
+ revert ErrorReleaseManagerReleasePreparationDisallowed(_state);
185
189
  }
186
190
 
187
191
  // verify prepareNextRelease is only called once per release
188
192
  if(_servicesToRegister > 0) {
189
- revert ErrorReleaseManagerReleaseAlreadyPrepared(version, state);
193
+ revert ErrorReleaseManagerReleaseAlreadyPrepared(version);
190
194
  }
191
195
 
196
+ // store release specific service authorization
197
+ _serviceAuthorization[_next] = serviceAuthorization;
198
+
192
199
  // ensures unique salt
193
- // TODO CreateX have clones capability also
194
- // what would releaseSalt look like if used with CreateX in pemissioned mode?
195
200
  releaseSalt = keccak256(
196
201
  bytes.concat(
197
202
  bytes32(version.toInt()),
198
203
  salt));
199
204
 
200
205
  authority = _admin.authority();
201
- _serviceAuthorization[_next] = serviceAuthorization;
206
+
202
207
  _releaseAccessManager[_next] = authority;
203
208
  _servicesToRegister = serviceDomainsCount;
204
- _state[version] = newState;
209
+
210
+ _state = DEPLOYING();
205
211
 
206
212
  emit LogReleaseCreation(version, releaseSalt, authority);
207
213
  }
208
214
 
209
- // TODO this function can have 0 args -> use stored addresses from prepareNextRelease()
215
+
210
216
  function registerService(IService service)
211
217
  external
212
218
  restricted // GIF_MANAGER_ROLE
213
219
  returns(NftId nftId)
214
220
  {
215
- VersionPart releaseVersion = _next;
216
- StateId state = _state[releaseVersion];
217
- StateId newState = DEPLOYING();
218
-
219
- // verify release in state DEPLOYING
220
- if (!isValidTransition(RELEASE(), state, newState)) {
221
- // TOOD name must represent failed state transition
222
- revert ErrorReleaseManagerServiceRegistrationDisallowed(state);
221
+ // TODO is it usefull to check transition from A to A?
222
+ if (!isValidTransition(RELEASE(), _state, DEPLOYING())) {
223
+ revert ErrorReleaseManagerServiceRegistrationDisallowed(_state);
223
224
  }
224
225
 
225
- // not all services are registered
226
226
  if (_servicesToRegister == _registeredServices) {
227
227
  revert ErrorReleaseManagerNoServiceRegistrationExpected();
228
228
  }
229
229
 
230
- // service can work with release manager
231
230
  (
232
231
  IRegistry.ObjectInfo memory info,
233
- ObjectType serviceDomain,
234
- VersionPart serviceVersion
232
+ ObjectType domain,
233
+ VersionPart version
235
234
  ) = _verifyService(service);
236
235
 
237
- // service domain matches defined in release config
238
- ObjectType expectedDomain = _serviceAuthorization[releaseVersion].getServiceDomain(_registeredServices);
239
- if (serviceDomain != expectedDomain) {
240
- revert ErrorReleaseManagerServiceDomainMismatch(expectedDomain, serviceDomain);
236
+ ObjectType expectedDomain = _serviceAuthorization[version].getServiceDomains()[_registeredServices];
237
+ if (service.getDomain() != expectedDomain) {
238
+ revert ErrorReleaseManagerServiceDomainMismatch(expectedDomain, service.getDomain());
241
239
  }
242
240
 
243
- // TODO uncomment when release addresses calculations are ready
244
- // service address matches defined in release config
245
- /*address expectedAddress = _serviceAuthorization[releaseVersion].getServiceAddress(expectedDomain);
246
- if(address(service) != expectedAddress) {
247
- //revert ErrorReleaseManagerServiceAddressMismatch(expectedAddress, address(service));
248
- }*/
249
-
250
241
  // checked in registry
251
- _releaseInfo[releaseVersion].domains.push(serviceDomain);
242
+ _releaseInfo[version].domains.push(domain);
252
243
 
253
- _state[releaseVersion] = newState;
244
+ // register service with registry
245
+ nftId = _registry.registerService(info, version, domain);
254
246
  _registeredServices++;
255
247
 
248
+ service.linkToRegisteredNftId();
249
+
256
250
  // setup service authorization
257
251
  _admin.authorizeService(
258
- _serviceAuthorization[releaseVersion],
252
+ _serviceAuthorization[version],
259
253
  service);
260
254
 
261
255
  // TODO consider to extend this to REGISTRY
262
256
  // special roles for registry/staking/pool service
263
- if (serviceDomain == STAKING() || serviceDomain == POOL()) {
257
+ if (domain == STAKING() || domain == POOL()) {
264
258
  // TODO rename to grantServiceDomainRole()
265
- _admin.grantServiceRoleForAllVersions(service, serviceDomain);
259
+ _admin.grantServiceRoleForAllVersions(service, domain);
266
260
  }
267
261
 
268
- // register service with registry
269
- nftId = _registry.registerService(info, serviceVersion, serviceDomain);
270
- service.linkToRegisteredNftId();
262
+ if (_registeredServices < _servicesToRegister) {
263
+ _state = DEPLOYING();
264
+ } else {
265
+ // TODO end state depends on (_awaitingRegistration == 0)
266
+ }
271
267
  }
272
268
 
273
269
 
@@ -275,16 +271,12 @@ contract ReleaseManager is
275
271
  external
276
272
  restricted // GIF_ADMIN_ROLE
277
273
  {
278
- VersionPart version = _next;
279
- StateId state = _state[version];
280
- StateId newState = ACTIVE();
281
-
282
- // verify release in state DEPLOYING
283
- if (!isValidTransition(RELEASE(), state, newState)) {
284
- revert ErrorReleaseManagerReleaseActivationDisallowed(version, state);
274
+ if (!isValidTransition(RELEASE(), _state, ACTIVE())) {
275
+ revert ErrorReleaseManagerReleaseActivationDisallowed(_state);
285
276
  }
286
277
 
287
278
  // release fully deployed
279
+ VersionPart version = _next;
288
280
  if(_registeredServices < _servicesToRegister) {
289
281
  revert ErrorReleaseManagerReleaseRegistrationNotFinished(version, _servicesToRegister - _registeredServices);
290
282
  }
@@ -295,8 +287,13 @@ contract ReleaseManager is
295
287
  revert ErrorReleaseManagerReleaseNotCreated(version);
296
288
  }
297
289
 
290
+ // release is not activated
291
+ if(_releaseInfo[version].activatedAt.gtz()) {
292
+ revert ErrorReleaseManagerReleaseAlreadyActivated(version);
293
+ }
294
+
298
295
  _latest = version;
299
- _state[version] = newState;
296
+ _state = ACTIVE();
300
297
 
301
298
  _releaseVersionByAddress[service] = version;
302
299
  _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
@@ -304,66 +301,43 @@ contract ReleaseManager is
304
301
  emit LogReleaseActivation(version);
305
302
  }
306
303
 
307
- /// @dev stop all operations with release services
308
- function pauseRelease(VersionPart version)
304
+ // release becomes disabled after delay expiration (can be reenabled before that)
305
+ function disableRelease(VersionPart version, Seconds disableDelay)
309
306
  external
310
307
  restricted // GIF_ADMIN_ROLE
311
308
  {
312
- StateId state = _state[version];
313
- StateId newState = PAUSED();
309
+ // release was activated
310
+ if(_releaseInfo[version].activatedAt.eqz()) {
311
+ revert ErrorReleaseManagerReleaseNotActivated(version);
312
+ }
314
313
 
315
- // verify release in state ACTIVE
316
- if (!isValidTransition(RELEASE(), state, newState)) {
317
- revert ErrorReleaseManagerReleaseActivationDisallowed(version, state);
314
+ // release not disabled already
315
+ if(_releaseInfo[version].disabledAt.gtz()) {
316
+ revert ErrorReleaseManagerReleaseAlreadyDisabled(version);
318
317
  }
319
318
 
320
- // TODO come up with a substitute
321
- //_releaseAccessManager[version].disable();
319
+ disableDelay = SecondsLib.toSeconds(Math.max(disableDelay.toInt(), MIN_DISABLE_DELAY.toInt()));
322
320
 
323
- _state[version] = newState;
324
- _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp();
321
+ // TODO come up with a substitute
322
+ // _releaseAccessManager[version].disable(disableDelay);
325
323
 
326
- emit LogReleaseDisabled(version);
324
+ _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp().addSeconds(disableDelay);
327
325
  }
328
-
329
- // TODO consider revert if some delay is expired -> becomes disabled automatically
330
- /// @dev resume operations with release services
331
- function unpauseRelease(VersionPart version)
326
+
327
+ function enableRelease(VersionPart version)
332
328
  external
333
329
  restricted // GIF_ADMIN_ROLE
334
330
  {
335
- StateId state = _state[version];
336
- StateId newState = ACTIVE();
337
-
338
- // verify release in state PAUSED
339
- if (!isValidTransition(RELEASE(), state, newState)) {
340
- revert ErrorReleaseManagerReleaseActivationDisallowed(version, state);
341
- }
331
+ // release was disabled
332
+ //if(_releaseInfo[version].disabledAt.eqz()) {
333
+ // revert ErrorReleaseManagerReleaseAlreadyEnabled(version);
334
+ //}
342
335
 
336
+ // reverts if disable delay expired
343
337
  // TODO come up with a substitute
344
338
  // _releaseAccessManager[version].enable();
345
339
 
346
- _state[version] = newState;
347
340
  _releaseInfo[version].disabledAt = zeroTimestamp();
348
-
349
- emit LogReleaseEnabled(version);
350
- }
351
- /// @dev permanently disable release
352
- function closeRelease(VersionPart version)
353
- external
354
- restricted // GIF_ADMIN_ROLE
355
- {
356
- StateId state = _state[version];
357
- StateId newState = CLOSED();
358
-
359
- // verify release in state PAUSED
360
- if (!isValidTransition(RELEASE(), state, newState)) {
361
- revert ErrorReleaseManagerReleaseActivationDisallowed(version, state);
362
- }
363
-
364
- _state[version] = newState;
365
-
366
- emit LogReleaseClosed(version);
367
341
  }
368
342
 
369
343
  //--- view functions ----------------------------------------------------//
@@ -401,8 +375,8 @@ contract ReleaseManager is
401
375
  return _initial;
402
376
  }
403
377
 
404
- function getState(VersionPart version) external view returns (StateId stateId) {
405
- return _state[version];
378
+ function getState() external view returns (StateId stateId) {
379
+ return _state;
406
380
  }
407
381
 
408
382
  function getRemainingServicesToRegister() external view returns (uint256 services) {
@@ -425,6 +399,37 @@ contract ReleaseManager is
425
399
  return _registry;
426
400
  }
427
401
 
402
+ //--- ILifecycle -----------------------------------------------------------//
403
+
404
+ function hasLifecycle(ObjectType objectType) external pure returns (bool) { return objectType == RELEASE(); }
405
+
406
+ function getInitialState(ObjectType objectType) public pure returns (StateId stateId) {
407
+ if (objectType == RELEASE()) {
408
+ stateId = INITIAL();
409
+ }
410
+ }
411
+
412
+ function isValidTransition(
413
+ ObjectType objectType,
414
+ StateId fromId,
415
+ StateId toId
416
+ )
417
+ public
418
+ pure
419
+ returns (bool isValid)
420
+ {
421
+ if (objectType != RELEASE()) { return false; }
422
+
423
+ if (fromId == INITIAL() && toId == SCHEDULED()) { return true; }
424
+ if (fromId == SCHEDULED() && toId == DEPLOYING()) { return true; }
425
+ if (fromId == DEPLOYING() && toId == SCHEDULED()) { return true; }
426
+ if (fromId == DEPLOYING() && toId == DEPLOYING()) { return true; }
427
+ if (fromId == DEPLOYING() && toId == ACTIVE()) { return true; }
428
+ // TODO active -> scheduled missing, add tests to cover this and more scenarios (#358)
429
+
430
+ return false;
431
+ }
432
+
428
433
  //--- private functions ----------------------------------------------------//
429
434
 
430
435
  function _verifyService(IService service)
@@ -437,7 +442,7 @@ contract ReleaseManager is
437
442
  )
438
443
  {
439
444
  if(!service.supportsInterface(type(IService).interfaceId)) {
440
- revert ErrorReleaseManagerNotService(address(service));
445
+ revert ErrorReleaseManagerNotService(service);
441
446
  }
442
447
 
443
448
  address owner = msg.sender;
@@ -448,7 +453,7 @@ contract ReleaseManager is
448
453
 
449
454
  _verifyServiceInfo(service, serviceInfo, owner);
450
455
 
451
- VersionPart releaseVersion = _next; // never 0
456
+ VersionPart releaseVersion = getNextVersion(); // never 0
452
457
  address releaseAuthority = address(_releaseAccessManager[releaseVersion]); // can be zero if registering service when release is not created
453
458
 
454
459
  // IMPORTANT: can not guarantee service access is actually controlled by authority
@@ -484,7 +489,7 @@ contract ReleaseManager is
484
489
  revert ErrorReleaseManagerServiceInfoInterceptorInvalid(service, info.isInterceptor);
485
490
  }
486
491
 
487
- if(info.objectType != SERVICE()) {
492
+ if(info.objectType != SERVICE()) {// type is checked in registry anyway...but service logic may depend on expected value
488
493
  revert ErrorReleaseManagerServiceInfoTypeInvalid(service, SERVICE(), info.objectType);
489
494
  }
490
495
 
@@ -520,4 +525,3 @@ contract ReleaseManager is
520
525
  return true;
521
526
  }
522
527
  }
523
-
@@ -42,10 +42,6 @@ contract ServiceAuthorization
42
42
  return _serviceDomains;
43
43
  }
44
44
 
45
- function getServiceDomain(uint idx) external view returns(ObjectType serviceDomain) {
46
- return _serviceDomains[idx];
47
- }
48
-
49
45
  function getServiceAddress(ObjectType serviceDomain) external view returns(address service) {
50
46
  return _serviceAddress[serviceDomain];
51
47
  }
@@ -490,16 +490,13 @@ contract ComponentService is
490
490
 
491
491
  component.linkToRegisteredNftId();
492
492
 
493
-
494
- // TODO second part, may be done in different tx....
495
-
496
493
  // save amended component info with instance
497
494
  instanceReader = instance.getInstanceReader();
498
495
  instanceStore = instance.getInstanceStore();
499
496
 
500
497
  IComponents.ComponentInfo memory componentInfo = component.getComponentInfo();
501
498
  componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
502
- instanceStore.createComponent(componentNftId, componentInfo);
499
+ instanceStore.createComponent(component.getNftId(), componentInfo);
503
500
 
504
501
  // configure instance authorization
505
502
  _instanceService.createComponentTarget(
@@ -13,7 +13,6 @@ interface IKeyValueStore is ILifecycle {
13
13
 
14
14
  error ErrorKeyValueStoreTypeUndefined(ObjectType objectType);
15
15
  error ErrorKeyValueStoreAlreadyCreated(Key32 key, ObjectType objectType);
16
- error ErrorKeyValueStoreNoLifecycle(ObjectType objectType);
17
16
  error ErrorKeyValueStoreStateZero(Key32 key);
18
17
  error ErrorKeyValueStoreNotExisting(Key32 key);
19
18
 
@@ -1,12 +1,13 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {NftId} from "../type/NftId.sol";
4
5
  import {ObjectType} from "../type/ObjectType.sol";
5
6
  import {StateId} from "../type/StateId.sol";
6
7
 
7
8
  interface ILifecycle {
8
9
 
9
- error ErrorNoLifecycle(ObjectType objectType);
10
+ error ErrorNoLifecycle(NftId nftId, ObjectType objectType);
10
11
  error ErrorInvalidStateTransition(
11
12
  ObjectType objectType,
12
13
  StateId fromStateId,
@@ -34,12 +34,8 @@ contract KeyValueStore is
34
34
  revert ErrorKeyValueStoreAlreadyCreated(key32, objectType);
35
35
  }
36
36
 
37
- if(!hasLifecycle(objectType)) {
38
- revert ErrorKeyValueStoreNoLifecycle(objectType);
39
- }
40
-
41
37
  Blocknumber blocknumber = blockBlocknumber();
42
- StateId initialState = getInitialState(objectType);
38
+ StateId initialState = hasLifecycle(objectType) ? getInitialState(objectType) : ACTIVE();
43
39
 
44
40
  // set metadata
45
41
  metadata.objectType = objectType;
@@ -8,18 +8,27 @@ import {ObjectType, COMPONENT, BUNDLE, POLICY, REQUEST, RISK, CLAIM, PAYOUT} fro
8
8
  import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, COLLATERALIZED, REVOKED, SUBMITTED, CONFIRMED, DECLINED, EXPECTED, PAID, FULFILLED, FAILED, CANCELLED} from "../type/StateId.sol";
9
9
  import {ILifecycle} from "./ILifecycle.sol";
10
10
 
11
- abstract contract Lifecycle is
11
+ contract Lifecycle is
12
12
  Initializable,
13
13
  ILifecycle
14
14
  {
15
- // TODO make private
16
15
  mapping(ObjectType objectType => StateId initialState)
17
- internal _initialState;
16
+ private _initialState;
18
17
 
19
18
  mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
20
- internal _isValidTransition;
19
+ private _isValidTransition;
21
20
 
22
- //function _initializeLifecycle() internal virtual;
21
+ function initializeLifecycle()
22
+ public
23
+ onlyInitializing
24
+ {
25
+ _setupBundleLifecycle();
26
+ _setupComponentLifecycle();
27
+ _setupPolicyLifecycle();
28
+ _setupClaimAndPayoutLifecycle();
29
+ _setupRiskLifecycle();
30
+ _setupRequestLifecycle();
31
+ }
23
32
 
24
33
  function hasLifecycle(
25
34
  ObjectType objectType
@@ -50,9 +59,9 @@ abstract contract Lifecycle is
50
59
  public
51
60
  view
52
61
  {
53
- // revert if no life cycle support
62
+ // return if no life cycle support
54
63
  if (_initialState[objectType].eqz()) {
55
- revert ErrorNoLifecycle(objectType);
64
+ return;
56
65
  }
57
66
 
58
67
  // enforce valid state transition
@@ -68,4 +77,54 @@ abstract contract Lifecycle is
68
77
  ) public view returns (bool) {
69
78
  return _isValidTransition[objectType][fromId][toId];
70
79
  }
80
+
81
+ function _setupComponentLifecycle() internal {
82
+ _initialState[COMPONENT()] = ACTIVE();
83
+ _isValidTransition[COMPONENT()][ACTIVE()][PAUSED()] = true;
84
+ _isValidTransition[COMPONENT()][PAUSED()][ACTIVE()] = true;
85
+ _isValidTransition[COMPONENT()][PAUSED()][ARCHIVED()] = true;
86
+ }
87
+
88
+ function _setupBundleLifecycle() internal {
89
+ _initialState[BUNDLE()] = ACTIVE();
90
+ _isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
91
+ _isValidTransition[BUNDLE()][ACTIVE()][CLOSED()] = true;
92
+ _isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
93
+ _isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
94
+ }
95
+
96
+ function _setupPolicyLifecycle() internal {
97
+ _initialState[POLICY()] = APPLIED();
98
+ _isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
99
+ _isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
100
+ _isValidTransition[POLICY()][APPLIED()][COLLATERALIZED()] = true;
101
+ _isValidTransition[POLICY()][APPLIED()][ACTIVE()] = true;
102
+ _isValidTransition[POLICY()][COLLATERALIZED()][ACTIVE()] = true;
103
+ _isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
104
+ }
105
+
106
+ function _setupClaimAndPayoutLifecycle() internal {
107
+ _initialState[CLAIM()] = SUBMITTED();
108
+ _isValidTransition[CLAIM()][SUBMITTED()][CONFIRMED()] = true;
109
+ _isValidTransition[CLAIM()][SUBMITTED()][DECLINED()] = true;
110
+ _isValidTransition[CLAIM()][CONFIRMED()][CLOSED()] = true;
111
+
112
+ _initialState[PAYOUT()] = EXPECTED();
113
+ _isValidTransition[PAYOUT()][EXPECTED()][PAID()] = true;
114
+ }
115
+
116
+ function _setupRiskLifecycle() internal {
117
+ _initialState[RISK()] = ACTIVE();
118
+ _isValidTransition[RISK()][ACTIVE()][PAUSED()] = true;
119
+ _isValidTransition[RISK()][PAUSED()][ACTIVE()] = true;
120
+ _isValidTransition[RISK()][PAUSED()][ARCHIVED()] = true;
121
+ }
122
+
123
+ function _setupRequestLifecycle() internal {
124
+ _initialState[REQUEST()] = ACTIVE();
125
+ _isValidTransition[REQUEST()][ACTIVE()][FULFILLED()] = true;
126
+ _isValidTransition[REQUEST()][ACTIVE()][FAILED()] = true;
127
+ _isValidTransition[REQUEST()][FAILED()][FULFILLED()] = true;
128
+ _isValidTransition[REQUEST()][ACTIVE()][CANCELLED()] = true;
129
+ }
71
130
  }
@@ -28,13 +28,11 @@ import {Version, VersionLib} from "../type/Version.sol";
28
28
  import {Versionable} from "../shared/Versionable.sol";
29
29
 
30
30
  import {RegistryAdmin} from "../registry/RegistryAdmin.sol";
31
- import {StakingLifecycle} from "./StakingLifecycle.sol";
32
31
 
33
32
 
34
33
  contract StakingStore is
35
34
  AccessManaged,
36
- KeyValueStore,
37
- StakingLifecycle
35
+ KeyValueStore
38
36
  {
39
37
 
40
38
  event LogStakingStoreReserveBalanceIncreased(NftId targetNftId, Amount dipAmount, Amount reserveBalance, Blocknumber lastUpdatedIn);