@etherisc/gif-next 0.0.2-f1e0c66-773 → 0.0.2-f1f3b2c-994

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 (423) hide show
  1. package/README.md +7 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +81 -63
  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 +48 -30
  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/IServiceAuthorization.sol/IServiceAuthorization.json +21 -2
  14. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +72 -9
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +63 -248
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +21 -222
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +134 -286
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +84 -120
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +21 -37
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +49 -62
  32. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  33. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  34. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  35. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1512 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1999 -0
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
  42. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1432 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1192 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1566 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2001 -0
  52. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  53. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  56. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  57. package/artifacts/contracts/instance/Instance.sol/Instance.json +10 -99
  58. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +145 -111
  60. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  62. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -124
  64. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +39 -146
  66. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +61 -81
  68. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +285 -218
  70. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  72. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  75. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  76. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +45 -4
  77. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  79. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  85. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  86. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  87. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  88. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +47 -232
  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 +15 -31
  94. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  96. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +15 -216
  97. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  98. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +37 -144
  99. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  100. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +60 -80
  101. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  102. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +51 -274
  103. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  104. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  105. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  106. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +319 -188
  107. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  108. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +130 -94
  109. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  110. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +149 -23
  111. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  112. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -88
  113. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  114. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +360 -171
  115. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  116. package/artifacts/contracts/pool/Pool.sol/Pool.json +41 -270
  117. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  118. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +492 -333
  119. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  120. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +98 -82
  121. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  122. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +36 -162
  123. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  124. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +57 -89
  125. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  126. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +43 -242
  127. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  128. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  129. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  130. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +263 -181
  131. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  132. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +104 -100
  133. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  134. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  135. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  136. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +147 -6
  137. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  138. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +282 -119
  139. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  140. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
  141. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  142. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +43 -57
  143. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  144. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  145. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  146. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +399 -327
  147. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +104 -100
  149. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  150. package/artifacts/contracts/product/PricingService.sol/PricingService.json +115 -267
  151. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  152. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -120
  153. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  154. package/artifacts/contracts/product/Product.sol/Product.json +43 -242
  155. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  156. package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
  157. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  158. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -0
  159. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  160. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  161. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  162. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +238 -34
  163. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  164. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  165. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  166. package/artifacts/contracts/registry/Registry.sol/Registry.json +436 -95
  167. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  168. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +261 -143
  169. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  170. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -313
  171. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  172. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +52 -72
  173. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  174. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +46 -5
  175. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  176. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +117 -215
  177. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  178. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +70 -12
  179. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  180. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  181. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  182. package/artifacts/contracts/shared/Component.sol/Component.json +15 -205
  183. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  184. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +89 -212
  185. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  186. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +96 -114
  187. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  188. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +5 -112
  189. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  190. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  191. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  192. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +15 -20
  193. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  194. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  195. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +15 -31
  196. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  197. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  198. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  199. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  200. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  201. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  202. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  203. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  204. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  205. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  206. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  207. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  208. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  209. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +15 -216
  210. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  211. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +41 -0
  212. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  213. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +41 -0
  214. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  215. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  216. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  217. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -57
  218. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  219. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  220. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  221. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -97
  222. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  223. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  224. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  225. package/artifacts/contracts/shared/Service.sol/Service.json +5 -112
  226. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  227. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  228. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  229. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  230. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  231. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +42 -21
  232. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  233. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  234. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +63 -93
  235. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  236. package/artifacts/contracts/staking/Staking.sol/Staking.json +100 -256
  237. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  238. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +45 -4
  239. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  240. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +77 -88
  241. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  242. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  243. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  244. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +31 -138
  245. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  246. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +56 -76
  247. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  248. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +168 -127
  249. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  250. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
  251. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  252. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  254. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  256. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  258. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  260. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  262. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  263. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  264. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  266. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  267. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  268. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  270. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  272. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  274. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  276. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  278. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  280. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  282. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  284. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  286. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  289. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
  291. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
  293. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  295. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  296. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  297. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +39 -70
  298. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  299. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  300. package/contracts/authorization/AccessAdmin.sol +31 -24
  301. package/contracts/authorization/Authorization.sol +5 -2
  302. package/contracts/authorization/IAccessAdmin.sol +3 -2
  303. package/contracts/authorization/IServiceAuthorization.sol +4 -2
  304. package/contracts/authorization/ServiceAuthorization.sol +27 -11
  305. package/contracts/distribution/Distribution.sol +1 -1
  306. package/contracts/distribution/DistributionService.sol +32 -33
  307. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  308. package/contracts/distribution/IDistributionService.sol +9 -5
  309. package/contracts/examples/fire/DamageLevel.sol +59 -0
  310. package/contracts/examples/fire/FirePool.sol +75 -0
  311. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  312. package/contracts/examples/fire/FireProduct.sol +411 -0
  313. package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
  314. package/contracts/examples/fire/FireUSD.sol +26 -0
  315. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  316. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  317. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  318. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  319. package/contracts/instance/IInstance.sol +7 -30
  320. package/contracts/instance/Instance.sol +10 -35
  321. package/contracts/instance/InstanceAdmin.sol +29 -7
  322. package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
  323. package/contracts/instance/InstanceReader.sol +115 -25
  324. package/contracts/instance/InstanceService.sol +63 -41
  325. package/contracts/instance/InstanceServiceManager.sol +6 -7
  326. package/contracts/instance/InstanceStore.sol +11 -1
  327. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  328. package/contracts/instance/module/IBundle.sol +1 -1
  329. package/contracts/instance/module/IComponents.sol +4 -7
  330. package/contracts/instance/module/IPolicy.sol +24 -24
  331. package/contracts/mock/Dip.sol +1 -1
  332. package/contracts/oracle/Oracle.sol +2 -1
  333. package/contracts/oracle/OracleService.sol +11 -8
  334. package/contracts/oracle/OracleServiceManager.sol +6 -6
  335. package/contracts/pool/BasicPool.sol +7 -5
  336. package/contracts/pool/BasicPoolAuthorization.sol +5 -2
  337. package/contracts/pool/BundleService.sol +166 -46
  338. package/contracts/pool/BundleServiceManager.sol +6 -6
  339. package/contracts/pool/IBundleService.sol +31 -8
  340. package/contracts/pool/IPoolComponent.sol +18 -8
  341. package/contracts/pool/IPoolService.sol +57 -36
  342. package/contracts/pool/Pool.sol +59 -34
  343. package/contracts/pool/PoolService.sol +231 -102
  344. package/contracts/pool/PoolServiceManager.sol +4 -4
  345. package/contracts/product/ApplicationService.sol +50 -29
  346. package/contracts/product/ApplicationServiceManager.sol +4 -4
  347. package/contracts/product/BasicProduct.sol +1 -0
  348. package/contracts/product/ClaimService.sol +251 -87
  349. package/contracts/product/ClaimServiceManager.sol +4 -4
  350. package/contracts/product/IApplicationService.sol +1 -0
  351. package/contracts/product/IClaimService.sol +31 -7
  352. package/contracts/product/IPolicyService.sol +34 -34
  353. package/contracts/product/IPricingService.sol +7 -7
  354. package/contracts/product/IProductComponent.sol +17 -4
  355. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  356. package/contracts/product/PolicyService.sol +379 -192
  357. package/contracts/product/PolicyServiceManager.sol +4 -4
  358. package/contracts/product/PricingService.sol +46 -46
  359. package/contracts/product/PricingServiceManager.sol +3 -3
  360. package/contracts/product/Product.sol +81 -50
  361. package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
  362. package/contracts/product/RiskServiceManager.sol +39 -0
  363. package/contracts/registry/ChainNft.sol +65 -32
  364. package/contracts/registry/IRegistry.sol +51 -18
  365. package/contracts/registry/IRegistryService.sol +0 -9
  366. package/contracts/registry/Registry.sol +328 -197
  367. package/contracts/registry/RegistryAdmin.sol +134 -51
  368. package/contracts/registry/RegistryService.sol +55 -48
  369. package/contracts/registry/RegistryServiceManager.sol +2 -2
  370. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  371. package/contracts/registry/ReleaseRegistry.sol +194 -183
  372. package/contracts/registry/ServiceAuthorizationV3.sol +8 -10
  373. package/contracts/shared/Component.sol +25 -29
  374. package/contracts/shared/ComponentService.sol +20 -30
  375. package/contracts/shared/ComponentServiceManager.sol +8 -5
  376. package/contracts/shared/ComponentVerifyingService.sol +2 -3
  377. package/contracts/shared/ContractLib.sol +38 -0
  378. package/contracts/shared/IComponent.sol +7 -4
  379. package/contracts/shared/IInstanceLinkedComponent.sol +8 -15
  380. package/contracts/shared/ILifecycle.sol +3 -1
  381. package/contracts/shared/IPolicyHolder.sol +12 -22
  382. package/contracts/shared/InitializableERC165.sol +2 -2
  383. package/contracts/shared/InstanceLinkedComponent.sol +5 -6
  384. package/contracts/shared/KeyValueStore.sol +1 -1
  385. package/contracts/shared/Lifecycle.sol +13 -2
  386. package/contracts/shared/NftOwnable.sol +5 -5
  387. package/contracts/shared/PolicyHolder.sol +15 -52
  388. package/contracts/shared/Registerable.sol +4 -4
  389. package/contracts/shared/RegistryLinked.sol +3 -2
  390. package/contracts/shared/Service.sol +16 -11
  391. package/contracts/shared/TokenHandler.sol +100 -19
  392. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  393. package/contracts/staking/IStaking.sol +2 -1
  394. package/contracts/staking/StakeManagerLib.sol +18 -25
  395. package/contracts/staking/Staking.sol +11 -29
  396. package/contracts/staking/StakingManager.sol +8 -6
  397. package/contracts/staking/StakingReader.sol +12 -5
  398. package/contracts/staking/StakingService.sol +10 -14
  399. package/contracts/staking/StakingServiceManager.sol +2 -2
  400. package/contracts/staking/TargetManagerLib.sol +7 -3
  401. package/contracts/type/Amount.sol +15 -0
  402. package/contracts/type/Blocknumber.sol +7 -1
  403. package/contracts/type/ClaimId.sol +6 -1
  404. package/contracts/type/NftId.sol +1 -0
  405. package/contracts/type/ObjectType.sol +16 -11
  406. package/contracts/type/PayoutId.sol +10 -10
  407. package/contracts/type/RiskId.sol +15 -1
  408. package/contracts/type/Seconds.sol +21 -1
  409. package/contracts/type/StateId.sol +15 -1
  410. package/contracts/type/Timestamp.sol +11 -1
  411. package/contracts/type/UFixed.sol +4 -0
  412. package/contracts/upgradeability/ProxyManager.sol +67 -34
  413. package/contracts/upgradeability/Versionable.sol +2 -2
  414. package/package.json +2 -1
  415. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  416. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  417. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  418. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  419. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  420. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  421. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  422. package/contracts/product/ProductServiceManager.sol +0 -39
  423. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -12,14 +12,14 @@ contract ApplicationServiceManager 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
  ApplicationService svc = new ApplicationService{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);
