@etherisc/gif-next 0.0.2-ad36a6a-080 → 0.0.2-ad3cf8f-433

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 (298) hide show
  1. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +50 -13
  3. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  4. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  6. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  7. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +48 -11
  9. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +23 -2
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -0
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +2 -2
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +2 -2
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +21 -0
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  30. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  31. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  32. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +23 -2
  33. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  34. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +2 -2
  35. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  36. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +92 -39
  37. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  38. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +2 -2
  39. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  40. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  41. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +23 -2
  42. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  43. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +23 -2
  44. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  45. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +23 -2
  46. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  47. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +23 -2
  48. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  49. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
  54. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +84 -47
  56. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  57. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
  64. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  65. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +103 -62
  66. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  68. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  71. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +45 -4
  73. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  81. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  82. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  83. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +23 -2
  84. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  85. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  86. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  87. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  88. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +21 -0
  89. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  90. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  91. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +21 -0
  92. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  94. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  96. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  97. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +21 -0
  98. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  99. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +2 -2
  100. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  101. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +2 -2
  102. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  103. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +2 -2
  104. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  105. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  106. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +21 -0
  107. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  108. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  109. package/artifacts/contracts/pool/Pool.sol/Pool.json +21 -0
  110. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  111. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +2 -2
  112. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  113. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +2 -2
  114. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  115. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
  116. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  117. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
  118. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  119. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +21 -0
  120. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  121. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
  122. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  123. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +55 -28
  124. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +15 -15
  126. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  127. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  128. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +27 -0
  129. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  130. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  131. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  132. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +21 -0
  133. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  134. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  135. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +2 -2
  136. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  137. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +2 -2
  138. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  139. package/artifacts/contracts/product/PricingService.sol/PricingService.json +2 -2
  140. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  141. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  142. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  143. package/artifacts/contracts/product/Product.sol/Product.json +21 -0
  144. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  145. package/artifacts/contracts/product/RiskService.sol/RiskService.json +2 -2
  146. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  147. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +2 -2
  148. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  149. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  150. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +0 -15
  151. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  152. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  153. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  154. package/artifacts/contracts/registry/Registry.sol/Registry.json +36 -51
  155. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  156. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +164 -158
  157. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  158. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  159. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  160. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  161. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  162. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +46 -5
  163. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  164. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +109 -217
  165. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  166. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  167. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  168. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  169. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  170. package/artifacts/contracts/shared/Component.sol/Component.json +21 -0
  171. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  172. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +2 -2
  173. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +2 -2
  175. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  176. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  177. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +2 -2
  178. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  179. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +21 -0
  180. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  181. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  182. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +21 -0
  183. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  184. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  185. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  186. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  187. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  188. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  189. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  190. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  191. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  192. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  193. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  194. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +21 -0
  195. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  196. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +41 -0
  197. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  198. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +41 -0
  199. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  200. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  201. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  202. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  203. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  204. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  205. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  206. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  207. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  208. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  209. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  210. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  211. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  212. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  213. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +21 -0
  214. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  215. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  216. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
  217. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  218. package/artifacts/contracts/staking/Staking.sol/Staking.json +23 -2
  219. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  220. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +45 -4
  221. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  222. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +2 -2
  223. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  224. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -12
  225. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  226. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +2 -2
  227. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  228. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
  229. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  230. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +143 -102
  231. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  232. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  233. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  234. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  236. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  238. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  240. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  242. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  243. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  244. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  245. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  246. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  247. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  248. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  249. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  250. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  251. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  253. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  254. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  255. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  256. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  257. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  259. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  260. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  264. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  270. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  271. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  272. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
  273. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  274. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  275. package/contracts/authorization/AccessAdmin.sol +22 -16
  276. package/contracts/authorization/IAccessAdmin.sol +3 -1
  277. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  278. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  279. package/contracts/examples/fire/FireProduct.sol +37 -36
  280. package/contracts/product/ClaimService.sol +1 -1
  281. package/contracts/product/IClaimService.sol +2 -1
  282. package/contracts/registry/IRegistry.sol +0 -3
  283. package/contracts/registry/RegistryAdmin.sol +7 -23
  284. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  285. package/contracts/registry/ReleaseRegistry.sol +191 -186
  286. package/contracts/registry/ServiceAuthorizationV3.sol +1 -1
  287. package/contracts/shared/Component.sol +8 -0
  288. package/contracts/shared/IComponent.sol +3 -0
  289. package/contracts/shared/ILifecycle.sol +3 -1
  290. package/contracts/shared/KeyValueStore.sol +1 -1
  291. package/contracts/shared/Lifecycle.sol +13 -2
  292. package/contracts/staking/StakingReader.sol +12 -5
  293. package/contracts/type/ObjectType.sol +1 -0
  294. package/contracts/type/StateId.sol +14 -1
  295. package/package.json +2 -1
  296. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  297. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  298. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -1,37 +1,28 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
