@etherisc/gif-next 0.0.2-b3a9c97-695 → 0.0.2-b3e9a44-364

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 (419) hide show
  1. package/README.md +5 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +33 -52
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +0 -19
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  14. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +52 -212
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +16 -184
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +148 -284
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +100 -120
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +16 -37
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +65 -31
  31. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  32. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  33. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  34. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1507 -0
  35. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  37. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1978 -0
  39. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
  41. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  42. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  43. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1427 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1187 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1561 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1996 -0
  51. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  52. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  53. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +16 -0
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +16 -0
  57. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  58. package/artifacts/contracts/instance/Instance.sol/Instance.json +26 -99
  59. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +97 -100
  61. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  62. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +424 -74
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +55 -146
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +77 -81
  69. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +249 -111
  71. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  73. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  76. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  78. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  79. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  80. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  86. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  87. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  88. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +42 -202
  89. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  90. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
  91. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  92. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  93. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +16 -37
  94. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +16 -0
  96. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +16 -184
  98. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  99. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +53 -144
  100. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +76 -80
  102. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  103. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +45 -185
  104. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  105. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  106. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  107. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +146 -220
  108. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +115 -107
  110. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  111. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +40 -0
  112. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  113. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +48 -41
  114. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  115. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +219 -118
  116. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  117. package/artifacts/contracts/pool/Pool.sol/Pool.json +45 -185
  118. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  119. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +284 -300
  120. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +96 -92
  122. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  123. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +47 -146
  124. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +73 -81
  126. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  127. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +44 -210
  128. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  129. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  130. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  131. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +256 -229
  132. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  133. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +117 -109
  134. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  135. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +16 -0
  136. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  137. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +148 -7
  138. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  139. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +128 -16
  140. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  141. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +59 -43
  142. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  143. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +44 -63
  144. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  145. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +18 -2
  146. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  147. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +218 -289
  148. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  149. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +108 -128
  150. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  151. package/artifacts/contracts/product/PricingService.sol/PricingService.json +133 -261
  152. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  153. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +97 -117
  154. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  155. package/artifacts/contracts/product/Product.sol/Product.json +44 -210
  156. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  157. package/artifacts/contracts/product/RiskService.sol/RiskService.json +604 -0
  158. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  159. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +698 -0
  160. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  161. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  162. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  163. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +288 -21
  164. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  165. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +16 -0
  166. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  167. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  168. package/artifacts/contracts/registry/Registry.sol/Registry.json +494 -82
  169. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  170. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +243 -131
  171. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  172. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +39 -313
  173. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  174. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +68 -72
  175. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  176. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  177. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  178. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +24 -14
  179. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  180. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  181. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  182. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  183. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  184. package/artifacts/contracts/shared/Component.sol/Component.json +16 -173
  185. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  186. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +103 -265
  187. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  188. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +112 -126
  189. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  190. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +21 -112
  191. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  192. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  193. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  194. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +16 -26
  195. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  196. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +16 -0
  197. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +16 -37
  199. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  200. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  201. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  202. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  203. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  204. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  205. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  206. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +16 -0
  207. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  208. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  209. package/artifacts/contracts/shared/IService.sol/IService.json +16 -0
  210. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  211. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  212. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  213. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +16 -184
  214. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  215. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  216. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  217. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  218. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  219. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  220. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  221. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  222. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  223. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +24 -97
  224. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  225. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  226. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  227. package/artifacts/contracts/shared/Service.sol/Service.json +21 -112
  228. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  229. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +288 -16
  230. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  231. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  232. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  233. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +43 -27
  234. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  235. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +16 -21
  236. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  237. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +63 -93
  238. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  239. package/artifacts/contracts/staking/Staking.sol/Staking.json +101 -248
  240. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  241. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  242. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  243. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +93 -100
  244. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  245. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  246. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  247. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +47 -159
  248. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  249. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +72 -76
  250. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  251. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +84 -84
  252. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  253. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
  254. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  255. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  256. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  257. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  260. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  262. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  264. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  265. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  266. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  268. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  269. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  270. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  272. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  274. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  276. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  278. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  280. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  282. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  284. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  286. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  288. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  291. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
  293. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
  295. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  297. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  298. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  299. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +55 -70
  300. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  301. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  302. package/contracts/authorization/AccessAdmin.sol +25 -24
  303. package/contracts/authorization/Authorization.sol +5 -2
  304. package/contracts/authorization/IAccessAdmin.sol +0 -1
  305. package/contracts/distribution/BasicDistribution.sol +2 -0
  306. package/contracts/distribution/Distribution.sol +3 -2
  307. package/contracts/distribution/DistributionService.sol +70 -45
  308. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  309. package/contracts/distribution/IDistributionService.sol +8 -2
  310. package/contracts/examples/fire/DamageLevel.sol +59 -0
  311. package/contracts/examples/fire/FirePool.sol +75 -0
  312. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  313. package/contracts/examples/fire/FireProduct.sol +411 -0
  314. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  315. package/contracts/examples/fire/FireUSD.sol +26 -0
  316. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  317. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  318. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  319. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  320. package/contracts/instance/IInstance.sol +7 -30
  321. package/contracts/instance/Instance.sol +10 -35
  322. package/contracts/instance/InstanceAdmin.sol +29 -7
  323. package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
  324. package/contracts/instance/InstanceReader.sol +106 -19
  325. package/contracts/instance/InstanceService.sol +12 -14
  326. package/contracts/instance/InstanceServiceManager.sol +6 -7
  327. package/contracts/instance/InstanceStore.sol +11 -1
  328. package/contracts/instance/base/ObjectLifecycle.sol +7 -1
  329. package/contracts/instance/module/IComponents.sol +4 -2
  330. package/contracts/instance/module/IPolicy.sol +23 -23
  331. package/contracts/oracle/Oracle.sol +2 -1
  332. package/contracts/oracle/OracleService.sol +41 -33
  333. package/contracts/oracle/OracleServiceManager.sol +6 -6
  334. package/contracts/pool/BasicPool.sol +12 -13
  335. package/contracts/pool/BundleService.sol +41 -17
  336. package/contracts/pool/BundleServiceManager.sol +6 -6
  337. package/contracts/pool/IBundleService.sol +10 -0
  338. package/contracts/pool/IPoolComponent.sol +18 -8
  339. package/contracts/pool/IPoolService.sol +49 -25
  340. package/contracts/pool/Pool.sol +61 -32
  341. package/contracts/pool/PoolService.sol +116 -77
  342. package/contracts/pool/PoolServiceManager.sol +4 -4
  343. package/contracts/product/ApplicationService.sol +13 -12
  344. package/contracts/product/ApplicationServiceManager.sol +4 -4
  345. package/contracts/product/BasicProduct.sol +1 -0
  346. package/contracts/product/ClaimService.sol +245 -81
  347. package/contracts/product/ClaimServiceManager.sol +4 -4
  348. package/contracts/product/IClaimService.sol +30 -7
  349. package/contracts/product/IPolicyService.sol +16 -20
  350. package/contracts/product/IPricingService.sol +7 -7
  351. package/contracts/product/IProductComponent.sol +17 -4
  352. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  353. package/contracts/product/PolicyService.sol +209 -118
  354. package/contracts/product/PolicyServiceManager.sol +4 -4
  355. package/contracts/product/PricingService.sol +42 -46
  356. package/contracts/product/PricingServiceManager.sol +3 -3
  357. package/contracts/product/Product.sol +67 -46
  358. package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
  359. package/contracts/product/RiskServiceManager.sol +39 -0
  360. package/contracts/registry/ChainNft.sol +65 -32
  361. package/contracts/registry/IRegistry.sol +55 -15
  362. package/contracts/registry/IRegistryService.sol +0 -9
  363. package/contracts/registry/Registry.sol +336 -197
  364. package/contracts/registry/RegistryAdmin.sol +150 -51
  365. package/contracts/registry/RegistryService.sol +55 -48
  366. package/contracts/registry/RegistryServiceManager.sol +2 -2
  367. package/contracts/registry/ReleaseRegistry.sol +12 -6
  368. package/contracts/registry/ServiceAuthorizationV3.sol +6 -8
  369. package/contracts/shared/Component.sol +12 -32
  370. package/contracts/shared/ComponentService.sol +17 -16
  371. package/contracts/shared/ComponentServiceManager.sol +8 -5
  372. package/contracts/shared/ComponentVerifyingService.sol +2 -3
  373. package/contracts/shared/ContractLib.sol +38 -0
  374. package/contracts/shared/IComponent.sol +0 -1
  375. package/contracts/shared/IInstanceLinkedComponent.sol +0 -7
  376. package/contracts/shared/INftOwnable.sol +2 -0
  377. package/contracts/shared/IPolicyHolder.sol +12 -22
  378. package/contracts/shared/InitializableERC165.sol +2 -2
  379. package/contracts/shared/InstanceLinkedComponent.sol +5 -6
  380. package/contracts/shared/NftOwnable.sol +21 -5
  381. package/contracts/shared/PolicyHolder.sol +15 -52
  382. package/contracts/shared/Registerable.sol +4 -4
  383. package/contracts/shared/RegistryLinked.sol +3 -2
  384. package/contracts/shared/Service.sol +16 -11
  385. package/contracts/shared/TokenHandler.sol +99 -22
  386. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  387. package/contracts/staking/IStaking.sol +2 -1
  388. package/contracts/staking/IStakingService.sol +0 -3
  389. package/contracts/staking/StakeManagerLib.sol +18 -25
  390. package/contracts/staking/Staking.sol +11 -29
  391. package/contracts/staking/StakingManager.sol +8 -6
  392. package/contracts/staking/StakingReader.sol +12 -5
  393. package/contracts/staking/StakingService.sol +3 -17
  394. package/contracts/staking/StakingServiceManager.sol +2 -2
  395. package/contracts/staking/TargetManagerLib.sol +7 -3
  396. package/contracts/type/Amount.sol +15 -0
  397. package/contracts/type/ClaimId.sol +6 -1
  398. package/contracts/type/NftId.sol +1 -0
  399. package/contracts/type/ObjectType.sol +16 -11
  400. package/contracts/type/PayoutId.sol +10 -10
  401. package/contracts/type/RiskId.sol +15 -1
  402. package/contracts/type/Seconds.sol +8 -0
  403. package/contracts/type/StateId.sol +1 -0
  404. package/contracts/type/UFixed.sol +4 -0
  405. package/contracts/upgradeability/ProxyManager.sol +67 -34
  406. package/contracts/upgradeability/Versionable.sol +2 -2
  407. package/package.json +2 -1
  408. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  409. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  410. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  411. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  412. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  413. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  414. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  415. package/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.dbg.json +0 -4
  416. package/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.json +0 -42
  417. package/contracts/product/ProductServiceManager.sol +0 -39
  418. package/contracts/shared/InitializableCustom.sol +0 -177
  419. package/contracts/shared/TokenTransferLib.sol +0 -60
