@etherisc/gif-next 0.0.2-c497508-323 → 0.0.2-c49cc14-414

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 (463) hide show
  1. package/README.md +27 -6
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +148 -62
  10. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +233 -5
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +149 -21
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +82 -12
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +68 -13
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  24. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +108 -188
  26. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +152 -33
  28. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +57 -89
  30. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +244 -190
  32. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +82 -56
  34. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +44 -58
  36. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +120 -73
  38. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  39. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  40. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +120 -164
  41. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  42. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +152 -33
  43. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  44. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +258 -290
  45. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  46. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +152 -33
  47. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  48. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  49. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +139 -131
  50. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +589 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  53. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +90 -126
  54. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  55. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +244 -162
  56. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +589 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  59. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +641 -310
  60. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +589 -0
  62. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  63. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
  64. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  65. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +118 -39
  66. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +75 -18
  68. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  69. package/artifacts/contracts/instance/Instance.sol/Instance.json +163 -56
  70. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +375 -99
  72. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  73. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +140 -40
  74. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  75. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +586 -215
  76. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +101 -71
  78. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  79. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +49 -27
  80. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  81. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +412 -372
  82. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  83. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
  84. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  85. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  86. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  87. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  88. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  89. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  90. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  91. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  92. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
  93. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  94. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  95. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  96. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  97. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  98. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  99. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  100. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  101. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +74 -154
  103. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  104. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +126 -35
  105. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  106. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  107. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +44 -58
  108. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  109. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +27 -3
  110. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  111. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +58 -90
  112. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  113. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +112 -81
  114. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +69 -27
  116. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  117. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +76 -104
  118. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  119. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +152 -33
  120. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  121. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +127 -331
  122. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +53 -87
  124. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  125. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +56 -136
  126. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  127. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -97
  128. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  129. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +164 -217
  130. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  131. package/artifacts/contracts/pool/Pool.sol/Pool.json +76 -128
  132. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  133. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +456 -0
  134. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  135. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +302 -353
  136. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  137. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +93 -51
  138. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  139. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +105 -63
  140. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  141. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +45 -27
  142. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  143. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +163 -175
  144. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  145. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +152 -33
  146. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  147. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +244 -179
  148. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  149. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +74 -64
  150. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  151. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +61 -10
  152. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  153. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +142 -20
  154. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  155. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +112 -56
  156. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  157. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +27 -3
  158. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  159. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +150 -144
  160. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  161. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +27 -3
  162. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  163. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +211 -180
  164. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  165. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +293 -0
  166. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  167. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +76 -50
  168. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  169. package/artifacts/contracts/product/PricingService.sol/PricingService.json +99 -76
  170. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  171. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +60 -38
  172. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  173. package/artifacts/contracts/product/Product.sol/Product.json +163 -175
  174. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  175. package/artifacts/contracts/product/RiskService.sol/RiskService.json +88 -73
  176. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  177. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +54 -24
  178. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  179. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  180. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  181. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +50 -2
  182. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  183. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +31 -7
  184. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  185. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  186. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  187. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  188. package/artifacts/contracts/registry/Registry.sol/Registry.json +88 -40
  189. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  190. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +262 -220
  191. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  192. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +69 -46
  193. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  194. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +42 -20
  195. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  196. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1849 -0
  197. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  198. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  199. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  200. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +318 -52
  201. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  202. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  203. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  204. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
  205. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  206. package/artifacts/contracts/shared/Component.sol/Component.json +57 -75
  207. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  208. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +239 -436
  209. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  210. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +70 -64
  211. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  212. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +27 -16
  213. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  214. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +454 -5
  215. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  216. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  217. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  218. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  219. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  220. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  221. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  222. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +44 -44
  223. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  224. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +130 -262
  225. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  226. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +44 -58
  227. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  228. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  229. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  230. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  231. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  232. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +120 -1
  233. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  234. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  235. package/artifacts/contracts/shared/IService.sol/IService.json +27 -3
  236. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  237. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  238. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +57 -89
  239. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  240. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  241. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  242. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  243. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  244. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  245. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  246. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  247. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  248. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -62
  249. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  250. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  251. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  252. package/artifacts/contracts/shared/Service.sol/Service.json +27 -16
  253. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  254. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +327 -73
  255. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  256. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  257. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  258. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
  259. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  260. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +62 -80
  261. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  262. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +56 -3
  263. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  264. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +33 -33
  265. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  266. package/artifacts/contracts/staking/Staking.sol/Staking.json +134 -173
  267. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  268. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  269. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  270. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +58 -46
  271. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  272. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +4 -4
  273. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  274. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +101 -49
  275. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  276. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +47 -25
  277. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  278. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +129 -129
  279. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  280. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +23 -23
  281. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  282. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/Amount.sol/AmountLib.json +3 -3
  284. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  286. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  287. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  289. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/Fee.sol/FeeLib.json +3 -3
  291. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  292. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  293. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  294. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  295. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  297. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  298. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  299. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  300. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  301. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  303. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  305. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  306. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  307. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  308. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +62 -5
  309. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  310. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +79 -15
  311. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  312. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  314. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  316. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  317. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  318. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  320. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +3 -3
  322. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  324. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +47 -2
  326. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  327. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  328. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +18 -2
  329. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  330. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  331. package/contracts/accounting/AccountingService.sol +262 -0
  332. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  333. package/contracts/accounting/IAccountingService.sol +45 -0
  334. package/contracts/authorization/AccessAdmin.sol +177 -84
  335. package/contracts/authorization/AccessManagerCloneable.sol +136 -3
  336. package/contracts/authorization/Authorization.sol +277 -229
  337. package/contracts/authorization/IAccessAdmin.sol +13 -7
  338. package/contracts/authorization/IAuthorization.sol +15 -1
  339. package/contracts/distribution/BasicDistribution.sol +13 -11
  340. package/contracts/distribution/BasicDistributionAuthorization.sol +22 -9
  341. package/contracts/distribution/Distribution.sol +42 -38
  342. package/contracts/distribution/DistributionService.sol +54 -51
  343. package/contracts/distribution/DistributionServiceManager.sol +1 -1
  344. package/contracts/distribution/IDistributionService.sol +19 -19
  345. package/contracts/examples/fire/FirePool.sol +22 -5
  346. package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
  347. package/contracts/examples/fire/FireProduct.sol +31 -8
  348. package/contracts/examples/fire/FireProductAuthorization.sol +2 -1
  349. package/contracts/examples/unpermissioned/SimpleDistribution.sol +7 -0
  350. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  351. package/contracts/examples/unpermissioned/SimplePool.sol +33 -3
  352. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  353. package/contracts/examples/unpermissioned/SimpleProduct.sol +47 -21
  354. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  355. package/contracts/instance/BundleSet.sol +42 -38
  356. package/contracts/instance/IInstance.sol +13 -9
  357. package/contracts/instance/IInstanceService.sol +7 -6
  358. package/contracts/instance/Instance.sol +33 -18
  359. package/contracts/instance/InstanceAdmin.sol +242 -82
  360. package/contracts/instance/InstanceAuthorizationV3.sol +50 -31
  361. package/contracts/instance/InstanceReader.sol +174 -32
  362. package/contracts/instance/InstanceService.sol +62 -72
  363. package/contracts/instance/InstanceServiceManager.sol +1 -1
  364. package/contracts/instance/InstanceStore.sol +13 -2
  365. package/contracts/instance/RiskSet.sol +118 -0
  366. package/contracts/instance/base/ObjectCounter.sol +1 -2
  367. package/contracts/instance/base/ObjectLifecycle.sol +4 -2
  368. package/contracts/instance/base/ObjectSet.sol +31 -33
  369. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  370. package/contracts/instance/module/IComponents.sol +4 -4
  371. package/contracts/instance/module/IDistribution.sol +2 -1
  372. package/contracts/instance/module/IPolicy.sol +2 -1
  373. package/contracts/instance/module/IRisk.sol +3 -0
  374. package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
  375. package/contracts/oracle/Oracle.sol +1 -1
  376. package/contracts/oracle/OracleService.sol +92 -73
  377. package/contracts/oracle/OracleServiceManager.sol +1 -1
  378. package/contracts/pool/BasicPool.sol +24 -3
  379. package/contracts/pool/BasicPoolAuthorization.sol +27 -8
  380. package/contracts/pool/BundleService.sol +47 -145
  381. package/contracts/pool/BundleServiceManager.sol +1 -1
  382. package/contracts/pool/IBundleService.sol +15 -43
  383. package/contracts/pool/IPoolComponent.sol +1 -7
  384. package/contracts/pool/IPoolService.sol +58 -60
  385. package/contracts/pool/Pool.sol +106 -91
  386. package/contracts/pool/PoolLib.sol +216 -0
  387. package/contracts/pool/PoolService.sol +427 -214
  388. package/contracts/pool/PoolServiceManager.sol +1 -1
  389. package/contracts/product/ApplicationService.sol +15 -15
  390. package/contracts/product/ApplicationServiceManager.sol +1 -1
  391. package/contracts/product/BasicProduct.sol +9 -11
  392. package/contracts/product/BasicProductAuthorization.sol +24 -10
  393. package/contracts/product/ClaimService.sol +157 -137
  394. package/contracts/product/ClaimServiceManager.sol +1 -1
  395. package/contracts/product/IApplicationService.sol +5 -2
  396. package/contracts/product/IClaimService.sol +14 -2
  397. package/contracts/product/IPolicyService.sol +26 -11
  398. package/contracts/product/IProductComponent.sol +4 -1
  399. package/contracts/product/PolicyService.sol +244 -253
  400. package/contracts/product/PolicyServiceLib.sol +65 -0
  401. package/contracts/product/PolicyServiceManager.sol +1 -1
  402. package/contracts/product/PricingService.sol +23 -19
  403. package/contracts/product/PricingServiceManager.sol +3 -3
  404. package/contracts/product/Product.sol +62 -39
  405. package/contracts/product/RiskService.sol +74 -25
  406. package/contracts/product/RiskServiceManager.sol +1 -1
  407. package/contracts/registry/ChainNft.sol +4 -2
  408. package/contracts/registry/IRegistry.sol +10 -15
  409. package/contracts/registry/IRelease.sol +26 -0
  410. package/contracts/registry/Registry.sol +16 -3
  411. package/contracts/registry/RegistryAdmin.sol +132 -226
  412. package/contracts/registry/RegistryService.sol +3 -3
  413. package/contracts/registry/RegistryServiceManager.sol +1 -1
  414. package/contracts/registry/ReleaseAdmin.sol +245 -0
  415. package/contracts/registry/ReleaseLifecycle.sol +2 -0
  416. package/contracts/registry/ReleaseRegistry.sol +129 -119
  417. package/contracts/registry/ServiceAuthorizationV3.sol +93 -40
  418. package/contracts/registry/TokenRegistry.sol +6 -8
  419. package/contracts/shared/Component.sol +61 -99
  420. package/contracts/shared/ComponentService.sol +226 -279
  421. package/contracts/shared/ComponentServiceManager.sol +1 -1
  422. package/contracts/shared/ComponentVerifyingService.sol +16 -14
  423. package/contracts/shared/ContractLib.sol +224 -9
  424. package/contracts/shared/IComponent.sol +4 -17
  425. package/contracts/shared/IComponentService.sol +16 -24
  426. package/contracts/shared/IInstanceLinkedComponent.sol +0 -11
  427. package/contracts/shared/IRegisterable.sol +15 -4
  428. package/contracts/shared/IService.sol +3 -5
  429. package/contracts/shared/InstanceLinkedComponent.sol +4 -20
  430. package/contracts/shared/NftOwnable.sol +4 -4
  431. package/contracts/shared/PolicyHolder.sol +1 -1
  432. package/contracts/shared/Registerable.sol +44 -20
  433. package/contracts/shared/RegistryLinked.sol +7 -13
  434. package/contracts/shared/Service.sol +8 -27
  435. package/contracts/shared/TokenHandler.sol +274 -72
  436. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  437. package/contracts/staking/IStaking.sol +5 -8
  438. package/contracts/staking/IStakingService.sol +8 -0
  439. package/contracts/staking/StakeManagerLib.sol +1 -1
  440. package/contracts/staking/Staking.sol +62 -33
  441. package/contracts/staking/StakingReader.sol +1 -1
  442. package/contracts/staking/StakingService.sol +35 -12
  443. package/contracts/staking/StakingServiceManager.sol +5 -4
  444. package/contracts/type/Key32.sol +2 -2
  445. package/contracts/type/Key32Set.sol +62 -0
  446. package/contracts/type/NftId.sol +6 -0
  447. package/contracts/type/ObjectType.sol +48 -21
  448. package/contracts/type/RiskId.sol +23 -6
  449. package/contracts/type/RoleId.sol +24 -4
  450. package/contracts/type/Selector.sol +5 -0
  451. package/contracts/type/Timestamp.sol +0 -5
  452. package/contracts/type/UFixed.sol +9 -119
  453. package/contracts/type/Version.sol +15 -5
  454. package/contracts/upgradeability/ProxyManager.sol +1 -1
  455. package/package.json +3 -3
  456. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +0 -4
  457. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +0 -1196
  458. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  459. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  460. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  461. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  462. package/contracts/authorization/ReleaseAccessManager.sol +0 -38
  463. package/contracts/instance/module/IAccess.sol +0 -46
