@etherisc/gif-next 0.0.2-952752e-374 → 0.0.2-957bd35-589

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 (491) hide show
  1. package/README.md +63 -312
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +106 -38
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +111 -45
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +58 -6
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +690 -296
  10. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +2008 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +8 -39
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +438 -35
  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 +529 -221
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +191 -21
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +256 -16
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +426 -27
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +66 -154
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +427 -53
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -98
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +512 -204
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +167 -77
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +20 -97
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +358 -82
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  40. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +109 -110
  42. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +401 -59
  44. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +145 -142
  46. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +426 -52
  48. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  49. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  50. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +128 -178
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +426 -52
  53. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  54. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +39 -73
  55. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  56. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +130 -148
  57. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
  58. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +401 -59
  59. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  60. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +360 -193
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +426 -52
  63. package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +4 -0
  64. package/artifacts/contracts/{shared/IKeyValueStore.sol/IKeyValueStore.json → instance/BaseStore.sol/BaseStore.json} +51 -229
  65. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  66. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  67. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +4 -0
  68. package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.json +304 -0
  69. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  70. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +482 -28
  71. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  72. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +355 -12
  73. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  74. package/artifacts/contracts/instance/Instance.sol/Instance.json +520 -85
  75. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1037 -437
  77. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +369 -71
  79. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +674 -487
  81. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +387 -64
  83. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  84. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +100 -52
  85. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  86. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1328 -2007
  87. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +4 -0
  88. package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +3427 -0
  89. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +1 -1
  90. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +101 -88
  91. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  92. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
  93. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  94. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  95. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  96. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  97. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  98. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  99. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  100. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +1 -1
  101. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +20 -20
  102. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  103. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  104. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  105. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  106. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  107. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  108. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  109. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +33 -45
  110. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  111. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +425 -54
  112. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  113. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  114. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +19 -31
  115. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +29 -0
  117. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  118. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +19 -31
  119. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  120. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +87 -42
  121. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +116 -50
  123. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  124. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +59 -79
  125. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  126. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +401 -59
  127. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  128. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +280 -209
  129. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  130. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +134 -68
  131. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  132. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +174 -87
  133. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  134. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +29 -41
  135. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  136. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +306 -166
  137. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  138. package/artifacts/contracts/pool/Pool.sol/Pool.json +29 -41
  139. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  140. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +522 -0
  141. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  142. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +547 -340
  143. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  144. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +162 -68
  145. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  146. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +273 -50
  147. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +123 -41
  149. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  150. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +46 -58
  151. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  152. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +426 -52
  153. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  154. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +137 -139
  155. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  156. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +128 -82
  157. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +208 -1
  159. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  160. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +45 -23
  161. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  162. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +133 -65
  163. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  164. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +50 -0
  165. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  166. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +40 -52
  167. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  168. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +231 -19
  169. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  170. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +245 -161
  171. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  172. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +783 -0
  173. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +146 -80
  175. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  176. package/artifacts/contracts/product/PricingService.sol/PricingService.json +116 -114
  177. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  178. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +115 -65
  179. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  180. package/artifacts/contracts/product/Product.sol/Product.json +40 -52
  181. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  182. package/artifacts/contracts/product/RiskService.sol/RiskService.json +279 -43
  183. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  184. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +111 -41
  185. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  186. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  187. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +52 -22
  188. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  189. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +29 -0
  190. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +1 -1
  191. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  192. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  193. package/artifacts/contracts/registry/Registry.sol/Registry.json +90 -60
  194. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  195. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +824 -430
  196. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +4 -0
  197. package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +1137 -0
  198. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  199. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +47 -18
  200. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  201. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +96 -38
  202. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
  203. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +933 -457
  204. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  205. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  206. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  207. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +202 -126
  208. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  209. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +459 -26
  210. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  211. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +119 -59
  212. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  213. package/artifacts/contracts/shared/Component.sol/Component.json +19 -31
  214. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  215. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +206 -252
  216. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  217. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +130 -72
  218. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  219. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +130 -39
  220. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +1 -1
  221. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +1 -1
  222. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +1 -1
  223. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +2 -2
  224. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  225. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +19 -31
  226. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  227. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +111 -157
  228. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  229. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -31
  230. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  231. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  232. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +19 -0
  233. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  234. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  235. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +19 -0
  236. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  237. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  238. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  239. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  240. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -2
  241. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  242. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -31
  243. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  244. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  245. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  246. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  247. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +21 -2
  248. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  249. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  250. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  251. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -0
  252. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  253. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  254. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  255. package/artifacts/contracts/shared/Service.sol/Service.json +29 -0
  256. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  257. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +62 -161
  258. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
  259. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +118 -29
  260. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  261. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +32 -32
  262. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  263. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1453 -153
  264. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  265. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +187 -107
  266. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
  267. package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
  268. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  269. package/artifacts/contracts/staking/Staking.sol/Staking.json +1565 -239
  270. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +4 -0
  271. package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +470 -0
  272. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  273. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +146 -67
  274. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  275. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +294 -177
  276. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  277. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +229 -157
  278. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  279. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +99 -45
  280. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  281. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1633 -819
  282. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
  283. package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
  284. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  285. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +159 -87
  286. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  287. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Amount.sol/AmountLib.json +10 -10
  289. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +64 -19
  291. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
  292. package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
  293. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  295. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  297. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/Fee.sol/FeeLib.json +93 -37
  299. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  300. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  301. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
  302. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +2 -2
  303. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  305. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  306. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  307. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  308. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +33 -31
  309. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  310. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  311. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  312. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  313. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  314. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  315. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  316. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +9 -4
  317. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  318. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +42 -157
  319. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  320. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +45 -2
  321. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  322. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  323. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  324. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  325. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  326. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/String.sol/StrLib.json +50 -2
  328. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +3 -3
  330. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +60 -36
  332. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  333. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  334. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  335. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +56 -2
  336. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  337. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +10 -0
  338. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  339. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +81 -27
  340. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  341. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
  342. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  343. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +10 -0
  344. package/contracts/accounting/AccountingService.sol +15 -3
  345. package/contracts/accounting/IAccountingService.sol +4 -2
  346. package/contracts/authorization/AccessAdmin.sol +364 -344
  347. package/contracts/authorization/AccessAdminLib.sol +678 -0
  348. package/contracts/authorization/AccessManagerCloneable.sol +23 -32
  349. package/contracts/authorization/Authorization.sol +161 -260
  350. package/contracts/authorization/IAccess.sol +29 -12
  351. package/contracts/authorization/IAccessAdmin.sol +85 -83
  352. package/contracts/authorization/IAuthorization.sol +9 -43
  353. package/contracts/authorization/IServiceAuthorization.sol +55 -17
  354. package/contracts/authorization/ServiceAuthorization.sol +228 -34
  355. package/contracts/distribution/BasicDistribution.sol +14 -13
  356. package/contracts/distribution/BasicDistributionAuthorization.sol +29 -9
  357. package/contracts/distribution/Distribution.sol +22 -64
  358. package/contracts/distribution/DistributionService.sol +166 -75
  359. package/contracts/distribution/IDistributionComponent.sol +3 -10
  360. package/contracts/distribution/IDistributionService.sol +34 -19
  361. package/contracts/examples/fire/FirePool.sol +0 -4
  362. package/contracts/examples/fire/FirePoolAuthorization.sol +1 -1
  363. package/contracts/examples/fire/FireProduct.sol +7 -12
  364. package/contracts/examples/fire/FireProductAuthorization.sol +1 -1
  365. package/contracts/examples/unpermissioned/SimpleDistribution.sol +32 -8
  366. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +1 -1
  367. package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -8
  368. package/contracts/examples/unpermissioned/SimplePool.sol +0 -5
  369. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +1 -1
  370. package/contracts/examples/unpermissioned/SimpleProduct.sol +94 -27
  371. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +1 -1
  372. package/contracts/instance/BaseStore.sol +93 -0
  373. package/contracts/instance/IBaseStore.sol +37 -0
  374. package/contracts/instance/IInstance.sol +103 -13
  375. package/contracts/instance/IInstanceService.sol +54 -7
  376. package/contracts/instance/Instance.sol +177 -61
  377. package/contracts/instance/InstanceAdmin.sol +199 -218
  378. package/contracts/instance/InstanceAuthorizationV3.sol +120 -70
  379. package/contracts/instance/InstanceReader.sol +392 -382
  380. package/contracts/instance/InstanceService.sol +283 -173
  381. package/contracts/instance/InstanceStore.sol +153 -128
  382. package/contracts/instance/ProductStore.sol +290 -0
  383. package/contracts/instance/RiskSet.sol +10 -2
  384. package/contracts/instance/TargetNames.sol +10 -0
  385. package/contracts/instance/base/BalanceStore.sol +4 -6
  386. package/contracts/instance/base/ObjectLifecycle.sol +2 -6
  387. package/contracts/instance/module/IBundle.sol +6 -5
  388. package/contracts/instance/module/IComponents.sol +15 -6
  389. package/contracts/instance/module/IDistribution.sol +21 -8
  390. package/contracts/instance/module/IPolicy.sol +28 -8
  391. package/contracts/instance/module/IRisk.sol +2 -0
  392. package/contracts/oracle/BasicOracle.sol +3 -6
  393. package/contracts/oracle/BasicOracleAuthorization.sol +15 -8
  394. package/contracts/oracle/IOracle.sol +9 -4
  395. package/contracts/oracle/Oracle.sol +4 -8
  396. package/contracts/oracle/OracleService.sol +8 -8
  397. package/contracts/pool/BasicPool.sol +4 -18
  398. package/contracts/pool/BasicPoolAuthorization.sol +29 -16
  399. package/contracts/pool/BundleService.sol +57 -96
  400. package/contracts/pool/IBundleService.sol +27 -32
  401. package/contracts/pool/IPoolService.sol +57 -40
  402. package/contracts/pool/Pool.sol +15 -29
  403. package/contracts/pool/PoolLib.sol +341 -0
  404. package/contracts/pool/PoolService.sol +189 -190
  405. package/contracts/product/ApplicationService.sol +85 -17
  406. package/contracts/product/BasicProduct.sol +2 -5
  407. package/contracts/product/BasicProductAuthorization.sol +31 -9
  408. package/contracts/product/ClaimService.sol +112 -194
  409. package/contracts/product/IApplicationService.sol +24 -2
  410. package/contracts/product/IClaimService.sol +6 -6
  411. package/contracts/product/IPolicyService.sol +20 -8
  412. package/contracts/product/IPricingService.sol +1 -0
  413. package/contracts/product/IRiskService.sol +25 -10
  414. package/contracts/product/PolicyService.sol +110 -201
  415. package/contracts/product/PolicyServiceLib.sol +139 -0
  416. package/contracts/product/PricingService.sol +33 -31
  417. package/contracts/product/Product.sol +61 -33
  418. package/contracts/product/RiskService.sol +63 -25
  419. package/contracts/registry/IRegistry.sol +17 -9
  420. package/contracts/registry/IRelease.sol +6 -3
  421. package/contracts/registry/Registry.sol +19 -9
  422. package/contracts/registry/RegistryAdmin.sol +85 -256
  423. package/contracts/registry/RegistryAuthorization.sol +337 -0
  424. package/contracts/registry/RegistryService.sol +1 -1
  425. package/contracts/registry/ReleaseAdmin.sol +70 -116
  426. package/contracts/registry/ReleaseRegistry.sol +57 -43
  427. package/contracts/registry/ServiceAuthorizationV3.sol +131 -31
  428. package/contracts/registry/TokenRegistry.sol +56 -52
  429. package/contracts/shared/Component.sol +19 -35
  430. package/contracts/shared/ComponentService.sol +281 -290
  431. package/contracts/shared/ContractLib.sol +137 -77
  432. package/contracts/shared/IComponent.sol +1 -4
  433. package/contracts/shared/IComponentService.sol +21 -26
  434. package/contracts/shared/INftOwnable.sol +2 -0
  435. package/contracts/shared/IRegisterable.sol +0 -1
  436. package/contracts/shared/InitializableERC165.sol +9 -1
  437. package/contracts/shared/InstanceLinkedComponent.sol +8 -13
  438. package/contracts/shared/NftOwnable.sol +4 -2
  439. package/contracts/shared/PolicyHolder.sol +3 -2
  440. package/contracts/shared/Registerable.sol +1 -4
  441. package/contracts/shared/Service.sol +6 -4
  442. package/contracts/shared/TokenHandler.sol +44 -91
  443. package/contracts/staking/IStaking.sol +265 -72
  444. package/contracts/staking/IStakingService.sol +45 -75
  445. package/contracts/staking/ITargetLimitHandler.sol +17 -0
  446. package/contracts/staking/Staking.sol +475 -204
  447. package/contracts/staking/{StakeManagerLib.sol → StakingLib.sol} +55 -84
  448. package/contracts/staking/StakingManager.sol +4 -3
  449. package/contracts/staking/StakingReader.sol +58 -77
  450. package/contracts/staking/StakingService.sol +62 -180
  451. package/contracts/staking/StakingServiceManager.sol +6 -4
  452. package/contracts/staking/StakingStore.sol +1093 -330
  453. package/contracts/staking/TargetHandler.sol +132 -0
  454. package/contracts/staking/TargetManagerLib.sol +69 -46
  455. package/contracts/type/Amount.sol +4 -0
  456. package/contracts/type/Blocknumber.sol +17 -22
  457. package/contracts/type/ChainId.sol +101 -0
  458. package/contracts/type/Fee.sol +8 -8
  459. package/contracts/type/NftId.sol +3 -3
  460. package/contracts/type/ObjectType.sol +69 -52
  461. package/contracts/type/RiskId.sol +4 -3
  462. package/contracts/type/RoleId.sol +60 -45
  463. package/contracts/type/Seconds.sol +19 -0
  464. package/contracts/type/Selector.sol +5 -0
  465. package/contracts/type/String.sol +12 -0
  466. package/contracts/type/Timestamp.sol +4 -2
  467. package/contracts/type/UFixed.sol +28 -10
  468. package/contracts/type/Version.sol +39 -0
  469. package/contracts/upgradeability/IVersionable.sol +3 -0
  470. package/contracts/upgradeability/ProxyManager.sol +26 -12
  471. package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
  472. package/contracts/upgradeability/Versionable.sol +6 -3
  473. package/package.json +2 -2
  474. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +0 -4
  475. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +0 -24
  476. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  477. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  478. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
  479. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -485
  480. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  481. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  482. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +0 -538
  483. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +0 -4
  484. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +0 -440
  485. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
  486. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -205
  487. package/contracts/instance/module/IAccess.sol +0 -46
  488. package/contracts/shared/ComponentVerifyingService.sol +0 -128
  489. package/contracts/shared/IKeyValueStore.sol +0 -54
  490. package/contracts/shared/KeyValueStore.sol +0 -131
  491. package/contracts/staking/StakingLifecycle.sol +0 -23