@@ -1,23 +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, CONFIRMED, CLOSED, 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";
18
16
  import {IClaimService} from "./IClaimService.sol";
17
+ import {IComponents} from "../instance/module/IComponents.sol";
18
+ import {IInstance} from "../instance/IInstance.sol";
19
+ import {IPolicy} from "../instance/module/IPolicy.sol";
20
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
21
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
22
+ import {IPolicyService} from "../product/IPolicyService.sol";
19
23
  import {IPoolService} from "../pool/IPoolService.sol";
20
- import {TokenTransferLib} from "../shared/TokenTransferLib.sol";
21
24
 
22
25
 
23
26
  contract ClaimService is
@@ -25,6 +28,7 @@ contract ClaimService is
25
28
  IClaimService
26
29
  {
27
30
 
31
+ IPolicyService internal _policyService;
28
32
  IPoolService internal _poolService;
29
33
 
30
34
  function _initialize(
@@ -36,16 +40,16 @@ contract ClaimService is
36
40
  initializer()
37
41
  {
38
42
  (
39
- address registryAddress,,
40
- //address managerAddress
43
+ address registryAddress,
41
44
  address authority
42
- ) = abi.decode(data, (address, address, address));
45
+ ) = abi.decode(data, (address, address));
43
46
 
44
- initializeService(registryAddress, authority, owner);
47
+ _initializeService(registryAddress, authority, owner);
45
48
 
49
+ _policyService = IPolicyService(getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart()));
46
50
  _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
47
51
 
48
- registerInterface(type(IClaimService).interfaceId);
52
+ _registerInterface(type(IClaimService).interfaceId);
49
53
  }
