@etherisc/gif-next 0.0.2-7177fd8-761 → 0.0.2-71b939f-497

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 (471) hide show
  1. package/README.md +32 -8
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
  4. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
  6. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
  9. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -32
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
  14. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  16. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  17. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  18. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  20. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +159 -353
  22. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
  24. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +99 -277
  26. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +227 -290
  28. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +125 -117
  30. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +89 -115
  32. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +101 -31
  34. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  35. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  36. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1429 -0
  38. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
  40. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1979 -0
  42. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
  44. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1430 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1177 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1606 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2281 -0
  54. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  55. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +147 -42
  56. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +98 -30
  58. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +53 -88
  60. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  61. package/artifacts/contracts/instance/Instance.sol/Instance.json +123 -123
  62. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +179 -139
  64. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  65. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +58 -85
  66. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +726 -133
  68. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +118 -247
  70. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +99 -87
  72. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  73. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +337 -138
  74. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  75. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +810 -0
  76. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  78. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  80. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  81. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  82. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  83. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  84. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  85. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  88. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  89. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  90. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  91. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  92. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +111 -305
  94. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
  96. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  98. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +77 -103
  99. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  100. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
  101. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +87 -265
  103. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  104. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +147 -191
  105. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  106. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +119 -83
  107. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  108. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +106 -284
  109. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  110. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
  111. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  112. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +146 -307
  113. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +111 -119
  115. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  116. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +48 -33
  117. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  118. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +98 -135
  119. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  120. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +283 -180
  121. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  122. package/artifacts/contracts/pool/Pool.sol/Pool.json +106 -295
  123. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  124. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +382 -407
  125. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +123 -99
  127. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  128. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +119 -165
  129. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  130. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +93 -85
  131. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  132. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +149 -281
  133. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  134. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
  135. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  136. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +282 -229
  137. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +132 -108
  139. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  140. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +63 -7
  141. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  142. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +161 -7
  143. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  144. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +179 -35
  145. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  146. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
  147. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  148. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +136 -116
  149. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  150. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
  151. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  152. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +281 -323
  153. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  154. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +123 -119
  155. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  156. package/artifacts/contracts/product/PricingService.sol/PricingService.json +215 -309
  157. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  158. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +117 -117
  159. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  160. package/artifacts/contracts/product/Product.sol/Product.json +147 -279
  161. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  162. package/artifacts/contracts/product/RiskService.sol/RiskService.json +638 -0
  163. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  164. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +718 -0
  165. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  166. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  167. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  168. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +310 -34
  169. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  170. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
  171. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  172. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  173. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  174. package/artifacts/contracts/registry/Registry.sol/Registry.json +516 -95
  175. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  176. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +296 -143
  177. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  178. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +94 -284
  179. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  180. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +91 -75
  181. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  182. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  183. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  184. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +131 -223
  185. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  186. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  187. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  188. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  189. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  190. package/artifacts/contracts/shared/Component.sol/Component.json +76 -239
  191. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  192. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +413 -329
  193. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  194. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +140 -118
  195. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  196. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
  197. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  198. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +488 -0
  199. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  200. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  201. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  202. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  203. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  204. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +66 -77
  205. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  206. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +388 -19
  207. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  208. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +77 -103
  209. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  210. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  211. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  212. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  213. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  214. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  215. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  216. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  217. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  218. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
  219. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  220. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  221. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  222. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  223. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  224. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  225. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +87 -265
  226. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  227. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  228. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  229. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  230. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  231. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  232. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  233. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  234. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  235. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  236. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  237. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
  238. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  239. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  240. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  241. package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
  242. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  243. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +674 -49
  244. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  245. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
  246. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  247. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  248. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  249. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +111 -114
  250. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  251. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  252. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  253. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +64 -94
  254. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  255. package/artifacts/contracts/staking/Staking.sol/Staking.json +193 -368
  256. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  257. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  258. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  259. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +117 -110
  260. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  261. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  262. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  263. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +87 -165
  264. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  265. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +95 -79
  266. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  267. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +170 -129
  268. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  269. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +55 -24
  270. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  271. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  272. package/artifacts/contracts/type/Amount.sol/AmountLib.json +33 -9
  273. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  276. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  278. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/Fee.sol/FeeLib.json +3 -3
  280. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  281. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  282. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  283. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  284. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  286. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  287. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  288. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  290. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  292. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  294. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  296. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +99 -5
  298. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  299. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  300. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  302. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  306. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  308. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  309. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  310. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +16 -3
  311. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  312. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  313. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  314. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  315. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +71 -70
  316. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  317. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  318. package/contracts/authorization/AccessAdmin.sol +83 -59
  319. package/contracts/authorization/Authorization.sol +111 -40
  320. package/contracts/authorization/IAccess.sol +1 -0
  321. package/contracts/authorization/IAccessAdmin.sol +4 -3
  322. package/contracts/authorization/IAuthorization.sol +13 -7
  323. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  324. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  325. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  326. package/contracts/distribution/BasicDistribution.sol +4 -3
  327. package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
  328. package/contracts/distribution/Distribution.sol +12 -23
  329. package/contracts/distribution/DistributionService.sol +97 -66
  330. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  331. package/contracts/distribution/IDistributionComponent.sol +1 -1
  332. package/contracts/distribution/IDistributionService.sol +13 -8
  333. package/contracts/examples/fire/DamageLevel.sol +59 -0
  334. package/contracts/examples/fire/FirePool.sol +86 -0
  335. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  336. package/contracts/examples/fire/FireProduct.sol +431 -0
  337. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  338. package/contracts/examples/fire/FireUSD.sol +26 -0
  339. package/contracts/examples/unpermissioned/SimpleDistribution.sol +58 -0
  340. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  341. package/contracts/examples/unpermissioned/SimplePool.sol +108 -0
  342. package/contracts/examples/unpermissioned/SimpleProduct.sol +345 -0
  343. package/contracts/instance/BundleSet.sol +38 -34
  344. package/contracts/instance/IInstance.sol +16 -30
  345. package/contracts/instance/IInstanceService.sol +7 -25
  346. package/contracts/instance/Instance.sol +43 -56
  347. package/contracts/instance/InstanceAdmin.sol +64 -49
  348. package/contracts/instance/InstanceAuthorizationV3.sol +40 -27
  349. package/contracts/instance/InstanceReader.sol +193 -20
  350. package/contracts/instance/InstanceService.sol +58 -100
  351. package/contracts/instance/InstanceServiceManager.sol +6 -7
  352. package/contracts/instance/InstanceStore.sol +11 -1
  353. package/contracts/instance/RiskSet.sol +119 -0
  354. package/contracts/instance/base/ObjectCounter.sol +1 -2
  355. package/contracts/instance/base/ObjectLifecycle.sol +7 -1
  356. package/contracts/instance/base/ObjectSet.sol +24 -25
  357. package/contracts/instance/module/IComponents.sol +10 -6
  358. package/contracts/instance/module/IPolicy.sol +25 -24
  359. package/contracts/instance/module/IRisk.sol +1 -0
  360. package/contracts/oracle/BasicOracle.sol +0 -1
  361. package/contracts/oracle/IOracleService.sol +2 -1
  362. package/contracts/oracle/Oracle.sol +6 -16
  363. package/contracts/oracle/OracleService.sol +112 -81
  364. package/contracts/oracle/OracleServiceManager.sol +6 -6
  365. package/contracts/pool/BasicPool.sol +33 -24
  366. package/contracts/pool/BasicPoolAuthorization.sol +12 -2
  367. package/contracts/pool/BundleService.sol +69 -83
  368. package/contracts/pool/BundleServiceManager.sol +6 -6
  369. package/contracts/pool/IBundleService.sol +3 -14
  370. package/contracts/pool/IPoolComponent.sol +19 -15
  371. package/contracts/pool/IPoolService.sol +48 -42
  372. package/contracts/pool/Pool.sol +144 -127
  373. package/contracts/pool/PoolService.sol +277 -189
  374. package/contracts/pool/PoolServiceManager.sol +4 -4
  375. package/contracts/product/ApplicationService.sol +34 -25
  376. package/contracts/product/ApplicationServiceManager.sol +4 -4
  377. package/contracts/product/BasicProduct.sol +9 -12
  378. package/contracts/product/BasicProductAuthorization.sol +0 -1
  379. package/contracts/product/ClaimService.sol +312 -115
  380. package/contracts/product/ClaimServiceManager.sol +4 -4
  381. package/contracts/product/IApplicationService.sol +5 -2
  382. package/contracts/product/IClaimService.sol +30 -7
  383. package/contracts/product/IPolicyService.sol +31 -25
  384. package/contracts/product/IPricingService.sol +10 -10
  385. package/contracts/product/IProductComponent.sol +23 -4
  386. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -2
  387. package/contracts/product/PolicyService.sol +396 -263
  388. package/contracts/product/PolicyServiceManager.sol +4 -4
  389. package/contracts/product/PricingService.sol +49 -53
  390. package/contracts/product/PricingServiceManager.sol +3 -3
  391. package/contracts/product/Product.sol +101 -87
  392. package/contracts/product/{ProductService.sol → RiskService.sol} +21 -13
  393. package/contracts/product/RiskServiceManager.sol +39 -0
  394. package/contracts/registry/ChainNft.sol +72 -40
  395. package/contracts/registry/IRegistry.sol +57 -18
  396. package/contracts/registry/IRegistryService.sol +5 -12
  397. package/contracts/registry/ITransferInterceptor.sol +1 -2
  398. package/contracts/registry/Registry.sol +350 -201
  399. package/contracts/registry/RegistryAdmin.sol +140 -54
  400. package/contracts/registry/RegistryService.sol +35 -46
  401. package/contracts/registry/RegistryServiceManager.sol +2 -2
  402. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  403. package/contracts/registry/ReleaseRegistry.sol +207 -206
  404. package/contracts/registry/ServiceAuthorizationV3.sol +22 -47
  405. package/contracts/shared/Component.sol +52 -116
  406. package/contracts/shared/ComponentService.sol +335 -166
  407. package/contracts/shared/ComponentServiceManager.sol +8 -5
  408. package/contracts/shared/ComponentVerifyingService.sol +28 -17
  409. package/contracts/shared/ContractLib.sol +224 -0
  410. package/contracts/shared/IComponent.sol +10 -14
  411. package/contracts/shared/IComponentService.sol +38 -16
  412. package/contracts/shared/IInstanceLinkedComponent.sol +2 -17
  413. package/contracts/shared/ILifecycle.sol +3 -1
  414. package/contracts/shared/INftOwnable.sol +2 -0
  415. package/contracts/shared/IPolicyHolder.sol +12 -22
  416. package/contracts/shared/IRegisterable.sol +11 -0
  417. package/contracts/shared/InitializableERC165.sol +2 -2
  418. package/contracts/shared/InstanceLinkedComponent.sol +71 -38
  419. package/contracts/shared/KeyValueStore.sol +1 -1
  420. package/contracts/shared/Lifecycle.sol +15 -4
  421. package/contracts/shared/NftOwnable.sol +27 -7
  422. package/contracts/shared/PolicyHolder.sol +15 -52
  423. package/contracts/shared/Registerable.sol +19 -11
  424. package/contracts/shared/RegistryLinked.sol +9 -14
  425. package/contracts/shared/Service.sol +20 -18
  426. package/contracts/shared/TokenHandler.sol +357 -30
  427. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  428. package/contracts/staking/IStaking.sol +11 -5
  429. package/contracts/staking/IStakingService.sol +0 -3
  430. package/contracts/staking/StakeManagerLib.sol +18 -25
  431. package/contracts/staking/Staking.sol +39 -50
  432. package/contracts/staking/StakingManager.sol +8 -6
  433. package/contracts/staking/StakingReader.sol +12 -5
  434. package/contracts/staking/StakingService.sol +58 -25
  435. package/contracts/staking/StakingServiceManager.sol +2 -2
  436. package/contracts/staking/TargetManagerLib.sol +7 -3
  437. package/contracts/type/Amount.sol +15 -0
  438. package/contracts/type/ClaimId.sol +6 -1
  439. package/contracts/type/Key32.sol +2 -2
  440. package/contracts/type/Key32Set.sol +62 -0
  441. package/contracts/type/NftId.sol +7 -0
  442. package/contracts/type/ObjectType.sol +18 -11
  443. package/contracts/type/PayoutId.sol +10 -10
  444. package/contracts/type/RiskId.sol +30 -4
  445. package/contracts/type/RoleId.sol +0 -12
  446. package/contracts/type/Seconds.sol +8 -0
  447. package/contracts/type/StateId.sol +15 -1
  448. package/contracts/type/UFixed.sol +13 -119
  449. package/contracts/upgradeability/ProxyManager.sol +68 -34
  450. package/contracts/upgradeability/Versionable.sol +2 -2
  451. package/package.json +4 -3
  452. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  453. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  454. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  455. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  456. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  457. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  458. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  459. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  460. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  461. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  462. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  463. package/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.dbg.json +0 -4
  464. package/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.json +0 -42
  465. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  466. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  467. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  468. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  469. package/contracts/product/ProductServiceManager.sol +0 -39
  470. package/contracts/shared/InitializableCustom.sol +0 -177
  471. package/contracts/shared/TokenTransferLib.sol +0 -60
