@etherisc/gif-next 0.0.2-f78c672-338 → 0.0.2-f78f882-351

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