5
4
  import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
6
- import {IAccessManager} from "@openzeppelin/contracts/access/manager/IAccessManager.sol";
7
- import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
8
5
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
9
- import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
10
6
 
11
7
  import {NftId} from "../type/NftId.sol";
12
- import {RoleId, ADMIN_ROLE, PUBLIC_ROLE} from "../type/RoleId.sol";
13
8
  import {ObjectType, ObjectTypeLib, POOL, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
14
- import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
15
- import {Timestamp, TimestampLib, zeroTimestamp, ltTimestamp} from "../type/Timestamp.sol";
16
- import {Seconds, SecondsLib} from "../type/Seconds.sol";
17
- import {StateId, INITIAL, SCHEDULED, DEPLOYING, ACTIVE, PAUSED, CLOSED} from "../type/StateId.sol";
18
- import {Version, VersionLib, VersionPart, VersionPartLib} from "../type/Version.sol";
9
+ import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
10
+ import {Seconds} from "../type/Seconds.sol";
11
+ import {StateId, SCHEDULED, DEPLOYING, DEPLOYED, SKIPPED, ACTIVE, PAUSED} from "../type/StateId.sol";
12
+ import {VersionPart, VersionPartLib} from "../type/Version.sol";
19
13
 
20
14
  import {IService} from "../shared/IService.sol";
21
- import {ILifecycle} from "../shared/ILifecycle.sol";
22
- import {INftOwnable} from "../shared/INftOwnable.sol";
23
15
  import {IRegisterable} from "../shared/IRegisterable.sol";
24
16
 
25
17
  import {IRegistry} from "./IRegistry.sol";
26
18
  import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
27
- import {IRegistryService} from "./IRegistryService.sol";
28
19
  import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol";
29
- import {IAccessAdmin} from "../authorization/IAccessAdmin.sol";
30
20
  import {RegistryAdmin} from "./RegistryAdmin.sol";
31
21
  import {Registry} from "./Registry.sol";
32
- import {TokenRegistry} from "./TokenRegistry.sol";
33
22
  import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
34
23
 
24
+ // TODO rename to something that does not end with 'Manager'
25
+ // everywhere else *Manager points to an upgradeable contract
35
26
  contract ReleaseRegistry is
36
27
  AccessManaged,
37
28
  ReleaseLifecycle,
@@ -39,7 +30,7 @@ contract ReleaseRegistry is
39
30
  {
40
31
  using ObjectTypeLib for ObjectType;
41
32
 
42
- uint256 public constant INITIAL_GIF_VERSION = 3;
33
+ uint256 public constant INITIAL_GIF_VERSION = 3;// first active version
43
34
 
44
35
  event LogReleaseCreation(VersionPart version, bytes32 salt);
45
36
  event LogReleaseActivation(VersionPart version);
@@ -49,35 +40,22 @@ contract ReleaseRegistry is
49
40
  // constructor
50
41
  error ErrorReleaseRegistryNotRegistry(Registry registry);
51
42
 
52
- // createNextRelease
53
- error ErrorReleaseRegistryReleaseCreationDisallowed(VersionPart version, StateId currentStateId);
54
-
55
- // prepareRelease
56
- error ErrorReleaseRegistryReleasePreparationDisallowed(VersionPart version, StateId currentStateId);
57
- error ErrorReleaseRegistryReleaseAlreadyPrepared(VersionPart version, StateId currentStateId);
58
- error ErrorReleaseRegistryVersionMismatch(VersionPart expected, VersionPart actual);
59
- error ErrorReleaseRegistryNoDomains(VersionPart version);
43
+ // _verifyServiceAuthorization
44
+ error ErrorReleaseRegistryNotServiceAuth(address notAuth);
45
+ error ErrorReleaseRegistryServiceAuthVersionMismatch(IServiceAuthorization auth, VersionPart expected, VersionPart actual);
46
+ error ErrorReleaseRegistryServiceAuthDomainsZero(IServiceAuthorization auth, VersionPart version);
60
47
 
61
48
  // registerService
62
- error ErrorReleaseRegistryNoServiceRegistrationExpected();
63
- error ErrorReleaseRegistryServiceRegistrationDisallowed(StateId currentStateId);
64
- error ErrorReleaseRegistryServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
65
- error ErrorReleaseRegistryNotService(address notService);
66
49
  error ErrorReleaseRegistryServiceAddressMismatch(address expected, address actual);
67
50
 
68
51
  // activateNextRelease
69
- error ErrorReleaseRegistryReleaseActivationDisallowed(VersionPart releaseVersion, StateId currentStateId);
70
- error ErrorReleaseRegistryReleaseNotCreated(VersionPart releaseVersion);
71
- error ErrorReleaseRegistryReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
72
- error ErrorReleaseRegistryReleaseAlreadyActivated(VersionPart releaseVersion);
73
-
74
- // disableRelease
75
- error ErrorReleaseRegistryReleaseNotActivated(VersionPart releaseVersion);
76
- error ErrorReleaseRegistryReleaseAlreadyDisabled(VersionPart releaseVersion);
52
+ error ErrorReleaseRegistryRegistryServiceMissing(VersionPart releaseVersion);
77
53
 
78
54
  // _verifyService
79
- error ErrorReleaseRegistryServiceReleaseAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
80
- error ErrorReleaseRegistryServiceReleaseVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
55
+ error ErrorReleaseRegistryNotService(address notService);
56
+ error ErrorReleaseRegistryServiceAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
57
+ error ErrorReleaseRegistryServiceVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
58
+ error ErrorReleaseRegistryServiceDomainMismatch(IService service, ObjectType expectedDomain, ObjectType actualDomain);
81
59
 
82
60
  // _verifyServiceInfo
83
61
  error ErrorReleaseRegistryServiceInfoAddressInvalid(IService service, address expected);
@@ -91,19 +69,12 @@ contract ReleaseRegistry is
91
69
 
92
70
  RegistryAdmin public immutable _admin;
93
71
  Registry public immutable _registry;
94
- IRegisterable private _staking;
95
- address private _stakingOwner;
96
72
 
97
73
  mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
98
- mapping(VersionPart version => IServiceAuthorization authz) internal _serviceAuthorization;
99
-
100
- // TODO check where/why this is used
101
- mapping(address registryService => VersionPart version) _releaseVersionByAddress;
74
+ uint256 _releases;
102
75
 
103
- VersionPart private _initial;// first active version
104
76
  VersionPart internal _latest; // latest active version
105
77
  VersionPart internal _next; // version to create and activate
106
- mapping(VersionPart verson => StateId releaseState) private _state;
107
78
 
108
79
  uint256 internal _registeredServices;
109
80
  uint256 internal _servicesToRegister;
@@ -121,21 +92,29 @@ contract ReleaseRegistry is
121
92
  _registry = registry;
122
93
  _admin = RegistryAdmin(_registry.getRegistryAdminAddress());
123
94
 
124
- _initial = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION);
125
95
  _next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
126
96
  }
