@etherisc/gif-next 0.0.2-a714036-117 → 0.0.2-a755cba-731

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 (486) hide show
  1. package/README.md +32 -8
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1000 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +746 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +767 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
  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/Authorization.sol/Authorization.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
  15. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -32
  18. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
  20. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  22. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  23. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  25. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +156 -412
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +96 -344
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +229 -292
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +125 -117
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  37. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +84 -142
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  39. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +101 -62
  40. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  42. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1441 -0
  44. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  45. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
  46. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  47. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1991 -0
  48. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  49. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
  50. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  51. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1429 -0
  54. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  55. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +470 -0
  56. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1145 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1605 -0
  60. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  61. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +502 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  63. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2329 -0
  64. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  65. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +470 -0
  66. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  67. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +147 -42
  68. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  69. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +116 -48
  70. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +53 -101
  72. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  73. package/artifacts/contracts/instance/Instance.sol/Instance.json +141 -141
  74. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  75. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +197 -139
  76. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  77. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +58 -85
  78. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  79. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +746 -134
  80. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +118 -260
  82. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  83. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +99 -87
  84. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  85. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +339 -140
  86. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  87. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +810 -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 +2 -2
  97. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  105. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +109 -365
  106. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  107. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
  108. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  109. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  110. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +72 -130
  111. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  112. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
  113. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  114. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +85 -333
  115. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +147 -191
  117. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  118. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +119 -83
  119. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  120. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +108 -356
  121. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  122. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
  123. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  124. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +160 -334
  125. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +111 -131
  127. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  128. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +60 -65
  129. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  130. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +94 -163
  131. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  132. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +277 -205
  133. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  134. package/artifacts/contracts/pool/Pool.sol/Pool.json +105 -364
  135. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  136. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +385 -418
  137. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +120 -100
  139. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  140. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +124 -181
  141. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  142. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +89 -89
  143. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  144. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +147 -349
  145. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  146. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
  147. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  148. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +433 -193
  149. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +141 -105
  151. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  152. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +68 -7
  153. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  154. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +292 -6
  155. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  156. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +281 -142
  157. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
  159. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  160. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +131 -143
  161. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  162. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
  163. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  164. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +351 -338
  165. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  166. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +126 -98
  167. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  168. package/artifacts/contracts/product/PricingService.sol/PricingService.json +215 -309
  169. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  170. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +117 -117
  171. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  172. package/artifacts/contracts/product/Product.sol/Product.json +145 -347
  173. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  174. package/artifacts/contracts/product/RiskService.sol/RiskService.json +638 -0
  175. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  176. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +718 -0
  177. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  178. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  179. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  180. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +310 -34
  181. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  182. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
  183. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  184. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  185. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  186. package/artifacts/contracts/registry/Registry.sol/Registry.json +516 -95
  187. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  188. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +296 -143
  189. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  190. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +94 -284
  191. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  192. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +91 -75
  193. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  194. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  195. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  196. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +131 -223
  197. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  198. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  199. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  200. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  201. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  202. package/artifacts/contracts/shared/Component.sol/Component.json +69 -288
  203. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  204. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +471 -593
  205. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  206. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +133 -127
  207. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  208. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
  209. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  210. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +488 -0
  211. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  212. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  213. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  214. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  215. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  216. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +61 -90
  217. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  218. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +425 -261
  219. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  220. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +72 -130
  221. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  222. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  223. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  224. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  225. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  226. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  227. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  228. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  229. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  230. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
  231. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  232. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  233. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  234. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  235. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  236. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  237. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +84 -332
  238. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  239. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  240. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  241. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  242. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  243. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  244. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  245. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  246. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  247. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  248. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  249. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
  250. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  251. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  252. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  253. package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
  254. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  255. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +697 -25
  256. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  257. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
  258. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  259. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
  260. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  261. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +106 -127
  262. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  263. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  264. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  265. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +64 -94
  266. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  267. package/artifacts/contracts/staking/Staking.sol/Staking.json +190 -379
  268. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  269. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  270. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  271. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +118 -99
  272. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  273. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  274. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  275. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +87 -165
  276. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  277. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +95 -79
  278. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  279. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +170 -129
  280. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  281. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +55 -24
  282. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  283. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  284. package/artifacts/contracts/type/Amount.sol/AmountLib.json +33 -9
  285. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  286. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  288. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  290. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/Fee.sol/FeeLib.json +3 -3
  292. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  293. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  294. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  295. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  296. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  298. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  299. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  300. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  302. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  303. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  304. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  306. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  308. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +99 -5
  310. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  311. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  312. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  314. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  316. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  317. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  318. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  320. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  321. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  322. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +16 -3
  323. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  324. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  325. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  326. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  327. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +71 -70
  328. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  329. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  330. package/contracts/accounting/AccountingService.sol +263 -0
  331. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  332. package/contracts/accounting/IAccountingService.sol +45 -0
  333. package/contracts/authorization/AccessAdmin.sol +83 -59
  334. package/contracts/authorization/Authorization.sol +111 -40
  335. package/contracts/authorization/IAccess.sol +1 -0
  336. package/contracts/authorization/IAccessAdmin.sol +4 -3
  337. package/contracts/authorization/IAuthorization.sol +13 -7
  338. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  339. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  340. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  341. package/contracts/distribution/BasicDistribution.sol +8 -7
  342. package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
  343. package/contracts/distribution/Distribution.sol +33 -41
  344. package/contracts/distribution/DistributionService.sol +109 -89
  345. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  346. package/contracts/distribution/IDistributionComponent.sol +1 -1
  347. package/contracts/distribution/IDistributionService.sol +14 -11
  348. package/contracts/examples/fire/DamageLevel.sol +59 -0
  349. package/contracts/examples/fire/FirePool.sol +90 -0
  350. package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
  351. package/contracts/examples/fire/FireProduct.sol +436 -0
  352. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  353. package/contracts/examples/fire/FireUSD.sol +26 -0
  354. package/contracts/examples/unpermissioned/SimpleDistribution.sol +57 -0
  355. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  356. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  357. package/contracts/examples/unpermissioned/SimplePool.sol +107 -0
  358. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  359. package/contracts/examples/unpermissioned/SimpleProduct.sol +366 -0
  360. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  361. package/contracts/instance/BundleSet.sol +38 -34
  362. package/contracts/instance/IInstance.sol +16 -31
  363. package/contracts/instance/IInstanceService.sol +7 -29
  364. package/contracts/instance/Instance.sol +44 -59
  365. package/contracts/instance/InstanceAdmin.sol +76 -54
  366. package/contracts/instance/InstanceAuthorizationV3.sol +53 -34
  367. package/contracts/instance/InstanceReader.sol +203 -27
  368. package/contracts/instance/InstanceService.sol +97 -148
  369. package/contracts/instance/InstanceServiceManager.sol +6 -7
  370. package/contracts/instance/InstanceStore.sol +11 -1
  371. package/contracts/instance/RiskSet.sol +119 -0
  372. package/contracts/instance/base/ObjectCounter.sol +1 -2
  373. package/contracts/instance/base/ObjectLifecycle.sol +10 -4
  374. package/contracts/instance/base/ObjectSet.sol +24 -25
  375. package/contracts/instance/module/IComponents.sol +11 -8
  376. package/contracts/instance/module/IPolicy.sol +26 -25
  377. package/contracts/instance/module/IRisk.sol +1 -0
  378. package/contracts/oracle/BasicOracle.sol +0 -1
  379. package/contracts/oracle/IOracleService.sol +2 -1
  380. package/contracts/oracle/Oracle.sol +6 -16
  381. package/contracts/oracle/OracleService.sol +112 -81
  382. package/contracts/oracle/OracleServiceManager.sol +6 -6
  383. package/contracts/pool/BasicPool.sol +35 -26
  384. package/contracts/pool/BasicPoolAuthorization.sol +14 -4
  385. package/contracts/pool/BundleService.sol +105 -118
  386. package/contracts/pool/BundleServiceManager.sol +6 -6
  387. package/contracts/pool/IBundleService.sol +8 -20
  388. package/contracts/pool/IPoolComponent.sol +19 -15
  389. package/contracts/pool/IPoolService.sol +52 -48
  390. package/contracts/pool/Pool.sol +145 -128
  391. package/contracts/pool/PoolService.sol +295 -208
  392. package/contracts/pool/PoolServiceManager.sol +4 -4
  393. package/contracts/product/ApplicationService.sol +71 -42
  394. package/contracts/product/ApplicationServiceManager.sol +4 -4
  395. package/contracts/product/BasicProduct.sol +9 -12
  396. package/contracts/product/BasicProductAuthorization.sol +1 -3
  397. package/contracts/product/ClaimService.sol +393 -127
  398. package/contracts/product/ClaimServiceManager.sol +4 -4
  399. package/contracts/product/IApplicationService.sol +6 -2
  400. package/contracts/product/IClaimService.sol +44 -7
  401. package/contracts/product/IPolicyService.sol +44 -38
  402. package/contracts/product/IPricingService.sol +10 -10
  403. package/contracts/product/IProductComponent.sol +23 -4
  404. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  405. package/contracts/product/PolicyService.sol +501 -294
  406. package/contracts/product/PolicyServiceManager.sol +4 -4
  407. package/contracts/product/PricingService.sol +54 -54
  408. package/contracts/product/PricingServiceManager.sol +3 -3
  409. package/contracts/product/Product.sol +133 -93
  410. package/contracts/product/{ProductService.sol → RiskService.sol} +21 -13
  411. package/contracts/product/RiskServiceManager.sol +39 -0
  412. package/contracts/registry/ChainNft.sol +72 -40
  413. package/contracts/registry/IRegistry.sol +57 -18
  414. package/contracts/registry/IRegistryService.sol +5 -12
  415. package/contracts/registry/ITransferInterceptor.sol +1 -2
  416. package/contracts/registry/Registry.sol +350 -201
  417. package/contracts/registry/RegistryAdmin.sol +147 -55
  418. package/contracts/registry/RegistryService.sol +35 -46
  419. package/contracts/registry/RegistryServiceManager.sol +2 -2
  420. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  421. package/contracts/registry/ReleaseRegistry.sol +207 -206
  422. package/contracts/registry/ServiceAuthorizationV3.sol +59 -52
  423. package/contracts/shared/Component.sol +60 -121
  424. package/contracts/shared/ComponentService.sol +390 -345
  425. package/contracts/shared/ComponentServiceManager.sol +8 -5
  426. package/contracts/shared/ComponentVerifyingService.sol +28 -17
  427. package/contracts/shared/ContractLib.sol +224 -0
  428. package/contracts/shared/IComponent.sol +6 -14
  429. package/contracts/shared/IComponentService.sol +45 -37
  430. package/contracts/shared/IInstanceLinkedComponent.sol +6 -32
  431. package/contracts/shared/ILifecycle.sol +3 -1
  432. package/contracts/shared/INftOwnable.sol +2 -0
  433. package/contracts/shared/IPolicyHolder.sol +12 -22
  434. package/contracts/shared/IRegisterable.sol +11 -0
  435. package/contracts/shared/InitializableERC165.sol +2 -2
  436. package/contracts/shared/InstanceLinkedComponent.sol +72 -47
  437. package/contracts/shared/KeyValueStore.sol +1 -1
  438. package/contracts/shared/Lifecycle.sol +15 -4
  439. package/contracts/shared/NftOwnable.sol +27 -7
  440. package/contracts/shared/PolicyHolder.sol +15 -52
  441. package/contracts/shared/Registerable.sol +19 -11
  442. package/contracts/shared/RegistryLinked.sol +9 -14
  443. package/contracts/shared/Service.sol +20 -18
  444. package/contracts/shared/TokenHandler.sol +358 -27
  445. package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
  446. package/contracts/staking/IStaking.sol +11 -5
  447. package/contracts/staking/IStakingService.sol +0 -3
  448. package/contracts/staking/StakeManagerLib.sol +18 -25
  449. package/contracts/staking/Staking.sol +49 -50
  450. package/contracts/staking/StakingManager.sol +8 -6
  451. package/contracts/staking/StakingReader.sol +12 -5
  452. package/contracts/staking/StakingService.sol +65 -36
  453. package/contracts/staking/StakingServiceManager.sol +2 -2
  454. package/contracts/staking/TargetManagerLib.sol +7 -3
  455. package/contracts/type/Amount.sol +15 -0
  456. package/contracts/type/ClaimId.sol +6 -1
  457. package/contracts/type/Key32.sol +2 -2
  458. package/contracts/type/Key32Set.sol +62 -0
  459. package/contracts/type/NftId.sol +7 -0
  460. package/contracts/type/ObjectType.sol +26 -11
  461. package/contracts/type/PayoutId.sol +10 -10
  462. package/contracts/type/RiskId.sol +30 -4
  463. package/contracts/type/RoleId.sol +0 -12
  464. package/contracts/type/Seconds.sol +8 -0
  465. package/contracts/type/StateId.sol +15 -1
  466. package/contracts/type/UFixed.sol +13 -119
  467. package/contracts/upgradeability/ProxyManager.sol +68 -34
  468. package/contracts/upgradeability/Versionable.sol +2 -2
  469. package/package.json +4 -3
  470. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  471. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  472. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  473. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  474. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  475. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  476. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  477. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  478. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  479. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  480. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  481. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  482. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  483. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  484. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  485. package/contracts/product/ProductServiceManager.sol +0 -39
  486. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -1,21 +1,26 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IComponents} from "../instance/module/IComponents.sol";