@@ -1,46 +1,52 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Amount, AmountLib} from "../type/Amount.sol";
5
- import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
6
- import {Fee, FeeLib} from "../type/Fee.sol";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {IComponent} from "../shared/IComponent.sol";
7
7
  import {IComponents} from "../instance/module/IComponents.sol";
8
8
  import {IComponentService} from "./IComponentService.sol";
9
9
  import {IInstance} from "../instance/IInstance.sol";
10
10
  import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
11
+ import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
11
12
  import {InstanceReader} from "../instance/InstanceReader.sol";
12
13
  import {InstanceStore} from "../instance/InstanceStore.sol";
13
14
  import {IInstanceService} from "../instance/IInstanceService.sol";
14
15
  import {IPoolComponent} from "../pool/IPoolComponent.sol";
15
16
  import {IProductComponent} from "../product/IProductComponent.sol";
17
+ import {IRegisterable} from "../shared/IRegisterable.sol";
16
18
  import {IRegistry} from "../registry/IRegistry.sol";
17
19
  import {IRegistryService} from "../registry/IRegistryService.sol";
20
+
21
+ import {Amount, AmountLib} from "../type/Amount.sol";
22
+ import {ContractLib} from "../shared/ContractLib.sol";
23
+ import {Fee, FeeLib} from "../type/Fee.sol";
18
24
  import {KEEP_STATE} from "../type/StateId.sol";
