@etherisc/gif-next 0.0.2-d5fac82-078 → 0.0.2-d62f29e-108

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 (509) hide show
  1. package/README.md +49 -4
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1253 -0
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
  5. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
  7. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +358 -0
  8. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
  9. package/artifacts/contracts/{instance/module/ISetup.sol/ISetup.json → authorization/IAccess.sol/IAccess.json} +2 -2
  10. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +1032 -0
  12. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
  13. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +258 -0
  14. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +290 -0
  16. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  17. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +148 -0
  18. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +4 -0
  19. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +390 -0
  20. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  21. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +190 -0
  22. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
  23. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1489 -0
  24. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
  25. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +410 -0
  26. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +172 -408
  28. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +272 -335
  30. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +75 -88
  32. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +169 -263
  34. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +186 -94
  36. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  37. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  38. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +71 -72
  40. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +190 -49
  42. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  43. package/artifacts/contracts/instance/Instance.sol/Instance.json +81 -141
  44. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1158 -278
  46. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
  47. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +592 -311
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +271 -109
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +65 -58
  54. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1113 -353
  56. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +318 -0
  58. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  60. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  61. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  62. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +4 -0
  63. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +182 -0
  64. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  65. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
  66. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +21 -0
  68. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  73. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +4 -0
  74. package/artifacts/contracts/mock/Dip.sol/Dip.json +376 -0
  75. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
  76. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1126 -0
  77. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
  78. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
  79. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  80. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +52 -0
  81. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  82. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +765 -0
  83. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  84. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +675 -0
  85. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  86. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +1018 -0
  87. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  88. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +1034 -0
  89. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  90. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +730 -0
  91. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
  92. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1395 -0
  93. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
  94. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
  95. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  96. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +395 -228
  97. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  98. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +121 -66
  99. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  100. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +204 -32
  101. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  102. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +180 -366
  103. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  104. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +340 -209
  105. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  106. package/artifacts/contracts/pool/Pool.sol/Pool.json +220 -465
  107. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  108. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +395 -445
  109. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +51 -84
  111. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  112. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +88 -173
  113. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +56 -53
  115. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
  116. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1243 -0
  117. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
  118. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
  119. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  120. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +234 -202
  121. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +79 -72
  123. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  124. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +25 -1
  125. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  126. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +134 -1
  127. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  128. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +217 -73
  129. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  130. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +83 -44
  131. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  132. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +270 -183
  133. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  134. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +15 -57
  135. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  136. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +241 -307
  137. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +67 -108
  139. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  140. package/artifacts/contracts/product/PricingService.sol/PricingService.json +184 -235
  141. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  142. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -73
  143. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  144. package/artifacts/contracts/product/Product.sol/Product.json +336 -352
  145. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  146. package/artifacts/contracts/product/RiskService.sol/RiskService.json +695 -0
  147. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  148. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +702 -0
  149. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  150. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  151. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  152. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +107 -33
  153. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  154. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +42 -73
  155. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  156. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  157. package/artifacts/contracts/registry/Registry.sol/Registry.json +360 -48
  158. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  159. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1557 -116
  160. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  161. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +198 -28
  162. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  163. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +45 -42
  164. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
  165. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +164 -0
  166. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  167. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1159 -0
  168. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  169. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +214 -0
  170. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  171. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +314 -136
  172. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  173. package/artifacts/contracts/shared/Component.sol/Component.json +99 -159
  174. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  175. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +1236 -206
  176. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +4 -0
  177. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +804 -0
  178. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +4 -0
  179. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +539 -0
  180. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  181. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +76 -107
  182. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +4 -0
  183. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +1033 -0
  184. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +4 -0
  185. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +700 -0
  186. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  187. package/artifacts/contracts/{instance/base → shared}/IKeyValueStore.sol/IKeyValueStore.json +12 -16
  188. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  189. package/artifacts/contracts/{instance/base → shared}/ILifecycle.sol/ILifecycle.json +1 -6
  190. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  191. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +7 -1
  192. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  193. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +21 -3
  194. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  195. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +7 -1
  196. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  197. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IService.sol/IService.json +20 -1
  199. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +4 -0
  200. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +39 -0
  201. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  202. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +73 -0
  203. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +4 -0
  204. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +940 -0
  205. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  206. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +497 -0
  207. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  208. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +133 -0
  209. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  210. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
  211. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  212. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +33 -20
  213. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  214. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +31 -13
  215. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  216. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +17 -22
  217. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  218. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  219. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  220. package/artifacts/contracts/shared/Service.sol/Service.json +16 -16
  221. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  222. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +362 -7
  223. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  224. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  225. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +4 -0
  226. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1438 -0
  227. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  228. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +566 -54
  229. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  230. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +440 -0
  231. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +4 -0
  232. package/artifacts/contracts/staking/Staking.sol/Staking.json +1975 -0
  233. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
  234. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +164 -0
  235. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +4 -0
  236. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +765 -0
  237. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +4 -0
  238. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +592 -0
  239. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  240. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +657 -100
  241. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  242. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +65 -46
  243. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  244. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2242 -0
  245. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +4 -0
  246. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +607 -0
  247. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  248. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  249. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  250. package/artifacts/contracts/type/Amount.sol/AmountLib.json +97 -4
  251. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +53 -2
  253. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  254. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +4 -4
  255. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  256. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  257. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/Fee.sol/FeeLib.json +39 -34
  259. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  260. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  261. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +47 -4
  263. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  264. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  265. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +149 -2
  267. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +4 -4
  269. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  271. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  272. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  273. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +4 -4
  275. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  276. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +219 -6
  277. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  278. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +124 -2
  279. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  280. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  281. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  282. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  283. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  284. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  285. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  286. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  287. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +36 -4
  289. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  291. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +58 -2
  293. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  295. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  297. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  298. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  299. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  300. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +617 -0
  301. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  302. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  303. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  304. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  305. package/contracts/authorization/AccessAdmin.sol +591 -0
  306. package/contracts/authorization/AccessManagerCloneable.sol +16 -0
  307. package/contracts/authorization/Authorization.sol +217 -0
  308. package/contracts/authorization/IAccess.sol +48 -0
  309. package/contracts/authorization/IAccessAdmin.sol +136 -0
  310. package/contracts/authorization/IAuthorization.sol +54 -0
  311. package/contracts/authorization/IModuleAuthorization.sol +21 -0
  312. package/contracts/authorization/IServiceAuthorization.sol +38 -0
  313. package/contracts/authorization/ModuleAuthorization.sol +78 -0
  314. package/contracts/authorization/ServiceAuthorization.sol +90 -0
  315. package/contracts/distribution/BasicDistribution.sol +138 -0
  316. package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
  317. package/contracts/distribution/Distribution.sol +162 -152
  318. package/contracts/distribution/DistributionService.sol +129 -144
  319. package/contracts/distribution/DistributionServiceManager.sol +2 -5
  320. package/contracts/distribution/IDistributionComponent.sol +28 -47
  321. package/contracts/distribution/IDistributionService.sol +24 -10
  322. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  323. package/contracts/instance/IInstance.sol +24 -38
  324. package/contracts/instance/IInstanceService.sol +44 -25
  325. package/contracts/instance/Instance.sol +111 -112
  326. package/contracts/instance/InstanceAdmin.sol +213 -282
  327. package/contracts/instance/InstanceAuthorizationV3.sol +204 -0
  328. package/contracts/instance/InstanceReader.sol +114 -52
  329. package/contracts/instance/InstanceService.sol +280 -111
  330. package/contracts/instance/InstanceServiceManager.sol +2 -6
  331. package/contracts/instance/InstanceStore.sol +142 -66
  332. package/contracts/instance/base/BalanceStore.sol +123 -0
  333. package/contracts/instance/base/Cloneable.sol +2 -25
  334. package/contracts/instance/base/ObjectCounter.sol +21 -0
  335. package/contracts/instance/base/ObjectLifecycle.sol +111 -0
  336. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +11 -14
  337. package/contracts/instance/module/IAccess.sol +2 -0
  338. package/contracts/instance/module/IBundle.sol +1 -4
  339. package/contracts/instance/module/IComponents.sol +15 -10
  340. package/contracts/instance/module/IDistribution.sol +0 -1
  341. package/contracts/instance/module/IPolicy.sol +30 -23
  342. package/contracts/mock/Dip.sol +26 -0
  343. package/contracts/oracle/BasicOracle.sol +48 -0
  344. package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
  345. package/contracts/oracle/IOracle.sol +36 -0
  346. package/contracts/oracle/IOracleComponent.sol +33 -0
  347. package/contracts/oracle/IOracleService.sol +65 -0
  348. package/contracts/oracle/Oracle.sol +167 -0
  349. package/contracts/oracle/OracleService.sol +279 -0
  350. package/contracts/oracle/OracleServiceManager.sol +39 -0
  351. package/contracts/pool/BasicPool.sol +166 -0
  352. package/contracts/pool/BasicPoolAuthorization.sol +58 -0
  353. package/contracts/pool/BundleService.sol +254 -200
  354. package/contracts/pool/BundleServiceManager.sol +2 -5
  355. package/contracts/pool/IBundleService.sol +35 -19
  356. package/contracts/pool/IPoolComponent.sol +10 -66
  357. package/contracts/pool/IPoolService.sol +79 -33
  358. package/contracts/pool/Pool.sol +168 -144
  359. package/contracts/pool/PoolService.sol +317 -212
  360. package/contracts/pool/PoolServiceManager.sol +2 -5
  361. package/contracts/product/ApplicationService.sol +139 -77
  362. package/contracts/product/ApplicationServiceManager.sol +2 -2
  363. package/contracts/product/BasicProduct.sol +53 -0
  364. package/contracts/product/BasicProductAuthorization.sol +43 -0
  365. package/contracts/product/ClaimService.sol +134 -90
  366. package/contracts/product/ClaimServiceManager.sol +2 -2
  367. package/contracts/product/IApplicationService.sol +2 -1
  368. package/contracts/product/IClaimService.sol +32 -3
  369. package/contracts/product/IPolicyService.sol +29 -36
  370. package/contracts/product/IPricingService.sol +10 -8
  371. package/contracts/product/IProductComponent.sol +10 -12
  372. package/contracts/product/{IProductService.sol → IRiskService.sol} +2 -9
  373. package/contracts/product/PolicyService.sol +385 -189
  374. package/contracts/product/PolicyServiceManager.sol +2 -5
  375. package/contracts/product/PricingService.sol +97 -72
  376. package/contracts/product/PricingServiceManager.sol +2 -5
  377. package/contracts/product/Product.sol +176 -130
  378. package/contracts/product/RiskService.sol +97 -0
  379. package/contracts/product/RiskServiceManager.sol +39 -0
  380. package/contracts/registry/ChainNft.sol +8 -1
  381. package/contracts/registry/IRegistry.sol +41 -19
  382. package/contracts/registry/IRegistryService.sol +15 -5
  383. package/contracts/registry/Registry.sol +222 -111
  384. package/contracts/registry/RegistryAdmin.sol +308 -77
  385. package/contracts/registry/RegistryService.sol +52 -32
  386. package/contracts/registry/RegistryServiceManager.sol +4 -11
  387. package/contracts/registry/ReleaseLifecycle.sol +27 -0
  388. package/contracts/registry/ReleaseRegistry.sol +485 -0
  389. package/contracts/registry/ServiceAuthorizationV3.sol +199 -0
  390. package/contracts/registry/TokenRegistry.sol +261 -64
  391. package/contracts/shared/Component.sol +141 -144
  392. package/contracts/shared/ComponentService.sol +590 -90
  393. package/contracts/shared/ComponentServiceManager.sol +35 -0
  394. package/contracts/shared/ComponentVerifyingService.sol +117 -0
  395. package/contracts/shared/IComponent.sol +21 -41
  396. package/contracts/shared/IComponentService.sol +108 -0
  397. package/contracts/shared/IInstanceLinkedComponent.sol +49 -0
  398. package/contracts/{instance/base → shared}/IKeyValueStore.sol +7 -6
  399. package/contracts/{instance/base → shared}/ILifecycle.sol +3 -4
  400. package/contracts/shared/INftOwnable.sol +1 -1
  401. package/contracts/shared/IPolicyHolder.sol +6 -1
  402. package/contracts/shared/IService.sol +9 -2
  403. package/contracts/shared/InitializableCustom.sol +177 -0
  404. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +2 -2
  405. package/contracts/shared/InstanceLinkedComponent.sol +172 -0
  406. package/contracts/{instance/base → shared}/KeyValueStore.sol +36 -74
  407. package/contracts/shared/Lifecycle.sol +77 -0
  408. package/contracts/shared/NftIdSet.sol +65 -0
  409. package/contracts/shared/NftOwnable.sol +6 -16
  410. package/contracts/shared/PolicyHolder.sol +22 -17
  411. package/contracts/shared/Registerable.sol +2 -2
  412. package/contracts/shared/Service.sol +32 -22
  413. package/contracts/shared/TokenHandler.sol +112 -8
  414. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  415. package/contracts/staking/IStaking.sol +168 -0
  416. package/contracts/staking/IStakingService.sol +105 -47
  417. package/contracts/staking/StakeManagerLib.sol +224 -0
  418. package/contracts/staking/Staking.sol +498 -0
  419. package/contracts/staking/StakingLifecycle.sol +23 -0
  420. package/contracts/staking/StakingManager.sol +50 -0
  421. package/contracts/staking/StakingReader.sol +183 -0
  422. package/contracts/staking/StakingService.sol +283 -45
  423. package/contracts/staking/StakingServiceManager.sol +9 -5
  424. package/contracts/staking/StakingStore.sol +605 -0
  425. package/contracts/staking/TargetManagerLib.sol +211 -0
  426. package/contracts/type/AddressSet.sol +1 -1
  427. package/contracts/type/Amount.sol +29 -3
  428. package/contracts/type/Blocknumber.sol +26 -3
  429. package/contracts/type/Fee.sol +17 -16
  430. package/contracts/type/NftId.sol +14 -16
  431. package/contracts/type/NftIdSet.sol +1 -1
  432. package/contracts/type/ObjectType.sol +175 -62
  433. package/contracts/type/Referral.sol +2 -1
  434. package/contracts/type/RequestId.sol +75 -0
  435. package/contracts/type/RiskId.sol +1 -1
  436. package/contracts/type/RoleId.sol +104 -69
  437. package/contracts/type/Seconds.sol +48 -1
  438. package/contracts/type/Selector.sol +102 -0
  439. package/contracts/type/StateId.sol +28 -2
  440. package/contracts/type/String.sol +53 -0
  441. package/contracts/type/Timestamp.sol +17 -3
  442. package/contracts/type/UFixed.sol +34 -9
  443. package/contracts/type/Version.sol +4 -2
  444. package/contracts/{shared → upgradeability}/ProxyManager.sol +5 -7
  445. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  446. package/package.json +8 -5
  447. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  448. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -778
  449. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
  450. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -188
  451. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
  452. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  453. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
  454. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +0 -581
  455. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +0 -4
  456. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +0 -194
  457. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  458. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -256
  459. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +0 -4
  460. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +0 -4
  461. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +0 -10
  462. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  463. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  464. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -883
  465. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  466. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -711
  467. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  468. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1003
  469. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +0 -4
  470. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +0 -1193
  471. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +0 -4
  472. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +0 -1715
  473. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +0 -4
  474. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +0 -1728
  475. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +0 -4
  476. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +0 -1747
  477. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +0 -4
  478. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +0 -1765
  479. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  480. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  481. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  482. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
  483. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +0 -4
  484. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +0 -1562
  485. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +0 -4
  486. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +0 -1594
  487. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  488. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  489. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -630
  490. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  491. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
  492. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  493. package/contracts/instance/InstanceAuthorizationsLib.sol +0 -320
  494. package/contracts/instance/base/Lifecycle.sol +0 -121
  495. package/contracts/instance/module/ISetup.sol +0 -33
  496. package/contracts/instance/module/ITreasury.sol +0 -23
  497. package/contracts/product/ProductService.sol +0 -212
  498. package/contracts/product/ProductServiceManager.sol +0 -42
  499. package/contracts/registry/ReleaseManager.sol +0 -463
  500. package/contracts/shared/AccessManagerCustom.sol +0 -736
  501. package/contracts/shared/AccessManagerExtended.sol +0 -469
  502. package/contracts/shared/AccessManagerExtendedInitializeable.sol +0 -13
  503. package/contracts/shared/AccessManagerExtendedWithDisable.sol +0 -125
  504. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +0 -14
  505. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +0 -13
  506. package/contracts/shared/IAccessManagerExtended.sol +0 -74
  507. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +0 -17
  508. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  509. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -1,52 +1,43 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {Pool} from "./Pool.sol";
