@etherisc/gif-next 0.0.2-c5049d4-401 → 0.0.2-c52b5b7-438

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