5
- import {IInstance} from "../instance/IInstance.sol";
6
- import {IPolicy} from "../instance/module/IPolicy.sol";
7
4
  import {Amount, AmountLib} from "../type/Amount.sol";
8
5
  import {TimestampLib} from "../type/Timestamp.sol";
9
- import {ObjectType, CLAIM, PRODUCT, POOL} from "../type/ObjectType.sol";
10
- import {SUBMITTED, KEEP_STATE, DECLINED, CONFIRMED, CLOSED, PAID} from "../type/StateId.sol";
6
+ import {ObjectType, CLAIM, POLICY, POOL, PRODUCT} from "../type/ObjectType.sol";
7
+ import {SUBMITTED, KEEP_STATE, DECLINED, REVOKED, CANCELLED, CONFIRMED, CLOSED, EXPECTED, PAID} from "../type/StateId.sol";
11
8
  import {NftId} from "../type/NftId.sol";
12
9
  import {FeeLib} from "../type/Fee.sol";
13
10
  import {StateId} from "../type/StateId.sol";
14
11
  import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
15
12
  import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
16
13
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
14
+ import {ContractLib} from "../shared/ContractLib.sol";
17
15
  import {InstanceReader} from "../instance/InstanceReader.sol";
16
+ import {InstanceStore} from "../instance/InstanceStore.sol";
18
17
  import {IClaimService} from "./IClaimService.sol";
