@etherisc/gif-next 0.0.2-b312c9a-831 → 0.0.2-b37fa8b-169

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