@etherisc/gif-next 0.0.2-c6d46bb-892 → 0.0.2-c778291-689

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 (496) hide show
  1. package/README.md +51 -5
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1253 -0
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +358 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/{instance/module/ISetup.sol/ISetup.json → authorization/IAccess.sol/IAccess.json} +2 -2
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1032 -0
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +258 -0
  14. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +290 -0
  16. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  17. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +148 -0
  18. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +390 -0
  20. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +190 -0
  22. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1489 -0
  24. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +410 -0
  26. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +178 -395
  28. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +280 -324
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +130 -72
  32. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +169 -263
  34. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +186 -94
  36. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  37. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +77 -78
  40. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +193 -52
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +93 -126
  44. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  45. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1626 -0
  46. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  47. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +583 -326
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +282 -101
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +120 -42
  54. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1230 -365
  56. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  58. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  60. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  61. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  62. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +182 -0
  64. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  66. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +8 -116
  68. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  73. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  74. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  75. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  76. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1126 -0
  77. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  78. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
  79. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  80. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  81. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  82. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +765 -0
  83. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  84. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +675 -0
  85. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  86. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +1018 -0
  87. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  88. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +1034 -0
  89. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  90. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +730 -0
  91. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  92. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1395 -0
  93. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  94. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
  95. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  96. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +399 -213
  97. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  98. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +176 -50
  99. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  100. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +204 -32
  101. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  102. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +180 -366
  103. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  104. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +340 -209
  105. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  106. package/artifacts/contracts/pool/Pool.sol/Pool.json +226 -452
  107. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  108. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +399 -430
  109. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +105 -67
  111. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  112. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +92 -158
  113. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +111 -37
  115. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  116. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1243 -0
  117. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  118. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
  119. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  120. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +132 -187
  121. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +129 -55
  123. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  124. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +25 -1
  125. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  126. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +36 -1
  127. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  128. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +217 -73
  129. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  130. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +83 -44
  131. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  132. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +270 -183
  133. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  134. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +15 -57
  135. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  136. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +235 -290
  137. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +117 -91
  139. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  140. package/artifacts/contracts/product/PricingService.sol/PricingService.json +188 -220
  141. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  142. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +135 -57
  143. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  144. package/artifacts/contracts/product/Product.sol/Product.json +344 -341
  145. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  146. package/artifacts/contracts/product/RiskService.sol/RiskService.json +695 -0
  147. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  148. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +702 -0
  149. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  150. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  151. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  152. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +182 -28
  153. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  154. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +206 -124
  155. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  156. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  157. package/artifacts/contracts/registry/Registry.sol/Registry.json +439 -39
  158. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  159. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1746 -0
  160. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  161. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +370 -68
  162. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  163. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +99 -35
  164. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  165. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +164 -0
  166. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  167. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1159 -0
  168. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  169. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +214 -0
  170. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  171. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +314 -138
  172. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  173. package/artifacts/contracts/shared/Component.sol/Component.json +104 -145
  174. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  175. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1252 -203
  176. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  177. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +804 -0
  178. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  179. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +539 -0
  180. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  181. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +76 -107
  182. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  183. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1033 -0
  184. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  185. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +700 -0
  186. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  187. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +12 -16
  188. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  189. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +1 -6
  190. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  191. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +7 -1
  192. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  193. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +21 -3
  194. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  195. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +7 -1
  196. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  197. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IService.sol/IService.json +20 -1
  199. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +4 -0
  200. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +39 -0
  201. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  202. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +73 -0
  203. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  204. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +940 -0
  205. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  206. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +497 -0
  207. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  208. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +133 -0
  209. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  210. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  211. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  212. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +13 -7
  213. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  214. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +31 -13
  215. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  216. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +21 -7
  217. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  218. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  219. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  220. package/artifacts/contracts/shared/Service.sol/Service.json +20 -1
  221. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  222. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +362 -7
  223. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  224. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  225. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  226. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1412 -0
  227. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  228. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +566 -54
  229. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  230. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +387 -0
  231. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  232. package/artifacts/contracts/staking/Staking.sol/Staking.json +1941 -0
  233. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  234. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +164 -0
  235. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  236. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +761 -0
  237. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  238. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +592 -0
  239. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  240. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +661 -85
  241. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  242. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +718 -0
  243. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  244. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2242 -0
  245. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  246. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +576 -0
  247. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  248. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  249. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  250. package/artifacts/contracts/type/Amount.sol/AmountLib.json +97 -4
  251. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +53 -2
  253. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  254. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +4 -4
  255. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  256. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  257. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/Fee.sol/FeeLib.json +39 -34
  259. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  260. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  261. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +47 -4
  263. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  264. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  265. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +149 -2
  267. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +4 -4
  269. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  271. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  272. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  273. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +4 -4
  275. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  276. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +219 -6
  277. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  278. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +100 -2
  279. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  280. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  281. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  282. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  283. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  284. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  285. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  286. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  287. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +36 -4
  289. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  291. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +58 -2
  293. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  295. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  297. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  298. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  299. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  300. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +617 -0
  301. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  302. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  303. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  304. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  305. package/contracts/authorization/AccessAdmin.sol +591 -0
  306. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  307. package/contracts/authorization/Authorization.sol +217 -0
  308. package/contracts/authorization/IAccess.sol +48 -0
  309. package/contracts/authorization/IAccessAdmin.sol +136 -0
  310. package/contracts/authorization/IAuthorization.sol +54 -0
  311. package/contracts/authorization/IModuleAuthorization.sol +21 -0
  312. package/contracts/authorization/IServiceAuthorization.sol +38 -0
  313. package/contracts/authorization/ModuleAuthorization.sol +78 -0
  314. package/contracts/authorization/ServiceAuthorization.sol +90 -0
  315. package/contracts/distribution/BasicDistribution.sol +138 -0
  316. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  317. package/contracts/distribution/Distribution.sol +162 -152
  318. package/contracts/distribution/DistributionService.sol +124 -137
  319. package/contracts/distribution/DistributionServiceManager.sol +11 -23
  320. package/contracts/distribution/IDistributionComponent.sol +28 -47
  321. package/contracts/distribution/IDistributionService.sol +24 -10
  322. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  323. package/contracts/instance/IInstance.sol +29 -43
  324. package/contracts/instance/IInstanceService.sol +46 -27
  325. package/contracts/instance/Instance.sol +116 -116
  326. package/contracts/instance/InstanceAdmin.sol +285 -0
  327. package/contracts/instance/InstanceAuthorizationV3.sol +203 -0
  328. package/contracts/instance/InstanceReader.sol +106 -52
  329. package/contracts/instance/InstanceService.sol +291 -132
  330. package/contracts/instance/InstanceServiceManager.sol +12 -26
  331. package/contracts/instance/InstanceStore.sol +146 -66
  332. package/contracts/instance/base/BalanceStore.sol +123 -0
  333. package/contracts/instance/base/Cloneable.sol +2 -25
  334. package/contracts/instance/base/ObjectCounter.sol +21 -0
  335. package/contracts/instance/base/ObjectLifecycle.sol +110 -0
  336. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +11 -14
  337. package/contracts/instance/module/IAccess.sol +2 -10
  338. package/contracts/instance/module/IBundle.sol +1 -4
  339. package/contracts/instance/module/IComponents.sol +15 -10
  340. package/contracts/instance/module/IDistribution.sol +0 -1
  341. package/contracts/instance/module/IPolicy.sol +25 -19
  342. package/contracts/mock/Dip.sol +26 -0
  343. package/contracts/oracle/BasicOracle.sol +48 -0
  344. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  345. package/contracts/oracle/IOracle.sol +36 -0
  346. package/contracts/oracle/IOracleComponent.sol +33 -0
  347. package/contracts/oracle/IOracleService.sol +65 -0
  348. package/contracts/oracle/Oracle.sol +167 -0
  349. package/contracts/oracle/OracleService.sol +279 -0
  350. package/contracts/oracle/OracleServiceManager.sol +39 -0
  351. package/contracts/pool/BasicPool.sol +166 -0
  352. package/contracts/pool/BasicPoolAuthorization.sol +58 -0
  353. package/contracts/pool/BundleService.sol +252 -196
  354. package/contracts/pool/BundleServiceManager.sol +11 -23
  355. package/contracts/pool/IBundleService.sol +35 -19
  356. package/contracts/pool/IPoolComponent.sol +10 -66
  357. package/contracts/pool/IPoolService.sol +79 -33
  358. package/contracts/pool/Pool.sol +168 -144
  359. package/contracts/pool/PoolService.sol +322 -216
  360. package/contracts/pool/PoolServiceManager.sol +11 -23
  361. package/contracts/product/ApplicationService.sol +143 -80
  362. package/contracts/product/ApplicationServiceManager.sol +11 -8
  363. package/contracts/product/BasicProduct.sol +53 -0
  364. package/contracts/product/BasicProductAuthorization.sol +43 -0
  365. package/contracts/product/ClaimService.sol +36 -62
  366. package/contracts/product/ClaimServiceManager.sol +11 -8
  367. package/contracts/product/IApplicationService.sol +2 -1
  368. package/contracts/product/IClaimService.sol +8 -1
  369. package/contracts/product/IPolicyService.sol +29 -36
  370. package/contracts/product/IPricingService.sol +10 -8
  371. package/contracts/product/IProductComponent.sol +10 -12
  372. package/contracts/product/{IProductService.sol → IRiskService.sol} +2 -9
  373. package/contracts/product/PolicyService.sol +390 -192
  374. package/contracts/product/PolicyServiceManager.sol +11 -26
  375. package/contracts/product/PricingService.sol +103 -77
  376. package/contracts/product/PricingServiceManager.sol +11 -23
  377. package/contracts/product/Product.sol +156 -128
  378. package/contracts/product/RiskService.sol +97 -0
  379. package/contracts/product/RiskServiceManager.sol +39 -0
  380. package/contracts/registry/ChainNft.sol +8 -1
  381. package/contracts/registry/IRegistry.sol +54 -21
  382. package/contracts/registry/IRegistryService.sol +38 -35
  383. package/contracts/registry/Registry.sol +233 -124
  384. package/contracts/registry/RegistryAdmin.sol +374 -0
  385. package/contracts/registry/RegistryService.sol +67 -100
  386. package/contracts/registry/RegistryServiceManager.sol +23 -30
  387. package/contracts/registry/ReleaseLifecycle.sol +27 -0
  388. package/contracts/registry/ReleaseRegistry.sol +485 -0
  389. package/contracts/registry/ServiceAuthorizationV3.sol +199 -0
  390. package/contracts/registry/TokenRegistry.sol +261 -62
  391. package/contracts/shared/Component.sol +141 -144
  392. package/contracts/shared/ComponentService.sol +587 -96
  393. package/contracts/shared/ComponentServiceManager.sol +35 -0
  394. package/contracts/shared/ComponentVerifyingService.sol +117 -0
  395. package/contracts/shared/IComponent.sol +21 -41
  396. package/contracts/shared/IComponentService.sol +108 -0
  397. package/contracts/shared/IInstanceLinkedComponent.sol +49 -0
  398. package/contracts/{instance/base → shared}/IKeyValueStore.sol +7 -6
  399. package/contracts/{instance/base → shared}/ILifecycle.sol +3 -4
  400. package/contracts/shared/INftOwnable.sol +1 -1
  401. package/contracts/shared/IPolicyHolder.sol +6 -1
  402. package/contracts/shared/IService.sol +9 -2
  403. package/contracts/shared/InitializableCustom.sol +177 -0
  404. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +2 -2
  405. package/contracts/shared/InstanceLinkedComponent.sol +172 -0
  406. package/contracts/{instance/base → shared}/KeyValueStore.sol +36 -74
  407. package/contracts/shared/Lifecycle.sol +77 -0
  408. package/contracts/shared/NftIdSet.sol +65 -0
  409. package/contracts/shared/NftOwnable.sol +4 -15
  410. package/contracts/shared/PolicyHolder.sol +22 -17
  411. package/contracts/shared/Registerable.sol +2 -2
  412. package/contracts/shared/Service.sol +32 -22
  413. package/contracts/shared/TokenHandler.sol +112 -8
  414. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  415. package/contracts/staking/IStaking.sol +167 -0
  416. package/contracts/staking/IStakingService.sol +105 -47
  417. package/contracts/staking/StakeManagerLib.sol +206 -0
  418. package/contracts/staking/Staking.sol +497 -0
  419. package/contracts/staking/StakingLifecycle.sol +23 -0
  420. package/contracts/staking/StakingManager.sol +50 -0
  421. package/contracts/staking/StakingReader.sol +183 -0
  422. package/contracts/staking/StakingService.sol +288 -47
  423. package/contracts/staking/{StakeingServiceManager.sol → StakingServiceManager.sol} +13 -6
  424. package/contracts/staking/StakingStore.sol +605 -0
  425. package/contracts/staking/TargetManagerLib.sol +207 -0
  426. package/contracts/type/AddressSet.sol +1 -1
  427. package/contracts/type/Amount.sol +29 -3
  428. package/contracts/type/Blocknumber.sol +26 -3
  429. package/contracts/type/Fee.sol +17 -16
  430. package/contracts/type/NftId.sol +14 -16
  431. package/contracts/type/NftIdSet.sol +1 -1
  432. package/contracts/type/ObjectType.sol +175 -62
  433. package/contracts/type/Referral.sol +2 -1
  434. package/contracts/type/RequestId.sol +75 -0
  435. package/contracts/type/RiskId.sol +1 -1
  436. package/contracts/type/RoleId.sol +104 -62
  437. package/contracts/type/Seconds.sol +40 -1
  438. package/contracts/type/Selector.sol +102 -0
  439. package/contracts/type/StateId.sol +27 -2
  440. package/contracts/type/String.sol +53 -0
  441. package/contracts/type/Timestamp.sol +17 -3
  442. package/contracts/type/UFixed.sol +34 -9
  443. package/contracts/type/Version.sol +4 -2
  444. package/contracts/{shared → upgradeability}/ProxyManager.sol +33 -4
  445. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  446. package/package.json +8 -5
  447. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  448. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -778
  449. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  450. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -1348
  451. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  452. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -124
  453. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  454. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  455. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  456. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -581
  457. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  458. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -194
  459. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  460. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -256
  461. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  462. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  463. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
  464. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  465. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  466. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -864
  467. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  468. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -640
  469. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  470. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -285
  471. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  472. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -559
  473. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  474. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  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/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  479. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -569
  480. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  481. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  482. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  483. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +0 -4
  484. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +0 -628
  485. package/contracts/instance/InstanceAccessManager.sol +0 -543
  486. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -308
  487. package/contracts/instance/base/Lifecycle.sol +0 -121
  488. package/contracts/instance/module/ISetup.sol +0 -33
  489. package/contracts/instance/module/ITreasury.sol +0 -23
  490. package/contracts/product/ProductService.sol +0 -210
  491. package/contracts/product/ProductServiceManager.sol +0 -54
  492. package/contracts/registry/RegistryAccessManager.sol +0 -216
  493. package/contracts/registry/ReleaseManager.sol +0 -328
  494. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +0 -13
  495. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  496. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -1,23 +1,31 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IComponent} from "./IComponent.sol";