5
- import {IRegistry} from "../registry/IRegistry.sol";
6
- import {IInstance} from "../instance/IInstance.sol";
7
4
  import {IBundle} from "../instance/module/IBundle.sol";
8
- import {TokenHandler} from "../instance/module/ITreasury.sol";
5
+ import {IBundleService} from "./IBundleService.sol";
9
6
  import {IComponents} from "../instance/module/IComponents.sol";
7
+ import {IComponentService} from "../shared/IComponentService.sol";
8
+ import {IInstance} from "../instance/IInstance.sol";
9
+ import {IInstanceService} from "../instance/IInstanceService.sol";
10
10
  import {IPolicy} from "../instance/module/IPolicy.sol";
11
-
12
- import {IVersionable} from "../shared/IVersionable.sol";
13
- import {Versionable} from "../shared/Versionable.sol";
14
- import {INftOwnable} from "../shared/INftOwnable.sol";
11
+ import {IPoolService} from "./IPoolService.sol";
12
+ import {IRegistry} from "../registry/IRegistry.sol";
13
+ import {IRegistryService} from "../registry/IRegistryService.sol";
14
+ import {IStaking} from "../staking/IStaking.sol";
15
15
 
16
16
  import {Amount, AmountLib} from "../type/Amount.sol";
17
17
  import {Fee, FeeLib} from "../type/Fee.sol";