@@ -3,10 +3,8 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
- import {Amount, AmountLib} from "../type/Amount.sol";
7
- import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
8
- import {ContractLib} from "../shared/ContractLib.sol";
9
- import {Fee, FeeLib} from "../type/Fee.sol";
6
+ import {IAccountingService} from "../accounting/IAccountingService.sol";
7
+ import {IComponent} from "../shared/IComponent.sol";
10
8
  import {IComponents} from "../instance/module/IComponents.sol";
11
9
  import {IComponentService} from "./IComponentService.sol";
12
10
  import {IInstance} from "../instance/IInstance.sol";
@@ -15,32 +13,56 @@ import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
15
13
  import {InstanceReader} from "../instance/InstanceReader.sol";
16
14
  import {InstanceStore} from "../instance/InstanceStore.sol";
17
15
  import {IInstanceService} from "../instance/IInstanceService.sol";
18
- import {IRegisterable} from "../shared/IRegisterable.sol";
19
16
  import {IPoolComponent} from "../pool/IPoolComponent.sol";
20
17
  import {IProductComponent} from "../product/IProductComponent.sol";
18
+ import {IRegisterable} from "../shared/IRegisterable.sol";
21
19
  import {IRegistry} from "../registry/IRegistry.sol";
22
20
  import {IRegistryService} from "../registry/IRegistryService.sol";
