@etherisc/gif-next 0.0.2-acc7efa-771 → 0.0.2-ad346f1-601

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