18
- import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
19
- import {ObjectType, POOL, BUNDLE} from "../type/ObjectType.sol";
20
- import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../type/RoleId.sol";
18
+ import {NftId} from "../type/NftId.sol";
19
+ import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
20
+ import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
21
21
  import {Fee, FeeLib} from "../type/Fee.sol";
22
- import {Version, VersionLib} from "../type/Version.sol";
23
- import {KEEP_STATE, StateId} from "../type/StateId.sol";
22
+ import {KEEP_STATE} from "../type/StateId.sol";
24
23
  import {Seconds} from "../type/Seconds.sol";
25
- import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
26
- import {Version, VersionLib} from "../type/Version.sol";
27
-
28
- import {IService} from "../shared/IService.sol";
29
- import {Service} from "../shared/Service.sol";
30
- import {BundleManager} from "../instance/BundleManager.sol";
31
- import {ComponentService} from "../shared/ComponentService.sol";
32
- import {IBundleService} from "./IBundleService.sol";
33
- import {IPoolService} from "./IPoolService.sol";
34
- import {IRegistryService} from "../registry/IRegistryService.sol";
35
- import {InstanceService} from "../instance/InstanceService.sol";
24
+ import {UFixed} from "../type/UFixed.sol";
25
+ import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
36
26
  import {InstanceReader} from "../instance/InstanceReader.sol";