50
54
 
51
55
  function submit(
@@ -55,9 +59,11 @@ contract ClaimService is
55
59
  )
56
60
  external
57
61
  virtual
62
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
58
63
  returns (ClaimId claimId)
59
64
  {
60
65
  (
66
+ ,
61
67
  IInstance instance,
62
68
  InstanceReader instanceReader,
63
69
  IPolicy.PolicyInfo memory policyInfo
@@ -68,6 +74,7 @@ contract ClaimService is
68
74
  revert ErrorClaimServicePolicyNotOpen(policyNftId);
69
75
  }
70
76
 
77
+ // TODO check claim amount > 0
71
78
  // check policy including this claim is still within sum insured
72
79
  if(policyInfo.payoutAmount + claimAmount > policyInfo.sumInsuredAmount) {
73
80
  revert ErrorClaimServiceClaimExceedsSumInsured(
@@ -81,14 +88,14 @@ contract ClaimService is
81
88
  instance.getInstanceStore().createClaim(
82
89
  policyNftId,
83
90
  claimId,
84
- IPolicy.ClaimInfo(
85
- claimAmount,
86
- AmountLib.zero(), // paidAmount
87
- 0, // payoutsCount
88
- 0, // openPayoutsCount
89
- claimData, // claim submission data
90
- "", // claim processing data
91
- TimestampLib.zero())); // closedAt
91
+ IPolicy.ClaimInfo({
92
+ claimAmount: claimAmount,
93
+ paidAmount: AmountLib.zero(),
94
+ payoutsCount: 0,
95
+ openPayoutsCount: 0,
96
+ submissionData: claimData,
97
+ processData: "",
98
+ closedAt: TimestampLib.zero()}));
92
99
 
93
100
  // update and save policy info with instance
94
101
  policyInfo.claimsCount += 1;
@@ -108,13 +115,17 @@ contract ClaimService is
108
115
  )
109
116
  external
110
117
  virtual
118
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
111
119
  {
112
120
  (
121
+ NftId productNftId,
113
122
  IInstance instance,
114
123
  InstanceReader instanceReader,
115
124
  IPolicy.PolicyInfo memory policyInfo
116
125
  ) = _verifyCallerWithPolicy(policyNftId);
117
126
 
127
+ // TODO add check for confirmedAmount > 0 and does not lead to exceeding sum insured
128
+
118
129
  // check/update claim info
119
130
  IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
120
131
  claimInfo.claimAmount = confirmedAmount;
@@ -125,9 +136,21 @@ contract ClaimService is
125
136
  policyInfo.claimAmount = policyInfo.claimAmount + confirmedAmount;
126
137
  instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
127
138
 
139
+ // should policy still be active it needs to become expired
140
+ if (policyInfo.claimAmount >= policyInfo.sumInsuredAmount) {
141
+ _policyService.expirePolicy(instance, policyNftId, TimestampLib.blockTimestamp());
142
+ }
143
+
128
144
  emit LogClaimServiceClaimConfirmed(policyNftId, claimId, confirmedAmount);
145
+
146
+ // callback to pool if applicable
147
+ _processConfirmedClaimByPool(instanceReader, productNftId, policyNftId, claimId, confirmedAmount);
148
+
149
+ // callback to policy holder if applicable
150
+ _policyHolderClaimConfirmed(policyNftId, claimId, confirmedAmount);
129
151
  }
130
152
 
153
+
131
154
  function decline(
132
155
  NftId policyNftId,
133
156
  ClaimId claimId,
@@ -135,8 +158,10 @@ contract ClaimService is
135
158
  )
136
159
  external
137
160
  virtual
161
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
138
162
  {
139
163
  (
164
+ ,
140
165
  IInstance instance,
141
166
  InstanceReader instanceReader,
142
167
  IPolicy.PolicyInfo memory policyInfo
@@ -155,14 +180,46 @@ contract ClaimService is
155
180
  emit LogClaimServiceClaimDeclined(policyNftId, claimId);
156
181
  }
157
182
 
183
+
184
+ // TODO add test case
185
+ function revoke(
186
+ NftId policyNftId,
187
+ ClaimId claimId
188
+ )
189
+ external
190
+ virtual
191
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
192
+ {
193
+ (
194
+ ,
195
+ IInstance instance,
196
+ InstanceReader instanceReader,
197
+ IPolicy.PolicyInfo memory policyInfo
198
+ ) = _verifyCallerWithPolicy(policyNftId);
199
+
200
+ // check/update claim info
201
+ IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
202
+ claimInfo.closedAt = TimestampLib.blockTimestamp();
203
+ instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, REVOKED());
204
+
205
+ // update and save policy info with instance
206
+ policyInfo.openClaimsCount -= 1;
207
+ instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
208
+
209
+ emit LogClaimServiceClaimRevoked(policyNftId, claimId);
210
+ }
211
+
212
+
158
213
  function close(
159
214
  NftId policyNftId,
160
215
  ClaimId claimId
161
216
  )
162
217
  external
163
218
  virtual
219
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
164
220
  {
165
221
  (
222
+ ,
166
223
  IInstance instance,
167
224
  InstanceReader instanceReader,
168
225
  IPolicy.PolicyInfo memory policyInfo
@@ -193,51 +250,48 @@ contract ClaimService is
193
250
  }
194
251
 
195
252
 
196
- function createPayout(
253
+ function createPayoutForBeneficiary(
197
254
  NftId policyNftId,
198
255
  ClaimId claimId,
199
256
  Amount amount,
257
+ address beneficiary,
200
258
  bytes memory data
201
259
  )
202
260
  external
261
+ virtual
262
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
203
263
  returns (PayoutId payoutId)
204
264
  {
205
- (
206
- IInstance instance,
207
- InstanceReader instanceReader,
208
- IPolicy.PolicyInfo memory policyInfo
209
- ) = _verifyCallerWithPolicy(policyNftId);
210
-
211
- IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
212
- StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
213
-
214
- // TODO add checks
215
- // claim needs to be open
216
- // claim.paidAmount + amount <= claim.claimAmount
265
+ if (beneficiary == address(0)) {
266
+ revert ErrorClaimServiceBeneficiaryIsZero(policyNftId, claimId);
267
+ }
217
268
 
218
- // check/update claim info
219
- // create payout info with instance
220
- uint8 claimNo = claimInfo.payoutsCount + 1;
221
- payoutId = PayoutIdLib.toPayoutId(claimId, claimNo);
222
- instance.getInstanceStore().createPayout(
269
+ return _createPayout(
223
270
  policyNftId,
224
- payoutId,
225
- IPolicy.PayoutInfo(
226
- payoutId.toClaimId(),
227
- amount,
228
- data,
229
- TimestampLib.zero()));
230
-
231
- // update and save claim info with instance
232
- claimInfo.payoutsCount += 1;
233
- claimInfo.openPayoutsCount += 1;
234
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
271
+ claimId,
272
+ amount,
273
+ beneficiary,
274
+ data);
275
+ }
235
276
 
236
- // update and save policy info with instance
237
- policyInfo.payoutAmount.add(amount);
238
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
239
277
 
240
- emit LogClaimServicePayoutCreated(policyNftId, payoutId, amount);
278
+ function createPayout(
279
+ NftId policyNftId,
280
+ ClaimId claimId,
281
+ Amount amount,
282
+ bytes memory data
283
+ )
284
+ external
285
+ virtual
286
+ // nonReentrant() // prevents creating a reinsurance payout in a single tx
287
+ returns (PayoutId payoutId)
288
+ {
289
+ return _createPayout(
290
+ policyNftId,
291
+ claimId,
292
+ amount,
293
+ address(0), // defaults to owner of policy nft
294
+ data);
241
295
  }
242
296
 
243
297
 
@@ -247,8 +301,10 @@ contract ClaimService is
247
301
  )
248
302
  external
249
303
  virtual
304
+ // nonReentrant() // prevents creating a reinsurance payout in a single tx
250
305
  {
251
306
  (
307
+ ,
252
308
  IInstance instance,
253
309
  InstanceReader instanceReader,
254
310
  IPolicy.PolicyInfo memory policyInfo
@@ -261,7 +317,6 @@ contract ClaimService is
261
317
  payoutInfo.paidAt = TimestampLib.blockTimestamp();
262
318
  instance.getInstanceStore().updatePayout(policyNftId, payoutId, payoutInfo, PAID());
263
319
 
264
- // TODO update and save claim info with instance
265
320
  ClaimId claimId = payoutId.toClaimId();
266
321
  Amount payoutAmount = payoutInfo.amount;
267
322
  IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
@@ -271,7 +326,7 @@ contract ClaimService is
271
326
  // check if this payout is closing the linked claim
272
327
  // update claim and policy info accordingly
273
328
  if(claimInfo.openPayoutsCount == 0 && claimInfo.paidAmount == claimInfo.claimAmount) {
274
- claimInfo.closedAt == TimestampLib.blockTimestamp();
329
+ claimInfo.closedAt = TimestampLib.blockTimestamp();
275
330
  instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CLOSED());
276
331
 
277
332
  policyInfo.openClaimsCount -= 1;
@@ -284,16 +339,17 @@ contract ClaimService is
284
339
  instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
285
340
 
286
341
  // inform pool about payout
287
- _poolService.reduceCollateral(
342
+ _poolService.processPayout(
288
343
  instance,
289
344
  address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
290
345
  policyNftId,
291
346
  policyInfo,
292
347
  payoutAmount);
293
-
348
+
294
349
  // transfer payout token and fee
295
350
  (
296
351
  Amount netPayoutAmount,
352
+ Amount processingFeeAmount,
297
353
  address beneficiary
298
354
  ) = _calculatePayoutAmount(
299
355
  instanceReader,
@@ -301,17 +357,78 @@ contract ClaimService is
301
357
  policyInfo,
302
358
  payoutInfo);
303
359
 
304
- // TODO callback IPolicyHolder
305
-
306
- emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount);
360
+ emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount, processingFeeAmount);
307
361
 
308
362
  {
309
363
  NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
310
364
  IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
311
- TokenTransferLib.distributeTokens(poolInfo.wallet, beneficiary, netPayoutAmount, poolInfo.tokenHandler);
365
+ poolInfo.tokenHandler.distributeTokens(poolInfo.wallet, beneficiary, netPayoutAmount);
366
+
367
+ // TODO add 2nd token tx if processingFeeAmount > 0
368
+ }
369
+
370
+ // callback to policy holder if applicable
371
+ _policyHolderPayoutExecuted(policyNftId, payoutId, beneficiary, payoutAmount);
372
+ }
373
+
374
+ // internal functions
375
+
376
+
377
+ function _createPayout(
378
+ NftId policyNftId,
379
+ ClaimId claimId,
380
+ Amount amount,
381
+ address beneficiary,
382
+ bytes memory data
383
+ )
384
+ internal
385
+ virtual
386
+ returns (PayoutId payoutId)
387
+ {
388
+ (
389
+ ,
390
+ IInstance instance,
391
+ InstanceReader instanceReader,
392
+ IPolicy.PolicyInfo memory policyInfo
393
+ ) = _verifyCallerWithPolicy(policyNftId);
394
+
395
+ IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
396
+ StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
397
+
398
+ // TODO add checks
399
+ // claim needs to be open
400
+ // claim.paidAmount + amount <= claim.claimAmount
401
+
402
+ // check/update claim info
403
+ // create payout info with instance
404
+ uint24 payoutNo = claimInfo.payoutsCount + 1;
405
+ payoutId = PayoutIdLib.toPayoutId(claimId, payoutNo);
406
+ if (beneficiary == address(0)) {
407
+ beneficiary = getRegistry().ownerOf(policyNftId);
312
408
  }
409
+ instance.getInstanceStore().createPayout(
410
+ policyNftId,
411
+ payoutId,
412
+ IPolicy.PayoutInfo({
413
+ claimId: payoutId.toClaimId(),
414
+ amount: amount,
415
+ beneficiary: beneficiary,
416
+ data: data,
417
+ paidAt: TimestampLib.zero()}));
418
+
419
+ // update and save claim info with instance
420
+ claimInfo.payoutsCount += 1;
421
+ claimInfo.openPayoutsCount += 1;
422
+ instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
423
+
424
+ // update and save policy info with instance
425
+ policyInfo.payoutAmount.add(amount);
426
+ instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
427
+
428
+ emit LogClaimServicePayoutCreated(policyNftId, payoutId, amount, beneficiary);
313
429
  }
314
430
 
431
+
315
432
  function _calculatePayoutAmount(
316
433
  InstanceReader instanceReader,
317
434
  NftId policyNftId,
@@ -321,6 +438,7 @@ contract ClaimService is
321
438
  internal
322
439
  returns (
323
440
  Amount netPayoutAmount,
441
+ Amount processingFeeAmount,
324
442
  address beneficiary
325
443
  )
326
444
  {
@@ -334,33 +452,20 @@ contract ClaimService is
334
452
  IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
335
453
 
336
454
  netPayoutAmount = payoutAmount;
337
- beneficiary = _getBeneficiary(policyNftId, payoutInfo.claimId);
455
+
456
+ if (payoutInfo.beneficiary == address(0)) {
457
+ beneficiary = getRegistry().ownerOf(policyNftId);
458
+ } else {
459
+ beneficiary = payoutInfo.beneficiary;
460
+ }
338
461
 
339
462
  IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
340
463
  if(FeeLib.gtz(productInfo.processingFee)) {
341
- // TODO calculate net payout and processing fees
342
- // TODO transfer processing fees to product wallet
343
- // TODO inform product to update fee book keeping
464
+ // TODO calculate and set net payout and processing fees
344
465
  }
345
466
  }
346
467
  }
347
468
 
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
469
 
365
470
  function _verifyCallerWithPolicy(
366
471
  NftId policyNftId
@@ -369,12 +474,12 @@ contract ClaimService is
369
474
  view
370
475
  virtual
371
476
  returns (
477
+ NftId productNftId,
372
478
  IInstance instance,
373
479
  InstanceReader instanceReader,
374
480
  IPolicy.PolicyInfo memory policyInfo
375
481
  )
376
482
  {
377
- NftId productNftId;
378
483
  (productNftId,, instance) = _getAndVerifyActiveComponent(PRODUCT());
379
484
  instanceReader = instance.getInstanceReader();
380
485
 
@@ -410,6 +515,65 @@ contract ClaimService is
410
515
  claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
411
516
  }
412
517
 
518
+ function _processConfirmedClaimByPool(
519
+ InstanceReader instanceReader,
520
+ NftId productNftId,
521
+ NftId policyNftId,
522
+ ClaimId claimId,
523
+ Amount amount
524
+ )
525
+ internal
526
+ {
527
+ NftId poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
528
+ if (instanceReader.getPoolInfo(poolNftId).isProcessingConfirmedClaims) {
529
+ address poolAddress = getRegistry().getObjectAddress(poolNftId);
530
+ IPoolComponent(poolAddress).processConfirmedClaim(policyNftId, claimId, amount);
531
+ }
532
+ }
533
+
534
+
535
+ function _policyHolderClaimConfirmed(
536
+ NftId policyNftId,
537
+ ClaimId claimId,
538
+ Amount confirmedAmount
539
+ )
540
+ internal
541
+ {
542
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
543
+ if(address(policyHolder) != address(0)) {
544
+ policyHolder.claimConfirmed(policyNftId, claimId, confirmedAmount);
545
+ }
546
+ }
547
+
548
+
549
+ function _policyHolderPayoutExecuted(
550
+ NftId policyNftId,
551
+ PayoutId payoutId,
552
+ address beneficiary,
553
+ Amount payoutAmount
554
+ )
555
+ internal
556
+ {
557
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
558
+ if(address(policyHolder) != address(0)) {
559
+ policyHolder.payoutExecuted(policyNftId, payoutId, payoutAmount, beneficiary);
560
+ }
561
+ }
562
+
563
+
564
+ function _getPolicyHolder(NftId policyNftId)
565
+ internal
566
+ view
567
+ returns (IPolicyHolder policyHolder)
568
+ {
569
+ address policyHolderAddress = getRegistry().ownerOf(policyNftId);
570
+ policyHolder = IPolicyHolder(policyHolderAddress);
571
+
572
+ if (!ContractLib.isPolicyHolder(policyHolderAddress)) {
573
+ policyHolder = IPolicyHolder(address(0));
574
+ }
575
+ }
576
+
413
577
 
414
578
  function _getDomain() internal pure override returns(ObjectType) {
415
579
  return CLAIM();
@@ -12,14 +12,14 @@ contract ClaimServiceManager is ProxyManager {
12
12
  /// @dev initializes proxy manager with service implementation
13
13
  constructor(
14
14
  address authority,
15
- address registryAddress,
15
+ address registry,
16
16
  bytes32 salt
17
17
  )
18
- ProxyManager(registryAddress)
19
18
  {
20
19
  ClaimService svc = new ClaimService{salt: salt}();
21
- bytes memory data = abi.encode(registryAddress, address(this), authority);
22
- IVersionable versionable = deployDetermenistic(
20
+ bytes memory data = abi.encode(registry, authority);
21
+ IVersionable versionable = initialize(
22
+ registry,
23
23
  address(svc),
24
24
  data,
25
25
  salt);
@@ -23,17 +23,20 @@ interface IClaimService is
23
23
  event LogClaimServiceClaimSubmitted(NftId policyNftId, ClaimId claimId, Amount claimAmount);
24
24
  event LogClaimServiceClaimConfirmed(NftId policyNftId, ClaimId claimId, Amount confirmedAmount);
25
25
  event LogClaimServiceClaimDeclined(NftId policyNftId, ClaimId claimId);
26
+ event LogClaimServiceClaimRevoked(NftId policyNftId, ClaimId claimId);
26
27
  event LogClaimServiceClaimClosed(NftId policyNftId, ClaimId claimId);
27
28
 
28
- event LogClaimServicePayoutCreated(NftId policyNftId, PayoutId payoutId, Amount amount);
29
- event LogClaimServicePayoutProcessed(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary, Amount netAmount);
29
+ event LogClaimServicePayoutCreated(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary);
30
+ event LogClaimServicePayoutProcessed(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary, Amount netAmount, Amount processingFeeAmount);
31
+ error ErrorClaimServiceBeneficiarySet(NftId policyNftId, PayoutId payoutId, address beneficiary);
30
32
 
31
33
  error ErrorClaimServicePolicyProductMismatch(NftId policyNftId, NftId expectedProduct, NftId actualProduct);
32
34
  error ErrorClaimServicePolicyNotOpen(NftId policyNftId);
33
35
  error ErrorClaimServiceClaimExceedsSumInsured(NftId policyNftId, Amount sumInsured, Amount payoutsIncludingClaimAmount);
36
+ error ErrorClaimServiceBeneficiaryIsZero(NftId policyNftId, ClaimId claimId);
34
37
  error ErrorClaimsServicePayoutAmountIsZero(NftId policyNftId, PayoutId payoutId);
35
38
 
36
- error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint8 openPayouts);
39
+ error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint24 openPayouts);
37
40
  error ErrorClaimServiceClaimWithMissingPayouts(NftId policyNftId, ClaimId claimId, Amount claimAmount, Amount paidAmount);
38
41
  error ErrorClaimServiceClaimNotInExpectedState(NftId policyNftId, ClaimId claimId, StateId expectedState, StateId actualState);
39
42
 
@@ -47,9 +50,6 @@ interface IClaimService is
47
50
  ) external returns (ClaimId claimId);
48
51
 
49
52
 
50
- // TODO add claim revoke functionality
51
-
52
-
53
53
  /// @dev declines the specified claim
54
54
  /// function can only be called by product, policy needs to match with calling product
55
55
  function decline(
@@ -59,6 +59,14 @@ interface IClaimService is
59
59
  ) external;
60
60
 
61
61
 
62
+ /// @dev revokes the specified claim
63
+ /// function can only be called by product, policy needs to match with calling product
64
+ function revoke(
65
+ NftId policyNftId,
66
+ ClaimId claimId
67
+ ) external;
68
+
69
+
62
70
  /// @dev confirms the specified claim and specifies the payout amount
63
71
  /// function can only be called by product, policy needs to match with calling product
64
72
  function confirm(
@@ -77,7 +85,8 @@ interface IClaimService is
77
85
  ) external;
78
86
 
79
87
 
80
- /// @dev creates a new payout for the specified claim
88
+ /// @dev Creates a new payout for the specified claim.
89
+ /// The beneficiary is the holder of the policy NFT
81
90
  /// returns the id of the newly created payout, this id is unique for the specified policy
82
91
  /// function can only be called by product, policy needs to match with calling product
83
92
  function createPayout(
@@ -90,6 +99,20 @@ interface IClaimService is
90
99
  returns (PayoutId payoutId);
91
100
 
92
101
 
102
+ /// @dev Creates a new payout for the specified claim and beneficiary.
103
+ /// returns the id of the newly created payout, this id is unique for the specified policy
104
+ /// function can only be called by product, policy needs to match with calling product
105
+ function createPayoutForBeneficiary(
106
+ NftId policyNftId,
107
+ ClaimId claimId,
108
+ Amount amount,
109
+ address beneficiary,
110
+ bytes memory data
111
+ )
112
+ external
113
+ returns (PayoutId payoutId);
114
+
115
+
93
116
  /// @dev processes the specified payout
94
117
  /// this includes moving the payout token to the beneficiary (default: policy holder)
95
118
  /// function can only be called by product, policy needs to match with calling product