@@ -4,7 +4,6 @@ pragma solidity ^0.8.20;
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
6
  import {IAccountingService} from "../accounting/IAccountingService.sol";
7
- import {IComponent} from "../shared/IComponent.sol";
8
7
  import {IComponents} from "../instance/module/IComponents.sol";
9
8
  import {IComponentService} from "./IComponentService.sol";
10
9
  import {IInstance} from "../instance/IInstance.sol";
@@ -12,23 +11,25 @@ import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
12
11
  import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
13
12
  import {InstanceReader} from "../instance/InstanceReader.sol";
14
13
  import {InstanceStore} from "../instance/InstanceStore.sol";
15
- import {IInstanceService} from "../instance/IInstanceService.sol";
16
14
  import {IPoolComponent} from "../pool/IPoolComponent.sol";
17
15
  import {IProductComponent} from "../product/IProductComponent.sol";
18
- import {IRegisterable} from "../shared/IRegisterable.sol";
19
16
  import {IRegistry} from "../registry/IRegistry.sol";
20
17
  import {IRegistryService} from "../registry/IRegistryService.sol";
18
+ import {IStaking} from "../staking/IStaking.sol";
19
+ import {IStakingService} from "../staking/IStakingService.sol";
21
20
 
21
+ import {AccessManagerCloneable} from "../authorization/AccessManagerCloneable.sol";
22
22
  import {Amount, AmountLib} from "../type/Amount.sol";
