@etherisc/gif-next 0.0.2-9346c9b-763 → 0.0.2-9356555-232

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