@etherisc/gif-next 0.0.2-cfc7167-648 → 0.0.2-cff7366-494

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