127
97
 
128
- /// @dev skips previous release if was not activated
98
+ /// @dev sets previous release into SKIPPED state if it was created but not activated
129
99
  /// sets next release into state SCHEDULED
130
100
  function createNextRelease()
131
101
  external
132
102
  restricted() // GIF_ADMIN_ROLE
133
103
  returns(VersionPart)
134
104
  {
135
- _next = VersionPartLib.toVersionPart(_next.toInt() + 1);
105
+ VersionPart version = _next;
106
+
107
+ if(isValidTransition(RELEASE(), _releaseInfo[version].state, SKIPPED())) {
108
+ _releaseInfo[version].state = SKIPPED();
109
+ }
110
+
111
+ version = VersionPartLib.toVersionPart(version.toInt() + 1);
112
+
113
+ _next = version;
114
+ _releaseInfo[version].version = version;
115
+ _releaseInfo[version].state = getInitialState(RELEASE());
136
116
  _servicesToRegister = 0;
137
117
  _registeredServices = 0;
138
- _state[_next] = getInitialState(RELEASE());
139
118
 
140
119
  return _next;
141
120
  }
@@ -147,51 +126,36 @@ contract ReleaseRegistry is
147
126
  external
148
127
  restricted() // GIF_MANAGER_ROLE
149
128
  returns(
150
- address authority,
151
- VersionPart version,
129
+ address releaseAuthority,
130
+ VersionPart releaseVersion,
152
131
  bytes32 releaseSalt
153
132
  )
