@etherisc/gif-next 0.0.2-e876b87-961 → 0.0.2-e8a628e-326

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