37
- import {IComponent} from "../shared/IComponent.sol";
38
- import {IPoolComponent} from "./IPoolComponent.sol";
27
+ import {InstanceStore} from "../instance/InstanceStore.sol";
39
28
 
40
29
  string constant POOL_SERVICE_NAME = "PoolService";
41
30
 
42
31
  contract PoolService is
43
- ComponentService,
32
+ ComponentVerifyingService,
44
33
  IPoolService
45
34
  {
46
- using NftIdLib for NftId;
47
- using AmountLib for Amount;
48
-
49
35
  IBundleService internal _bundleService;
36
+ IComponentService internal _componentService;
37
+ IInstanceService private _instanceService;
38
+ IRegistryService private _registryService;
39
+
40
+ IStaking private _staking;
50
41
 
51
42
  function _initialize(
52
43
  address owner,
@@ -63,85 +54,38 @@ contract PoolService is
63
54
  ) = abi.decode(data, (address, address, address));
64
55
 
65
56
  initializeService(registryAddress, authority, owner);
66
- _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart()));
67
- registerInterface(type(IPoolService).interfaceId);
68
- }
69
57
 
70
- function getDomain() public pure override returns(ObjectType) {
71
- return POOL();
72
- }
58
+ _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
59
+ _bundleService = IBundleService(_getServiceAddress(BUNDLE()));
60
+ _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
61
+ _componentService = IComponentService(_getServiceAddress(COMPONENT()));
73
62
 