18
+ import {IComponents} from "../instance/module/IComponents.sol";
19
+ import {IInstance} from "../instance/IInstance.sol";
20
+ import {IPolicy} from "../instance/module/IPolicy.sol";
21
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
22
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
23
+ import {IPolicyService} from "../product/IPolicyService.sol";
19
24
  import {IPoolService} from "../pool/IPoolService.sol";
20
25
 
21
26
 
@@ -24,6 +29,7 @@ contract ClaimService is
24
29
  IClaimService
25
30
  {
26
31
 
32
+ IPolicyService internal _policyService;
27
33
  IPoolService internal _poolService;
28
34
 
29
35
  function _initialize(
@@ -35,16 +41,38 @@ contract ClaimService is
35
41
  initializer()
36
42
  {
37
43
  (
38
- address registryAddress,,
39
- //address managerAddress
44
+ address registryAddress,
40
45
  address authority
41
- ) = abi.decode(data, (address, address, address));
46
+ ) = abi.decode(data, (address, address));
42
47
 
43
- initializeService(registryAddress, authority, owner);
48
+ _initializeService(registryAddress, authority, owner);
44
49
 
50
+ _policyService = IPolicyService(getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart()));
45
51
  _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
46
52
 
47
- registerInterface(type(IClaimService).interfaceId);
53
+ _registerInterface(type(IClaimService).interfaceId);
54
+ }
55
+
56
+ function _checkClaimAmount(
57
+ NftId policyNftId,
58
+ IPolicy.PolicyInfo memory policyInfo,
59
+ Amount claimAmount
60
+ )
61
+ internal
62
+ pure
63
+ {
64
+ // check claim amount > 0
65
+ if (claimAmount.eqz()) {
66
+ revert ErrorClaimServiceClaimAmountIsZero(policyNftId);
67
+ }
68
+
69
+ // check policy including this claim is still within sum insured
70
+ if(policyInfo.claimAmount + claimAmount > policyInfo.sumInsuredAmount) {
71
+ revert ErrorClaimServiceClaimExceedsSumInsured(
72
+ policyNftId,
73
+ policyInfo.sumInsuredAmount,
74
+ policyInfo.payoutAmount + claimAmount);
75
+ }
48
76
  }
