@etherisc/gif-next 0.0.2-78e428e-483 → 0.0.2-791e161-234

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 (500) hide show
  1. package/README.md +32 -8
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +158 -70
  10. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +233 -5
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
  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 +97 -37
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +163 -389
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +103 -321
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +227 -283
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +125 -119
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +115 -143
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +127 -64
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1475 -0
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2025 -0
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
  49. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  50. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1479 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +470 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  56. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1195 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1655 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +502 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2379 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +470 -0
  65. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  66. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +147 -42
  67. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  68. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +130 -61
  69. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  70. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +105 -103
  71. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  72. package/artifacts/contracts/instance/Instance.sol/Instance.json +165 -157
  73. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  74. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +317 -143
  75. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +58 -85
  77. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +732 -134
  79. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +131 -266
  81. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +102 -92
  83. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  84. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +349 -140
  85. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  86. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +810 -0
  87. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  88. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  89. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  90. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  91. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  92. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  93. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  94. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  95. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  96. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  97. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  98. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  99. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  100. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  101. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  102. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  103. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  104. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +114 -340
  105. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  106. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
  107. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  108. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  109. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +102 -130
  110. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  111. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +69 -11
  112. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  113. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +90 -308
  114. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  115. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +153 -190
  116. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  117. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +122 -88
  118. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  119. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +111 -329
  120. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  121. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
  122. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  123. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +158 -312
  124. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +111 -121
  126. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  127. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +74 -66
  128. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  129. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +124 -163
  130. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  131. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +303 -207
  132. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  133. package/artifacts/contracts/pool/Pool.sol/Pool.json +109 -338
  134. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  135. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +374 -448
  136. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  137. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +111 -117
  138. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  139. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +134 -184
  140. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  141. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +91 -93
  142. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  143. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +151 -323
  144. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  145. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
  146. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  147. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +435 -212
  148. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  149. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +145 -107
  150. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  151. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +94 -9
  152. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  153. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +318 -8
  154. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  155. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +307 -144
  156. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  157. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +136 -83
  158. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  159. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +161 -143
  160. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  161. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +57 -4
  162. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  163. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +365 -345
  164. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  165. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +129 -103
  166. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  167. package/artifacts/contracts/product/PricingService.sol/PricingService.json +227 -314
  168. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  169. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +120 -122
  170. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  171. package/artifacts/contracts/product/Product.sol/Product.json +149 -321
  172. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  173. package/artifacts/contracts/product/RiskService.sol/RiskService.json +637 -0
  174. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  175. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +724 -0
  176. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  177. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  178. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  179. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +315 -34
  180. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  181. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +144 -41
  182. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  183. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  184. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  185. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  186. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  187. package/artifacts/contracts/registry/Registry.sol/Registry.json +521 -95
  188. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  189. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +275 -160
  190. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  191. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +109 -292
  192. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  193. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +94 -80
  194. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  195. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1795 -0
  196. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  197. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  198. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  199. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +412 -246
  200. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  201. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  202. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  203. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +3 -3
  204. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  205. package/artifacts/contracts/shared/Component.sol/Component.json +76 -265
  206. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  207. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +473 -588
  208. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  209. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +130 -126
  210. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  211. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +57 -111
  212. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  213. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +541 -0
  214. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  215. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  216. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  217. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  218. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  219. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  220. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  221. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +89 -88
  222. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  223. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +448 -260
  224. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  225. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +102 -130
  226. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  227. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  228. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  229. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  230. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  231. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  232. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  233. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  234. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  235. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +148 -0
  236. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  237. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  238. package/artifacts/contracts/shared/IService.sol/IService.json +55 -2
  239. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  240. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  241. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  242. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +89 -307
  243. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  244. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  245. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  246. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  247. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  248. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  249. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  250. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  251. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  252. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  253. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  254. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +122 -97
  255. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  256. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  257. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  258. package/artifacts/contracts/shared/Service.sol/Service.json +57 -111
  259. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  260. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +697 -25
  261. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  262. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
  263. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  264. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  265. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  266. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +134 -125
  267. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  268. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +55 -23
  269. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  270. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +64 -94
  271. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  272. package/artifacts/contracts/staking/Staking.sol/Staking.json +210 -366
  273. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  274. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  275. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  276. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +122 -95
  277. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  278. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  279. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  280. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +100 -171
  281. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  282. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +98 -84
  283. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  284. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +170 -129
  285. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  286. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +55 -24
  287. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  288. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/Amount.sol/AmountLib.json +33 -9
  290. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  293. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  295. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Fee.sol/FeeLib.json +3 -3
  297. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  298. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  299. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  300. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  301. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  303. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  304. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  305. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  306. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  307. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  308. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  309. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  310. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  311. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  312. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  313. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  314. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +118 -5
  315. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  316. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +3 -3
  317. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  318. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  319. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  320. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  322. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  323. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  324. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  325. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  326. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  327. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +16 -3
  328. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  329. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  330. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  331. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +47 -2
  332. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  333. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  334. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +71 -70
  335. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  336. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  337. package/contracts/accounting/AccountingService.sol +262 -0
  338. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  339. package/contracts/accounting/IAccountingService.sol +45 -0
  340. package/contracts/authorization/AccessAdmin.sol +192 -124
  341. package/contracts/authorization/AccessManagerCloneable.sol +136 -3
  342. package/contracts/authorization/Authorization.sol +111 -40
  343. package/contracts/authorization/IAccess.sol +1 -0
  344. package/contracts/authorization/IAccessAdmin.sol +10 -6
  345. package/contracts/authorization/IAuthorization.sol +13 -7
  346. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  347. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  348. package/contracts/distribution/BasicDistribution.sol +8 -7
  349. package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
  350. package/contracts/distribution/Distribution.sol +33 -41
  351. package/contracts/distribution/DistributionService.sol +109 -89
  352. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  353. package/contracts/distribution/IDistributionComponent.sol +1 -1
  354. package/contracts/distribution/IDistributionService.sol +14 -11
  355. package/contracts/examples/fire/DamageLevel.sol +59 -0
  356. package/contracts/examples/fire/FirePool.sol +90 -0
  357. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  358. package/contracts/examples/fire/FireProduct.sol +436 -0
  359. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  360. package/contracts/examples/fire/FireUSD.sol +26 -0
  361. package/contracts/examples/unpermissioned/SimpleDistribution.sol +57 -0
  362. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  363. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  364. package/contracts/examples/unpermissioned/SimplePool.sol +107 -0
  365. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  366. package/contracts/examples/unpermissioned/SimpleProduct.sol +366 -0
  367. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  368. package/contracts/instance/BundleSet.sol +38 -34
  369. package/contracts/instance/IInstance.sol +16 -36
  370. package/contracts/instance/IInstanceService.sol +9 -29
  371. package/contracts/instance/Instance.sol +47 -66
  372. package/contracts/instance/InstanceAdmin.sol +133 -73
  373. package/contracts/instance/InstanceAuthorizationV3.sol +53 -34
  374. package/contracts/instance/InstanceReader.sol +195 -27
  375. package/contracts/instance/InstanceService.sol +125 -164
  376. package/contracts/instance/InstanceServiceManager.sol +6 -7
  377. package/contracts/instance/InstanceStore.sol +11 -1
  378. package/contracts/instance/RiskSet.sol +117 -0
  379. package/contracts/instance/base/ObjectCounter.sol +1 -2
  380. package/contracts/instance/base/ObjectLifecycle.sol +10 -4
  381. package/contracts/instance/base/ObjectSet.sol +24 -25
  382. package/contracts/instance/module/IComponents.sol +11 -8
  383. package/contracts/instance/module/IPolicy.sol +26 -25
  384. package/contracts/instance/module/IRisk.sol +3 -0
  385. package/contracts/oracle/BasicOracle.sol +0 -1
  386. package/contracts/oracle/IOracleService.sol +2 -1
  387. package/contracts/oracle/Oracle.sol +7 -17
  388. package/contracts/oracle/OracleService.sol +112 -81
  389. package/contracts/oracle/OracleServiceManager.sol +6 -6
  390. package/contracts/pool/BasicPool.sol +33 -24
  391. package/contracts/pool/BasicPoolAuthorization.sol +13 -3
  392. package/contracts/pool/BundleService.sol +83 -109
  393. package/contracts/pool/BundleServiceManager.sol +6 -6
  394. package/contracts/pool/IBundleService.sol +4 -18
  395. package/contracts/pool/IPoolComponent.sol +19 -15
  396. package/contracts/pool/IPoolService.sol +52 -48
  397. package/contracts/pool/Pool.sol +144 -127
  398. package/contracts/pool/PoolService.sol +292 -231
  399. package/contracts/pool/PoolServiceManager.sol +4 -4
  400. package/contracts/product/ApplicationService.sol +72 -43
  401. package/contracts/product/ApplicationServiceManager.sol +4 -4
  402. package/contracts/product/BasicProduct.sol +9 -12
  403. package/contracts/product/BasicProductAuthorization.sol +1 -3
  404. package/contracts/product/ClaimService.sol +426 -135
  405. package/contracts/product/ClaimServiceManager.sol +4 -4
  406. package/contracts/product/IApplicationService.sol +6 -2
  407. package/contracts/product/IClaimService.sol +44 -7
  408. package/contracts/product/IPolicyService.sol +44 -38
  409. package/contracts/product/IPricingService.sol +10 -10
  410. package/contracts/product/IProductComponent.sol +23 -4
  411. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  412. package/contracts/product/PolicyService.sol +502 -295
  413. package/contracts/product/PolicyServiceManager.sol +4 -4
  414. package/contracts/product/PricingService.sol +56 -55
  415. package/contracts/product/PricingServiceManager.sol +4 -4
  416. package/contracts/product/Product.sol +133 -93
  417. package/contracts/product/RiskService.sol +151 -0
  418. package/contracts/product/RiskServiceManager.sol +39 -0
  419. package/contracts/registry/ChainNft.sol +72 -40
  420. package/contracts/registry/IRegistry.sol +58 -28
  421. package/contracts/registry/IRegistryService.sol +5 -12
  422. package/contracts/registry/IRelease.sol +26 -0
  423. package/contracts/registry/ITransferInterceptor.sol +1 -2
  424. package/contracts/registry/Registry.sol +353 -203
  425. package/contracts/registry/RegistryAdmin.sol +161 -182
  426. package/contracts/registry/RegistryService.sol +37 -48
  427. package/contracts/registry/RegistryServiceManager.sol +3 -3
  428. package/contracts/registry/ReleaseAdmin.sol +245 -0
  429. package/contracts/registry/ReleaseLifecycle.sol +8 -3
  430. package/contracts/registry/ReleaseRegistry.sol +258 -232
  431. package/contracts/registry/ServiceAuthorizationV3.sol +94 -52
  432. package/contracts/registry/TokenRegistry.sol +5 -7
  433. package/contracts/shared/Component.sol +71 -125
  434. package/contracts/shared/ComponentService.sol +386 -347
  435. package/contracts/shared/ComponentServiceManager.sol +8 -5
  436. package/contracts/shared/ComponentVerifyingService.sol +28 -17
  437. package/contracts/shared/ContractLib.sol +252 -0
  438. package/contracts/shared/IComponent.sol +8 -17
  439. package/contracts/shared/IComponentService.sol +45 -37
  440. package/contracts/shared/IInstanceLinkedComponent.sol +6 -32
  441. package/contracts/shared/ILifecycle.sol +3 -1
  442. package/contracts/shared/INftOwnable.sol +2 -0
  443. package/contracts/shared/IPolicyHolder.sol +12 -22
  444. package/contracts/shared/IRegisterable.sol +23 -1
  445. package/contracts/shared/IService.sol +3 -5
  446. package/contracts/shared/InitializableERC165.sol +2 -2
  447. package/contracts/shared/InstanceLinkedComponent.sol +72 -47
  448. package/contracts/shared/KeyValueStore.sol +1 -1
  449. package/contracts/shared/Lifecycle.sol +15 -4
  450. package/contracts/shared/NftOwnable.sol +29 -9
  451. package/contracts/shared/PolicyHolder.sol +15 -52
  452. package/contracts/shared/Registerable.sol +55 -21
  453. package/contracts/shared/RegistryLinked.sol +9 -14
  454. package/contracts/shared/Service.sol +15 -32
  455. package/contracts/shared/TokenHandler.sol +357 -26
  456. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  457. package/contracts/staking/IStaking.sol +11 -5
  458. package/contracts/staking/IStakingService.sol +0 -3
  459. package/contracts/staking/StakeManagerLib.sol +18 -25
  460. package/contracts/staking/Staking.sol +71 -61
  461. package/contracts/staking/StakingManager.sol +8 -6
  462. package/contracts/staking/StakingReader.sol +12 -5
  463. package/contracts/staking/StakingService.sol +64 -36
  464. package/contracts/staking/StakingServiceManager.sol +2 -2
  465. package/contracts/staking/TargetManagerLib.sol +7 -3
  466. package/contracts/type/Amount.sol +15 -0
  467. package/contracts/type/ClaimId.sol +6 -1
  468. package/contracts/type/Key32.sol +2 -2
  469. package/contracts/type/Key32Set.sol +62 -0
  470. package/contracts/type/NftId.sol +7 -0
  471. package/contracts/type/ObjectType.sol +26 -11
  472. package/contracts/type/PayoutId.sol +10 -10
  473. package/contracts/type/RiskId.sol +35 -4
  474. package/contracts/type/RoleId.sol +4 -13
  475. package/contracts/type/Seconds.sol +8 -0
  476. package/contracts/type/StateId.sol +15 -1
  477. package/contracts/type/Timestamp.sol +0 -5
  478. package/contracts/type/UFixed.sol +13 -119
  479. package/contracts/type/Version.sol +15 -5
  480. package/contracts/upgradeability/ProxyManager.sol +68 -34
  481. package/contracts/upgradeability/Versionable.sol +2 -2
  482. package/package.json +4 -3
  483. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  484. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  485. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  486. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  487. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  488. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  489. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  490. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  491. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  492. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  493. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  494. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  495. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  496. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  497. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  498. package/contracts/product/ProductService.sol +0 -99
  499. package/contracts/product/ProductServiceManager.sol +0 -39
  500. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -1,45 +1,41 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
