@etherisc/gif-next 0.0.2-e79d227-681 → 0.0.2-e7a5428-226

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