49
77
 
50
78
  function submit(
@@ -54,11 +82,14 @@ contract ClaimService is
54
82
  )
55
83
  external
56
84
  virtual
85
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
57
86
  returns (ClaimId claimId)
58
87
  {
88
+ // checks
59
89
  (
60
- IInstance instance,
61
- InstanceReader instanceReader,
90
+ ,
91
+ IInstance instance,,
92
+ InstanceStore instanceStore,
62
93
  IPolicy.PolicyInfo memory policyInfo
63
94
  ) = _verifyCallerWithPolicy(policyNftId);
64
95
 
@@ -67,33 +98,28 @@ contract ClaimService is
67
98
  revert ErrorClaimServicePolicyNotOpen(policyNftId);
68
99
  }
69
100
 
70
- // check policy including this claim is still within sum insured
71
- if(policyInfo.payoutAmount + claimAmount > policyInfo.sumInsuredAmount) {
72
- revert ErrorClaimServiceClaimExceedsSumInsured(
73
- policyNftId,
74
- policyInfo.sumInsuredAmount,
75
- AmountLib.toAmount(policyInfo.payoutAmount.toInt() + claimAmount.toInt()));
76
- }
101
+ _checkClaimAmount(policyNftId, policyInfo, claimAmount);
77
102
 
103
+ // effects
78
104
  // create new claim
79
105
  claimId = ClaimIdLib.toClaimId(policyInfo.claimsCount + 1);
80
- instance.getInstanceStore().createClaim(
106
+ instanceStore.createClaim(
81
107
  policyNftId,
82
108
  claimId,
83
- IPolicy.ClaimInfo(
84
- claimAmount,
85
- AmountLib.zero(), // paidAmount
86
- 0, // payoutsCount
87
- 0, // openPayoutsCount
88
- claimData, // claim submission data
89
- "", // claim processing data
90
- TimestampLib.zero())); // closedAt
109
+ IPolicy.ClaimInfo({
110
+ claimAmount: claimAmount,
111
+ paidAmount: AmountLib.zero(),
112
+ payoutsCount: 0,
113
+ openPayoutsCount: 0,
114
+ submissionData: claimData,
115
+ processData: "",
116
+ closedAt: TimestampLib.zero()}));
91
117
 
92
118
  // update and save policy info with instance
119
+ // policy claim amount is only updated when claim is confirmed
93
120
  policyInfo.claimsCount += 1;
94
121
  policyInfo.openClaimsCount += 1;
95
- // policy claim amount is only updated when claim is confirmed
96
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
122
+ instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
97
123
 
98
124
  emit LogClaimServiceClaimSubmitted(policyNftId, claimId, claimAmount);
99
125
  }
@@ -107,26 +133,48 @@ contract ClaimService is
107
133
  )
108
134
  external
109
135
  virtual
136
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
110
137
  {
138
+ // checks
139
+ _checkNftType(policyNftId, POLICY());
140
+
111
141
  (
142
+ NftId productNftId,
112
143
  IInstance instance,
113
144
  InstanceReader instanceReader,
145
+ InstanceStore instanceStore,
114
146
  IPolicy.PolicyInfo memory policyInfo
115
147
  ) = _verifyCallerWithPolicy(policyNftId);
116
148
 
149
+ _checkClaimAmount(policyNftId, policyInfo, confirmedAmount);
150
+
151
+ // effects
117
152
  // check/update claim info
118
153
  IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
119
154
  claimInfo.claimAmount = confirmedAmount;
120
155
  claimInfo.processData = data;
121
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CONFIRMED());
156
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, CONFIRMED());
122
157
 