74
- function register(address poolAddress)
75
- external
76
- returns(NftId poolNftId)
77
- {
78
- (
79
- IComponent component,
80
- address owner,
81
- IInstance instance,
82
- NftId instanceNftId
83
- ) = _checkComponentForRegistration(
84
- poolAddress,
85
- POOL(),
86
- POOL_OWNER_ROLE());
87
-
88
- IPoolComponent pool = IPoolComponent(poolAddress);
89
- IRegistry.ObjectInfo memory registryInfo = getRegistryService().registerPool(pool, owner);
90
- pool.linkToRegisteredNftId();
91
- poolNftId = registryInfo.nftId;
92
-
93
- // amend component info with pool specific token handler
94
- IComponents.ComponentInfo memory componentInfo = pool.getComponentInfo();
95
- componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
96
-
97
- // save amended component info with instance
98
- instance.getInstanceStore().createPoolSetup(poolNftId, componentInfo);
99
-
100
- bytes4[][] memory selectors = new bytes4[][](2);
101
- selectors[0] = new bytes4[](1);
102
- selectors[1] = new bytes4[](1);
103
-
104
- selectors[0][0] = IPoolComponent.setFees.selector;
105
- selectors[1][0] = IPoolComponent.verifyApplication.selector;
106
-
107
- RoleId[] memory roles = new RoleId[](2);
108
- roles[0] = POOL_OWNER_ROLE();
109
- roles[1] = POLICY_SERVICE_ROLE();
110
-
111
- getInstanceService().createGifTarget(
112
- instanceNftId,
113
- poolAddress,
114
- pool.getName(),
115
- selectors,
116
- roles);
117
- }
63
+ _staking = IStaking(getRegistry().getStakingAddress());
118
64
 
65
+ registerInterface(type(IPoolService).interfaceId);
66
+ }
119
67
 
120
- function setMaxCapitalAmount(Amount maxCapitalAmount)
68
+ /// @inheritdoc IPoolService
69
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
121
70
  external
122
71
  virtual
123
72
  {
124
- /*
125
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
73
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
126
74
  InstanceReader instanceReader = instance.getInstanceReader();
75
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
127
76
 
128
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
129
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
130
- Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
77
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
78
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
79
+ instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
131
80
 
132
- poolInfo.maxCapitalAmount = maxCapitalAmount;
133
- componentInfo.data = abi.encode(poolInfo);
134
- instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
135
-
136
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
137
- */
81
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
138
82
  }
139
83
 
140
84
  function setBundleOwnerRole(RoleId bundleOwnerRole)
141
85
  external
142
86
  virtual
143
87
  {
144
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
88
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
145
89
  InstanceReader instanceReader = instance.getInstanceReader();
146
90
 
147
91
  IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
@@ -153,40 +97,15 @@ contract PoolService is
153
97
  }
154
98
 
155
99
  poolInfo.bundleOwnerRole = bundleOwnerRole;
156
- componentInfo.data = abi.encode(poolInfo);
157
- instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
100
+ instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
158
101
 
159
102
  emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
160
103
  }
161
104
 
162
-
163
- function setFees(
164
- Fee memory poolFee,
165
- Fee memory stakingFee,
166
- Fee memory performanceFee
167
- )
168
- external
169
- virtual
170
- {
171
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
172
- InstanceReader instanceReader = instance.getInstanceReader();
173
-
174
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
175
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
176
-
177
- poolInfo.poolFee = poolFee;
178
- poolInfo.stakingFee = stakingFee;
179
- poolInfo.performanceFee = performanceFee;
180
- componentInfo.data = abi.encode(poolInfo);
181
- instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
182
-
183
- // TODO add logging
184
- }
185
-
105
+ /// @inheritdoc IPoolService
186
106
  function createBundle(
187
- address owner, // initial bundle owner
107
+ address bundleOwner, // initial bundle owner
188
108
  Fee memory fee, // fees deducted from premium that go to bundle owner
189
- Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
190
109
  Seconds lifetime, // initial duration for which new policies are covered
191
110
  bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
192
111
  )
@@ -194,53 +113,182 @@ contract PoolService is
194
113
  virtual
195
114
  returns(NftId bundleNftId)
196
115
  {
197
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
198
- InstanceReader instanceReader = instance.getInstanceReader();
199
-
200
- // pool fee book keeping
201
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
202
- Amount stakingNetAmount = _processStakingFees(componentInfo, stakingAmount);
116
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
203
117
 
118
+ // create the empty bundle
204
119
  bundleNftId = _bundleService.create(
205
120
  instance,
206
121
  poolNftId,
207
- owner,
122
+ bundleOwner,
208
123
  fee,
209
- stakingNetAmount,
124
+ AmountLib.zero(),
210
125
  lifetime,
211
126
  filter);
212
127
 
213
- // collect tokens from bundle owner
214
- _transferStakingAmount(componentInfo, owner, stakingAmount);
215
-
216
128
  emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
217
129
  }