23
+ import {ChainIdLib} from "../type/ChainId.sol";
23
24
  import {ContractLib} from "../shared/ContractLib.sol";
24
25
  import {Fee, FeeLib} from "../type/Fee.sol";
25
26
  import {KEEP_STATE} from "../type/StateId.sol";
26
27
  import {NftId, NftIdLib} from "../type/NftId.sol";
27
- import {ObjectType, ACCOUNTING, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
28
+ import {ObjectType, ACCOUNTING, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT, STAKING} from "../type/ObjectType.sol";
29
+ import {ProductStore} from "../instance/ProductStore.sol";
28
30
  import {Service} from "../shared/Service.sol";
29
31
  import {TokenHandler} from "../shared/TokenHandler.sol";
30
32
  import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
31
- import {VersionPart} from "../type/Version.sol";
32
33
 
33
34
 
34
35
  contract ComponentService is
@@ -40,32 +41,7 @@ contract ComponentService is
40
41
 
41
42
  IAccountingService private _accountingService;
42
43
  IRegistryService private _registryService;
43
- IInstanceService private _instanceService;
44
-
45
- modifier onlyComponent(address component) {
46
- _checkSupportsInterface(component);
47
- _;
48
- }
49
-
50
- modifier onlyInstance() {
51
- NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
52
- if (instanceNftId.eqz()) {
53
- revert ErrorComponentServiceNotRegistered(msg.sender);
54
- }
55
-
56
- ObjectType objectType = getRegistry().getObjectInfo(instanceNftId).objectType;
57
- if (objectType != INSTANCE()) {
58
- revert ErrorComponentServiceNotInstance(msg.sender, objectType);
59
- }
60
-
61
- VersionPart instanceVersion = IInstance(msg.sender).getRelease();
62
- if (instanceVersion != getVersion().toMajorPart()) {
63
- revert ErrorComponentServiceInstanceVersionMismatch(msg.sender, instanceVersion);
64
- }
65
-
66
- _;
67
- }
68
-
44
+ IStaking private _staking;
69
45
 
70
46
  function _initialize(
71
47
  address owner,
@@ -84,185 +60,212 @@ contract ComponentService is
84
60
 
85
61
  _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
86
62
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
87
- _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
63
+ _staking = IStakingService(_getServiceAddress(STAKING())).getStaking();
88
64
 
89
65
  _registerInterface(type(IComponentService).interfaceId);
90
66
  }
91
67
 
92
68
  //-------- component ----------------------------------------------------//
93
69
 
94
- function registerComponent(address component)
70
+ /// @inheritdoc IComponentService
71
+ function registerComponent(address componentAddress)
95
72
  external
96
73
  virtual
97
- onlyComponent(component)
74
+ restricted()
98
75
  returns (NftId componentNftId)
99
76
  {
100
- // type specific registration
101
- ObjectType componentType = IInstanceLinkedComponent(component).getInitialInfo().objectType;
102
- if (componentType == POOL()) {
103
- return _registerPool(component);
104
- }
105
- if (componentType == DISTRIBUTION()) {
106
- return _registerDistribution(component);
107
- }
108
- if (componentType == ORACLE()) {
109
- return _registerOracle(component);
77
+ // checks
78
+ // check sender is registered product
79
+ IRegistry registry = getRegistry();
80
+ if (!registry.isObjectType(msg.sender, PRODUCT())) {
81
+ revert ErrorComponentServiceCallerNotProduct(msg.sender);
110
82
  }
111
83
 
112
- // fail
113
- revert ErrorComponentServiceTypeNotSupported(component, componentType);
114
- }
84
+ // check provided address is product contract
85
+ if (!_isInstanceLinkedComponent(componentAddress)) {
86
+ revert ErrorComponentServiceNotComponent(componentAddress);
87
+ }
115
88
 
116
- function approveTokenHandler(
117
- IERC20Metadata token,
118
- Amount amount
119
- )
120
- external
121
- virtual
122
- {
123
- // checks
124
- (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
125
- TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
126
- componentNftId).tokenHandler;
89
+ NftId productNftId = registry.getNftIdForAddress(msg.sender);
90
+ IInstance instance = IInstance(
91
+ registry.getObjectAddress(
92
+ registry.getParentNftId(productNftId)));
127
93
 
128
- // effects
129
- tokenHandler.approve(token, amount);
94
+ componentNftId = _verifyAndRegister(
95
+ instance,
96
+ componentAddress,
97
+ productNftId, // product is parent of component to be registered
98
+ address(0)); // token will be inhereited from product
130
99
  }
131
100
 
132
101
 
133
- function approveStakingTokenHandler(
102
+ /// @inheritdoc IComponentService
103
+ function approveTokenHandler(
134
104
  IERC20Metadata token,
135
105
  Amount amount
136
106
  )
137
107
  external
138
108
  virtual
109
+ restricted()
139
110
  {
140
111
  // checks
141
- ContractLib.getAndVerifyStaking(
142
- getRegistry(),
143
- msg.sender); // only active
112
+ (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
113
+ TokenHandler tokenHandler = instance.getInstanceReader().getTokenHandler(
114
+ componentNftId);
144
115
 
145
116
  // effects
146
- TokenHandler tokenHandler = IComponent(msg.sender).getTokenHandler();
147
117
  tokenHandler.approve(token, amount);
148
118
  }
149
119
 
150
120
 
121
+ /// @inheritdoc IComponentService
151
122
  function setWallet(address newWallet)
152
123
  external
153
124
  virtual
125
+ restricted()
154
126
  {
155
127
  // checks
156
- (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
157
- TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
158
- componentNftId).tokenHandler;
128
+ (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
129
+ TokenHandler tokenHandler = instance.getInstanceReader().getTokenHandler(
130
+ componentNftId);
159
131
 
160
132
  // effects
161
133
  tokenHandler.setWallet(newWallet);
162
134
  }
163
135
 
164
136
  /// @inheritdoc IComponentService
165
- function setLockedFromInstance(address componentAddress, bool locked)
137
+ function setLocked(bool locked)
166
138
  external
167
139
  virtual
168
- onlyInstance()
169
- {
170
- address instanceAddress = msg.sender;
171
- // NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
172
- IInstance instance = IInstance(instanceAddress);
173
- _setLocked(instance.getInstanceAdmin(), componentAddress, locked);
174
- }
175
-
176
- /// @inheritdoc IComponentService
177
- function setLockedFromComponent(address componentAddress, bool locked)
178
- external
179
- virtual
180
- onlyComponent(msg.sender)
140
+ restricted()
181
141
  {
182
142
  (, IInstance instance) = _getAndVerifyComponent(COMPONENT(), false);
183
- _setLocked(instance.getInstanceAdmin(), componentAddress, locked);
143
+
144
+ address component = msg.sender;
145
+ instance.getInstanceAdmin().setContractLocked(
146
+ component,
147
+ locked);
148
+ emit LogComponentServiceComponentLocked(component, locked);
184
149
  }
185
150
 
151
+
152
+ /// @inheritdoc IComponentService
186
153
  function withdrawFees(Amount amount)
187
154
  external
188
155
  virtual
156
+ restricted()
189
157
  returns (Amount withdrawnAmount)
190
158
  {
191
- (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
192
- IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
193
- address componentWallet = info.tokenHandler.getWallet();
159
+ // checks
160
+ (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
161
+ InstanceReader instanceReader = instance.getInstanceReader();
194
162
 
195
163
  // determine withdrawn amount
164
+ Amount maxAvailableAmount = instanceReader.getFeeAmount(componentNftId);
196
165
  withdrawnAmount = amount;
197
- if (withdrawnAmount.gte(AmountLib.max())) {
198
- withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
199
- } else if (withdrawnAmount.eqz()) {
166
+
167
+ // max amount -> withraw all available fees
168
+ if (amount == AmountLib.max()) {
169
+ withdrawnAmount = maxAvailableAmount;
170
+ }
171
+
172
+ // check modified withdrawn amount
173
+ if (withdrawnAmount.eqz()) {
200
174
  revert ErrorComponentServiceWithdrawAmountIsZero();
201
- } else {
202
- Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
203
- if (withdrawnAmount.gt(withdrawLimit)) {
204
- revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
205
- }
175
+ } else if (withdrawnAmount > maxAvailableAmount) {
176
+ revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, maxAvailableAmount);
206
177
  }
207
178
 
179
+ // effects
208
180
  // decrease fee counters by withdrawnAmount
209
- _accountingService.decreaseComponentFees(instance.getInstanceStore(), componentNftId, withdrawnAmount);
181
+ _accountingService.decreaseComponentFees(
182
+ instance.getInstanceStore(),
183
+ componentNftId,
184
+ withdrawnAmount);
210
185
 
211
186
  // transfer amount to component owner
212
187
  address componentOwner = getRegistry().ownerOf(componentNftId);
213
- emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
214
- info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
188
+ TokenHandler tokenHandler = instanceReader.getTokenHandler(componentNftId);
189
+ emit LogComponentServiceComponentFeesWithdrawn(
190
+ componentNftId,
191
+ componentOwner,
192
+ address(tokenHandler.TOKEN()),
193
+ withdrawnAmount);
194
+
195
+ // interactions
196
+ // transfer amount to component owner
197
+ tokenHandler.pushFeeToken(
198
+ componentOwner,
199
+ withdrawnAmount);
215
200
  }
216
201
 
217
202
 
218
203
  //-------- product ------------------------------------------------------//
219
204
 
220
- function registerProduct(address productAddress)
205
+ /// @inheritdoc IComponentService
206
+ function registerProduct(address productAddress, address token)
221
207
  external
222
208
  virtual
209
+ restricted()
223
210
  nonReentrant()
224
- onlyComponent(productAddress)
225
211
  returns (NftId productNftId)
226
212
  {
227
- // register/create component setup
228
- InstanceAdmin instanceAdmin;
229
- InstanceStore instanceStore;
230
- (, instanceAdmin, instanceStore,, productNftId) = _register(
231
- productAddress,
232
- PRODUCT());
233
-
234
- // get product
235
- IProductComponent product = IProductComponent(productAddress);
236
-
237
- IComponents.ProductInfo memory initialProductInfo = product.getInitialProductInfo();
238
- // force initialization of linked components with empty values to
239
- // ensure no components are linked upon initialization of the product
240
- initialProductInfo.poolNftId = NftIdLib.zero();
241
- initialProductInfo.distributionNftId = NftIdLib.zero();
242
- initialProductInfo.oracleNftId = new NftId[](initialProductInfo.expectedNumberOfOracles);
213
+ // checks
214
+ // check sender is registered instance
215
+ IRegistry registry = getRegistry();
216
+ if (!registry.isObjectType(msg.sender, INSTANCE())) {
217
+ revert ErrorComponentServiceCallerNotInstance(msg.sender);
218
+ }
243
219
 
244
- // create info
245
- instanceStore.createProduct(
246
- productNftId,
247
- initialProductInfo);
248
- instanceStore.createFee(
249
- productNftId,
250
- product.getInitialFeeInfo());
220
+ // check provided address is product contract
221
+ if (!_isProduct(productAddress)) {
222
+ revert ErrorComponentServiceNotProduct(productAddress);
223
+ }
251
224
 
252
- // authorize
253
- instanceAdmin.initializeComponentAuthorization(product);
225
+ IInstance instance = IInstance(msg.sender);
226
+ NftId instanceNftId = registry.getNftIdForAddress(msg.sender);
227
+ productNftId = _verifyAndRegister(
228
+ instance,
229
+ productAddress,
230
+ instanceNftId, // instance is parent of product to be registered
231
+ token);
232
+
233
+ // add product specific token for product to staking
234
+ _staking.addTargetToken(
235
+ instanceNftId,
236
+ token);
237
+ }
238
+
239
+
240
+ function _isProduct(address target) internal view virtual returns (bool) {
241
+ if (!_isInstanceLinkedComponent(target)) {
242
+ return false;
243
+ }
244
+
245
+ return IInstanceLinkedComponent(target).getInitialInfo().objectType == PRODUCT();
246
+ }
247
+
248
+
249
+ function _isInstanceLinkedComponent(address target) internal view virtual returns (bool) {
250
+ if (!ContractLib.isContract(target)) {
251
+ return false;
252
+ }
253
+
254
+ return ContractLib.supportsInterface(target, type(IInstanceLinkedComponent).interfaceId);
254
255
  }
255
256
 
256
257
 
258
+ /// @inheritdoc IComponentService
257
259
  function setProductFees(
258
260
  Fee memory productFee, // product fee on net premium
259
261
  Fee memory processingFee // product fee on payout amounts
260
262
  )
261
263
  external
262
264
  virtual
265
+ restricted()
263
266
  nonReentrant()
264
267
  {
265
- (NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
268
+ (NftId productNftId, IInstance instance) = _getAndVerifyComponent(PRODUCT(), true);
266
269
  IComponents.FeeInfo memory feeInfo = instance.getInstanceReader().getFeeInfo(productNftId);
267
270
  bool feesChanged = false;
268
271
 
@@ -281,31 +284,53 @@ contract ComponentService is
281
284
  }
282
285
 
283
286
  if(feesChanged) {
284
- instance.getInstanceStore().updateFee(productNftId, feeInfo);
287
+ instance.getProductStore().updateFee(productNftId, feeInfo);
285
288
  emit LogComponentServiceProductFeesUpdated(productNftId);
286
289
  }
287
290
  }
288
291
 
292
+
293
+ function _createProduct(
294
+ ProductStore productStore,
295
+ NftId productNftId,
296
+ address productAddress
297
+ )
298
+ internal
299
+ virtual
300
+ {
301
+ // create product in instance instanceStore
302
+ IProductComponent product = IProductComponent(productAddress);
303
+ IComponents.ProductInfo memory initialProductInfo = product.getInitialProductInfo();
304
+ // force initialization of linked components with empty values to
305
+ // ensure no components are linked upon initialization of the product
306
+ initialProductInfo.poolNftId = NftIdLib.zero();
307
+ initialProductInfo.distributionNftId = NftIdLib.zero();
308
+ initialProductInfo.oracleNftId = new NftId[](initialProductInfo.expectedNumberOfOracles);
309
+
310
+ // create info
311
+ productStore.createProduct(
312
+ productNftId,
313
+ initialProductInfo);
314
+
315
+ productStore.createFee(
316
+ productNftId,
317
+ product.getInitialFeeInfo());
318
+ }
319
+
289
320
  //-------- distribution -------------------------------------------------//
290
321
 
291
322
  /// @dev registers the sending component as a distribution component
292
- function _registerDistribution(address distributioAddress)
323
+ function _createDistribution(
324
+ ProductStore productStore,
325
+ NftId productNftId,
326
+ NftId distributionNftId,
327
+ IComponents.ProductInfo memory productInfo
328
+ )
293
329
  internal
294
330
  virtual
295
331
  nonReentrant()
296
- returns (NftId distributionNftId)
297
332
  {
298
- // register/create component info
299
- InstanceReader instanceReader;
300
- InstanceAdmin instanceAdmin;
301
- InstanceStore instanceStore;
302
- NftId productNftId;
303
- (instanceReader, instanceAdmin, instanceStore, productNftId, distributionNftId) = _register(
304
- distributioAddress,
305
- DISTRIBUTION());
306
-
307
333
  // check product is still expecting a distribution registration
308
- IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
309
334
  if (!productInfo.hasDistribution) {
310
335
  revert ErrorProductServiceNoDistributionExpected(productNftId);
311
336
  }
@@ -315,11 +340,7 @@ contract ComponentService is
315
340
 
316
341
  // set distribution in product info
317
342
  productInfo.distributionNftId = distributionNftId;
318
- instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
319
-
320
- // authorize
321
- instanceAdmin.initializeComponentAuthorization(
322
- IInstanceLinkedComponent(distributioAddress));
343
+ productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
323
344
  }
324
345
 
325
346
 
@@ -329,8 +350,9 @@ contract ComponentService is
329
350
  )
330
351
  external
331
352
  virtual
353
+ restricted()
332
354
  {
333
- (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
355
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyComponent(DISTRIBUTION(), true);
334
356
  (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
335
357
  instance.getInstanceReader(), distributionNftId);
336
358
  bool feesChanged = false;
@@ -350,30 +372,23 @@ contract ComponentService is
350
372
  }
351
373
 
352
374
  if(feesChanged) {
353
- instance.getInstanceStore().updateFee(productNftId, feeInfo);
375
+ instance.getProductStore().updateFee(productNftId, feeInfo);
354
376
  emit LogComponentServiceDistributionFeesUpdated(distributionNftId);
355
377
  }
356
378
  }
357
379
 
358
380
  //-------- oracle -------------------------------------------------------//
359
381
 
360
- function _registerOracle(address oracleAddress)
382
+ function _createOracle(
383
+ ProductStore productStore,
384
+ NftId productNftId,
385
+ NftId oracleNftId,
386
+ IComponents.ProductInfo memory productInfo
387
+ )
361
388
  internal
362
389
  virtual
363
- returns (NftId oracleNftId)
364
390
  {
365
- // register/create component setup
366
- InstanceReader instanceReader;
367
- InstanceAdmin instanceAdmin;
368
- InstanceStore instanceStore;
369
- NftId productNftId;
370
-
371
- (instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) = _register(
372
- oracleAddress,
373
- ORACLE());
374
-
375
391
  // check product is still expecting an oracle registration
376
- IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
377
392
  if (productInfo.expectedNumberOfOracles == 0) {
378
393
  revert ErrorProductServiceNoOraclesExpected(productNftId);
379
394
  }
@@ -384,48 +399,37 @@ contract ComponentService is
384
399
  // update/add oracle to product info
385
400
  productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
386
401
  productInfo.numberOfOracles++;
387
- instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
388
-
389
- // authorize
390
- instanceAdmin.initializeComponentAuthorization(
391
- IInstanceLinkedComponent(oracleAddress));
402
+ productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
392
403
  }
393
404
 
394
405
  //-------- pool ---------------------------------------------------------//
395
406
 
396
- function _registerPool(address poolAddress)
407
+ function _createPool(
408
+ InstanceStore instanceStore,
409
+ ProductStore productStore,
410
+ NftId productNftId,
411
+ NftId poolNftId,
412
+ address componentAddress,
413
+ IComponents.ProductInfo memory productInfo
414
+ )
397
415
  internal
398
416
  virtual
399
- returns (NftId poolNftId)
400
417
  {
401
- // register/create component setup
402
- InstanceReader instanceReader;
403
- InstanceAdmin instanceAdmin;
404
- InstanceStore instanceStore;
405
- NftId productNftId;
406
-
407
- (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) = _register(
408
- poolAddress,
409
- POOL());
410
-
411
418
  // check product is still expecting a pool registration
412
- IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
419
+ //IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
413
420
  if (productInfo.poolNftId.gtz()) {
414
421
  revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
415
422
  }
416
423
 
417
424
  // create info
418
- IPoolComponent pool = IPoolComponent(poolAddress);
425
+ IPoolComponent pool = IPoolComponent(componentAddress);
419
426
  instanceStore.createPool(
420
427
  poolNftId,
421
428
  pool.getInitialPoolInfo());
422
429
 
423
430
  // update pool in product info
424
431
  productInfo.poolNftId = poolNftId;
425
- instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
426
-
427
- // authorize
428
- instanceAdmin.initializeComponentAuthorization(pool);
432
+ productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
429
433
  }
430
434
 
431
435
 
@@ -436,8 +440,9 @@ contract ComponentService is
436
440
  )
437
441
  external
438
442
  virtual
443
+ restricted()
439
444
  {
440
- (NftId poolNftId, IInstance instance) = _getAndVerifyActiveComponent(POOL());
445
+ (NftId poolNftId, IInstance instance) = _getAndVerifyComponent(POOL(), true);
441
446
 
442
447
  (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
443
448
  instance.getInstanceReader(), poolNftId);
@@ -465,64 +470,79 @@ contract ComponentService is
465
470
  }
466
471
 
467
472
  if(feesChanged) {
468
- instance.getInstanceStore().updateFee(productNftId, feeInfo);
473
+ instance.getProductStore().updateFee(productNftId, feeInfo);
469
474
  emit LogComponentServicePoolFeesUpdated(poolNftId);
470
475
  }
471
476
  }
472
477
 
478
+
473
479
  /// @dev Registers the component represented by the provided address.
474
- function _register(
475
- address componentAddress, // address of component to register
476
- ObjectType requiredType // required type for component for registration
480
+ /// The caller must ensure componentAddress is IInstanceLinkedComponent.
481
+ function _verifyAndRegister(
482
+ IInstance instance,
483
+ address componentAddress,
484
+ NftId parentNftId,
485
+ address token
477
486
  )
478
487
  internal
479
488
  virtual
480
- returns (
481
- InstanceReader instanceReader,
482
- InstanceAdmin instanceAdmin,
483
- InstanceStore instanceStore,
484
- NftId parentNftId,
485
- NftId componentNftId
486
- )
489
+ returns (NftId componentNftId)
487
490
  {
488
- NftId instanceNftId;
489
- IInstance instance;
490
- IInstanceLinkedComponent component;
491
- address initialOwner;
492
-
493
491
  (
494
- instanceNftId,
495
- instance,
496
- parentNftId,
497
- component,
498
- initialOwner
492
+ IInstanceLinkedComponent component,
493
+ IRegistry.ObjectInfo memory objectInfo // initial component info
499
494
  ) = _getAndVerifyRegisterableComponent(
500
- getRegistry(),
501
495
  componentAddress,
502
- requiredType);
496
+ parentNftId);
503
497
 
504
- // get instance supporting contracts (as function return values)
505
- instanceReader = instance.getInstanceReader();
506
- instanceAdmin = instance.getInstanceAdmin();
507
- instanceStore = instance.getInstanceStore();
498
+ InstanceStore instanceStore = instance.getInstanceStore();
499
+ ObjectType componentType = objectInfo.objectType;
508
500
 
509
- // register with registry
510
- if (requiredType == PRODUCT()) {
501
+ if(componentType == PRODUCT()) {
502
+ // register product with registry
511
503
  componentNftId = _registryService.registerProduct(
512
- component, initialOwner).nftId;
504
+ component,
505
+ objectInfo.initialOwner).nftId;
506
+
507
+ // create product info in instance store
508
+ _createProduct(instance.getProductStore(), componentNftId, componentAddress);
513
509
  } else {
510
+ // register non product component with registry
514
511
  componentNftId = _registryService.registerProductLinkedComponent(
515
- component, requiredType, initialOwner).nftId;
512
+ component,
513
+ objectInfo.objectType,
514
+ objectInfo.initialOwner).nftId;
515
+
516
+ InstanceReader instanceReader = instance.getInstanceReader();
517
+
518
+ // create non product component info in instance store
519
+ NftId productNftId = parentNftId;
520
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
521
+ if(componentType == POOL()) {
522
+ _createPool(instanceStore, instance.getProductStore(), productNftId, componentNftId, componentAddress, productInfo);
523
+ } else if(componentType == DISTRIBUTION()) {
524
+ _createDistribution(instance.getProductStore(), productNftId, componentNftId, productInfo);
525
+ } else if(componentType == ORACLE()) {
526
+ _createOracle(instance.getProductStore(), productNftId, componentNftId, productInfo);
527
+ } else {
528
+ revert ErrorComponentServiceComponentTypeNotSupported(componentAddress, componentType);
529
+ }
530
+
531
+ // get product's token
532
+ token = address(instanceReader.getTokenHandler(productNftId).TOKEN());
516
533
  }
517
534
 
535
+ _checkToken(instance, token);
536
+
537
+ InstanceAdmin instanceAdmin = instance.getInstanceAdmin();
538
+
518
539
  // deploy and wire token handler
519
540
  IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
520
- IERC20Metadata token = componentInfo.token;
521
541
  componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
522
542
  address(getRegistry()),
523
543
  address(component), // initially, component is its own wallet
524
- address(token),
525
- address(instanceAdmin.authority()));
544
+ token,
545
+ instanceAdmin.authority());
526
546
 
527
547
  // register component with instance
528
548
  instanceStore.createComponent(
@@ -532,7 +552,34 @@ contract ComponentService is
532
552
  // link component contract to nft id
533
553
  component.linkToRegisteredNftId();
534
554
 
535
- emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, address(component), address(token), initialOwner);
555
+ // authorize
556
+ instanceAdmin.initializeComponentAuthorization(componentAddress, componentType);
557
+
558
+ emit LogComponentServiceRegistered(
559
+ instance.getNftId(),
560
+ componentNftId,
561
+ componentType,
562
+ address(component),
563
+ token,
564
+ objectInfo.initialOwner);
565
+ }
566
+
567
+
568
+ function _checkToken(IInstance instance, address token)
569
+ internal
570
+ view
571
+ {
572
+ if (! instance.isTokenRegistryDisabled()) {
573
+ // check if provided token is whitelisted and active
574
+ if (!ContractLib.isActiveToken(
575
+ getRegistry().getTokenRegistryAddress(),
576
+ ChainIdLib.current(),
577
+ token,
578
+ AccessManagerCloneable(authority()).getRelease())
579
+ ) {
580
+ revert ErrorComponentServiceTokenInvalid(token);
581
+ }
582
+ }
536
583
  }
537
584
 
538
585
 
@@ -562,102 +609,51 @@ contract ComponentService is
562
609
  IComponents.FeeInfo memory info
563
610
  )