123
158
  // update and save policy info with instance
124
159
  policyInfo.claimAmount = policyInfo.claimAmount + confirmedAmount;
125
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
160
+ instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
161
+
162
+ // should policy still be active it needs to become expired
163
+ if (policyInfo.claimAmount >= policyInfo.sumInsuredAmount) {
164
+ _policyService.expirePolicy(instance, policyNftId, TimestampLib.blockTimestamp());
165
+ }
126
166
 
127
167
  emit LogClaimServiceClaimConfirmed(policyNftId, claimId, confirmedAmount);
168
+
169
+ // interactions
170
+ // callback to pool if applicable
171
+ _processConfirmedClaimByPool(instanceReader, productNftId, policyNftId, claimId, confirmedAmount);
172
+
173
+ // callback to policy holder if applicable
174
+ _policyHolderClaimConfirmed(policyNftId, claimId, confirmedAmount);
128
175
  }
129
176
 
177
+
130
178
  function decline(
131
179
  NftId policyNftId,
132
180
  ClaimId claimId,
@@ -134,10 +182,15 @@ contract ClaimService is
134
182
  )
135
183
  external
136
184
  virtual
185
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
137
186
  {
187
+ _checkNftType(policyNftId, POLICY());
188
+
138
189
  (
190
+ ,
139
191
  IInstance instance,
140
192
  InstanceReader instanceReader,
193
+ InstanceStore instanceStore,
141
194
  IPolicy.PolicyInfo memory policyInfo
142
195
  ) = _verifyCallerWithPolicy(policyNftId);
143
196
 
@@ -145,25 +198,60 @@ contract ClaimService is
145
198
  IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
146
199
  claimInfo.processData = data;
147
200
  claimInfo.closedAt = TimestampLib.blockTimestamp();
148
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, DECLINED());
201
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, DECLINED());
149
202
 
150
203
  // update and save policy info with instance
151
204
  policyInfo.openClaimsCount -= 1;
152
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
205
+ instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
153
206
 
154
207
  emit LogClaimServiceClaimDeclined(policyNftId, claimId);
155
208
  }
156
209
 
210
+
211
+ function revoke(
212
+ NftId policyNftId,
213
+ ClaimId claimId
214
+ )
215
+ external
216
+ virtual
217
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
218
+ {
219
+ (
220
+ ,
221
+ IInstance instance,
222
+ InstanceReader instanceReader,
223
+ InstanceStore instanceStore,
224
+ IPolicy.PolicyInfo memory policyInfo
225
+ ) = _verifyCallerWithPolicy(policyNftId);
226
+
227
+ // check/update claim info
228
+ IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
229
+ claimInfo.closedAt = TimestampLib.blockTimestamp();
230
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, REVOKED());
231
+
232
+ // update and save policy info with instance
233
+ policyInfo.openClaimsCount -= 1;
234
+ instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
235
+
236
+ emit LogClaimServiceClaimRevoked(policyNftId, claimId);
237
+ }
238
+
239
+
157
240
  function close(
158
241
  NftId policyNftId,
159
242
  ClaimId claimId
160
243
  )
161
244
  external
162
245
  virtual
246
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
163
247
  {
248
+ _checkNftType(policyNftId, POLICY());
249
+
164
250
  (
251
+ ,
165
252
  IInstance instance,
166
253
  InstanceReader instanceReader,
254
+ InstanceStore instanceStore,
167
255
  IPolicy.PolicyInfo memory policyInfo
168
256
  ) = _verifyCallerWithPolicy(policyNftId);
169
257
 
@@ -188,55 +276,54 @@ contract ClaimService is
188
276
  }
189
277
 
190
278
  claimInfo.closedAt = TimestampLib.blockTimestamp();
191
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CLOSED());
279
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, CLOSED());
192
280
  }
193
281
 
194
282
 
