@etherisc/gif-next 0.0.2-8ce6c0b-352 → 0.0.2-8d69bcd-543

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