154
133
  {
155
- authority = _admin.authority();
156
- version = _next;
134
+ releaseVersion = _next;
135
+
136
+ // release can transition into DEPLOYING state
137
+ checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), SCHEDULED(), DEPLOYING());
138
+
139
+ uint256 serviceDomainsCount = _verifyServiceAuthorization(serviceAuthorization, releaseVersion, salt);
157
140
 
141
+ releaseAuthority = _admin.authority();
142
+ releaseSalt = salt;
158
143
  // ensures unique salt
159
144
  // TODO CreateX have clones capability also
160
145
  // what would releaseSalt look like if used with CreateX in pemissioned mode?
161
- releaseSalt = keccak256(
146
+ /*releaseSalt = keccak256(
162
147
  bytes.concat(
163
- bytes32(version.toInt()),
164
- salt));
165
-
166
- // verify release in state SCHEDULED
167
- if (!isValidTransition(RELEASE(), _state[version], DEPLOYING())) {
168
- revert ErrorReleaseRegistryReleasePreparationDisallowed(version, _state[version]);
169
- }
170
-
171
- _state[version] = DEPLOYING();
172
-
173
- // verify authorizaion contract release matches with expected version
174
- VersionPart releaseVersion = serviceAuthorization.getRelease();
175
- if (releaseVersion != version) {
176
- revert ErrorReleaseRegistryVersionMismatch(version, releaseVersion);
177
- }
178
-
179
-
180
- // sanity check to ensure service domain list is not empty
181
- uint256 serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
182
- if (serviceDomainsCount == 0) {
183
- revert ErrorReleaseRegistryNoDomains(version);
184
- }
185
-
186
- // verify prepareNextRelease is only called once per release
187
- if(_servicesToRegister > 0) {
188
- revert ErrorReleaseRegistryReleaseAlreadyPrepared(version, _state[version]);
189
- }
148
+ bytes32(releaseVersion.toInt()),
149
+ salt));*/
190
150
 
191
151
  _servicesToRegister = serviceDomainsCount;
192
- _serviceAuthorization[version] = serviceAuthorization;
152
+ _releaseInfo[releaseVersion].state = DEPLOYING();
153
+ _releaseInfo[releaseVersion].salt = releaseSalt;
154
+ // TODO allow for the same serviceAuthorization address to be used for multiple releases?
155
+ _releaseInfo[releaseVersion].auth = serviceAuthorization;
156
+ //_releaseInfo[releaseVersion].authority = releaseAuthority;
193
157
 
194
- emit LogReleaseCreation(version, releaseSalt);
158
+ emit LogReleaseCreation(releaseVersion, releaseSalt);
195
159
  }
196
160
 
197
161
  function registerService(IService service)
@@ -200,135 +164,125 @@ contract ReleaseRegistry is
200
164
  returns(NftId nftId)
201
165
  {
202
166
  VersionPart releaseVersion = _next;
203
- StateId state = _state[releaseVersion];
204
167
 
205
- // verify release in state DEPLOYING
206
- if (!isValidTransition(RELEASE(), state, DEPLOYING())) {
207
- // TOOD name must represent failed state transition
208
- revert ErrorReleaseRegistryServiceRegistrationDisallowed(state);
209
- }
210
-
211
- _state[releaseVersion] = DEPLOYING();
168
+ // release can transition to DEPLOYED state
169
+ checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), DEPLOYING(), DEPLOYED());
212
170
 
213
- // not all services are registered
214
- if (_servicesToRegister == _registeredServices) {
215
- revert ErrorReleaseRegistryNoServiceRegistrationExpected();
216
- }
171
+ address releaseAuthority = _admin.authority();
172
+ IServiceAuthorization serviceAuth = _releaseInfo[releaseVersion].auth;
173
+ ObjectType expectedDomain = serviceAuth.getServiceDomain(_registeredServices);
217
174
 