195
- function createPayout(
283
+ function createPayoutForBeneficiary(
196
284
  NftId policyNftId,
197
285
  ClaimId claimId,
198
286
  Amount amount,
287
+ address beneficiary,
199
288
  bytes memory data
200
289
  )
201
290
  external
291
+ virtual
292
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
202
293
  returns (PayoutId payoutId)
203
294
  {
204
- (
205
- IInstance instance,
206
- InstanceReader instanceReader,
207
- IPolicy.PolicyInfo memory policyInfo
208
- ) = _verifyCallerWithPolicy(policyNftId);
209
-
210
- IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
211
- StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
212
-
213
- // TODO add checks
214
- // claim needs to be open
215
- // claim.paidAmount + amount <= claim.claimAmount
295
+ if (beneficiary == address(0)) {
296
+ revert ErrorClaimServiceBeneficiaryIsZero(policyNftId, claimId);
297
+ }
216
298
 
217
- // check/update claim info
218
- // create payout info with instance
219
- uint8 claimNo = claimInfo.payoutsCount + 1;
220
- payoutId = PayoutIdLib.toPayoutId(claimId, claimNo);
221
- instance.getInstanceStore().createPayout(
299
+ return _createPayout(
222
300
  policyNftId,
223
- payoutId,
224
- IPolicy.PayoutInfo(
225
- payoutId.toClaimId(),
226
- amount,
227
- data,
228
- TimestampLib.zero()));
229
-
230
- // update and save claim info with instance
231
- claimInfo.payoutsCount += 1;
232
- claimInfo.openPayoutsCount += 1;
233
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
301
+ claimId,
302
+ amount,
303
+ beneficiary,
304
+ data);
305
+ }
234
306
 
235
- // update and save policy info with instance
236
- policyInfo.payoutAmount.add(amount);
237
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
238
307
 
239
- emit LogClaimServicePayoutCreated(policyNftId, payoutId, amount);
308
+ function createPayout(
309
+ NftId policyNftId,
310
+ ClaimId claimId,
311
+ Amount amount,
312
+ bytes memory data
313
+ )
314
+ external
315
+ virtual
316
+ // nonReentrant() // prevents creating a reinsurance payout in a single tx
317
+ returns (PayoutId payoutId)
318
+ {
319
+ _checkNftType(policyNftId, POLICY());
320
+
321
+ return _createPayout(
322
+ policyNftId,
323
+ claimId,
324
+ amount,
325
+ address(0), // defaults to owner of policy nft
326
+ data);
240
327
  }
241
328
 
242
329
 
@@ -246,75 +333,212 @@ contract ClaimService is
246
333
  )
247
334
  external
248
335
  virtual
336
+ // nonReentrant() // prevents creating a reinsurance payout in a single tx
249
337
  {
338
+ // checks
250
339
  (
340
+ ,
251
341
  IInstance instance,
252
342
  InstanceReader instanceReader,
343
+ InstanceStore instanceStore,
253
344
  IPolicy.PolicyInfo memory policyInfo
254
345
  ) = _verifyCallerWithPolicy(policyNftId);
255
346
 
256
- // TODO add check that payout exists and is open
347
+ // check that payout exists and is open
257
348
  IPolicy.PayoutInfo memory payoutInfo = instanceReader.getPayoutInfo(policyNftId, payoutId);
349
+ StateId payoutState = instanceReader.getPayoutState(policyNftId, payoutId);
350
+ if(payoutState != EXPECTED()) {
351
+ revert ErrorClaimServicePayoutNotExpected(policyNftId, payoutId, payoutState);
352
+ }
353
+
354
+ // check that payout amount does not violate claim amount
355
+ IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, payoutId.toClaimId());
356
+ if(claimInfo.paidAmount + payoutInfo.amount > claimInfo.claimAmount) {
357
+ revert ErrorClaimServicePayoutExceedsClaimAmount(
358
+ policyNftId,
359
+ payoutId.toClaimId(),
360
+ claimInfo.claimAmount,
361
+ claimInfo.paidAmount + payoutInfo.amount);
362
+ }
258
363
 
364
+ // effects
259
365
  // update and save payout info with instance
260
366
  payoutInfo.paidAt = TimestampLib.blockTimestamp();
261
- instance.getInstanceStore().updatePayout(policyNftId, payoutId, payoutInfo, PAID());
367
+ instanceStore.updatePayout(policyNftId, payoutId, payoutInfo, PAID());
262
368
 
263
- // TODO update and save claim info with instance
264
- ClaimId claimId = payoutId.toClaimId();
265
369
  Amount payoutAmount = payoutInfo.amount;
266
- IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
267
- claimInfo.paidAmount = claimInfo.paidAmount.add(payoutAmount);
268
- claimInfo.openPayoutsCount -= 1;
269
-
270
- // check if this payout is closing the linked claim
271
- // update claim and policy info accordingly
272
- if(claimInfo.openPayoutsCount == 0 && claimInfo.paidAmount == claimInfo.claimAmount) {
273
- claimInfo.closedAt == TimestampLib.blockTimestamp();
274
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CLOSED());
275
-
276
- policyInfo.openClaimsCount -= 1;
277
- } else {
278
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
370
+
371
+ {
372
+ ClaimId claimId = payoutId.toClaimId();
373
+ IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
374
+ claimInfo.paidAmount = claimInfo.paidAmount.add(payoutAmount);
375
+ claimInfo.openPayoutsCount -= 1;
376
+
377
+ // check if this payout is closing the linked claim
378
+ // update claim and policy info accordingly
379
+ if(claimInfo.openPayoutsCount == 0 && claimInfo.paidAmount == claimInfo.claimAmount) {
380
+ claimInfo.closedAt = TimestampLib.blockTimestamp();
381
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, CLOSED());
382
+
383
+ policyInfo.openClaimsCount -= 1;
384
+ } else {
385
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
386
+ }
279
387
  }
280
388
 
281
389
  // update and save policy info with instance
282
- policyInfo.payoutAmount = policyInfo.payoutAmount.add(payoutAmount);
283
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
390
+ policyInfo.payoutAmount = policyInfo.payoutAmount + payoutAmount;
391
+ instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
284
392
 