@@ -21,6 +21,7 @@ abstract contract BasicProduct is
21
21
  {
22
22
  _setFees(productFee, processingFee);
23
23
  }
24
+
24
25
  function _initializeBasicProduct(
25
26
  address registry,
26
27
  NftId instanceNftId,
@@ -1,21 +1,25 @@
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
24
 
21
25
 
@@ -24,6 +28,7 @@ contract ClaimService is
24
28
  IClaimService
25
29
  {
26
30
 
31
+ IPolicyService internal _policyService;
27
32
  IPoolService internal _poolService;
28
33
 
29
34
  function _initialize(
@@ -35,16 +40,16 @@ contract ClaimService is
35
40
  initializer()
36
41
  {
37
42
  (
38
- address registryAddress,,
39
- //address managerAddress
43
+ address registryAddress,
40
44
  address authority
41
- ) = abi.decode(data, (address, address, address));
45
+ ) = abi.decode(data, (address, address));
42
46
 
43
- initializeService(registryAddress, authority, owner);
47
+ _initializeService(registryAddress, authority, owner);
44
48
 
49
+ _policyService = IPolicyService(getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart()));
45
50
  _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
46
51
 
47
- registerInterface(type(IClaimService).interfaceId);
52
+ _registerInterface(type(IClaimService).interfaceId);
48
53
  }
49
54
 
50
55
  function submit(
@@ -54,9 +59,11 @@ contract ClaimService is
54
59
  )
55
60
  external
56
61
  virtual
62
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
57
63
  returns (ClaimId claimId)
58
64
  {
59
65
  (
66
+ ,
60
67
  IInstance instance,
61
68
  InstanceReader instanceReader,
62
69
  IPolicy.PolicyInfo memory policyInfo
@@ -67,6 +74,7 @@ contract ClaimService is
67
74
  revert ErrorClaimServicePolicyNotOpen(policyNftId);
68
75
  }
69
76
 
77
+ // TODO check claim amount > 0
70
78
  // check policy including this claim is still within sum insured
71
79
  if(policyInfo.payoutAmount + claimAmount > policyInfo.sumInsuredAmount) {
72
80
  revert ErrorClaimServiceClaimExceedsSumInsured(
@@ -80,14 +88,14 @@ contract ClaimService is
80
88
  instance.getInstanceStore().createClaim(
81
89
  policyNftId,
82
90
  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
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()}));
91
99
 
92
100
  // update and save policy info with instance
93
101
  policyInfo.claimsCount += 1;
@@ -107,13 +115,17 @@ contract ClaimService is
107
115
  )
108
116
  external
109
117
  virtual
118
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
110
119
  {
111
120
  (
121
+ NftId productNftId,
112
122
  IInstance instance,
113
123
  InstanceReader instanceReader,
114
124
  IPolicy.PolicyInfo memory policyInfo
115
125
  ) = _verifyCallerWithPolicy(policyNftId);
116
126
 
127
+ // TODO add check for confirmedAmount > 0 and does not lead to exceeding sum insured
128
+
117
129
  // check/update claim info
118
130
  IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
119
131
  claimInfo.claimAmount = confirmedAmount;
@@ -124,9 +136,21 @@ contract ClaimService is
124
136
  policyInfo.claimAmount = policyInfo.claimAmount + confirmedAmount;
125
137
  instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
126
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
+
127
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);
128
151
  }