-
4
+ import {IAccountingService} from "../accounting/IAccountingService.sol";
6
5
  import {IBundle} from "../instance/module/IBundle.sol";
7
6
  import {IBundleService} from "./IBundleService.sol";
8
7
  import {IComponents} from "../instance/module/IComponents.sol";
9
8
  import {IComponentService} from "../shared/IComponentService.sol";
10
9
  import {IInstance} from "../instance/IInstance.sol";
11
- import {IInstanceService} from "../instance/IInstanceService.sol";
12
10
  import {IPolicy} from "../instance/module/IPolicy.sol";
11
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
13
12
  import {IPoolService} from "./IPoolService.sol";
13
+ import {IProductComponent} from "../product/IProductComponent.sol";
14
14
  import {IRegistry} from "../registry/IRegistry.sol";
15
- import {IRegistryService} from "../registry/IRegistryService.sol";
16
15
  import {IStaking} from "../staking/IStaking.sol";
17
16
 
18
17
  import {Amount, AmountLib} from "../type/Amount.sol";
18
+ import {ClaimId} from "../type/ClaimId.sol";
19
+ import {ContractLib} from "../shared/ContractLib.sol";
19
20
  import {Fee, FeeLib} from "../type/Fee.sol";
20
21
  import {NftId} from "../type/NftId.sol";