21
+
22
+ import {Amount, AmountLib} from "../type/Amount.sol";
23
+ import {ContractLib} from "../shared/ContractLib.sol";
24
+ import {Fee, FeeLib} from "../type/Fee.sol";
23
25
  import {KEEP_STATE} from "../type/StateId.sol";
24
- import {NftId} from "../type/NftId.sol";
25
- import {ObjectType, REGISTRY, BUNDLE, COMPONENT, DISTRIBUTION, DISTRIBUTOR, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
26
- import {RoleId} from "../type/RoleId.sol";
26
+ import {NftId, NftIdLib} from "../type/NftId.sol";
27
+ import {ObjectType, ACCOUNTING, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
28
+ import {Service} from "../shared/Service.sol";
29
+ import {TokenHandler} from "../shared/TokenHandler.sol";
27
30
  import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
31
+ import {VersionPart} from "../type/Version.sol";
32
+
28
33
 
29
34
  contract ComponentService is
30
- ComponentVerifyingService,
35
+ Service,
31
36
  IComponentService
32
37
  {
33
-
34
38
  bool private constant INCREASE = true;
35
39
  bool private constant DECREASE = false;
36
40
 
41
+ IAccountingService private _accountingService;
37
42
  IRegistryService private _registryService;
38
43
  IInstanceService private _instanceService;
39
44
 
40
45
  modifier onlyComponent(address component) {
41
- if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
42
- revert ErrorComponentServiceNotInstanceLinkedComponent(component);
46
+ _checkSupportsInterface(component);
47
+ _;
48
+ }
49
+
50
+ modifier onlyInstance() {
51
+ NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
52
+ if (instanceNftId.eqz()) {
53
+ revert ErrorComponentServiceNotRegistered(msg.sender);
54
+ }
55
+
56
+ ObjectType objectType = getRegistry().getObjectInfo(instanceNftId).objectType;
57
+ if (objectType != INSTANCE()) {
58
+ revert ErrorComponentServiceNotInstance(msg.sender, objectType);
59
+ }
60
+
61
+ VersionPart instanceVersion = IInstance(msg.sender).getRelease();
62
+ if (instanceVersion != getVersion().toMajorPart()) {
63
+ revert ErrorComponentServiceInstanceVersionMismatch(msg.sender, instanceVersion);
43
64
  }
65
+
44
66
  _;
45
67
  }
46
68
 
@@ -54,12 +76,13 @@ contract ComponentService is
54
76
  initializer()
55
77
  {
56
78
  (
57
- address registryAddress,
58
- address authority
79
+ address authority,
80
+ address registry
59
81
  ) = abi.decode(data, (address, address));
60
82
 
61
- _initializeService(registryAddress, authority, owner);
83
+ __Service_init(authority, registry, owner);
62
84
 
85
+ _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
63
86
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
64
87
  _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
65
88
 
@@ -90,64 +113,104 @@ contract ComponentService is
90
113
  revert ErrorComponentServiceTypeNotSupported(component, componentType);
91
114
  }
92
115
 
116
+ function approveTokenHandler(
117
+ IERC20Metadata token,
118
+ Amount amount
119
+ )
120
+ external
121
+ virtual
122
+ {
123
+ // checks
124
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
125
+ TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
126
+ componentNftId).tokenHandler;
93
127
 
94
- function setWallet(address newWallet) external virtual {
95
- (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
96
- IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
97
- address currentWallet = info.wallet;
98
-
99
- if (newWallet == address(0)) {
100
- revert ErrorComponentServiceNewWalletAddressZero();
101
- }
128
+ // effects
129
+ tokenHandler.approve(token, amount);
130
+ }
102
131
 
103
- if (currentWallet == address(0)) {
104
- revert ErrorComponentServiceWalletAddressZero();
105
- }
106
132
 
107
- if (newWallet == currentWallet) {
108
- revert ErrorComponentServiceWalletAddressIsSameAsCurrent();
109
- }
133
+ function setWallet(address newWallet)
134
+ external
135
+ virtual
136
+ {
137
+ // checks
138
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
139
+ TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
140
+ componentNftId).tokenHandler;
110
141
 
111
- info.wallet = newWallet;
112
- instance.getInstanceStore().updateComponent(componentNftId, info, KEEP_STATE());
113
- emit LogComponentServiceWalletAddressChanged(componentNftId, currentWallet, newWallet);
142
+ // effects
143
+ tokenHandler.setWallet(newWallet);
114
144
  }
115
145
 
116
- // TODO implement
117
- function lock() external virtual {}
146
+ /// @inheritdoc IComponentService
147
+ function setLockedFromInstance(address componentAddress, bool locked)
148
+ external
149
+ virtual
150
+ onlyInstance()
151
+ {
152
+ address instanceAddress = msg.sender;
153
+ // NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
154
+ IInstance instance = IInstance(instanceAddress);
155
+ _setLocked(instance.getInstanceAdmin(), componentAddress, locked);
156
+ }
118
157
 
119
- // TODO implement
120
- function unlock() external virtual {}
158
+ /// @inheritdoc IComponentService
159
+ function setLockedFromComponent(address componentAddress, bool locked)
160
+ external
161
+ virtual
162
+ onlyComponent(msg.sender)
163
+ {
164
+ (, IInstance instance) = _getAndVerifyComponent(COMPONENT(), false);
165
+ _setLocked(instance.getInstanceAdmin(), componentAddress, locked);
166
+ }
121
167
 
168
+ /// @inheritdoc IComponentService
122
169
  function withdrawFees(Amount amount)
123
170
  external
124
171
  virtual
125
172
  returns (Amount withdrawnAmount)
126
173
  {
127
- (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
128
- IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
129
- address componentWallet = info.wallet;
174
+ // checks
175
+ (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
176
+ InstanceReader instanceReader = instance.getInstanceReader();
130
177
 
131
178
  // determine withdrawn amount
179
+ Amount maxAvailableAmount = instanceReader.getFeeAmount(componentNftId);
132
180
  withdrawnAmount = amount;
133
- if (withdrawnAmount.gte(AmountLib.max())) {
134
- withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
135
- } else if (withdrawnAmount.eqz()) {
181
+
182
+ // max amount -> withraw all available fees
183
+ if (amount == AmountLib.max()) {
184
+ withdrawnAmount = maxAvailableAmount;
185
+ }
186
+
187
+ // check modified withdrawn amount
188
+ if (withdrawnAmount.eqz()) {
136
189
  revert ErrorComponentServiceWithdrawAmountIsZero();
137
- } else {
138
- Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
139
- if (withdrawnAmount.gt(withdrawLimit)) {
140
- revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
141
- }
190
+ } else if (withdrawnAmount > maxAvailableAmount) {
191
+ revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, maxAvailableAmount);
142
192
  }
143
193
 
194
+ // effects
144
195
  // decrease fee counters by withdrawnAmount
145
- _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
196
+ _accountingService.decreaseComponentFees(
197
+ instance.getInstanceStore(),
198
+ componentNftId,
199
+ withdrawnAmount);
146
200
 
147
- // transfer amount to component owner
148
201
  address componentOwner = getRegistry().ownerOf(componentNftId);
149
- emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
150
- info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
202
+ TokenHandler tokenHandler = instanceReader.getTokenHandler(componentNftId);
203
+ emit LogComponentServiceComponentFeesWithdrawn(
204
+ componentNftId,
205
+ componentOwner,
206
+ address(tokenHandler.TOKEN()),
207
+ withdrawnAmount);
208
+
209
+ // interactions
210
+ // transfer amount to component owner
211
+ tokenHandler.pushFeeToken(
212
+ componentOwner,
213
+ withdrawnAmount);
151
214
  }
152
215
 
153
216
 
@@ -156,6 +219,7 @@ contract ComponentService is
156
219
  function registerProduct(address productAddress)
157
220
  external
158
221
  virtual
222
+ nonReentrant()
159
223
  onlyComponent(productAddress)
160
224
  returns (NftId productNftId)
161
225
  {
@@ -168,14 +232,22 @@ contract ComponentService is
168
232
 
169
233
  // get product
170
234
  IProductComponent product = IProductComponent(productAddress);
235
+
236
+ IComponents.ProductInfo memory initialProductInfo = product.getInitialProductInfo();
237
+ // force initialization of linked components with empty values to
238
+ // ensure no components are linked upon initialization of the product
239
+ initialProductInfo.poolNftId = NftIdLib.zero();
240
+ initialProductInfo.distributionNftId = NftIdLib.zero();
241
+ initialProductInfo.oracleNftId = new NftId[](initialProductInfo.expectedNumberOfOracles);
171
242
 
172
243
  // create info
173
244
  instanceStore.createProduct(
174
245
  productNftId,
175
- product.getInitialProductInfo());
246
+ initialProductInfo);
176
247
 
177
- // authorize
178
- instanceAdmin.initializeComponentAuthorization(product);
248
+ instanceStore.createFee(
249
+ productNftId,
250
+ product.getInitialFeeInfo());
179
251
  }
180
252
 
181
253
 
@@ -185,62 +257,39 @@ contract ComponentService is
185
257
  )
186
258
  external
187
259
  virtual
260
+ nonReentrant()
188
261
  {
189
- (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
190
- IComponents.ProductInfo memory productInfo = instance.getInstanceReader().getProductInfo(productNftId);
262
+ (NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
263
+ IComponents.FeeInfo memory feeInfo = instance.getInstanceReader().getFeeInfo(productNftId);
191
264
  bool feesChanged = false;
192
265
 
193
266
  // update product fee if required
194
- if(!FeeLib.eq(productInfo.productFee, productFee)) {
195
- _logUpdateFee(productNftId, "ProductFee", productInfo.productFee, productFee);
196
- productInfo.productFee = productFee;
267
+ if(!FeeLib.eq(feeInfo.productFee, productFee)) {
268
+ _logUpdateFee(productNftId, "ProductFee", feeInfo.productFee, productFee);
269
+ feeInfo.productFee = productFee;
197
270
  feesChanged = true;
198
271
  }
199
272
 
200
273
  // update processing fee if required
201
- if(!FeeLib.eq(productInfo.processingFee, processingFee)) {
202
- _logUpdateFee(productNftId, "ProcessingFee", productInfo.processingFee, processingFee);
203
- productInfo.processingFee = processingFee;
274
+ if(!FeeLib.eq(feeInfo.processingFee, processingFee)) {
275
+ _logUpdateFee(productNftId, "ProcessingFee", feeInfo.processingFee, processingFee);
276
+ feeInfo.processingFee = processingFee;
204
277
  feesChanged = true;
205
278
  }
206
279
 
207
280
  if(feesChanged) {
208
- instance.getInstanceStore().updateProduct(productNftId, productInfo, KEEP_STATE());
281
+ instance.getInstanceStore().updateFee(productNftId, feeInfo);
209
282
  emit LogComponentServiceProductFeesUpdated(productNftId);
210
283
  }
211
284
  }
212
285
 
213
- function increaseProductFees(
214
- InstanceStore instanceStore,
215
- NftId productNftId,
216
- Amount feeAmount
217
- )
218
- external
219
- virtual
220
- // TODO re-enable once role granting is stable and fixed
221
- // restricted()
222
- {
223
- _checkNftType(productNftId, PRODUCT());
224
- _changeTargetBalance(INCREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
225
- }
226
-
227
-
228
- function decreaseProductFees(InstanceStore instanceStore, NftId productNftId, Amount feeAmount)
229
- external
230
- virtual
231
- // TODO re-enable once role granting is stable and fixed
232
- // restricted()
233
- {
234
- _checkNftType(productNftId, PRODUCT());
235
- _changeTargetBalance(DECREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
236
- }
237
-
238
286
  //-------- distribution -------------------------------------------------//
239
287
 
240
288
  /// @dev registers the sending component as a distribution component
241
289
  function _registerDistribution(address distributioAddress)
242
290
  internal
243
291
  virtual
292
+ nonReentrant()
244
293
  returns (NftId distributionNftId)
245
294
  {
246
295
  // register/create component info
@@ -264,10 +313,6 @@ contract ComponentService is
264
313
  // set distribution in product info
265
314
  productInfo.distributionNftId = distributionNftId;
266
315
  instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
267
-
268
- // authorize
269
- instanceAdmin.initializeComponentAuthorization(
270
- IInstanceLinkedComponent(distributioAddress));
271
316
  }
272
317
 
273
318
 
@@ -278,94 +323,31 @@ contract ComponentService is
278
323
  external
279
324
  virtual
280
325
  {
281
- (NftId distributionNftId,, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
282
- (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
326
+ (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
327
+ (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
283
328
  instance.getInstanceReader(), distributionNftId);
284
329
  bool feesChanged = false;
285
330
 
286
331
  // update distributino fee if required
287
- if(!FeeLib.eq(productInfo.distributionFee, distributionFee)) {
288
- _logUpdateFee(productNftId, "DistributionFee", productInfo.distributionFee, distributionFee);
289
- productInfo.distributionFee = distributionFee;
332
+ if(!FeeLib.eq(feeInfo.distributionFee, distributionFee)) {
333
+ _logUpdateFee(productNftId, "DistributionFee", feeInfo.distributionFee, distributionFee);
334
+ feeInfo.distributionFee = distributionFee;
290
335
  feesChanged = true;
291
336
  }
292
337
 
293
338
  // update min distribution owner fee if required
294
- if(!FeeLib.eq(productInfo.minDistributionOwnerFee, minDistributionOwnerFee)) {
295
- _logUpdateFee(productNftId, "MinDistributionOwnerFee", productInfo.minDistributionOwnerFee, minDistributionOwnerFee);
296
- productInfo.minDistributionOwnerFee = minDistributionOwnerFee;
339
+ if(!FeeLib.eq(feeInfo.minDistributionOwnerFee, minDistributionOwnerFee)) {
340
+ _logUpdateFee(productNftId, "MinDistributionOwnerFee", feeInfo.minDistributionOwnerFee, minDistributionOwnerFee);
341
+ feeInfo.minDistributionOwnerFee = minDistributionOwnerFee;
297
342
  feesChanged = true;
298
343
  }
299
344
 
300
345
  if(feesChanged) {
301
- instance.getInstanceStore().updateProduct(productNftId, productInfo, KEEP_STATE());
346
+ instance.getInstanceStore().updateFee(productNftId, feeInfo);
302
347
  emit LogComponentServiceDistributionFeesUpdated(distributionNftId);
303
348
  }
304
349
  }
305
350
 
306
- function increaseDistributionBalance(
307
- InstanceStore instanceStore,
308
- NftId distributionNftId,
309
- Amount amount,
310
- Amount feeAmount
311
- )
312
- external
313
- virtual
314
- // TODO re-enable once role granting is stable and fixed
315
- // restricted()
316
- {
317
- _checkNftType(distributionNftId, DISTRIBUTION());
318
- _changeTargetBalance(INCREASE, instanceStore, distributionNftId, amount, feeAmount);
319
- }
320
-
321
-
322
- function decreaseDistributionBalance(
323
- InstanceStore instanceStore,
324
- NftId distributionNftId,
325
- Amount amount,
326
- Amount feeAmount
327
- )
328
- external
329
- virtual
330
- // TODO re-enable once role granting is stable and fixed
331
- // restricted()
332
- {
333
- _checkNftType(distributionNftId, DISTRIBUTION());
334
- _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
335
- }
336
-
337
- //-------- distributor -------------------------------------------------------//
338
-
339
- function increaseDistributorBalance(
340
- InstanceStore instanceStore,
341
- NftId distributorNftId,
342
- Amount amount,
343
- Amount feeAmount
344
- )
345
- external
346
- virtual
347
- // TODO re-enable once role granting is stable and fixed
348
- // restricted()
349
- {
350
- _checkNftType(distributorNftId, DISTRIBUTOR());
351
- _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
352
- }
353
-
354
- function decreaseDistributorBalance(
355
- InstanceStore instanceStore,
356
- NftId distributorNftId,
357
- Amount amount,
358
- Amount feeAmount
359
- )
360
- external
361
- virtual
362
- // TODO re-enable once role granting is stable and fixed
363
- // restricted()
364
- {
365
- _checkNftType(distributorNftId, DISTRIBUTOR());
366
- _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
367
- }
368
-
369
351
  //-------- oracle -------------------------------------------------------//
370
352
 
371
353
  function _registerOracle(address oracleAddress)
@@ -379,7 +361,7 @@ contract ComponentService is
379
361
  InstanceStore instanceStore;
380
362
  NftId productNftId;
381
363
 
382
- (instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) =_register(
364
+ (instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) = _register(
383
365
  oracleAddress,
384
366
  ORACLE());
385
367
 
@@ -396,10 +378,6 @@ contract ComponentService is
396
378
  productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
397
379
  productInfo.numberOfOracles++;
398
380
  instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
399
-
400
- // authorize
401
- instanceAdmin.initializeComponentAuthorization(
402
- IInstanceLinkedComponent(oracleAddress));
403
381
  }
404
382
 
405
383
  //-------- pool ---------------------------------------------------------//
@@ -415,7 +393,7 @@ contract ComponentService is
415
393
  InstanceStore instanceStore;
416
394
  NftId productNftId;
417
395
 
418
- (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) =_register(
396
+ (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) = _register(
419
397
  poolAddress,
420
398
  POOL());
421
399
 
@@ -434,9 +412,6 @@ contract ComponentService is
434
412
  // update pool in product info
435
413
  productInfo.poolNftId = poolNftId;
436
414
  instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
437
-
438
- // authorize
439
- instanceAdmin.initializeComponentAuthorization(pool);
440
415
  }
441
416
 
442
417
 
@@ -448,124 +423,39 @@ contract ComponentService is
448
423
  external
449
424
  virtual
450
425
  {
451
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
452
- (NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
426
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActiveComponent(POOL());
427
+
428
+ (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
453
429
  instance.getInstanceReader(), poolNftId);
454
430
  bool feesChanged = false;
455
431
 
456
432
  // update pool fee if required
457
- if(!FeeLib.eq(productInfo.poolFee, poolFee)) {
458
- _logUpdateFee(productNftId, "PoolFee", productInfo.poolFee, poolFee);
459
- productInfo.poolFee = poolFee;
433
+ if(!FeeLib.eq(feeInfo.poolFee, poolFee)) {
434
+ _logUpdateFee(productNftId, "PoolFee", feeInfo.poolFee, poolFee);
435
+ feeInfo.poolFee = poolFee;
460
436
  feesChanged = true;
461
437
  }
462
438
 
463
439
  // update staking fee if required
464
- if(!FeeLib.eq(productInfo.stakingFee, stakingFee)) {
465
- _logUpdateFee(productNftId, "StakingFee", productInfo.stakingFee, stakingFee);
466
- productInfo.stakingFee = stakingFee;
440
+ if(!FeeLib.eq(feeInfo.stakingFee, stakingFee)) {
441
+ _logUpdateFee(productNftId, "StakingFee", feeInfo.stakingFee, stakingFee);
442
+ feeInfo.stakingFee = stakingFee;
467
443
  feesChanged = true;
468
444
  }
469
445
 
470
446
  // update performance fee if required
471
- if(!FeeLib.eq(productInfo.performanceFee, performanceFee)) {
472
- _logUpdateFee(productNftId, "PerformanceFee", productInfo.performanceFee, performanceFee);
473
- productInfo.performanceFee = performanceFee;
447
+ if(!FeeLib.eq(feeInfo.performanceFee, performanceFee)) {
448
+ _logUpdateFee(productNftId, "PerformanceFee", feeInfo.performanceFee, performanceFee);
449
+ feeInfo.performanceFee = performanceFee;
474
450
  feesChanged = true;
475
451
  }
476
452
 
477
453
  if(feesChanged) {
478
- instance.getInstanceStore().updateProduct(productNftId, productInfo, KEEP_STATE());
454
+ instance.getInstanceStore().updateFee(productNftId, feeInfo);
479
455
  emit LogComponentServicePoolFeesUpdated(poolNftId);
480
456
  }
481
457
  }
482
458
 
483
- function increasePoolBalance(
484
- InstanceStore instanceStore,
485
- NftId poolNftId,
486
- Amount amount,
487
- Amount feeAmount
488
- )
489
- public
490
- virtual
491
- // TODO re-enable once role granting is stable and fixed
492
- // restricted()
493
- {
494
- _checkNftType(poolNftId, POOL());
495
- _changeTargetBalance(INCREASE, instanceStore, poolNftId, amount, feeAmount);
496
- }
497
-
498
- function decreasePoolBalance(
499
- InstanceStore instanceStore,
500
- NftId poolNftId,
501
- Amount amount,
502
- Amount feeAmount
503
- )
504
- public
505
- virtual
506
- // TODO re-enable once role granting is stable and fixed
507
- // restricted()
508
- {
509
- _checkNftType(poolNftId, POOL());
510
- _changeTargetBalance(DECREASE, instanceStore, poolNftId, amount, feeAmount);
511
- }
512
-
513
- //-------- bundle -------------------------------------------------------//
514
-
515
- function increaseBundleBalance(
516
- InstanceStore instanceStore,
517
- NftId bundleNftId,
518
- Amount amount,
519
- Amount feeAmount
520
- )
521
- external
522
- virtual
523
- // TODO re-enable once role granting is stable and fixed
524
- // restricted()
525
- {
526
- _checkNftType(bundleNftId, BUNDLE());
527
- _changeTargetBalance(INCREASE, instanceStore, bundleNftId, amount, feeAmount);
528
- }
529
-
530
- function decreaseBundleBalance(
531
- InstanceStore instanceStore,
532
- NftId bundleNftId,
533
- Amount amount,
534
- Amount feeAmount
535
- )
536
- external
537
- virtual
538
- // TODO re-enable once role granting is stable and fixed
539
- // restricted()
540
- {
541
- _checkNftType(bundleNftId, BUNDLE());
542
- _changeTargetBalance(DECREASE, instanceStore, bundleNftId, amount, feeAmount);
543
- }
544
-
545
-
546
- //-------- internal functions ------------------------------------------//
547
-
548
- function _changeTargetBalance(
549
- bool increase,
550
- InstanceStore instanceStore,
551
- NftId targetNftId,
552
- Amount amount,
553
- Amount feeAmount
554
- )
555
- internal
556
- virtual
557
- {
558
- Amount totalAmount = amount + feeAmount;
559
-
560
- if(increase) {
561
- if(totalAmount.gtz()) { instanceStore.increaseBalance(targetNftId, totalAmount); }
562
- if(feeAmount.gtz()) { instanceStore.increaseFees(targetNftId, feeAmount); }
563
- } else {
564
- if(totalAmount.gtz()) { instanceStore.decreaseBalance(targetNftId, totalAmount); }
565
- if(feeAmount.gtz()) { instanceStore.decreaseFees(targetNftId, feeAmount); }
566
- }
567
- }
568
-
569
459
  /// @dev Registers the component represented by the provided address.
570
460
  function _register(
571
461
  address componentAddress, // address of component to register
@@ -615,9 +505,11 @@ contract ComponentService is
615
505
  IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
616
506
  IERC20Metadata token = componentInfo.token;
617
507
  componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
508
+ address(getRegistry()),
509
+ address(component), // initially, component is its own wallet
618
510
  address(token),
619
511
  address(instanceAdmin.authority()));
620
-
512
+
621
513
  // register component with instance
622
514
  instanceStore.createComponent(
623
515
  componentNftId,
@@ -626,6 +518,9 @@ contract ComponentService is
626
518
  // link component contract to nft id
627
519
  component.linkToRegisteredNftId();
628
520
 
521
+ // authorize
522
+ instanceAdmin.initializeComponentAuthorization(component);
523
+
629
524
  emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, address(component), address(token), initialOwner);
630
525
  }
631
526
 
@@ -645,7 +540,7 @@ contract ComponentService is
645
540
  }
646
541
 
647
542
 
648
- function _getLinkedProductInfo(
543
+ function _getLinkedFeeInfo(
649
544
  InstanceReader instanceReader,
650
545
  NftId componentNftId
651
546
  )
@@ -653,11 +548,11 @@ contract ComponentService is
653
548
  view
654
549
  returns(
655
550
  NftId productNftId,
656
- IComponents.ProductInfo memory info
551
+ IComponents.FeeInfo memory info
657
552
  )
658
553
  {
659
- productNftId = _getProductNftId(componentNftId);
660
- info = instanceReader.getProductInfo(productNftId);
554
+ productNftId = getRegistry().getParentNftId(componentNftId);
555
+ info = instanceReader.getFeeInfo(productNftId);
661
556
  }
662
557
 
663
558
 
@@ -705,9 +600,12 @@ contract ComponentService is
705
600
  revert ErrorComponentServiceAlreadyRegistered(componentAddress);
706
601
  }
707
602
 
708
- // check release matches
603
+ // component release matches servie release
709
604
  address parentAddress = registry.getObjectAddress(parentNftId);
710
- if (component.getRelease() != IRegisterable(parentAddress).getRelease()) {
605
+ if (component.getRelease() != getRelease()) {
606
+ revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), getRelease());
607
+ // component release matches parent release
608
+ } else if (component.getRelease() != IRegisterable(parentAddress).getRelease()){
711
609
  revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), IRegisterable(parentAddress).getRelease());
712
610
  }
713
611
 
@@ -735,11 +633,60 @@ contract ComponentService is
735
633
 
736
634
  // get initial owner and instance
737
635
  initialOwner = info.initialOwner;
738
- instance = _getInstance(registry, instanceNftId);
636
+ instance = IInstance(registry.getObjectAddress(instanceNftId));
637
+ }
638
+
639
+ function _setLocked(InstanceAdmin instanceAdmin, address componentAddress, bool locked) internal {
640
+ instanceAdmin.setTargetLocked(componentAddress, locked);
739
641
  }
740
642
 
643
+ function _getAndVerifyActiveComponent(ObjectType expectedType)
644
+ internal
645
+ view
646
+ returns (
647
+ NftId componentNftId,
648
+ IInstance instance
649
+ )
650
+ {
651
+ return _getAndVerifyComponent(expectedType, true); // only active
652
+ }
653
+
654
+ function _getAndVerifyComponent(ObjectType expectedType, bool isActive)
655
+ internal
656
+ view
657
+ returns (
658
+ NftId componentNftId,
659
+ IInstance instance
660
+ )
661
+ {
662
+ IRegistry.ObjectInfo memory info;
663
+ address instanceAddress;
664
+
665
+ if (expectedType != COMPONENT()) {
666
+ (info, instanceAddress) = ContractLib.getAndVerifyComponent(
667
+ getRegistry(),
668
+ msg.sender, // caller
669
+ expectedType,
670
+ isActive);
671
+ } else {
672
+ (info, instanceAddress) = ContractLib.getAndVerifyAnyComponent(
673
+ getRegistry(),
674
+ msg.sender,
675
+ isActive);
676
+ }
677
+
678
+ // get component nft id and instance
679
+ componentNftId = info.nftId;
680
+ instance = IInstance(instanceAddress);
681
+ }
741
682
 
742
683
  function _getDomain() internal pure virtual override returns(ObjectType) {
743
684
  return COMPONENT();
744
685
  }
686
+
687
+ function _checkSupportsInterface(address component) internal view {
688
+ if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
689
+ revert ErrorComponentServiceNotInstanceLinkedComponent(component);
690
+ }
691
+ }
745
692
  }