218
- // service can work with release manager
175
+ // service can work with release registry and release version
219
176
  (
220
177
  IRegistry.ObjectInfo memory info,
221
178
  ObjectType serviceDomain,
222
179
  VersionPart serviceVersion
223
- ) = _verifyService(service);
180
+ //,string memory serviceName
181
+ ) = _verifyService(
182
+ service,
183
+ releaseAuthority,
184
+ releaseVersion,
185
+ expectedDomain
186
+ );
224
187
 
225
- // service domain matches defined in release config
226
- ObjectType expectedDomain = _serviceAuthorization[releaseVersion].getServiceDomain(_registeredServices);
227
- if (serviceDomain != expectedDomain) {
228
- revert ErrorReleaseRegistryServiceDomainMismatch(expectedDomain, serviceDomain);
188
+ //_releaseInfo[releaseVersion].addresses.push(address(service)); // TODO get this info from auth contract?
189
+ //_releaseInfo[releaseVersion].domains.push(serviceDomain);
190
+ //_releaseInfo[releaseVersion].names.push(serviceName); // TODO if needed read in _verifyService()
191
+
192
+ _registeredServices++; // TODO use releaseInfo.someArray.length instead of _registeredServices
193
+
194
+ // release fully deployed
195
+ if(_servicesToRegister == _registeredServices) {
196
+ _releaseInfo[releaseVersion].state = DEPLOYED();
229
197
  }
230
198
 
231
- // register service with registry
232
- // !!! TODO MUST call registry at the end of this function
233
- nftId = _registry.registerService(info, serviceVersion, serviceDomain);
234
- service.linkToRegisteredNftId();
235
- _registeredServices++;
199
+ // TODO: service address matches defined in release auth (precalculated one)
200
+ // revert ErrorReleaseRegistryServiceAddressMismatch()
236
201
 
237
202
  // setup service authorization
238
- // !!! TODO service A can call service B while release is not active
239
203
  _admin.authorizeService(
240
- _serviceAuthorization[releaseVersion],
204
+ serviceAuth,
241
205
  service,
242
206
  serviceDomain,
243
- serviceVersion);
244
-
245
- // special roles for registry/staking/pool service
246
- // !!! TODO registry service allowed to call registry while release is not activated (same for staking/pool service and staking)
247
- if (
248
- serviceDomain == REGISTRY() ||
249
- serviceDomain == STAKING() ||
250
- serviceDomain == POOL())
251
- {
252
- _admin.grantServiceRoleForAllVersions(service, serviceDomain);
253
- }
254
- }
255
-
207
+ releaseVersion);
256
208
 
209
+ // register service with registry
210
+ nftId = _registry.registerService(info, serviceVersion, serviceDomain);
211
+ service.linkToRegisteredNftId();
212
+ }
213
+ // TODO return activated version
257
214
  function activateNextRelease()
258
215
  external
259
216
  restricted // GIF_ADMIN_ROLE
260
217
  {
261
218
  VersionPart version = _next;
262
- StateId state = _state[version];
263
- StateId newState = ACTIVE();
264
219
 
265
- // verify release in state DEPLOYING
266
- if (!isValidTransition(RELEASE(), state, newState)) {
267
- revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
268
- }
220
+ // release can transition to ACTIVE state
221
+ checkTransition(_releaseInfo[version].state, RELEASE(), DEPLOYED(), ACTIVE());
269
222
 
270
- // release fully deployed
271
- if(_registeredServices < _servicesToRegister) {
272
- revert ErrorReleaseRegistryReleaseRegistrationNotFinished(version, _servicesToRegister - _registeredServices);
273
- }
223
+ _latest = version;
224
+ _releases++;
225
+ _releaseInfo[version].state = ACTIVE();
226
+ _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
227
+
228
+ // grant special roles for registry/staking/pool services
229
+ // this will enable access to core contracts functions
274
230
 
275
- // release exists, registry service MUST exist
231
+ // registry service MUST be registered for each release
276
232
  address service = _registry.getServiceAddress(REGISTRY(), version);
277
233
  if(service == address(0)) {
278
- revert ErrorReleaseRegistryReleaseNotCreated(version);
234
+ revert ErrorReleaseRegistryRegistryServiceMissing(version);
279
235
  }
280
236
 
281
- _latest = version;
282
- _state[version] = newState;
237
+ _admin.grantServiceRoleForAllVersions(IService(service), REGISTRY());
283
238
 
284
- _releaseVersionByAddress[service] = version;
285
- _releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
239
+ service = _registry.getServiceAddress(STAKING(), version);
240
+ if(service != address(0)) {
241
+ _admin.grantServiceRoleForAllVersions(IService(service), STAKING());
242
+ }
243
+
244
+ service = _registry.getServiceAddress(POOL(), version);
245
+ if(service != address(0)) {
246
+ _admin.grantServiceRoleForAllVersions(IService(service), POOL());
247
+ }
248
+
249
+ // TODO may run out of gas
250
+ // TODO test how many service can be locked in one transaction
251
+ // -> add to docs + each release must test for this -> add to release version tests (in test call with some gas limit?)
252
+ _setReleaseLocked(version, false);
286
253
 
287
254
  emit LogReleaseActivation(version);
288
255
  }