21
- import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
22
- import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
22
+ import {ObjectType, ACCOUNTING, POOL, BUNDLE, PRODUCT, POLICY, COMPONENT} from "../type/ObjectType.sol";
23
23
  import {Fee, FeeLib} from "../type/Fee.sol";
24
24
  import {KEEP_STATE} from "../type/StateId.sol";
25
- import {Seconds} from "../type/Seconds.sol";
26
- import {TokenHandler} from "../shared/TokenHandler.sol";
27
25
  import {UFixed} from "../type/UFixed.sol";
28
- import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
26
+ import {Service} from "../shared/Service.sol";
29
27
  import {InstanceReader} from "../instance/InstanceReader.sol";
30
28
  import {InstanceStore} from "../instance/InstanceStore.sol";
31
29
 
32
30
  string constant POOL_SERVICE_NAME = "PoolService";
33
31
 
34
32
  contract PoolService is
35
- ComponentVerifyingService,
33
+ Service,
36
34
  IPoolService
37
35
  {
36
+ IAccountingService private _accountingService;
38
37
  IBundleService internal _bundleService;
39
38
  IComponentService internal _componentService;
40
- IInstanceService private _instanceService;
41
- IRegistryService private _registryService;
42
-
43
39
  IStaking private _staking;
44
40
 
45
41
  function _initialize(
@@ -47,137 +43,56 @@ contract PoolService is
47
43
  bytes memory data
48
44
  )
49
45
  internal
50
- initializer
51
46
  virtual override
47
+ initializer()
52
48
  {
53
49
  (
54
- address registryAddress,,
55
- //address managerAddress
56
- address authority
57
- ) = abi.decode(data, (address, address, address));
50
+ address authority,
51
+ address registry
52
+ ) = abi.decode(data, (address, address));
58
53
 
59
- initializeService(registryAddress, authority, owner);
54
+ __Service_init(authority, registry, owner);
60
55
 
61
- _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
56
+ _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
62
57
  _bundleService = IBundleService(_getServiceAddress(BUNDLE()));
63
- _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
64
58
  _componentService = IComponentService(_getServiceAddress(COMPONENT()));
65
-
66
59
  _staking = IStaking(getRegistry().getStakingAddress());
67
60
 
68
- registerInterface(type(IPoolService).interfaceId);
61
+ _registerInterface(type(IPoolService).interfaceId);
69
62
  }