564
611
  {
565
- productNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
612
+ productNftId = getRegistry().getParentNftId(componentNftId);
566
613
  info = instanceReader.getFeeInfo(productNftId);
567
614
  }
568
615
 
569
616
 
570
617
  /// @dev Based on the provided component address required type the component
571
618
  /// and related instance contract this function reverts iff:
572
- /// - the sender is not registered
573
- /// - the component contract does not support IInstanceLinkedComponent
574
- /// - the component type does not match with the required type
619
+ /// - the component parent does not match with the required parent
620
+ /// - the component release does not match with the service release
575
621
  /// - the component has already been registered
576
622
  function _getAndVerifyRegisterableComponent(
577
- IRegistry registry,
578
623
  address componentAddress,
579
- ObjectType requiredType
624
+ NftId requiredParent
580
625
  )
581
626
  internal
582
627
  view
583
628
  returns (
584
- NftId instanceNftId,
585
- IInstance instance,
586
- NftId parentNftId,
587
629
  IInstanceLinkedComponent component,
588
- address initialOwner
630
+ IRegistry.ObjectInfo memory info
589
631
  )
590
632
  {
591
- // check sender (instance or product) is registered
592
- IRegistry.ObjectInfo memory senderInfo = registry.getObjectInfo(msg.sender);
593
- if (senderInfo.nftId.eqz()) {
594
- revert ErrorComponentServiceSenderNotRegistered(msg.sender);
595
- }
596
-
597
- // the sender is the parent of the component to be registered
598
- // an instance caller wanting to register a product - or -
599
- // a product caller wantint go register a distribution, oracle or pool
600
- parentNftId = senderInfo.nftId;
601
-
602
- // check component is of required type
603
633
  component = IInstanceLinkedComponent(componentAddress);
604
- IRegistry.ObjectInfo memory info = component.getInitialInfo();
605
- if(info.objectType != requiredType) {
606
- revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
607
- }
608
-
609
- // check component has not already been registered
610
- if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
611
- revert ErrorComponentServiceAlreadyRegistered(componentAddress);
612
- }
634
+ info = component.getInitialInfo();
613
635
 