218
130
 
131
+ function _getStakingFee(InstanceReader instanceReader, NftId poolNftId)
132
+ internal
133
+ virtual
134
+ view
135
+ returns (Fee memory stakingFee)
136
+ {
137
+ NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
138
+ return instanceReader.getProductInfo(productNftId).stakingFee;
139
+ }
219
140
 
220
141
  function closeBundle(NftId bundleNftId)
221
142
  external
222
143
  virtual
223
144
  {
224
- (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
145
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
225
146
 
226
- // TODO book keeping for pool collateral released outside of retention level
147
+ // TODO get performance fee for pool (#477)
227
148
 
228
149
  // releasing collateral in bundle
229
- _bundleService.close(instance, bundleNftId);
230
-
231
- // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
150
+ (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
232
151
 
152
+ _componentService.decreasePoolBalance(
153
+ instance.getInstanceStore(),
154
+ poolNftId,
155
+ unstakedAmount + feeAmount,
156
+ AmountLib.zero());
157
+
233
158
  emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
159
+
160
+ if ((unstakedAmount + feeAmount).gtz()){
161
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
162
+ poolComponentInfo.tokenHandler.distributeTokens(
163
+ poolComponentInfo.wallet,
164
+ getRegistry().ownerOf(bundleNftId),
165
+ unstakedAmount + feeAmount);
166
+ }
167
+ }
168
+
169
+ /// @inheritdoc IPoolService
170
+ function stake(NftId bundleNftId, Amount amount)
171
+ external
172
+ virtual
173
+ // TODO: restricted() (once #462 is done)
174
+ returns(Amount netAmount)
175
+ {
176
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
177
+ InstanceReader instanceReader = instance.getInstanceReader();
178
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
179
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
180
+
181
+ if (bundleInfo.poolNftId != poolNftId) {
182
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
183
+ }
184
+
185
+ {
186
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
187
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
188
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
189
+ }
190
+ }
191
+
192
+ // calculate fees
193
+ Amount feeAmount;
194
+ (
195
+ feeAmount,
196
+ netAmount
197
+ ) = FeeLib.calculateFee(
198
+ _getStakingFee(instanceReader, poolNftId),
199
+ amount);
200
+
201
+ // do all the bookkeeping
202
+ _componentService.increasePoolBalance(
203
+ instance.getInstanceStore(),
204
+ poolNftId,
205
+ netAmount,
206
+ feeAmount);
207
+
208
+ _bundleService.stake(instance, bundleNftId, netAmount);
209
+
210
+ // collect tokens from bundle owner
211
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
212
+ emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
213
+
214
+ // TODO only collect staking token when pool is not externally managed
215
+ _collectStakingAmount(
216
+ instanceReader,
217
+ poolNftId,
218
+ bundleOwner,
219
+ amount);
220
+ }
221
+
222
+ /// @inheritdoc IPoolService
223
+ function unstake(NftId bundleNftId, Amount amount)
224
+ external
225
+ virtual
226
+ // TODO: restricted() (once #462 is done)
227
+ returns(Amount netAmount)
228
+ {
229
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
230
+ InstanceReader instanceReader = instance.getInstanceReader();
231
+ InstanceStore instanceStore = instance.getInstanceStore();
232
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
233
+
234
+ if (bundleInfo.poolNftId != poolNftId) {
235
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
236
+ }
237
+
238
+ // call bundle service for bookkeeping and additional checks
239
+ Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
240
+
241
+ // Important: from now on work only with unstakedAmount as it is the only reliable amount.
242
+ // if amount was max, this was set to the available amount
243
+
244
+ // TODO: handle performance fees (issue #477)
245
+
246
+ // update pool bookkeeping - performance fees stay in the pool, but as fees
247
+ _componentService.decreasePoolBalance(
248
+ instanceStore,
249
+ poolNftId,
250
+ unstakedAmount,
251
+ AmountLib.zero());
252
+
253
+ IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
254
+ address poolWallet = poolComponentInfo.wallet;
255
+ // transfer amount to bundle owner
256
+ address owner = getRegistry().ownerOf(bundleNftId);
257
+ emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
258
+ poolComponentInfo.tokenHandler.distributeTokens(
259
+ poolWallet,
260
+ owner,
261
+ unstakedAmount);
262
+ return unstakedAmount;
263
+ }
264
+
265
+
266
+ function fundPoolWallet(NftId poolNftId, Amount amount)
267
+ external
268
+ virtual
269
+ restricted()
270
+ {
271
+ // TODO check that poolNftId is externally managed
272
+ // TODO implement
273
+ }
274
+
275
+
276
+ function defundPoolWallet(NftId poolNftId, Amount amount)
277
+ external
278
+ virtual
279
+ restricted()
280
+ {
281
+ // TODO check that poolNftId is externally managed
282
+ // TODO implement
234
283
  }
235
284
 
236
285
  function processSale(
237
286
  NftId bundleNftId,
238
- IPolicy.Premium memory premium,
239
- Amount actualAmountTransferred
287
+ IPolicy.PremiumInfo memory premium
240
288
  )
241
289
  external
242
290
  virtual
243
- restricted
291
+ restricted()
244
292
  {
245
293
  IRegistry registry = getRegistry();
246
294
  IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
@@ -248,92 +296,92 @@ contract PoolService is
248
296
  IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
249
297
  IInstance instance = IInstance(instanceObjectInfo.objectAddress);
250
298
 
251
- Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
252
- Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
253
- Amount expectedTransferAmount = AmountLib.toAmount(premium.netPremiumAmount) + poolFeeAmount + bundleFeeAmount;
254
- if (!(actualAmountTransferred == expectedTransferAmount)) {
255
- revert ErrorPoolServiceInvalidTransferAmount(expectedTransferAmount, actualAmountTransferred);
256
- }
257
-
258
- // update pool fee balance
259
- if (poolFeeAmount.gtz()) {
260
- IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolObjectInfo.nftId);
261
- poolComponentInfo.feeAmount = poolComponentInfo.feeAmount.add(poolFeeAmount);
262
- instance.getInstanceStore().updatePoolSetup(poolObjectInfo.nftId, poolComponentInfo, KEEP_STATE());
263
- }
264
-
265
- if (bundleFeeAmount.gtz()) {
266
- _bundleService.updateBundleFees(instance, bundleNftId, bundleFeeAmount);
267
- }
299
+ Amount poolFeeAmount = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
300
+ Amount bundleFeeAmount = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
301
+ Amount bundleNetAmount = premium.netPremiumAmount;
302
+
303
+ InstanceStore instanceStore = instance.getInstanceStore();
304
+ _componentService.increasePoolBalance(
305
+ instanceStore,
306
+ poolObjectInfo.nftId,
307
+ bundleNetAmount + bundleFeeAmount,
308
+ poolFeeAmount);
309
+
310
+ _componentService.increaseBundleBalance(
311
+ instanceStore,
312
+ bundleObjectInfo.nftId,
313
+ bundleNetAmount,
314
+ bundleFeeAmount);
268
315
  }
