@etherisc/gif-next 0.0.2-a714036-117 → 0.0.2-a78920e-322

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