285
393
  // inform pool about payout
286
- _poolService.reduceCollateral(
394
+ _poolService.processPayout(
287
395
  instance,
288
396
  address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
289
397
  policyNftId,
290
398
  policyInfo,
291
399
  payoutAmount);
292
-
400
+
293
401
  // transfer payout token and fee
402
+ {
403
+ (
404
+ Amount netPayoutAmount,
405
+ Amount processingFeeAmount,
406
+ address beneficiary
407
+ ) = _calculatePayoutAmount(
408
+ instanceReader,
409
+ policyNftId,
410
+ policyInfo,
411
+ payoutInfo);
412
+
413
+ emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount, processingFeeAmount);
414
+
415
+ {
416
+ NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
417
+ IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
418
+ poolInfo.tokenHandler.pushToken(
419
+ beneficiary,
420
+ netPayoutAmount);
421
+
422
+ // TODO add 2nd token tx if processingFeeAmount > 0
423
+ }
424
+
425
+ // callback to policy holder if applicable
426
+ _policyHolderPayoutExecuted(policyNftId, payoutId, beneficiary, payoutAmount);
427
+ }
428
+ }
429
+
430
+ function cancelPayout(
431
+ NftId policyNftId,
432
+ PayoutId payoutId
433
+ )
434
+ external
435
+ virtual
436
+ {
437
+ // checks
294
438
  (
295
- Amount netPayoutAmount,
296
- address beneficiary
297
- ) = _transferPayoutAmount(
298
- instanceReader,
299
- policyNftId,
300
- policyInfo,
301
- payoutInfo);
439
+ ,
440
+ IInstance instance,
441
+ InstanceReader instanceReader,
442
+ InstanceStore instanceStore,
443
+ IPolicy.PolicyInfo memory policyInfo
444
+ ) = _verifyCallerWithPolicy(policyNftId);
302
445
 
303
- // TODO callback IPolicyHolder
446
+ StateId payoutState = instanceReader.getPayoutState(policyNftId, payoutId);
447
+ if (payoutState != EXPECTED()) {
448
+ revert ErrorClaimServicePayoutNotExpected(policyNftId, payoutId, payoutState);
449
+ }
304
450
 
305
- emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount);
451
+ // effects
452
+ // update and save payout info with instance
453
+ instanceStore.updatePayoutState(policyNftId, payoutId, CANCELLED());
454
+
455
+ {
456
+ ClaimId claimId = payoutId.toClaimId();
457
+ IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
458
+ claimInfo.openPayoutsCount -= 1;
459
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
460
+ }
461
+
462
+ emit LogClaimServicePayoutCancelled(policyNftId, payoutId);
306
463
  }
307
464
 
308
- // TODO create (I)TreasuryService that deals with all gif related token transfers
309
- function _transferPayoutAmount(
465
+ // internal functions
466
+
467
+ function _createPayout(
468
+ NftId policyNftId,
469
+ ClaimId claimId,
470
+ Amount amount,
471
+ address beneficiary,
472
+ bytes memory data
473
+ )
474
+ internal
475
+ virtual
476
+ returns (PayoutId payoutId)
477
+ {
478
+ // checks
479
+ (
480
+ ,
481
+ ,
482
+ InstanceReader instanceReader,
483
+ InstanceStore instanceStore,
484
+ IPolicy.PolicyInfo memory policyInfo
485
+ ) = _verifyCallerWithPolicy(policyNftId);
486
+
487
+ IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
488
+
489
+ {
490
+ // check claim state
491
+ StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
492
+ if (claimState != CONFIRMED()) {
493
+ revert ErrorClaimServiceClaimNotConfirmed(policyNftId, claimId, claimState);
494
+ }
495
+
496
+ // check total payout amount remains within claim limit
497
+ Amount newPaidAmount = claimInfo.paidAmount + amount;
498
+ if (newPaidAmount > claimInfo.claimAmount) {
499
+ revert ErrorClaimServicePayoutExceedsClaimAmount(
500
+ policyNftId, claimId, claimInfo.claimAmount, newPaidAmount);
501
+ }
502
+ }
503
+
504
+ // effects
505
+ // create payout info with instance
506
+ uint24 payoutNo = claimInfo.payoutsCount + 1;
507
+ payoutId = PayoutIdLib.toPayoutId(claimId, payoutNo);
508
+ if (beneficiary == address(0)) {
509
+ beneficiary = getRegistry().ownerOf(policyNftId);
510
+ }
511
+
512
+ instanceStore.createPayout(
513
+ policyNftId,
514
+ payoutId,
515
+ IPolicy.PayoutInfo({
516
+ claimId: payoutId.toClaimId(),
517
+ amount: amount,
518
+ beneficiary: beneficiary,
519
+ data: data,
520
+ paidAt: TimestampLib.zero()}));
521
+
522
+ // update and save claim info with instance
523
+ claimInfo.payoutsCount += 1;
524
+ claimInfo.openPayoutsCount += 1;
525
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
526
+
527
+ emit LogClaimServicePayoutCreated(policyNftId, payoutId, amount, beneficiary);
528
+ }
529
+
530
+
531
+ function _calculatePayoutAmount(
310
532
  InstanceReader instanceReader,
311
533
  NftId policyNftId,
312
534
  IPolicy.PolicyInfo memory policyInfo,
313
535
  IPolicy.PayoutInfo memory payoutInfo
314
536
  )
315
537
  internal
538
+ view
316
539
  returns (
317
540
  Amount netPayoutAmount,
541
+ Amount processingFeeAmount,
318
542
  address beneficiary
319
543
  )
320
544
  {
@@ -328,39 +552,20 @@ contract ClaimService is
328
552
  IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
329
553
 
330
554
  netPayoutAmount = payoutAmount;
331
- beneficiary = _getBeneficiary(policyNftId, payoutInfo.claimId);
555
+
556
+ if (payoutInfo.beneficiary == address(0)) {
557
+ beneficiary = getRegistry().ownerOf(policyNftId);
558
+ } else {
559
+ beneficiary = payoutInfo.beneficiary;
560
+ }
332
561
 
333
562
  IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
334
563
  if(FeeLib.gtz(productInfo.processingFee)) {
335
- // TODO calculate net payout and processing fees
336
- // TODO transfer processing fees to product wallet
337
- // TODO inform product to update fee book keeping
564
+ // TODO calculate and set net payout and processing fees
338
565
  }
339
-
340
- // TODO: centralize token handling (issue #471)
341
- poolInfo.tokenHandler.transfer(
342
- poolInfo.wallet,
343
- beneficiary,
344
- netPayoutAmount);
345
566
  }
346
567
  }