129
152
 
153
+
130
154
  function decline(
131
155
  NftId policyNftId,
132
156
  ClaimId claimId,
@@ -134,8 +158,10 @@ contract ClaimService is
134
158
  )
135
159
  external
136
160
  virtual
161
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
137
162
  {
138
163
  (
164
+ ,
139
165
  IInstance instance,
140
166
  InstanceReader instanceReader,
141
167
  IPolicy.PolicyInfo memory policyInfo
@@ -154,14 +180,46 @@ contract ClaimService is
154
180
  emit LogClaimServiceClaimDeclined(policyNftId, claimId);
155
181
  }
156
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
+
157
213
  function close(
158
214
  NftId policyNftId,
159
215
  ClaimId claimId
160
216
  )
161
217
  external
162
218
  virtual
219
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
163
220
  {
164
221
  (
222
+ ,
165
223
  IInstance instance,
166
224
  InstanceReader instanceReader,
167
225
  IPolicy.PolicyInfo memory policyInfo
@@ -192,51 +250,48 @@ contract ClaimService is
192
250
  }
193
251
 
194
252
 
195
- function createPayout(
253
+ function createPayoutForBeneficiary(
196
254
  NftId policyNftId,
197
255
  ClaimId claimId,
198
256
  Amount amount,
257
+ address beneficiary,
199
258
  bytes memory data
200
259
  )
201
260
  external
261
+ virtual
262
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
202
263
  returns (PayoutId payoutId)
203
264
  {
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
265
+ if (beneficiary == address(0)) {
266
+ revert ErrorClaimServiceBeneficiaryIsZero(policyNftId, claimId);
267
+ }
216
268
 
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(
269
+ return _createPayout(
222
270
  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());
271
+ claimId,
272
+ amount,
273
+ beneficiary,
274
+ data);
275
+ }
234
276
 
235
- // update and save policy info with instance
236
- policyInfo.payoutAmount.add(amount);
237
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
238
277
 
239
- 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);
240
295
  }
241
296
 
242
297
 
@@ -246,8 +301,10 @@ contract ClaimService is
246
301
  )
