@etherisc/gif-next 0.0.2-82c6d88-499 → 0.0.2-8311e70-020

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