@etherisc/gif-next 0.0.2-89c8f37-711 → 0.0.2-8a72793-100

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