@etherisc/gif-next 0.0.2-9ed3c41-176 → 0.0.2-9f51324-299

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