@etherisc/gif-next 0.0.2-89c8f37-711 → 0.0.2-8a72793-100

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