70
63
 
71
64
 
72
- function setMaxCapitalAmount(Amount maxCapitalAmount)
73
- external
74
- virtual
75
- {
76
- /*
77
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
78
- InstanceReader instanceReader = instance.getInstanceReader();
79
-
80
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
81
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
82
- Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
83
-
84
- poolInfo.maxCapitalAmount = maxCapitalAmount;
85
- instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
86
-
87
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
88
- */
89
- }
90
-
91
- function setBundleOwnerRole(RoleId bundleOwnerRole)
65
+ /// @inheritdoc IPoolService
66
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
92
67
  external
93
68
  virtual
94
69
  {
95
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
70
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
96
71
  InstanceReader instanceReader = instance.getInstanceReader();
72
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
97
73
 
98
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
99
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
100
-
101
- // bundle owner role may only be set once per pool
102
- if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
103
- revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
104
- }
105
-
106
- poolInfo.bundleOwnerRole = bundleOwnerRole;
74
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
75
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
107
76
  instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
108
77
 
109
- emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
78
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
110
79
  }
111
80
 
112
- /// @inheritdoc IPoolService
113
- function createBundle(
114
- address bundleOwner, // initial bundle owner
115
- Fee memory fee, // fees deducted from premium that go to bundle owner
116
- Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
117
- Seconds lifetime, // initial duration for which new policies are covered
118
- bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
119
- )
120
- external
121
- virtual
122
- returns(NftId bundleNftId, Amount netStakedAmount)
123
- {
124
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
125
-
126
- Amount stakingFeeAmount;
127
- (stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
128
- _getStakingFee(instance.getInstanceReader(), poolNftId),
129
- stakingAmount);
130
-
131
- // TODO: (staking amount + existing pool balance) must be be > maxCapitalAmount
132
-
133
- bundleNftId = _bundleService.create(
134
- instance,
135
- poolNftId,
136
- bundleOwner,
137
- fee,
138
- netStakedAmount,
139
- lifetime,
140
- filter);
141
-
142
- // pool book keeping
143
- _componentService.increasePoolBalance(
144
- instance.getInstanceStore(),
145
- poolNftId,
146
- netStakedAmount,
147
- stakingFeeAmount);
148
-
149
- // pool bookkeeping and collect tokens from bundle owner
150
- _collectStakingAmount(
151
- instance.getInstanceReader(),
152
- poolNftId,
153
- bundleOwner,
154
- stakingAmount);
155
-
156
- emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
157
- }
158
-
159
- function _getStakingFee(InstanceReader instanceReader, NftId poolNftId)
160
- internal
161
- virtual
162
- view
163
- returns (Fee memory stakingFee)
164
- {
165
- NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
166
- return instanceReader.getProductInfo(productNftId).stakingFee;
167
- }
168
81
 
169
82
  function closeBundle(NftId bundleNftId)
170
83
  external
171
84
  virtual