247
302
  external
248
303
  virtual
304
+ // nonReentrant() // prevents creating a reinsurance payout in a single tx
249
305
  {
250
306
  (
307
+ ,
251
308
  IInstance instance,
252
309
  InstanceReader instanceReader,
253
310
  IPolicy.PolicyInfo memory policyInfo
@@ -260,7 +317,6 @@ contract ClaimService is
260
317
  payoutInfo.paidAt = TimestampLib.blockTimestamp();
261
318
  instance.getInstanceStore().updatePayout(policyNftId, payoutId, payoutInfo, PAID());
262
319
 
263
- // TODO update and save claim info with instance
264
320
  ClaimId claimId = payoutId.toClaimId();
265
321
  Amount payoutAmount = payoutInfo.amount;
266
322
  IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
@@ -270,7 +326,7 @@ contract ClaimService is
270
326
  // check if this payout is closing the linked claim
271
327
  // update claim and policy info accordingly
272
328
  if(claimInfo.openPayoutsCount == 0 && claimInfo.paidAmount == claimInfo.claimAmount) {
273
- claimInfo.closedAt == TimestampLib.blockTimestamp();
329
+ claimInfo.closedAt = TimestampLib.blockTimestamp();
274
330
  instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CLOSED());
275
331
 
276
332
  policyInfo.openClaimsCount -= 1;
@@ -283,30 +339,97 @@ contract ClaimService is
283
339
  instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
284
340
 
285
341
  // inform pool about payout
286
- _poolService.reduceCollateral(
342
+ _poolService.processPayout(
287
343
  instance,
288
344
  address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
289
345
  policyNftId,
290
346
  policyInfo,
291
347
  payoutAmount);
292
-
348
+
293
349
  // transfer payout token and fee
294
350
  (
295
351
  Amount netPayoutAmount,
352
+ Amount processingFeeAmount,
296
353
  address beneficiary
297
- ) = _transferPayoutAmount(
354
+ ) = _calculatePayoutAmount(
298
355
  instanceReader,
299
356
  policyNftId,
300
357
  policyInfo,
301
358
  payoutInfo);
302
359
 
303
- // TODO callback IPolicyHolder
360
+ emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount, processingFeeAmount);
361
+
362
+ {
363
+ NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
364
+ IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
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);
304
397
 
305
- emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount);
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);
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);
306
429
  }