269
316
 
317
+
270
318
  function lockCollateral(
271
319
  IInstance instance,
320
+ address token,
272
321
  NftId productNftId,
273
322
  NftId applicationNftId,
274
- IPolicy.PolicyInfo memory applicationInfo,
275
- Amount premiumAmount // premium amount after product and distribution fees
323
+ NftId bundleNftId,
324
+ Amount sumInsuredAmount // premium amount after product and distribution fees
276
325
  )
277
326
  external
278
327
  virtual
279
- restricted
328
+ restricted()
329
+ returns (
330
+ Amount localCollateralAmount,
331
+ Amount totalCollateralAmount
332
+ )
280
333
  {
281
- InstanceReader instanceReader = instance.getInstanceReader();
282
- NftId poolNftId = instanceReader.getProductSetupInfo(productNftId).poolNftId;
283
- NftId bundleNftId = applicationInfo.bundleNftId;
284
-
285
- // TODO move this check to application creation and don't repeat this here
286
- // ensure that pool for bundle from application matches with pool for product of application
287
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
288
- if(bundleInfo.poolNftId != poolNftId) {
289
- revert ErrorPoolServiceBundlePoolMismatch(bundleInfo.poolNftId, poolNftId);
290
- }
291
-
292
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
293
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
294
-
295
- // TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
296
- Amount collateralAmount = applicationInfo.sumInsuredAmount;
297
-
298
- // TODO add correct net premium calculation (pool fee might be > 0)
299
- Amount premiumAfterPoolFeeAmount = premiumAmount;
300
-
301
- // lock collateral amount from involvedd bundle
334
+ (
335
+ localCollateralAmount,
336
+ totalCollateralAmount
337
+ ) = calculateRequiredCollateral(
338
+ instance.getInstanceReader(),
339
+ productNftId,
340
+ sumInsuredAmount);
341
+
342
+ // lock collateral amount from involved bundle
302
343
  _bundleService.lockCollateral(
303
344
  instance,
304
345
  applicationNftId,
305
346
  bundleNftId,
306
- collateralAmount,
307
- premiumAfterPoolFeeAmount);
308
-
309
- // also verify/confirm application by pool if necessary
310
- if(poolInfo.isVerifyingApplications) {
311
- address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
312
- IPoolComponent(poolAddress).verifyApplication(
313
- applicationNftId,
314
- applicationInfo.applicationData,
315
- bundleNftId,
316
- bundleInfo.filter,
317
- collateralAmount);
347
+ localCollateralAmount);
348
+
349
+ // update value locked with staking service
350
+ _staking.increaseTotalValueLocked(
351
+ instance.getNftId(),
352
+ token,
353
+ totalCollateralAmount);
354
+
355
+ // hierarhical riskpool setup
356
+ // TODO loop in with pool component to guarantee availability of external capital
357
+ if(totalCollateralAmount > localCollateralAmount) {
358
+
318
359
  }
319
360
  }
320
361
 
321
362
 
322
363
  function reduceCollateral(
323
364
  IInstance instance,
365
+ address token,
324
366
  NftId policyNftId,
325
367
  IPolicy.PolicyInfo memory policyInfo,
326
368
  Amount payoutAmount
327
369
  )