614
- // check release matches
615
- address parentAddress = registry.getObjectAddress(parentNftId);
616
- if (component.getRelease() != IRegisterable(parentAddress).getRelease()) {
617
- revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), IRegisterable(parentAddress).getRelease());
636
+ // check component parent
637
+ if(info.parentNftId != requiredParent) {
638
+ revert ErrorComponentServiceComponentParentInvalid(componentAddress, requiredParent, info.parentNftId);
618
639
  }
619
640
 
620
- // check component belongs to same product cluster
621
- // parent of product must be instance, parent of other componet types must be product
622
- if (info.parentNftId != senderInfo.nftId) {
623
- revert ErrorComponentServiceSenderNotComponentParent(senderInfo.nftId, info.parentNftId);
641
+ // check component release (must match with service release)
642
+ if(component.getRelease() != getRelease()) {
643
+ revert ErrorComponentServiceComponentReleaseMismatch(componentAddress, getRelease(), component.getRelease());
624
644
  }
625
645
 
626
- // verify parent is registered instance
627
- if (requiredType == PRODUCT()) {
628
- if (senderInfo.objectType != INSTANCE()) {
629
- revert ErrorComponentServiceParentNotInstance(senderInfo.nftId, senderInfo.objectType);
630
- }
631
-
632
- instanceNftId = senderInfo.nftId;
633
- // verify parent is registered product
634
- } else {
635
- if (senderInfo.objectType != PRODUCT()) {
636
- revert ErrorComponentServiceParentNotProduct(senderInfo.nftId, senderInfo.objectType);
637
- }
638
-
639
- instanceNftId = senderInfo.parentNftId;
646
+ // check component has not already been registered
647
+ if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
648
+ revert ErrorComponentServiceComponentAlreadyRegistered(componentAddress);
640
649
  }
641
-
642
- // get initial owner and instance
643
- initialOwner = info.initialOwner;
644
- instance = IInstance(registry.getObjectAddress(instanceNftId));
645
650
  }
646
651
 
652
+
647
653
  function _setLocked(InstanceAdmin instanceAdmin, address componentAddress, bool locked) internal {
648
654
  instanceAdmin.setTargetLocked(componentAddress, locked);
649
655
  }
650
656
 
651
- function _getAndVerifyActiveComponent(ObjectType expectedType)
652
- internal
653
- view
654
- returns (
655
- NftId componentNftId,
656
- IInstance instance
657
- )
658
- {
659
- return _getAndVerifyComponent(expectedType, true); // only active
660
- }
661
657
 
662
658
  function _getAndVerifyComponent(ObjectType expectedType, bool isActive)
663
659
  internal
@@ -688,13 +684,8 @@ contract ComponentService is
688
684
  instance = IInstance(instanceAddress);
689
685
  }
690
686
 
687
+
691
688
  function _getDomain() internal pure virtual override returns(ObjectType) {
692
689
  return COMPONENT();
693
690
  }
694
-
695
- function _checkSupportsInterface(address component) internal view {
696
- if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
697
- revert ErrorComponentServiceNotInstanceLinkedComponent(component);
698
- }
699
- }
700
691
  }