307
430
 
308
- // TODO create (I)TreasuryService that deals with all gif related token transfers
309
- function _transferPayoutAmount(
431
+
432
+ function _calculatePayoutAmount(
310
433
  InstanceReader instanceReader,
311
434
  NftId policyNftId,
312
435
  IPolicy.PolicyInfo memory policyInfo,
@@ -315,6 +438,7 @@ contract ClaimService is
315
438
  internal
316
439
  returns (
317
440
  Amount netPayoutAmount,
441
+ Amount processingFeeAmount,
318
442
  address beneficiary
319
443
  )
320
444
  {
@@ -328,39 +452,20 @@ contract ClaimService is
328
452
  IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
329
453
 
330
454
  netPayoutAmount = payoutAmount;
331
- beneficiary = _getBeneficiary(policyNftId, payoutInfo.claimId);
455
+
456
+ if (payoutInfo.beneficiary == address(0)) {
457
+ beneficiary = getRegistry().ownerOf(policyNftId);
458
+ } else {
459
+ beneficiary = payoutInfo.beneficiary;
460
+ }
332
461
 
333
462
  IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
334
463
  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
464
+ // TODO calculate and set net payout and processing fees
338
465
  }
339
-
340
- // TODO: centralize token handling (issue #471)
341
- poolInfo.tokenHandler.transfer(
342
- poolInfo.wallet,
343
- beneficiary,
344
- netPayoutAmount);
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);
@@ -24,6 +24,7 @@ interface IApplicationService is IService {
24
24
  address applicationOwner,
25
25
  RiskId riskId,
26
26
  Amount sumInsuredAmount,
27
+ Amount premiumAmount,
27
28
  Seconds lifetime,
28
29
  NftId bundleNftId,
29
30
  ReferralId referralId,
@@ -23,16 +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);
37
+ error ErrorClaimsServicePayoutAmountIsZero(NftId policyNftId, PayoutId payoutId);
34
38
 
35
- error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint8 openPayouts);
39
+ error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint24 openPayouts);
36
40
  error ErrorClaimServiceClaimWithMissingPayouts(NftId policyNftId, ClaimId claimId, Amount claimAmount, Amount paidAmount);
37
41
  error ErrorClaimServiceClaimNotInExpectedState(NftId policyNftId, ClaimId claimId, StateId expectedState, StateId actualState);
38
42
 
@@ -46,9 +50,6 @@ interface IClaimService is
46
50
  ) external returns (ClaimId claimId);
47
51
 
48
52
 
49
- // TODO add claim revoke functionality
50
-
51
-
52
53
  /// @dev declines the specified claim
53
54
  /// function can only be called by product, policy needs to match with calling product
54
55
  function decline(
@@ -58,6 +59,14 @@ interface IClaimService is
58
59
  ) external;
59
60
 
60
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
+
61
70
  /// @dev confirms the specified claim and specifies the payout amount
62
71
  /// function can only be called by product, policy needs to match with calling product
63
72
  function confirm(
@@ -76,7 +85,8 @@ interface IClaimService is
76
85
  ) external;
77
86
 
78
87
 
79
- /// @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
80
90
  /// returns the id of the newly created payout, this id is unique for the specified policy
81
91
  /// function can only be called by product, policy needs to match with calling product
82
92
  function createPayout(
@@ -89,6 +99,20 @@ interface IClaimService is
89
99
  returns (PayoutId payoutId);
90
100
 
91
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
+
92
116
  /// @dev processes the specified payout
93
117
  /// this includes moving the payout token to the beneficiary (default: policy holder)
94
118
  /// function can only be called by product, policy needs to match with calling product