328
370
  external
329
371
  virtual
330
- restricted
372
+ restricted()
331
373
  {
332
374
  _bundleService.releaseCollateral(
333
375
  instance,
334
376
  policyNftId,
335
377
  policyInfo.bundleNftId,
336
378
  payoutAmount);
379
+
380
+ // update value locked with staking service
381
+ _staking.decreaseTotalValueLocked(
382
+ instance.getNftId(),
383
+ token,
384
+ payoutAmount);
337
385
  }
338
386
 
339
387
 
@@ -341,27 +389,84 @@ contract PoolService is
341
389
  /// may only be called by the policy service for unlocked pool components
342
390
  function releaseCollateral(
343
391
  IInstance instance,
392
+ address token,
344
393
  NftId policyNftId,
345
394
  IPolicy.PolicyInfo memory policyInfo
346
395
  )
347
396
  external
348
397
  virtual
349
- restricted
398
+ restricted()
350
399
  {
400
+ Amount remainingCollateralAmount = policyInfo.sumInsuredAmount - policyInfo.claimAmount;
401
+
351
402
  _bundleService.releaseCollateral(
352
403
  instance,
353
404
  policyNftId,
354
405
  policyInfo.bundleNftId,
355
- policyInfo.sumInsuredAmount - policyInfo.claimAmount);
406
+ remainingCollateralAmount);
356
407
 
357
408
  _bundleService.unlinkPolicy(
358
409
  instance,
359
410
  policyNftId);
411
+
412
+ // update value locked with staking service
413
+ _staking.decreaseTotalValueLocked(
414
+ instance.getNftId(),
415
+ token,
416
+ remainingCollateralAmount);
417
+ }
418
+
419
+
420
+ function calculateRequiredCollateral(
421
+ InstanceReader instanceReader,
422
+ NftId productNftId,
423
+ Amount sumInsuredAmount
424
+ )
425
+ public
426
+ view
427
+ returns(
428
+ Amount localCollateralAmount,
429
+ Amount totalCollateralAmount
430
+ )
431
+ {
432
+ NftId poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
433
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
434
+
435
+ (
436
+ localCollateralAmount,
437
+ totalCollateralAmount
438
+ ) = calculateRequiredCollateral(
439
+ poolInfo.collateralizationLevel,
440
+ poolInfo.retentionLevel,
441
+ sumInsuredAmount);
442
+ }
443
+
444
+
445
+ function calculateRequiredCollateral(
446
+ UFixed collateralizationLevel,
447
+ UFixed retentionLevel,
448
+ Amount sumInsuredAmount
449
+ )
450
+ public
451
+ pure
452
+ returns(
453
+ Amount localCollateralAmount,
454
+ Amount totalCollateralAmount
455
+ )
456
+ {
457
+ // TODO define if only applies to local collateral
458
+ // TODO add minimalistic implementation
459
+
460
+ // assumptions
461
+ // - collateralizationLevel == 1.0
462
+ // - retentionLevel == 1.0
463
+ localCollateralAmount = sumInsuredAmount;
464
+ totalCollateralAmount = localCollateralAmount;
360
465
  }
361
466
 
362
467
 
363
468
  function _processStakingFees(
364
- IComponents.ComponentInfo memory componentInfo,
469
+ Fee memory stakingFee,
365
470
  Amount stakingAmount
366
471
  )
367
472
  internal
@@ -370,7 +475,6 @@ contract PoolService is
370
475
  stakingNetAmount = stakingAmount;
371
476
 
372
477
  // check if any staking fees apply
373
- Fee memory stakingFee = abi.decode(componentInfo.data, (IComponents.PoolInfo)).stakingFee;
374
478
  if (FeeLib.gtz(stakingFee)) {
375
479
  (Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
376
480
  stakingNetAmount = netAmount;
@@ -380,25 +484,26 @@ contract PoolService is
380
484
  }
381
485
 
382
486
 
383
- // TODO create (I)TreasuryService that deals with all gif related token transfers
384
487
  /// @dev transfers the specified amount from the bundle owner to the pool's wallet
385
- function _transferStakingAmount(
386
- IComponents.ComponentInfo memory componentInfo,
488
+ function _collectStakingAmount(
489
+ InstanceReader instanceReader,
490
+ NftId poolNftId,
387
491
  address bundleOwner,
388
- Amount stakingAmount
492
+ Amount amount
389
493
  )
390
494
  internal
391
495
  {
392
- TokenHandler tokenHandler = componentInfo.tokenHandler;
393
- address poolWallet = componentInfo.wallet;
394
496
 
395
- if(stakingAmount.gtz()) {
396
- tokenHandler.transfer(
397
- bundleOwner,
398
- poolWallet,
399
- stakingAmount
400
- );
401
- }
497
+ // collecting investor token
498
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
499
+ address poolWallet = componentInfo.wallet;
500
+ componentInfo.tokenHandler.collectTokens(
501
+ bundleOwner,
502
+ poolWallet,
503
+ amount);
402
504
  }
403
505
 
506
+ function _getDomain() internal pure override returns(ObjectType) {
507
+ return POOL();
508
+ }
404
509
  }