@etherisc/gif-next 0.0.2-d9bed37-033 → 0.0.2-d9d5e42-801

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