347
568
 
348
- // internal functions
349
-
350
- function _getBeneficiary(
351
- NftId policyNftId,
352
- ClaimId claimId
353
- )
354
- internal
355
- returns (address beneficiary)
356
- {
357
- // TODO check if owner is IPolicyHolder
358
- // if so, obtain beneficiary from this contract
359
-
360
- // default beneficiary is policy nft owner
361
- beneficiary = getRegistry().ownerOf(policyNftId);
362
- }
363
-
364
569
 
365
570
  function _verifyCallerWithPolicy(
366
571
  NftId policyNftId
@@ -369,14 +574,16 @@ contract ClaimService is
369
574
  view
370
575
  virtual
371
576
  returns (
577
+ NftId productNftId,
372
578
  IInstance instance,
373
579
  InstanceReader instanceReader,
580
+ InstanceStore instanceStore,
374
581
  IPolicy.PolicyInfo memory policyInfo
375
582
  )
376
583
  {
377
- NftId productNftId;
378
584
  (productNftId,, instance) = _getAndVerifyActiveComponent(PRODUCT());
379
585
  instanceReader = instance.getInstanceReader();
586
+ instanceStore = instance.getInstanceStore();
380
587
 
381
588
  // check caller(product) policy match
382
589
  policyInfo = instanceReader.getPolicyInfo(policyNftId);
@@ -410,6 +617,65 @@ contract ClaimService is
410
617
  claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
411
618
  }
412
619
 
620
+ function _processConfirmedClaimByPool(
621
+ InstanceReader instanceReader,
622
+ NftId productNftId,
623
+ NftId policyNftId,
624
+ ClaimId claimId,
625
+ Amount amount
626
+ )
627
+ internal
628
+ {
629
+ NftId poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
630
+ if (instanceReader.getPoolInfo(poolNftId).isProcessingConfirmedClaims) {
631
+ address poolAddress = getRegistry().getObjectAddress(poolNftId);
632
+ IPoolComponent(poolAddress).processConfirmedClaim(policyNftId, claimId, amount);
633
+ }
634
+ }
635
+
636
+
637
+ function _policyHolderClaimConfirmed(
638
+ NftId policyNftId,
639
+ ClaimId claimId,
640
+ Amount confirmedAmount
641
+ )
642
+ internal
643
+ {
644
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
645
+ if(address(policyHolder) != address(0)) {
646
+ policyHolder.claimConfirmed(policyNftId, claimId, confirmedAmount);
647
+ }
648
+ }
649
+
650
+
651
+ function _policyHolderPayoutExecuted(
652
+ NftId policyNftId,
653
+ PayoutId payoutId,
654
+ address beneficiary,
655
+ Amount payoutAmount
656
+ )
657
+ internal
658
+ {
659
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
660
+ if(address(policyHolder) != address(0)) {
661
+ policyHolder.payoutExecuted(policyNftId, payoutId, payoutAmount, beneficiary);
662
+ }
663
+ }
664
+
665
+
666
+ function _getPolicyHolder(NftId policyNftId)
667
+ internal
668
+ view
669
+ returns (IPolicyHolder policyHolder)
670
+ {
671
+ address policyHolderAddress = getRegistry().ownerOf(policyNftId);
672
+ policyHolder = IPolicyHolder(policyHolderAddress);
673
+
674
+ if (!ContractLib.isPolicyHolder(policyHolderAddress)) {
675
+ policyHolder = IPolicyHolder(address(0));
676
+ }
677
+ }
678
+
413
679
 
414
680
  function _getDomain() internal pure override returns(ObjectType) {
415
681
  return CLAIM();