@etherisc/gif-next 0.0.2-e83e4a5-207 → 0.0.2-e876b87-961

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