19
25
  import {NftId} from "../type/NftId.sol";
20
- import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
21
- import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
22
- import {TokenHandler} from "./TokenHandler.sol";
23
- import {TokenTransferLib} from "../shared/TokenTransferLib.sol";
26
+ import {ObjectType, REGISTRY, BUNDLE, COMPONENT, DISTRIBUTION, DISTRIBUTOR, INSTANCE, ORACLE, POOL, PRODUCT, STAKING} from "../type/ObjectType.sol";
27
+ import {Service} from "../shared/Service.sol";
28
+ import {TokenHandler} from "../shared/TokenHandler.sol";
29
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
30
+
24
31
 
25
32
  contract ComponentService is
26
- ComponentVerifyingService,
33
+ Service,
27
34
  IComponentService
28
35
  {
29
- error ErrorComponentServiceAlreadyRegistered(address component);
30
- error ErrorComponentServiceNotComponent(address component);
31
- error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
32
- error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
33
- error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
34
- error ErrorComponentServiceComponentLocked(address component);
35
- error ErrorComponentServiceSenderNotService(address sender);
36
- error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
37
-
38
36
  bool private constant INCREASE = true;
39
37
  bool private constant DECREASE = false;
40
38
 
41
39
  IRegistryService private _registryService;
42
40
  IInstanceService private _instanceService;
43
41
 
42
+ modifier onlyComponent(address component) {
43
+ if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
44
+ revert ErrorComponentServiceNotInstanceLinkedComponent(component);
45
+ }
46
+ _;
47
+ }
48
+
49
+
44
50
  function _initialize(
45
51
  address owner,
46
52
  bytes memory data
@@ -49,41 +55,89 @@ contract ComponentService is
49
55
  virtual override
50
56
  initializer()
51
57
  {
52
- // TODO check this, might no longer be the way, refactor if necessary
53
- address registryAddress;
54
- address initialOwner;
55
- (registryAddress, initialOwner) = abi.decode(data, (address, address));
58
+ (
59
+ address registryAddress,
60
+ address authority
61
+ ) = abi.decode(data, (address, address));
56
62
 
57
- initializeService(registryAddress, address(0), owner);
63
+ _initializeService(registryAddress, authority, owner);
58
64
 
59
65
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
60
66
  _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
61
67
 
62
- registerInterface(type(IComponentService).interfaceId);
68
+ _registerInterface(type(IComponentService).interfaceId);
63
69
  }
64
70
 
65
71
  //-------- component ----------------------------------------------------//
66
72
 
67
- function setWallet(address newWallet) external virtual {
68
- (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
69
- IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
70
- address currentWallet = info.wallet;
71
-
72
- if (newWallet == address(0)) {
73
- revert ErrorComponentServiceNewWalletAddressZero();
73
+ function registerComponent(address component)
74
+ external
75
+ virtual
76
+ onlyComponent(component)
77
+ returns (NftId componentNftId)
78
+ {
79
+ // type specific registration
80
+ ObjectType componentType = IInstanceLinkedComponent(component).getInitialInfo().objectType;
81
+ if (componentType == POOL()) {
82
+ return _registerPool(component);
74
83
  }
75
-
76
- if (currentWallet == address(0)) {
77
- revert ErrorComponentServiceWalletAddressZero();
84
+ if (componentType == DISTRIBUTION()) {
85
+ return _registerDistribution(component);
78
86
  }
79
-
80
- if (newWallet == currentWallet) {
81
- revert ErrorComponentServiceWalletAddressIsSameAsCurrent();
87
+ if (componentType == ORACLE()) {
88
+ return _registerOracle(component);
82
89
  }
83
90
 
84
- info.wallet = newWallet;
85
- instance.getInstanceStore().updateComponent(componentNftId, info, KEEP_STATE());
86
- emit LogComponentServiceWalletAddressChanged(componentNftId, currentWallet, newWallet);
91
+ // fail
92
+ revert ErrorComponentServiceTypeNotSupported(component, componentType);
93
+ }
94
+
95
+ function approveTokenHandler(
96
+ IERC20Metadata token,
97
+ Amount amount
98
+ )
99
+ external
100
+ virtual
101
+ {
102
+ // checks
103
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
104
+ TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
105
+ componentNftId).tokenHandler;
106
+
107
+ // effects
108
+ tokenHandler.approve(token, amount);
109
+ }
110
+
111
+
112
+ function approveStakingTokenHandler(
113
+ IERC20Metadata token,
114
+ Amount amount
115
+ )
116
+ external
117
+ virtual
118
+ {
119
+ // checks
120
+ ContractLib.getAndVerifyStaking(
121
+ getRegistry(),
122
+ msg.sender); // only active
123
+
124
+ // effects
125
+ TokenHandler tokenHandler = IComponent(msg.sender).getTokenHandler();
126
+ tokenHandler.approve(token, amount);
127
+ }
128
+
129
+
130
+ function setWallet(address newWallet)
131
+ external
132
+ virtual
133
+ {
134
+ // checks
135
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
136
+ TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
137
+ componentNftId).tokenHandler;
138
+
139
+ // effects
140
+ tokenHandler.setWallet(newWallet);
87
141
  }
88
142
 
89
143
  // TODO implement
@@ -97,9 +151,9 @@ contract ComponentService is
97
151
  virtual
98
152
  returns (Amount withdrawnAmount)
99
153
  {
100
- (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
154
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
101
155
  IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
102
- address componentWallet = info.wallet;
156
+ address componentWallet = info.tokenHandler.getWallet();
103
157
 
104
158
  // determine withdrawn amount
105
159
  withdrawnAmount = amount;
@@ -120,35 +174,36 @@ contract ComponentService is
120
174
  // transfer amount to component owner
121
175
  address componentOwner = getRegistry().ownerOf(componentNftId);
122
176
  emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
123
- TokenTransferLib.distributeTokens(componentWallet, componentOwner, withdrawnAmount, info.tokenHandler);
177
+ info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
124
178
  }
125
179
 
126
180
 
127
181
  //-------- product ------------------------------------------------------//
128
182
 
129
- function registerProduct()
183
+ function registerProduct(address productAddress)
130
184
  external
131
185
  virtual
186
+ nonReentrant()
187
+ onlyComponent(productAddress)
188
+ returns (NftId productNftId)
132
189
  {
133
- address contractAddress = msg.sender;
134
-
135
190
  // register/create component setup
136
- (
137
- InstanceReader instanceReader,
138
- InstanceStore instanceStore,
139
- NftId productNftId
140
- ) = _register(
141
- contractAddress,
142
- PRODUCT(),
143
- PRODUCT_OWNER_ROLE());
144
-
145
- // create product info
146
- IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
147
- instanceStore.createProduct(productNftId, productInfo);
191
+ InstanceAdmin instanceAdmin;
192
+ InstanceStore instanceStore;
193
+ (, instanceAdmin, instanceStore,, productNftId) = _register(
194
+ productAddress,
195
+ PRODUCT());
196
+
197
+ // get product
198
+ IProductComponent product = IProductComponent(productAddress);
199
+
200
+ // create info
201
+ instanceStore.createProduct(
202
+ productNftId,
203
+ product.getInitialProductInfo());
148
204
 
149
- // link distribution and pool to product
150
- _linkToProduct(instanceReader, instanceStore, productInfo.distributionNftId, productNftId);
151
- _linkToProduct(instanceReader, instanceStore, productInfo.poolNftId, productNftId);
205
+ // authorize
206
+ instanceAdmin.initializeComponentAuthorization(product);
152
207
  }
153
208
 
154
209
 
@@ -158,8 +213,9 @@ contract ComponentService is
158
213
  )
159
214
  external
160
215
  virtual
216
+ nonReentrant()
161
217
  {
162
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
218
+ (NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
163
219
  IComponents.ProductInfo memory productInfo = instance.getInstanceReader().getProductInfo(productNftId);
164
220
  bool feesChanged = false;
165
221
 
@@ -193,6 +249,7 @@ contract ComponentService is
193
249
  // TODO re-enable once role granting is stable and fixed
194
250
  // restricted()
195
251
  {
252
+ _checkNftType(productNftId, PRODUCT());
196
253
  _changeTargetBalance(INCREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
197
254
  }
198
255
 
@@ -203,23 +260,44 @@ contract ComponentService is
203
260
  // TODO re-enable once role granting is stable and fixed
204
261
  // restricted()
205
262
  {
263
+ _checkNftType(productNftId, PRODUCT());
206
264
  _changeTargetBalance(DECREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
207
265
  }
208
266
 
209
267
  //-------- distribution -------------------------------------------------//
210
268
 
211
269
  /// @dev registers the sending component as a distribution component
212
- function registerDistribution()
213
- external
270
+ function _registerDistribution(address distributioAddress)
271
+ internal
214
272
  virtual
273
+ nonReentrant()
274
+ returns (NftId distributionNftId)
215
275
  {
216
- address contractAddress = msg.sender;
217
-
218
276
  // register/create component info
219
- _register(
220
- contractAddress,
221
- DISTRIBUTION(),
222
- DISTRIBUTION_OWNER_ROLE());
277
+ InstanceReader instanceReader;
278
+ InstanceAdmin instanceAdmin;
279
+ InstanceStore instanceStore;
280
+ NftId productNftId;
281
+ (instanceReader, instanceAdmin, instanceStore, productNftId, distributionNftId) = _register(
282
+ distributioAddress,
283
+ DISTRIBUTION());
284
+
285
+ // check product is still expecting a distribution registration
286
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
287
+ if (!productInfo.hasDistribution) {
288
+ revert ErrorProductServiceNoDistributionExpected(productNftId);
289
+ }
290
+ if (productInfo.distributionNftId.gtz()) {
291
+ revert ErrorProductServiceDistributionAlreadyRegistered(productNftId, productInfo.distributionNftId);
292
+ }
293
+
294
+ // set distribution in product info
295
+ productInfo.distributionNftId = distributionNftId;
296
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
297
+
298
+ // authorize
299
+ instanceAdmin.initializeComponentAuthorization(
300
+ IInstanceLinkedComponent(distributioAddress));
223
301
  }
224
302
 
225
303
 
@@ -230,7 +308,7 @@ contract ComponentService is
230
308
  external
231
309
  virtual
232
310
  {
233
- (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
311
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
234
312
  (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
235
313
  instance.getInstanceReader(), distributionNftId);
236
314
  bool feesChanged = false;
@@ -266,6 +344,7 @@ contract ComponentService is
266
344
  // TODO re-enable once role granting is stable and fixed
267
345
  // restricted()
268
346
  {
347
+ _checkNftType(distributionNftId, DISTRIBUTION());
269
348
  _changeTargetBalance(INCREASE, instanceStore, distributionNftId, amount, feeAmount);
270
349
  }
271
350
 
@@ -281,6 +360,7 @@ contract ComponentService is
281
360
  // TODO re-enable once role granting is stable and fixed
282
361
  // restricted()
283
362
  {
363
+ _checkNftType(distributionNftId, DISTRIBUTION());
284
364
  _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
285
365
  }
286
366
 
@@ -297,6 +377,7 @@ contract ComponentService is
297
377
  // TODO re-enable once role granting is stable and fixed
298
378
  // restricted()
299
379
  {
380
+ _checkNftType(distributorNftId, DISTRIBUTOR());
300
381
  _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
301
382
  }
302
383
 
@@ -311,51 +392,81 @@ contract ComponentService is
311
392
  // TODO re-enable once role granting is stable and fixed
312
393
  // restricted()
313
394
  {
395
+ _checkNftType(distributorNftId, DISTRIBUTOR());
314
396
  _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
315
397
  }
316
398
 
317
399
  //-------- oracle -------------------------------------------------------//
318
400
 
319
- function registerOracle()
320
- external
401
+ function _registerOracle(address oracleAddress)
402
+ internal
321
403
  virtual
404
+ returns (NftId oracleNftId)
322
405
  {
323
- address contractAddress = msg.sender;
324
-
325
406
  // register/create component setup
326
- (
327
- , // instance reader
328
- InstanceStore instanceStore,
329
- NftId componentNftId
330
- ) = _register(
331
- contractAddress,
332
- ORACLE(),
333
- ORACLE_OWNER_ROLE());
407
+ InstanceReader instanceReader;
408
+ InstanceAdmin instanceAdmin;
409
+ InstanceStore instanceStore;
410
+ NftId productNftId;
411
+
412
+ (instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) = _register(
413
+ oracleAddress,
414
+ ORACLE());
415
+
416
+ // check product is still expecting an oracle registration
417
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
418
+ if (productInfo.expectedNumberOfOracles == 0) {
419
+ revert ErrorProductServiceNoOraclesExpected(productNftId);
420
+ }
421
+ if (productInfo.numberOfOracles == productInfo.expectedNumberOfOracles) {
422
+ revert ErrorProductServiceOraclesAlreadyRegistered(productNftId, productInfo.expectedNumberOfOracles);
423
+ }
424
+
425
+ // update/add oracle to product info
426
+ productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
427
+ productInfo.numberOfOracles++;
428
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
429
+
430
+ // authorize
431
+ instanceAdmin.initializeComponentAuthorization(
432
+ IInstanceLinkedComponent(oracleAddress));
334
433
  }
335
434
 
336
435
  //-------- pool ---------------------------------------------------------//
337
436
 
338
- function registerPool()
339
- external
437
+ function _registerPool(address poolAddress)
438
+ internal
340
439
  virtual
440
+ returns (NftId poolNftId)
341
441
  {
342
- address contractAddress = msg.sender;
343
-
344
442
  // register/create component setup
345
- (
346
- , // instance reader
347
- InstanceStore instanceStore,
348
- NftId componentNftId
349
- ) = _register(
350
- contractAddress,
351
- POOL(),
352
- POOL_OWNER_ROLE());
443
+ InstanceReader instanceReader;
444
+ InstanceAdmin instanceAdmin;
445
+ InstanceStore instanceStore;
446
+ NftId productNftId;
447
+
448
+ (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) = _register(
449
+ poolAddress,
450
+ POOL());
451
+
452
+ // check product is still expecting a pool registration
453
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
454
+ if (productInfo.poolNftId.gtz()) {
455
+ revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
456
+ }
353
457
 
354
458
  // create info
459
+ IPoolComponent pool = IPoolComponent(poolAddress);
355
460
  instanceStore.createPool(
356
- componentNftId,
357
- IPoolComponent(
358
- contractAddress).getInitialPoolInfo());
461
+ poolNftId,
462
+ pool.getInitialPoolInfo());
463
+
464
+ // update pool in product info
465
+ productInfo.poolNftId = poolNftId;
466
+ instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
467
+
468
+ // authorize
469
+ instanceAdmin.initializeComponentAuthorization(pool);
359
470
  }
360
471
 
361
472
 
@@ -367,7 +478,8 @@ contract ComponentService is
367
478
  external
368
479
  virtual
369
480
  {
370
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
481
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActiveComponent(POOL());
482
+
371
483
  (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
372
484
  instance.getInstanceReader(), poolNftId);
373
485
  bool feesChanged = false;
@@ -410,6 +522,7 @@ contract ComponentService is
410
522
  // TODO re-enable once role granting is stable and fixed
411
523
  // restricted()
412
524
  {
525
+ _checkNftType(poolNftId, POOL());
413
526
  _changeTargetBalance(INCREASE, instanceStore, poolNftId, amount, feeAmount);
414
527
  }
415
528
 
@@ -424,6 +537,7 @@ contract ComponentService is
424
537
  // TODO re-enable once role granting is stable and fixed
425
538
  // restricted()
426
539
  {
540
+ _checkNftType(poolNftId, POOL());
427
541
  _changeTargetBalance(DECREASE, instanceStore, poolNftId, amount, feeAmount);
428
542
  }
429
543
 
@@ -440,6 +554,7 @@ contract ComponentService is
440
554
  // TODO re-enable once role granting is stable and fixed
441
555
  // restricted()
442
556
  {
557
+ _checkNftType(bundleNftId, BUNDLE());
443
558
  _changeTargetBalance(INCREASE, instanceStore, bundleNftId, amount, feeAmount);
444
559
  }
445
560
 
@@ -454,6 +569,7 @@ contract ComponentService is
454
569
  // TODO re-enable once role granting is stable and fixed
455
570
  // restricted()
456
571
  {
572
+ _checkNftType(bundleNftId, BUNDLE());
457
573
  _changeTargetBalance(DECREASE, instanceStore, bundleNftId, amount, feeAmount);
458
574
  }
459
575
 
@@ -481,74 +597,72 @@ contract ComponentService is
481
597
  }
482
598
  }
483
599
 
484
- /// @dev registers the component represented by the provided address
600
+ /// @dev Registers the component represented by the provided address.
485
601
  function _register(
486
602
  address componentAddress, // address of component to register
487
- ObjectType requiredType, // required type for component for registration
488
- RoleId requiredRole // role required for comonent owner for registration
603
+ ObjectType requiredType // required type for component for registration
489
604
  )
490
605
  internal
491
606
  virtual
492
607
  returns (
493
608
  InstanceReader instanceReader,
609
+ InstanceAdmin instanceAdmin,
494
610
  InstanceStore instanceStore,
611
+ NftId parentNftId,
495
612
  NftId componentNftId
496
613
  )
497
614
  {
615
+ NftId instanceNftId;
616
+ IInstance instance;
617
+ IInstanceLinkedComponent component;
618
+ address initialOwner;
619
+
498
620
  (
499
- IInstance instance,
500
- IInstanceLinkedComponent component,
501
- address owner
621
+ instanceNftId,
622
+ instance,
623
+ parentNftId,
624
+ component,
625
+ initialOwner
502
626
  ) = _getAndVerifyRegisterableComponent(
627
+ getRegistry(),
503
628
  componentAddress,
504
- requiredType,
505
- requiredRole);
506
-
507
- // register component with registry
508
- componentNftId = _registryService.registerComponent(
509
- component,
510
- requiredType,
511
- owner).nftId;
512
-
513
- component.linkToRegisteredNftId();
514
-
515
- // setup initial component authorization
516
- _instanceService.initializeAuthorization(
517
- instance.getNftId(),
518
- component);
629
+ requiredType);
519
630
 
520
- // save amended component info with instance
631
+ // get instance supporting contracts (as function return values)
521
632
  instanceReader = instance.getInstanceReader();
633
+ instanceAdmin = instance.getInstanceAdmin();
522
634
  instanceStore = instance.getInstanceStore();
523
635
 
636
+ // register with registry
637
+ if (requiredType == PRODUCT()) {
638
+ componentNftId = _registryService.registerProduct(
639
+ component, initialOwner).nftId;
640
+ } else {
641
+ componentNftId = _registryService.registerProductLinkedComponent(
642
+ component, requiredType, initialOwner).nftId;
643
+ }
644
+
645
+ // deploy and wire token handler
524
646
  IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
525
- componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
647
+ IERC20Metadata token = componentInfo.token;
648
+ componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
649
+ address(getRegistry()),
650
+ address(component), // initially, component is its own wallet
651
+ address(token),
652
+ address(instanceAdmin.authority()));
653
+
654
+ // set token handler allowance to max
655
+ // componentInfo.tokenHandler.approve(token, AmountLib.max());
526
656
 
657
+ // register component with instance
527
658
  instanceStore.createComponent(
528
- component.getNftId(),
659
+ componentNftId,
529
660
  componentInfo);
530
661
 
531
- // TODO add logging
532
- }
533
-
662
+ // link component contract to nft id
663
+ component.linkToRegisteredNftId();
534
664
 
535
- /// @dev link the component info corresponding to the componentNftId to the provided productNftId
536
- function _linkToProduct(
537
- InstanceReader instanceReader,
538
- InstanceStore instanceStore,
539
- NftId componentNftId,
540
- NftId productNftId
541
- )
542
- internal
543
- {
544
- // only link components that are registered
545
- if(componentNftId.eqz()) {
546
- return;
547
- }
548
-
549
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(componentNftId);
550
- componentInfo.productNftId = productNftId;
551
- instanceStore.updateComponent(componentNftId, componentInfo, KEEP_STATE());
665
+ emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, address(component), address(token), initialOwner);
552
666
  }
553
667
 
554
668
 
@@ -567,12 +681,6 @@ contract ComponentService is
567
681
  }
568
682
 
569
683
 
570
- function _createSelectors(bytes4 selector) internal pure returns (bytes4[] memory selectors) {
571
- selectors = new bytes4[](1);
572
- selectors[0] = selector;
573
- }
574
-
575
-
576
684
  function _getLinkedProductInfo(
577
685
  InstanceReader instanceReader,
578
686
  NftId componentNftId
@@ -584,54 +692,115 @@ contract ComponentService is
584
692
  IComponents.ProductInfo memory info
585
693
  )
586
694
  {
587
- productNftId = instanceReader.getComponentInfo(componentNftId).productNftId;
695
+ productNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
588
696
  info = instanceReader.getProductInfo(productNftId);
589
697
  }
590
698
 
591
699
 
592
- /// @dev based on the provided component address required type and role returns the component and related instance contract
593
- /// the function reverts iff:
594
- /// - the component has already been registered
700
+ /// @dev Based on the provided component address required type the component
701
+ /// and related instance contract this function reverts iff:
702
+ /// - the sender is not registered
595
703
  /// - the component contract does not support IInstanceLinkedComponent
596
704
  /// - the component type does not match with the required type
597
- /// - the initial component owner misses the required role (with the instance access manager)
705
+ /// - the component has already been registered
598
706
  function _getAndVerifyRegisterableComponent(
707
+ IRegistry registry,
599
708
  address componentAddress,
600
- ObjectType requiredType,
601
- RoleId requiredRole
709
+ ObjectType requiredType
602
710
  )
603
711
  internal
604
712
  view
605
713
  returns (
714
+ NftId instanceNftId,
606
715
  IInstance instance,
716
+ NftId parentNftId,
607
717
  IInstanceLinkedComponent component,
608
- address owner
718
+ address initialOwner
609
719
  )
610
720
  {
611
- // check this is a component
612
- component = IInstanceLinkedComponent(componentAddress);
613
- if(!component.supportsInterface(type(IInstanceLinkedComponent).interfaceId)) {
614
- revert ErrorComponentServiceNotComponent(componentAddress);
721
+ // check sender (instance or product) is registered
722
+ IRegistry.ObjectInfo memory senderInfo = registry.getObjectInfo(msg.sender);
723
+ if (senderInfo.nftId.eqz()) {
724
+ revert ErrorComponentServiceSenderNotRegistered(msg.sender);
615
725
  }
616
726
 
727
+ // the sender is the parent of the component to be registered
728
+ // an instance caller wanting to register a product - or -
729
+ // a product caller wantint go register a distribution, oracle or pool
730
+ parentNftId = senderInfo.nftId;
731
+
617
732
  // check component is of required type
733
+ component = IInstanceLinkedComponent(componentAddress);
618
734
  IRegistry.ObjectInfo memory info = component.getInitialInfo();
619
735
  if(info.objectType != requiredType) {
620
736
  revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
621
737
  }
622
738
 
623
739
  // check component has not already been registered
624
- if (getRegistry().getNftId(componentAddress).gtz()) {
740
+ if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
625
741
  revert ErrorComponentServiceAlreadyRegistered(componentAddress);
626
742
  }
627
743
 
628
- // check instance has assigned required role to inital owner
629
- instance = _getInstance(info.parentNftId);
630
- owner = info.initialOwner;
744
+ // check release matches
745
+ address parentAddress = registry.getObjectAddress(parentNftId);
746
+ if (component.getRelease() != IRegisterable(parentAddress).getRelease()) {
747
+ revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), IRegisterable(parentAddress).getRelease());
748
+ }
749
+
750
+ // check component belongs to same product cluster
751
+ // parent of product must be instance, parent of other componet types must be product
752
+ if (info.parentNftId != senderInfo.nftId) {
753
+ revert ErrorComponentServiceSenderNotComponentParent(senderInfo.nftId, info.parentNftId);
754
+ }
755
+
756
+ // verify parent is registered instance
757
+ if (requiredType == PRODUCT()) {
758
+ if (senderInfo.objectType != INSTANCE()) {
759
+ revert ErrorComponentServiceParentNotInstance(senderInfo.nftId, senderInfo.objectType);
760
+ }
761
+
762
+ instanceNftId = senderInfo.nftId;
763
+ // verify parent is registered product
764
+ } else {
765
+ if (senderInfo.objectType != PRODUCT()) {
766
+ revert ErrorComponentServiceParentNotProduct(senderInfo.nftId, senderInfo.objectType);
767
+ }
768
+
769
+ instanceNftId = senderInfo.parentNftId;
770
+ }
631
771
 
632
- if(!instance.getInstanceAdmin().hasRole(owner, requiredRole)) {
633
- revert ErrorComponentServiceExpectedRoleMissing(info.parentNftId, requiredRole, owner);
772
+ // get initial owner and instance
773
+ initialOwner = info.initialOwner;
774
+ instance = IInstance(registry.getObjectAddress(instanceNftId));
775
+ }
776
+
777
+ function _getAndVerifyActiveComponent(ObjectType expectedType)
778
+ internal
779
+ view
780
+ returns (
781
+ NftId componentNftId,
782
+ IInstance instance
783
+ )
784
+ {
785
+ IRegistry.ObjectInfo memory info;
786
+ address instanceAddress;
787
+
788
+ if (expectedType != COMPONENT()) {
789
+ (info, instanceAddress) = ContractLib.getAndVerifyComponent(
790
+ getRegistry(),
791
+ msg.sender, // caller
792
+ expectedType,
793
+ true); // only active
794
+ } else {
795
+ (info, instanceAddress) = ContractLib.getAndVerifyAnyComponent(
796
+ getRegistry(),
797
+ msg.sender,
798
+ true); // only active
634
799
  }
800
+
801
+ // get component nft id and instance
802
+ componentNftId = info.nftId;
803
+ instance = IInstance(instanceAddress);
635
804
  }
636
805
 
637
806
  function _getDomain() internal pure virtual override returns(ObjectType) {