289
256
 
290
257
  /// @dev stop all operations with release services
291
258
  function pauseRelease(VersionPart version)
292
- external
259
+ external
293
260
  restricted // GIF_ADMIN_ROLE
294
261
  {
295
- StateId state = _state[version];
296
- StateId newState = PAUSED();
297
-
298
- // verify release in state ACTIVE
299
- if (!isValidTransition(RELEASE(), state, newState)) {
300
- revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
301
- }
262
+ // release can transition to PAUSED state
263
+ checkTransition(_releaseInfo[version].state, RELEASE(), ACTIVE(), PAUSED());
302
264
 
303
- // TODO come up with a substitute
304
- //_releaseAccessManager[version].disable();
305
-
306
- _state[version] = newState;
265
+ _releaseInfo[version].state = PAUSED();
307
266
  _releaseInfo[version].disabledAt = TimestampLib.blockTimestamp();
308
267
 
268
+ _setReleaseLocked(version, true);
269
+
309
270
  emit LogReleaseDisabled(version);
310
271
  }
311
272
 
312
- // TODO consider revert if some delay is expired -> becomes disabled automatically
313
273
  /// @dev resume operations with release services
314
274
  function unpauseRelease(VersionPart version)
315
275
  external
316
276
  restricted // GIF_ADMIN_ROLE
317
277
  {
318
- StateId state = _state[version];
319
- StateId newState = ACTIVE();
320
-
321
- // verify release in state PAUSED
322
- if (!isValidTransition(RELEASE(), state, newState)) {
323
- revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
324
- }
325
-
326
- // TODO come up with a substitute
327
- // _releaseAccessManager[version].enable();
278
+ // release can transition to ACTIVE state
279
+ checkTransition(_releaseInfo[version].state, RELEASE(), PAUSED(), ACTIVE());
328
280
 
329
- _state[version] = newState;
281
+ _releaseInfo[version].state = ACTIVE();
330
282
  _releaseInfo[version].disabledAt = zeroTimestamp();
331
283
 
284
+ _setReleaseLocked(version, false);
285
+
332
286
  emit LogReleaseEnabled(version);
333
287
  }
334
288
 
@@ -342,19 +296,18 @@ contract ReleaseRegistry is
342
296
  return Clones.predictDeterministicAddress(implementation, salt, deployer);
343
297
  }
344
298
 
345
- function isActiveRegistryService(address service) external view returns(bool) {
346
- VersionPart version = _releaseVersionByAddress[service];
347
- return isActiveRelease(version);
348
- }
349
-
350
299
  function isActiveRelease(VersionPart version) public view returns(bool) {
351
- return _state[version] == ACTIVE();
300
+ return _releaseInfo[version].state == ACTIVE();
352
301
  }
353
302
 
354
303
  function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
355
304
  return _releaseInfo[version];
356
305
  }
357
306
 
307
+ function releases() external view returns (uint) {
308
+ return _releases;
309
+ }
310
+
358
311
  function getNextVersion() public view returns(VersionPart) {
359
312
  return _next;
360
313
  }
@@ -363,12 +316,8 @@ contract ReleaseRegistry is
363
316
  return _latest;
364
317
  }
365
318
 
