@etherisc/gif-next 0.0.2-9e03baf-990 → 0.0.2-9e6b423-414

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