@etherisc/gif-next 0.0.2-da2c7dd-538 → 0.0.2-da87b00-860

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