366
- function getInitialVersion() external view returns(VersionPart) {
367
- return _initial;
368
- }
369
-
370
319
  function getState(VersionPart version) external view returns (StateId stateId) {
371
- return _state[version];
320
+ return _releaseInfo[version].state;
372
321
  }
373
322
 
374
323
  function getRemainingServicesToRegister() external view returns (uint256 services) {
@@ -380,7 +329,7 @@ contract ReleaseRegistry is
380
329
  view
381
330
  returns (IServiceAuthorization serviceAuthorization)
382
331
  {
383
- return _serviceAuthorization[version];
332
+ return _releaseInfo[version].auth;
384
333
  }
385
334
 
386
335
  function getRegistryAdmin() external view returns (address) {
@@ -395,7 +344,61 @@ contract ReleaseRegistry is
395
344
 
396
345
  //--- private functions ----------------------------------------------------//
397
346
 
398
- function _verifyService(IService service)
347
+ // close / open service targets instead of revoking / granting roles
348
+ function _setReleaseLocked(VersionPart version, bool locked)
349
+ private
350
+ {
351
+ address service;
352
+ ObjectType domain;
353
+ IServiceAuthorization auth = _releaseInfo[version].auth;
354
+
355
+ ObjectType[] memory domains = auth.getServiceDomains();
356
+ for(uint idx = 0; idx < domains.length; idx++)
357
+ {
358
+ domain = domains[idx];
359
+ service = _registry.getServiceAddress(domain, version);
360
+ assert(service != address(0));
361
+
362
+ _admin.setServiceLocked(IService(service), locked);
363
+ }
364
+
365
+ // TODO add check for active/disabled release to core contracts functions interacting with releases
366
+ }
367
+
368
+ function _verifyServiceAuthorization(
369
+ IServiceAuthorization serviceAuthorization,
370
+ VersionPart releaseVersion,
371
+ bytes32 salt
372
+ )
373
+ private
374
+ view
375
+ returns (uint256 serviceDomainsCount)
376
+ {
377
+ // authorization contract supports IServiceAuthorization interface
378
+ if(!serviceAuthorization.supportsInterface(type(IServiceAuthorization).interfaceId)) {
379
+ revert ErrorReleaseRegistryNotServiceAuth(address(serviceAuthorization));
380
+ }
381
+
382
+ // authorizaions contract version matches with release version
383
+ VersionPart authVersion = serviceAuthorization.getRelease();
384
+ if (releaseVersion != authVersion) {
385
+ revert ErrorReleaseRegistryServiceAuthVersionMismatch(serviceAuthorization, releaseVersion, authVersion);
386
+ }
387
+
388
+ // sanity check to ensure service domain list is not empty
389
+ serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
390
+ if (serviceDomainsCount == 0) {
391
+ revert ErrorReleaseRegistryServiceAuthDomainsZero(serviceAuthorization, releaseVersion);
392
+ }
393
+ }
394
+
395
+ // TODO get service names
396
+ function _verifyService(
397
+ IService service,
398
+ address expectedAuthority,
399
+ VersionPart expectedVersion,
400
+ ObjectType expectedDomain
401
+ )
399
402
  internal
400
403
  view
401
404
  returns(
@@ -416,22 +419,25 @@ contract ReleaseRegistry is
416
419
 
417
420
  _verifyServiceInfo(service, serviceInfo, owner);
418
421
 
419
- VersionPart releaseVersion = _next; // never 0
420
- address expectedAuthority = _admin.authority(); // can be zero if registering service when release is not created
421
-
422
- // IMPORTANT: can not guarantee service access is actually controlled by authority
423
422
  if(serviceAuthority != expectedAuthority) {
424
- revert ErrorReleaseRegistryServiceReleaseAuthorityMismatch(
423
+ revert ErrorReleaseRegistryServiceAuthorityMismatch(
425
424
  service,
426
425
  serviceAuthority,
427
426
  expectedAuthority);
428
427
  }
429
428
 
430
- if(serviceVersion != releaseVersion) {
431
- revert ErrorReleaseRegistryServiceReleaseVersionMismatch(
429
+ if(serviceVersion != expectedVersion) {
430
+ revert ErrorReleaseRegistryServiceVersionMismatch(
432
431
  service,
433
432
  serviceVersion,
434
- releaseVersion);
433
+ expectedVersion);
434
+ }
435
+
436
+ if(serviceDomain != expectedDomain) {
437
+ revert ErrorReleaseRegistryServiceDomainMismatch(
438
+ service,
439
+ expectedDomain,
440
+ serviceDomain);
435
441
  }
436
442
  }
437
443
 
@@ -445,7 +451,7 @@ contract ReleaseRegistry is
445
451
  view
446
452
  {
447
453
  if(info.objectAddress != address(service)) {
448
- revert ErrorReleaseRegistryServiceInfoAddressInvalid(service, address(service));
454
+ revert ErrorReleaseRegistryServiceInfoAddressInvalid(service, info.objectAddress);
449
455
  }
450
456
 
451
457
  if(info.isInterceptor != false) { // service is never interceptor
@@ -478,8 +484,7 @@ contract ReleaseRegistry is
478
484
  if (registryAddress == address(0)) {
479
485
  return false;
480
486
  }
481
- // TODO try catch and return false in case of revert
482
- // or just panic
487
+ // TODO try catch and return false in case of revert or just panic
483
488
  // check if contract returns a zero nft id for its own address
484
489
  if (IRegistry(registryAddress).getNftIdForAddress(registryAddress).eqz()) {
485
490
  return false;
@@ -20,7 +20,7 @@ contract ServiceAuthorizationV3
20
20
  {
21
21
 
22
22
  constructor(string memory commitHash)
23
- ServiceAuthorization(commitHash)
23
+ ServiceAuthorization(commitHash, 3)
24
24
  {}
25
25
 
26
26
  function _setupDomains()
@@ -46,6 +46,14 @@ abstract contract Component is
46
46
  _;
47
47
  }
48
48
 
49
+ modifier onlyNftObjectType(NftId nftId, ObjectType expectedObjectType) {
50
+ ObjectType objectType = getRegistry().getObjectInfo(nftId).objectType;
51
+ if(!objectType.eq(expectedObjectType)) {
52
+ revert ErrorNftNotObjectType(nftId, objectType, expectedObjectType);
53
+ }
54
+ _;
55
+ }
56
+
49
57
  function _getComponentStorage() private pure returns (ComponentStorage storage $) {
50
58
  assembly {
51
59
  $.slot := COMPONENT_LOCATION_V1
@@ -8,6 +8,8 @@ import {Amount} from "../type/Amount.sol";
8
8
  import {IComponents} from "../instance/module/IComponents.sol";
9
9
  import {IRegisterable} from "../shared/IRegisterable.sol";
10
10
  import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
11
+ import {NftId} from "../type/NftId.sol";
12
+ import {ObjectType} from "../type/ObjectType.sol";
11
13
  import {TokenHandler} from "../shared/TokenHandler.sol";
12
14
 
13
15
  /// @dev component base class
@@ -18,6 +20,7 @@ interface IComponent is
18
20
  ITransferInterceptor
19
21
  {
20
22
  error ErrorComponentNotChainNft(address caller);
23
+ error ErrorNftNotObjectType(NftId nftId, ObjectType objectType, ObjectType expectedObjectType);
21
24
 
22
25
  error ErrorComponentTokenAddressZero();
23
26
  error ErrorComponentNameLengthZero();
@@ -6,8 +6,10 @@ import {StateId} from "../type/StateId.sol";
6
6
 
7
7
  interface ILifecycle {
8
8
 
9
- error ErrorNoLifecycle(ObjectType objectType);
9
+ error ErrorNoLifecycle(address contractAddress, ObjectType objectType);
10
+ error ErrorFromStateMissmatch(address contractAddress, ObjectType objectType, StateId actual, StateId required);
10
11
  error ErrorInvalidStateTransition(
12
+ address contractAddress,
11
13
  ObjectType objectType,
12
14
  StateId fromStateId,
13
15
  StateId toStateId
@@ -94,7 +94,7 @@ abstract contract KeyValueStore is
94
94
 
95
95
  // update state
96
96
  if(state != KEEP_STATE()) {
97
- checkTransition(metadata.objectType, stateOld, state);
97
+ checkTransition(stateOld, metadata.objectType, stateOld, state);
98
98
  metadata.state = state;
99
99
 
100
100
  // solhint-disable-next-line avoid-tx-origin