@etherisc/gif-next 0.0.2-683d8b2-607 → 0.0.2-684bde0-724

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