4
+ import {Amount, AmountLib} from "../type/Amount.sol";
5
+ import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
6
+ import {Fee, FeeLib} from "../type/Fee.sol";
7
+ import {IComponents} from "../instance/module/IComponents.sol";
8
+ import {IComponentService} from "./IComponentService.sol";
9
+ import {IInstance} from "../instance/IInstance.sol";
10
+ import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
11
+ import {InstanceReader} from "../instance/InstanceReader.sol";
12
+ import {InstanceStore} from "../instance/InstanceStore.sol";
13
+ import {IInstanceService} from "../instance/IInstanceService.sol";
14
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
15
+ import {IProductComponent} from "../product/IProductComponent.sol";
5
16
  import {IRegistry} from "../registry/IRegistry.sol";
6
17
  import {IRegistryService} from "../registry/IRegistryService.sol";
7
- import {IInstance} from "../instance/IInstance.sol";
8
- import {IAccess} from "../instance/module/IAccess.sol";
9
- import {ObjectType, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
18
+ import {KEEP_STATE} from "../type/StateId.sol";
10
19
  import {NftId} from "../type/NftId.sol";
11
- import {RoleId} from "../type/RoleId.sol";
12
-
13
- import {Service} from "../shared/Service.sol";
14
- import {InstanceService} from "../instance/InstanceService.sol";
15
- import {InstanceAccessManager} from "../instance/InstanceAccessManager.sol";
20
+ import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
21
+ import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
22
+ import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
16
23
 
17
- abstract contract ComponentService is
18
- Service
24
+ contract ComponentService is
25
+ ComponentVerifyingService,
26
+ IComponentService
19
27
  {
20
-
28
+ error ErrorComponentServiceAlreadyRegistered(address component);
21
29
  error ErrorComponentServiceNotComponent(address component);
22
30
  error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
23
31
  error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
@@ -26,125 +34,608 @@ abstract contract ComponentService is
26
34
  error ErrorComponentServiceSenderNotService(address sender);
27
35
  error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
28
36
 
29
- /// @dev modifier to check if caller is a registered service
30
- modifier onlyService() {
31
- address caller = msg.sender;
32
- if(!getRegistry().isRegisteredService(caller)) {
33
- revert ErrorComponentServiceSenderNotService(caller);
37
+ bool private constant INCREASE = true;
38
+ bool private constant DECREASE = false;
39
+
40
+ IRegistryService private _registryService;
41
+ IInstanceService private _instanceService;
42
+
43
+ function _initialize(
44
+ address owner,
45
+ bytes memory data
46
+ )
47
+ internal
48
+ virtual override
49
+ initializer()
50
+ {
51
+ // TODO check this, might no longer be the way, refactor if necessary
52
+ address registryAddress;
53
+ address initialOwner;
54
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
55
+
56
+ initializeService(registryAddress, address(0), owner);
57
+
58
+ _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
59
+ _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
60
+
61
+ registerInterface(type(IComponentService).interfaceId);
62
+ }
63
+
64
+ //-------- component ----------------------------------------------------//
65
+
66
+ function setWallet(address newWallet) external virtual {
67
+ (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
68
+ IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
69
+ address currentWallet = info.wallet;
70
+
71
+ if (newWallet == address(0)) {
72
+ revert ErrorComponentServiceNewWalletAddressZero();
73
+ }
74
+
75
+ if (currentWallet == address(0)) {
76
+ revert ErrorComponentServiceWalletAddressZero();
34
77
  }
35
- _;
78
+
79
+ if (newWallet == currentWallet) {
80
+ revert ErrorComponentServiceWalletAddressIsSameAsCurrent();
81
+ }
82
+
83
+ info.wallet = newWallet;
84
+ instance.getInstanceStore().updateComponent(componentNftId, info, KEEP_STATE());
85
+ emit LogComponentServiceWalletAddressChanged(componentNftId, currentWallet, newWallet);
36
86
  }
37
87
 
38
- // view functions
88
+ // TODO implement
89
+ function lock() external virtual {}
39
90
 
40
- function getRegistryService() public view virtual returns (IRegistryService) {
41
- return IRegistryService(_getServiceAddress(REGISTRY()));
91
+ // TODO implement
92
+ function unlock() external virtual {}
93
+
94
+ function withdrawFees(Amount amount)
95
+ external
96
+ virtual
97
+ returns (Amount withdrawnAmount)
98
+ {
99
+ (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
100
+ IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
101
+ address componentWallet = info.wallet;
102
+
103
+ // determine withdrawn amount
104
+ withdrawnAmount = amount;
105
+ if (withdrawnAmount.gte(AmountLib.max())) {
106
+ withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
107
+ } else if (withdrawnAmount.eqz()) {
108
+ revert ErrorComponentServiceWithdrawAmountIsZero();
109
+ } else {
110
+ Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
111
+ if (withdrawnAmount.gt(withdrawLimit)) {
112
+ revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
113
+ }
114
+ }
115
+
116
+ // decrease fee counters by withdrawnAmount
117
+ _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
118
+
119
+ // transfer amount to component owner
120
+ address componentOwner = getRegistry().ownerOf(componentNftId);
121
+ emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
122
+ info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
42
123
  }
43
124
 
44
- function getInstanceService() public view returns (InstanceService) {
45
- return InstanceService(_getServiceAddress(INSTANCE()));
125
+
126
+ //-------- product ------------------------------------------------------//
127
+
128
+ function registerProduct()
129
+ external
130
+ virtual
131
+ {
132
+ address contractAddress = msg.sender;
133
+
134
+ // register/create component setup
135
+ (
136
+ InstanceReader instanceReader,
137
+ InstanceStore instanceStore,
138
+ NftId productNftId
139
+ ) = _register(
140
+ contractAddress,
141
+ PRODUCT(),
142
+ PRODUCT_OWNER_ROLE());
143
+
144
+ // create product info
145
+ IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
146
+ instanceStore.createProduct(productNftId, productInfo);
147
+
148
+ // link distribution and pool to product
149
+ _linkToProduct(instanceReader, instanceStore, productInfo.distributionNftId, productNftId);
150
+ _linkToProduct(instanceReader, instanceStore, productInfo.poolNftId, productNftId);
46
151
  }
47
152
 
48
- // internal functions
49
- function _checkComponentForRegistration(
50
- address componentAddress,
51
- ObjectType requiredType,
52
- RoleId requiredRole
153
+
154
+ function setProductFees(
155
+ Fee memory productFee, // product fee on net premium
156
+ Fee memory processingFee // product fee on payout amounts
53
157
  )
54
- internal
55
- view
56
- returns (
57
- IComponent component,
58
- address owner,
59
- IInstance instance,
60
- NftId instanceNftId
61
- )
158
+ external
159
+ virtual
62
160
  {
63
- // component may only be registerd by initial owner of component
64
- owner = msg.sender;
161
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
162
+ IComponents.ProductInfo memory productInfo = instance.getInstanceReader().getProductInfo(productNftId);
163
+ bool feesChanged = false;
65
164
 
66
- // check this is a component
67
- component = IComponent(componentAddress);
68
- if(!component.supportsInterface(type(IComponent).interfaceId)) {
69
- revert ErrorComponentServiceNotComponent(componentAddress);
165
+ // update product fee if required
166
+ if(!FeeLib.eq(productInfo.productFee, productFee)) {
167
+ _logUpdateFee(productNftId, "ProductFee", productInfo.productFee, productFee);
168
+ productInfo.productFee = productFee;
169
+ feesChanged = true;
70
170
  }
71
171
 
72
- // check component is of required type
73
- IRegistry.ObjectInfo memory componentInfo = component.getInitialInfo();
74
- if(componentInfo.objectType != requiredType) {
75
- revert ErrorComponentServiceInvalidType(componentAddress, requiredType, componentInfo.objectType);
172
+ // update processing fee if required
173
+ if(!FeeLib.eq(productInfo.processingFee, processingFee)) {
174
+ _logUpdateFee(productNftId, "ProcessingFee", productInfo.processingFee, processingFee);
175
+ productInfo.processingFee = processingFee;
176
+ feesChanged = true;
177
+ }
178
+
179
+ if(feesChanged) {
180
+ instance.getInstanceStore().updateProduct(productNftId, productInfo, KEEP_STATE());
181
+ emit LogComponentServiceProductFeesUpdated(productNftId);
182
+ }
183
+ }
184
+
185
+ function increaseProductFees(
186
+ InstanceStore instanceStore,
187
+ NftId productNftId,
188
+ Amount feeAmount
189
+ )
190
+ external
191
+ virtual
192
+ // TODO re-enable once role granting is stable and fixed
193
+ // restricted()
194
+ {
195
+ _changeTargetBalance(INCREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
196
+ }
197
+
198
+
199
+ function decreaseProductFees(InstanceStore instanceStore, NftId productNftId, Amount feeAmount)
200
+ external
201
+ virtual
202
+ // TODO re-enable once role granting is stable and fixed
203
+ // restricted()
204
+ {
205
+ _changeTargetBalance(DECREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
206
+ }
207
+
208
+ //-------- distribution -------------------------------------------------//
209
+
210
+ /// @dev registers the sending component as a distribution component
211
+ function registerDistribution()
212
+ external
213
+ virtual
214
+ {
215
+ address contractAddress = msg.sender;
216
+
217
+ // register/create component info
218
+ _register(
219
+ contractAddress,
220
+ DISTRIBUTION(),
221
+ DISTRIBUTION_OWNER_ROLE());
222
+ }
223
+
224
+
225
+ function setDistributionFees(
226
+ Fee memory distributionFee, // distribution fee for sales that do not include commissions
227
+ Fee memory minDistributionOwnerFee // min fee required by distribution owner (not including commissions for distributors)
228
+ )
229
+ external
230
+ virtual
231
+ {
232
+ (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
233
+ (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
234
+ instance.getInstanceReader(), distributionNftId);
235
+ bool feesChanged = false;
236
+
237
+ // update distributino fee if required
238
+ if(!FeeLib.eq(productInfo.distributionFee, distributionFee)) {
239
+ _logUpdateFee(productNftId, "DistributionFee", productInfo.distributionFee, distributionFee);
240
+ productInfo.distributionFee = distributionFee;
241
+ feesChanged = true;
242
+ }
243
+
244
+ // update min distribution owner fee if required
245
+ if(!FeeLib.eq(productInfo.minDistributionOwnerFee, minDistributionOwnerFee)) {
246
+ _logUpdateFee(productNftId, "MinDistributionOwnerFee", productInfo.minDistributionOwnerFee, minDistributionOwnerFee);
247
+ productInfo.minDistributionOwnerFee = minDistributionOwnerFee;
248
+ feesChanged = true;
249
+ }
250
+
251
+ if(feesChanged) {
252
+ instance.getInstanceStore().updateProduct(productNftId, productInfo, KEEP_STATE());
253
+ emit LogComponentServiceDistributionFeesUpdated(distributionNftId);
254
+ }
255
+ }
256
+
257
+ function increaseDistributionBalance(
258
+ InstanceStore instanceStore,
259
+ NftId distributionNftId,
260
+ Amount amount,
261
+ Amount feeAmount
262
+ )
263
+ external
264
+ virtual
265
+ // TODO re-enable once role granting is stable and fixed
266
+ // restricted()
267
+ {
268
+ _changeTargetBalance(INCREASE, instanceStore, distributionNftId, amount, feeAmount);
269
+ }
270
+
271
+
272
+ function decreaseDistributionBalance(
273
+ InstanceStore instanceStore,
274
+ NftId distributionNftId,
275
+ Amount amount,
276
+ Amount feeAmount
277
+ )
278
+ external
279
+ virtual
280
+ // TODO re-enable once role granting is stable and fixed
281
+ // restricted()
282
+ {
283
+ _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
284
+ }
285
+
286
+ //-------- distributor -------------------------------------------------------//
287
+
288
+ function increaseDistributorBalance(
289
+ InstanceStore instanceStore,
290
+ NftId distributorNftId,
291
+ Amount amount,
292
+ Amount feeAmount
293
+ )
294
+ external
295
+ virtual
296
+ // TODO re-enable once role granting is stable and fixed
297
+ // restricted()
298
+ {
299
+ _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
300
+ }
301
+
302
+ function decreaseDistributorBalance(
303
+ InstanceStore instanceStore,
304
+ NftId distributorNftId,
305
+ Amount amount,
306
+ Amount feeAmount
307
+ )
308
+ external
309
+ virtual
310
+ // TODO re-enable once role granting is stable and fixed
311
+ // restricted()
312
+ {
313
+ _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
314
+ }
315
+
316
+ //-------- oracle -------------------------------------------------------//
317
+
318
+ function registerOracle()
319
+ external
320
+ virtual
321
+ {
322
+ address contractAddress = msg.sender;
323
+
324
+ // register/create component setup
325
+ (
326
+ , // instance reader
327
+ InstanceStore instanceStore,
328
+ NftId componentNftId
329
+ ) = _register(
330
+ contractAddress,
331
+ ORACLE(),
332
+ ORACLE_OWNER_ROLE());
333
+ }
334
+
335
+ //-------- pool ---------------------------------------------------------//
336
+
337
+ function registerPool()
338
+ external
339
+ virtual
340
+ {
341
+ address contractAddress = msg.sender;
342
+
343
+ // register/create component setup
344
+ (
345
+ , // instance reader
346
+ InstanceStore instanceStore,
347
+ NftId componentNftId
348
+ ) = _register(
349
+ contractAddress,
350
+ POOL(),
351
+ POOL_OWNER_ROLE());
352
+
353
+ // create info
354
+ instanceStore.createPool(
355
+ componentNftId,
356
+ IPoolComponent(
357
+ contractAddress).getInitialPoolInfo());
358
+ }
359
+
360
+
361
+ function setPoolFees(
362
+ Fee memory poolFee, // pool fee on net premium
363
+ Fee memory stakingFee, // pool fee on staked capital from investor
364
+ Fee memory performanceFee // pool fee on profits from capital investors
365
+ )
366
+ external
367
+ virtual
368
+ {
369
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
370
+ (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
371
+ instance.getInstanceReader(), poolNftId);
372
+ bool feesChanged = false;
373
+
374
+ // update pool fee if required
375
+ if(!FeeLib.eq(productInfo.poolFee, poolFee)) {
376
+ _logUpdateFee(productNftId, "PoolFee", productInfo.poolFee, poolFee);
377
+ productInfo.poolFee = poolFee;
378
+ feesChanged = true;
76
379
  }
77
380
 
78
- // check msg.sender is component owner
79
- address initialOwner = componentInfo.initialOwner;
80
- if(owner != initialOwner) {
81
- revert ErrorComponentServiceSenderNotOwner(componentAddress, componentInfo.initialOwner, owner);
381
+ // update staking fee if required
382
+ if(!FeeLib.eq(productInfo.stakingFee, stakingFee)) {
383
+ _logUpdateFee(productNftId, "StakingFee", productInfo.stakingFee, stakingFee);
384
+ productInfo.stakingFee = stakingFee;
385
+ feesChanged = true;
82
386
  }
83
387
 
84
- // check instance has assigned required role to owner
85
- instanceNftId = componentInfo.parentNftId;
86
- instance = _getInstance(instanceNftId);
87
- if(!instance.getInstanceAccessManager().hasRole(requiredRole, owner)) {
88
- revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
388
+ // update performance fee if required
389
+ if(!FeeLib.eq(productInfo.performanceFee, performanceFee)) {
390
+ _logUpdateFee(productNftId, "PerformanceFee", productInfo.performanceFee, performanceFee);
391
+ productInfo.performanceFee = performanceFee;
392
+ feesChanged = true;
89
393
  }
394
+
395
+ if(feesChanged) {
396
+ instance.getInstanceStore().updateProduct(productNftId, productInfo, KEEP_STATE());
397
+ emit LogComponentServicePoolFeesUpdated(poolNftId);
398
+ }
399
+ }
400
+
401
+ function increasePoolBalance(
402
+ InstanceStore instanceStore,
403
+ NftId poolNftId,
404
+ Amount amount,
405
+ Amount feeAmount
406
+ )
407
+ public
408
+ virtual
409
+ // TODO re-enable once role granting is stable and fixed
410
+ // restricted()
411
+ {
412
+ _changeTargetBalance(INCREASE, instanceStore, poolNftId, amount, feeAmount);
90
413
  }
91
414
 
92
- // internal view functions
93
- function _getAndVerifyCallingComponentAndInstance(
94
- ObjectType expectedType // assume always of `component` type
415
+ function decreasePoolBalance(
416
+ InstanceStore instanceStore,
417
+ NftId poolNftId,
418
+ Amount amount,
419
+ Amount feeAmount
420
+ )
421
+ public
422
+ virtual
423
+ // TODO re-enable once role granting is stable and fixed
424
+ // restricted()
425
+ {
426
+ _changeTargetBalance(DECREASE, instanceStore, poolNftId, amount, feeAmount);
427
+ }
428
+
429
+ //-------- bundle -------------------------------------------------------//
430
+
431
+ function increaseBundleBalance(
432
+ InstanceStore instanceStore,
433
+ NftId bundleNftId,
434
+ Amount amount,
435
+ Amount feeAmount
436
+ )
437
+ external
438
+ virtual
439
+ // TODO re-enable once role granting is stable and fixed
440
+ // restricted()
441
+ {
442
+ _changeTargetBalance(INCREASE, instanceStore, bundleNftId, amount, feeAmount);
443
+ }
444
+
445
+ function decreaseBundleBalance(
446
+ InstanceStore instanceStore,
447
+ NftId bundleNftId,
448
+ Amount amount,
449
+ Amount feeAmount
450
+ )
451
+ external
452
+ virtual
453
+ // TODO re-enable once role granting is stable and fixed
454
+ // restricted()
455
+ {
456
+ _changeTargetBalance(DECREASE, instanceStore, bundleNftId, amount, feeAmount);
457
+ }
458
+
459
+
460
+ //-------- internal functions ------------------------------------------//
461
+
462
+ function _changeTargetBalance(
463
+ bool increase,
464
+ InstanceStore instanceStore,
465
+ NftId targetNftId,
466
+ Amount amount,
467
+ Amount feeAmount
95
468
  )
96
469
  internal
97
- view
98
- returns(
99
- NftId componentNftId,
100
- IRegistry.ObjectInfo memory componentInfo,
101
- IInstance instance
102
- )
470
+ virtual
103
471
  {
104
- componentNftId = getRegistry().getNftId(msg.sender);
105
- (componentInfo, instance) = _getAndVerifyComponentInfoAndInstance(componentNftId, expectedType);
472
+ Amount totalAmount = amount + feeAmount;
106
473
 
107
- // locked component can not call services
108
- if (instance.getInstanceAccessManager().isTargetLocked(componentInfo.objectAddress)) {
109
- revert IAccess.ErrorIAccessTargetLocked(componentInfo.objectAddress);
474
+ if(increase) {
475
+ if(totalAmount.gtz()) { instanceStore.increaseBalance(targetNftId, totalAmount); }
476
+ if(feeAmount.gtz()) { instanceStore.increaseFees(targetNftId, feeAmount); }
477
+ } else {
478
+ if(totalAmount.gtz()) { instanceStore.decreaseBalance(targetNftId, totalAmount); }
479
+ if(feeAmount.gtz()) { instanceStore.decreaseFees(targetNftId, feeAmount); }
110
480
  }
111
481
  }
112
482
 
113
- function _getAndVerifyComponentInfoAndInstance(
483
+ /// @dev registers the component represented by the provided address
484
+ function _register(
485
+ address componentAddress, // address of component to register
486
+ ObjectType requiredType, // required type for component for registration
487
+ RoleId requiredRole // role required for comonent owner for registration
488
+ )
489
+ internal
490
+ virtual
491
+ returns (
492
+ InstanceReader instanceReader,
493
+ InstanceStore instanceStore,
494
+ NftId componentNftId
495
+ )
496
+ {
497
+ (
498
+ IInstance instance,
499
+ IInstanceLinkedComponent component,
500
+ address owner
501
+ ) = _getAndVerifyRegisterableComponent(
502
+ componentAddress,
503
+ requiredType,
504
+ requiredRole);
505
+
506
+ // register component with registry
507
+ componentNftId = _registryService.registerComponent(
508
+ component,
509
+ requiredType,
510
+ owner).nftId;
511
+
512
+ component.linkToRegisteredNftId();
513
+
514
+ // save amended component info with instance
515
+ instanceReader = instance.getInstanceReader();
516
+ instanceStore = instance.getInstanceStore();
517
+
518
+ IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
519
+ componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
520
+ address(componentInfo.token),
521
+ address(instance.getInstanceAdmin().authority()));
522
+
523
+ instanceStore.createComponent(
524
+ component.getNftId(),
525
+ componentInfo);
526
+
527
+ // setup initial component authorization
528
+ _instanceService.initializeAuthorization(
529
+ instance.getNftId(),
530
+ component);
531
+
532
+ // TODO add logging
533
+ }
534
+
535
+
536
+ /// @dev link the component info corresponding to the componentNftId to the provided productNftId
537
+ function _linkToProduct(
538
+ InstanceReader instanceReader,
539
+ InstanceStore instanceStore,
114
540
  NftId componentNftId,
115
- ObjectType expectedType // assume always of `component` type
541
+ NftId productNftId
116
542
  )
117
543
  internal
118
- view
544
+ {
545
+ // only link components that are registered
546
+ if(componentNftId.eqz()) {
547
+ return;
548
+ }
549
+
550
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(componentNftId);
551
+ componentInfo.productNftId = productNftId;
552
+ instanceStore.updateComponent(componentNftId, componentInfo, KEEP_STATE());
553
+ }
554
+
555
+
556
+ function _logUpdateFee(NftId productNftId, string memory name, Fee memory feeBefore, Fee memory feeAfter)
557
+ internal
558
+ virtual
559
+ {
560
+ emit LogComponentServiceUpdateFee(
561
+ productNftId,
562
+ name,
563
+ feeBefore.fractionalFee,
564
+ feeBefore.fixedFee,
565
+ feeAfter.fractionalFee,
566
+ feeAfter.fixedFee
567
+ );
568
+ }
569
+
570
+
571
+ function _createSelectors(bytes4 selector) internal pure returns (bytes4[] memory selectors) {
572
+ selectors = new bytes4[](1);
573
+ selectors[0] = selector;
574
+ }
575
+
576
+
577
+ function _getLinkedProductInfo(
578
+ InstanceReader instanceReader,
579
+ NftId componentNftId
580
+ )
581
+ internal
582
+ view
119
583
  returns(
120
- IRegistry.ObjectInfo memory componentInfo,
121
- IInstance instance
584
+ NftId productNftId,
585
+ IComponents.ProductInfo memory info
122
586
  )
123
587
  {
124
- componentInfo = getRegistry().getObjectInfo(componentNftId);
125
- if(componentInfo.objectType != expectedType) {
126
- revert ErrorComponentServiceComponentTypeInvalid(
127
- componentInfo.objectAddress,
128
- expectedType,
129
- componentInfo.objectType);
588
+ productNftId = instanceReader.getComponentInfo(componentNftId).productNftId;
589
+ info = instanceReader.getProductInfo(productNftId);
590
+ }
591
+
592
+
593
+ /// @dev based on the provided component address required type and role returns the component and related instance contract
594
+ /// the function reverts iff:
595
+ /// - the component has already been registered
596
+ /// - the component contract does not support IInstanceLinkedComponent
597
+ /// - the component type does not match with the required type
598
+ /// - the initial component owner misses the required role (with the instance access manager)
599
+ function _getAndVerifyRegisterableComponent(
600
+ address componentAddress,
601
+ ObjectType requiredType,
602
+ RoleId requiredRole
603
+ )
604
+ internal
605
+ view
606
+ returns (
607
+ IInstance instance,
608
+ IInstanceLinkedComponent component,
609
+ address owner
610
+ )
611
+ {
612
+ // check this is a component
613
+ component = IInstanceLinkedComponent(componentAddress);
614
+ if(!component.supportsInterface(type(IInstanceLinkedComponent).interfaceId)) {
615
+ revert ErrorComponentServiceNotComponent(componentAddress);
130
616
  }
131
617
 
132
- instance = _getInstance(componentInfo.parentNftId);
133
- }
134
- // assume componentNftId is always of `instance` type
135
- function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
136
- return IInstance(
137
- getRegistry().getObjectInfo(
138
- instanceNftId).objectAddress);
618
+ // check component is of required type
619
+ IRegistry.ObjectInfo memory info = component.getInitialInfo();
620
+ if(info.objectType != requiredType) {
621
+ revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
622
+ }
623
+
624
+ // check component has not already been registered
625
+ if (getRegistry().getNftId(componentAddress).gtz()) {
626
+ revert ErrorComponentServiceAlreadyRegistered(componentAddress);
627
+ }
628
+
629
+ // check instance has assigned required role to inital owner
630
+ instance = _getInstance(info.parentNftId);
631
+ owner = info.initialOwner;
632
+
633
+ if(!instance.getInstanceAdmin().hasRole(owner, requiredRole)) {
634
+ revert ErrorComponentServiceExpectedRoleMissing(info.parentNftId, requiredRole, owner);
635
+ }
139
636
  }
140
- // assume componentNftId is always of `component` type
141
- /*function _getInstanceForComponent(NftId componentNftId) internal view returns (IInstance) {
142
- NftId instanceNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
143
- address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
144
- return IInstance(instanceAddress);
145
- }*/
146
637
 
147
- function _getServiceAddress(ObjectType domain) internal view returns (address) {
148
- return getRegistry().getServiceAddress(domain, getVersion().toMajorPart());
638
+ function _getDomain() internal pure virtual override returns(ObjectType) {
639
+ return COMPONENT();
149
640
  }
150
641
  }