172
85
  {
173
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
86
+ _checkNftType(bundleNftId, BUNDLE());
87
+
88
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
174
89
 
175
90
  // TODO get performance fee for pool (#477)
176
91
 
177
92
  // releasing collateral in bundle
178
93
  (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
179
94
 
180
- _componentService.decreasePoolBalance(
95
+ _accountingService.decreasePoolBalance(
181
96
  instance.getInstanceStore(),
182
97
  poolNftId,
183
98
  unstakedAmount + feeAmount,
@@ -187,27 +102,48 @@ contract PoolService is
187
102
 
188
103
  if ((unstakedAmount + feeAmount).gtz()){
189
104
  IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
190
- TokenHandler tokenHandler = poolComponentInfo.tokenHandler;
191
- IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
192
-
193
- // TODO: centralize token handling (issue #471)
194
-
195
- // check allowance
196
- uint256 tokenAllowance = token.allowance(poolComponentInfo.wallet, address(tokenHandler));
197
- if (tokenAllowance < (unstakedAmount.toInt() + feeAmount.toInt())) {
198
- revert ErrorPoolServiceWalletAllowanceTooSmall(
199
- poolComponentInfo.wallet,
200
- address(tokenHandler),
201
- tokenAllowance,
202
- unstakedAmount.toInt() + feeAmount.toInt());
203
- }
105
+ poolComponentInfo.tokenHandler.distributeTokens(
106
+ poolComponentInfo.tokenHandler.getWallet(),
107
+ getRegistry().ownerOf(bundleNftId),
108
+ unstakedAmount + feeAmount);
109
+ }
110
+ }
204
111
 
205
- // transfer amount to bundle owner
206
- address bundleOwner = getRegistry().ownerOf(bundleNftId);
207
- tokenHandler.transfer(poolComponentInfo.wallet, bundleOwner, unstakedAmount + feeAmount);
112
+
113
+ /// @inheritdoc IPoolService
114
+ function processFundedClaim(
115
+ NftId policyNftId,
116
+ ClaimId claimId,
117
+ Amount availableAmount
118
+ )
119
+ external
120
+ virtual
121
+ {
122
+ _checkNftType(policyNftId, POLICY());
123
+
124
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
125
+ InstanceReader instanceReader = instance.getInstanceReader();
126
+ NftId productNftId = getRegistry().getObjectInfo(poolNftId).parentNftId;
127
+
128
+ // check policy matches with calling pool
129
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
130
+ if(policyInfo.productNftId != productNftId) {
131
+ revert ErrorPoolServicePolicyPoolMismatch(
132
+ policyNftId,
133
+ policyInfo.productNftId,
134
+ productNftId);
135
+ }
136
+
137
+ emit LogPoolServiceProcessFundedClaim(policyNftId, claimId, availableAmount);
138
+
139
+ // callback to product component if applicable
140
+ if (instanceReader.getProductInfo(productNftId).isProcessingFundedClaims) {
141
+ address productAddress = getRegistry().getObjectAddress(productNftId);
142
+ IProductComponent(productAddress).processFundedClaim(policyNftId, claimId, availableAmount);
208
143
  }
209
144
  }
210
145
 
146
+
211
147
  /// @inheritdoc IPoolService
212
148
  function stake(NftId bundleNftId, Amount amount)
213
149
  external
@@ -215,7 +151,9 @@ contract PoolService is
215
151
  // TODO: restricted() (once #462 is done)
216
152
  returns(Amount netAmount)
217
153
  {
218
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
154
+ _checkNftType(bundleNftId, BUNDLE());
155
+
156
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
219
157
  InstanceReader instanceReader = instance.getInstanceReader();
220
158
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
221
159
  IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
@@ -224,21 +162,30 @@ contract PoolService is
224
162
  revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
225
163
  }
226
164
 
227
- Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
228
- if (amount + currentPoolBalance > poolInfo.maxCapitalAmount) {
229
- revert ErrorPoolServiceMaxCapitalAmountExceeded(poolNftId, poolInfo.maxCapitalAmount, currentPoolBalance, amount);
165
+ {
166
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
167
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
168
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
169
+ }
230
170
  }
231
171
 
232
172
  // calculate fees
233
- (
234
- Amount feeAmount,
235
- Amount netAmount
236
- ) = FeeLib.calculateFee(
237
- _getStakingFee(instanceReader, poolNftId),
238
- amount);
173
+ IRegistry registry = getRegistry();
174
+ Amount feeAmount;
175
+
176
+ {
177
+ NftId productNftId = registry.getObjectInfo(poolNftId).parentNftId;
178
+ Fee memory stakingFee = instanceReader.getProductInfo(productNftId).stakingFee;
179
+ (
180
+ feeAmount,
181
+ netAmount
182
+ ) = FeeLib.calculateFee(
183
+ stakingFee,
184
+ amount);
185
+ }
239
186
 
240
- // do all the bookkeeping
241
- _componentService.increasePoolBalance(
187
+ // do all the book keeping
188
+ _accountingService.increasePoolBalance(
242
189
  instance.getInstanceStore(),
243
190
  poolNftId,
244
191
  netAmount,
@@ -246,17 +193,22 @@ contract PoolService is
246
193
 
247
194
  _bundleService.stake(instance, bundleNftId, netAmount);
248
195
 
249
- // collect tokens from bundle owner
250
- address bundleOwner = getRegistry().ownerOf(bundleNftId);
251
- _collectStakingAmount(
252
- instanceReader,
253
- poolNftId,
254
- bundleOwner,
255
- amount);
256
-
257
196
  emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
197
+
198
+ // only collect staking amount when pool is not externally managed
199
+ if (!poolInfo.isExternallyManaged) {
200
+
201
+ // collect tokens from bundle owner
202
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
203
+ _collectStakingAmount(
204
+ instanceReader,
205
+ poolNftId,
206
+ bundleOwner,
207
+ amount);
208
+ }
258
209
  }
259
210
 
211
+
260
212
  /// @inheritdoc IPoolService
261
213
  function unstake(NftId bundleNftId, Amount amount)
262
214
  external
@@ -264,19 +216,17 @@ contract PoolService is
264
216
  // TODO: restricted() (once #462 is done)
265
217
  returns(Amount netAmount)
266
218
  {
267
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
219
+ _checkNftType(bundleNftId, BUNDLE());
220
+
221
+ (NftId poolNftId, IInstance instance) = _getAndVerifyActivePool();
268
222
  InstanceReader instanceReader = instance.getInstanceReader();
269
223
  InstanceStore instanceStore = instance.getInstanceStore();
270
224
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
271
-
225
+
272
226
  if (bundleInfo.poolNftId != poolNftId) {
273
227
  revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
274
228
  }
275
229
 
276
- if (amount.eqz()) {
277
- revert ErrorPoolServiceAmountIsZero();
278
- }
279
-
280
230
  // call bundle service for bookkeeping and additional checks
281
231
  Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
282
232
 
@@ -284,64 +234,115 @@ contract PoolService is
284
234
  // if amount was max, this was set to the available amount
285
235
 
286
236
  // TODO: handle performance fees (issue #477)
237
+ netAmount = unstakedAmount;
287
238
 
288
239
  // update pool bookkeeping - performance fees stay in the pool, but as fees
289
- _componentService.decreasePoolBalance(
240
+ _accountingService.decreasePoolBalance(
290
241
  instanceStore,
291
242
  poolNftId,
292
243
  unstakedAmount,
293
244
  AmountLib.zero());
294
245
 
295
- IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
296
- address poolWallet = poolComponentInfo.wallet;
297
246
 
298
- // check allowance
299
- {
300
- IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
301
- uint256 tokenAllowance = token.allowance(poolWallet, address(poolComponentInfo.tokenHandler));
302
- if (tokenAllowance < unstakedAmount.toInt()) {
303
- revert ErrorPoolServiceWalletAllowanceTooSmall(poolWallet, address(poolComponentInfo.tokenHandler), tokenAllowance, amount.toInt());
304
- }
247
+ emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount, netAmount);
248
+
249
+ // only distribute staking amount when pool is not externally managed
250
+ if (!instanceReader.getPoolInfo(poolNftId).isExternallyManaged) {
251
+
252
+ // transfer amount to bundle owner
253
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
254
+ _distributeUnstakingAmount(
255
+ instanceReader,
256
+ poolNftId,
257
+ bundleOwner,
258
+ netAmount);
305
259
  }
260
+ }
306
261
 
307
- // transfer amount to bundle owner
308
- address owner = getRegistry().ownerOf(bundleNftId);
309
- // TODO: centralize token handling (issue #471)
310
- poolComponentInfo.tokenHandler.transfer(poolWallet, owner, unstakedAmount);
311
-
312
- emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
313
262
 
314
- return unstakedAmount;
263
+ function fundPoolWallet(Amount amount)
264
+ external
265
+ virtual
266
+ // restricted()
267
+ {
268
+ (
269
+ NftId poolNftId,
270
+ IInstance instance
271
+ ) = _getAndVerifyActivePool();
272
+
273
+ // check that pool is externally managed
274
+ InstanceReader reader = instance.getInstanceReader();
275
+ if (!reader.getPoolInfo(poolNftId).isExternallyManaged) {
276
+ revert ErrorPoolServicePoolNotExternallyManaged(poolNftId);
277
+ }
278
+
279
+ address poolOwner = getRegistry().ownerOf(poolNftId);
280
+ emit LogPoolServiceWalletFunded(poolNftId, poolOwner, amount);
281
+
282
+ _collectStakingAmount(
283
+ reader,
284
+ poolNftId,
285
+ poolOwner,
286
+ amount);
315
287
  }
316
288
 
289
+
290
+ function defundPoolWallet(Amount amount)
291
+ external
292
+ virtual
293
+ // restricted()
294
+ {
295
+ (
296
+ NftId poolNftId,
297
+ IInstance instance
298
+ ) = _getAndVerifyActivePool();
299
+
300
+ // check that pool is externally managed
301
+ InstanceReader reader = instance.getInstanceReader();
302
+ if (!reader.getPoolInfo(poolNftId).isExternallyManaged) {
303
+ revert ErrorPoolServicePoolNotExternallyManaged(poolNftId);
304
+ }
305
+
306
+ address poolOwner = getRegistry().ownerOf(poolNftId);
307
+ emit LogPoolServiceWalletDefunded(poolNftId, poolOwner, amount);
308
+
309
+ _distributeUnstakingAmount(
310
+ reader,
311
+ poolNftId,
312
+ poolOwner,
313
+ amount);
314
+ }
315
+
316
+
317
317
  function processSale(
318
318
  NftId bundleNftId,
319
- IPolicy.Premium memory premium
319
+ IPolicy.PremiumInfo memory premium
320
320
  )
321
321
  external
322
322
  virtual
323
323
  restricted()
324
324
  {
325
+ _checkNftType(bundleNftId, BUNDLE());
326
+
325
327
  IRegistry registry = getRegistry();
326
- IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
327
- IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
328
- IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
329
- IInstance instance = IInstance(instanceObjectInfo.objectAddress);
328
+ NftId poolNftId = registry.getObjectInfo(bundleNftId).parentNftId;
329
+ (, address instanceAddress) = ContractLib.getInfoAndInstance(registry, poolNftId, true);
330
+ IInstance instance = IInstance(instanceAddress);
330
331
 
331
- Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
332
- Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
333
- Amount bundleNetAmount = AmountLib.toAmount(premium.netPremiumAmount);
332
+ Amount poolFeeAmount = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
333
+ Amount bundleFeeAmount = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
334
+ Amount bundleNetAmount = premium.netPremiumAmount;
334
335
 
335
336
  InstanceStore instanceStore = instance.getInstanceStore();
336
- _componentService.increasePoolBalance(
337
+ _accountingService.increasePoolBalance(
337
338
  instanceStore,
338
- poolObjectInfo.nftId,
339
+ poolNftId,
339
340
  bundleNetAmount + bundleFeeAmount,
340
341
  poolFeeAmount);
341
342
 
342
- _componentService.increaseBundleBalance(
343
+ _accountingService.increaseBundleBalanceForPool(
343
344
  instanceStore,
344
- bundleObjectInfo.nftId,
345
+ bundleNftId,
345
346
  bundleNetAmount,
346
347
  bundleFeeAmount);
347
348
  }
@@ -359,13 +360,21 @@ contract PoolService is
359
360
  virtual
360
361
  restricted()
361
362
  returns (
362
- Amount localCollateralAmount,
363
- Amount totalCollateralAmount
363
+ Amount totalCollateralAmount,
364
+ Amount localCollateralAmount
364
365
  )
365
366
  {
367
+ _checkNftType(productNftId, PRODUCT());
368
+ _checkNftType(applicationNftId, POLICY());
369
+ _checkNftType(bundleNftId, BUNDLE());
370
+
371
+ NftId poolNftId;
372
+ bool poolIsVerifyingApplications;
366
373
  (
374
+ poolNftId,
375
+ totalCollateralAmount,
367
376
  localCollateralAmount,
368
- totalCollateralAmount
377
+ poolIsVerifyingApplications
369
378
  ) = calculateRequiredCollateral(
370
379
  instance.getInstanceReader(),
371
380
  productNftId,
@@ -384,15 +393,23 @@ contract PoolService is
384
393
  token,
385
394
  totalCollateralAmount);
386
395
 
387
- // hierarhical riskpool setup
388
- // TODO loop in with pool component to guarantee availability of external capital
389
- if(totalCollateralAmount > localCollateralAmount) {
396
+ // pool callback when required
397
+ if (poolIsVerifyingApplications) {
398
+ IPoolComponent pool = IPoolComponent(
399
+ getRegistry().getObjectAddress(poolNftId));
400
+
401
+ pool.verifyApplication(
402
+ applicationNftId,
403
+ bundleNftId,
404
+ totalCollateralAmount);
390
405
 
406
+ // TODO add logging
391
407
  }
392
- }
393
408
 
409
+ // TODO add logging
410
+ }
394
411
 
395
- function reduceCollateral(
412
+ function processPayout(
396
413
  IInstance instance,
397
414
  address token,
398
415
  NftId policyNftId,
@@ -403,6 +420,24 @@ contract PoolService is
403
420
  virtual
404
421
  restricted()
405
422
  {
423
+ _checkNftType(policyNftId, POLICY());
424
+
425
+ NftId bundleNftId = policyInfo.bundleNftId;
426
+ NftId poolNftId = getRegistry().getObjectInfo(bundleNftId).parentNftId;
427
+ InstanceStore instanceStore = instance.getInstanceStore();
428
+
429
+ _accountingService.decreasePoolBalance(
430
+ instanceStore,
431
+ poolNftId,
432
+ payoutAmount,
433
+ AmountLib.zero());
434
+
435
+ _accountingService.decreaseBundleBalanceForPool(
436
+ instanceStore,
437
+ bundleNftId,
438
+ payoutAmount,
439
+ AmountLib.zero());
440
+
406
441
  _bundleService.releaseCollateral(
407
442
  instance,
408
443
  policyNftId,
@@ -429,6 +464,8 @@ contract PoolService is
429
464
  virtual
430
465
  restricted()
431
466
  {
467
+ _checkNftType(policyNftId, POLICY());
468
+
432
469
  Amount remainingCollateralAmount = policyInfo.sumInsuredAmount - policyInfo.claimAmount;
433
470
 
434
471
  _bundleService.releaseCollateral(
@@ -437,10 +474,6 @@ contract PoolService is
437
474
  policyInfo.bundleNftId,
438
475
  remainingCollateralAmount);
439
476
 
440
- _bundleService.unlinkPolicy(
441
- instance,
442
- policyNftId);
443
-
444
477
  // update value locked with staking service
445
478
  _staking.decreaseTotalValueLocked(
446
479
  instance.getNftId(),
@@ -457,16 +490,21 @@ contract PoolService is
457
490
  public
458
491
  view
459
492
  returns(
493
+ NftId poolNftId,
494
+ Amount totalCollateralAmount,
460
495
  Amount localCollateralAmount,
461
- Amount totalCollateralAmount
496
+ bool poolIsVerifyingApplications
462
497
  )
463
498
  {
464
- NftId poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
499
+ _checkNftType(productNftId, PRODUCT());
500
+
501
+ poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
465
502
  IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
503
+ poolIsVerifyingApplications = poolInfo.isVerifyingApplications;
466
504
 
467
505
  (
468
- localCollateralAmount,
469
- totalCollateralAmount
506
+ totalCollateralAmount,
507
+ localCollateralAmount
470
508
  ) = calculateRequiredCollateral(
471
509
  poolInfo.collateralizationLevel,
472
510
  poolInfo.retentionLevel,
@@ -482,18 +520,17 @@ contract PoolService is
482
520
  public
483
521
  pure
484
522
  returns(
485
- Amount localCollateralAmount,
486
- Amount totalCollateralAmount
523
+ Amount totalCollateralAmount,
524
+ Amount localCollateralAmount
487
525
  )
488
526
  {
489
- // TODO define if only applies to local collateral
490
- // TODO add minimalistic implementation
491
-
492
- // assumptions
493
- // - collateralizationLevel == 1.0
494
- // - retentionLevel == 1.0
495
- localCollateralAmount = sumInsuredAmount;
496
- totalCollateralAmount = localCollateralAmount;
527
+ // collateralization is applied to sum insured
528
+ UFixed totalUFixed = collateralizationLevel * sumInsuredAmount.toUFixed();
529
+ totalCollateralAmount = AmountLib.toAmount(totalUFixed.toInt());
530
+
531
+ // retention level defines how much capital is required locally
532
+ localCollateralAmount = AmountLib.toAmount(
533
+ (retentionLevel * totalUFixed).toInt());
497
534
  }
498
535
 
499
536
 
@@ -502,6 +539,7 @@ contract PoolService is
502
539
  Amount stakingAmount
503
540
  )
504
541
  internal
542
+ pure
505
543
  returns (Amount stakingNetAmount)
506
544
  {
507
545
  stakingNetAmount = stakingAmount;
@@ -516,38 +554,61 @@ contract PoolService is
516
554
  }
517
555
 
518
556
 
519
- // TODO create (I)TreasuryService that deals with all gif related token transfers
520
- /// @dev transfers the specified amount from the bundle owner to the pool's wallet
557
+ /// @dev transfers the specified amount from the "from account" to the pool's wallet
521
558
  function _collectStakingAmount(
522
- InstanceReader instanceReader,
559
+ InstanceReader reader,
523
560
  NftId poolNftId,
524
- address bundleOwner,
561
+ address from,
525
562
  Amount amount
526
563
  )
527
564
  internal
528
565
  {
566
+ IComponents.ComponentInfo memory info = reader.getComponentInfo(poolNftId);
567
+ info.tokenHandler.collectTokens(
568
+ from,
569
+ amount);
570
+ }
529
571
 
530
- // collecting investor token
531
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
532
- TokenHandler tokenHandler = componentInfo.tokenHandler;
533
- address poolWallet = componentInfo.wallet;
572
+ /// @dev distributes the specified amount from the pool's wallet to the "to account"
573
+ function _distributeUnstakingAmount(
574
+ InstanceReader reader,
575
+ NftId poolNftId,
576
+ address to,
577
+ Amount amount
578
+ )
579
+ internal
580
+ {
581
+ IComponents.ComponentInfo memory info = reader.getComponentInfo(poolNftId);
582
+ info.tokenHandler.distributeTokens(
583
+ info.tokenHandler.getWallet(),
584
+ to,
585
+ amount);
586
+ }
534
587
 
535
- if(amount.gtz()) {
536
- uint256 allowance = IERC20Metadata(componentInfo.token).allowance(bundleOwner, address(tokenHandler));
537
- if (allowance < amount.toInt()) {
538
- revert ErrorPoolServiceWalletAllowanceTooSmall(bundleOwner, address(tokenHandler), allowance, amount.toInt());
539
- }
540
588
 
541
- // TODO: centralize token handling (issue #471)
542
- tokenHandler.transfer(
543
- bundleOwner,
544
- poolWallet,
545
- amount);
546
- } else {
547
- revert ErrorPoolServiceAmountIsZero();
548
- }
589
+ function _getAndVerifyActivePool()
590
+ internal
591
+ virtual
592
+ view
593
+ returns (
594
+ NftId poolNftId,
595
+ IInstance instance
596
+ )
597
+ {
598
+ (
599
+ IRegistry.ObjectInfo memory info,
600
+ address instanceAddress
601
+ ) = ContractLib.getAndVerifyComponent(
602
+ getRegistry(),
603
+ msg.sender,
604
+ POOL(),
605
+ true); // only active pools
606
+
607
+ poolNftId = info.nftId;
608
+ instance = IInstance(instanceAddress);
549
609
  }
550
610
 
611
+
551
612
  function _getDomain() internal pure override returns(ObjectType) {
552
613
  return POOL();
553
614
  }