@etherisc/gif-next 0.0.2-c637cfc-718 → 0.0.2-c68eaf3-087

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 (407) hide show
  1. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +96 -37
  3. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  4. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
  6. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  7. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -13
  9. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
  11. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  13. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  14. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +154 -94
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +94 -58
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +136 -86
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +80 -60
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +81 -58
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +29 -0
  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 +1538 -0
  35. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
  37. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2072 -0
  39. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -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 +1 -1
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +156 -96
  45. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +137 -77
  47. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +174 -99
  49. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +243 -126
  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 +53 -31
  55. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +29 -84
  57. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  58. package/artifacts/contracts/instance/Instance.sol/Instance.json +62 -40
  59. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +148 -118
  61. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  62. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +280 -72
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +72 -130
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +48 -40
  69. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +189 -98
  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 +46 -5
  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 +135 -75
  89. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  90. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
  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 +76 -53
  94. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
  96. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +89 -53
  98. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  99. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +86 -47
  100. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +48 -36
  102. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  103. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +110 -59
  104. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  105. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +82 -22
  106. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  107. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +180 -82
  108. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +90 -58
  110. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  111. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +53 -0
  112. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  113. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +97 -46
  114. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  115. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +200 -115
  116. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  117. package/artifacts/contracts/pool/Pool.sol/Pool.json +110 -46
  118. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  119. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +312 -161
  120. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +81 -41
  122. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  123. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +66 -32
  124. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +45 -33
  126. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  127. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +147 -70
  128. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  129. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
  130. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  131. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +173 -88
  132. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  133. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +82 -58
  134. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  135. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +29 -0
  136. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  137. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +64 -8
  138. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  139. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +58 -0
  140. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  141. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +80 -51
  142. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  143. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +134 -70
  144. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  145. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +29 -0
  146. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  147. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +139 -60
  148. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  149. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +67 -47
  150. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  151. package/artifacts/contracts/product/PricingService.sol/PricingService.json +149 -107
  152. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  153. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +61 -45
  154. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  155. package/artifacts/contracts/product/Product.sol/Product.json +147 -70
  156. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  157. package/artifacts/contracts/product/RiskService.sol/RiskService.json +60 -26
  158. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  159. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +42 -30
  160. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  161. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  162. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  163. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +67 -15
  164. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  165. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
  166. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  167. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  168. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  169. package/artifacts/contracts/registry/Registry.sol/Registry.json +111 -51
  170. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  171. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +193 -165
  172. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  173. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +73 -172
  174. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  175. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +41 -29
  176. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  177. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  178. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  179. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +121 -223
  180. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  181. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  182. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  183. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  184. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  185. package/artifacts/contracts/shared/Component.sol/Component.json +68 -28
  186. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  187. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +350 -155
  188. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  189. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +83 -63
  190. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  191. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +42 -0
  192. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  193. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +2 -2
  194. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  195. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +55 -28
  196. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  197. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +321 -19
  198. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  199. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +76 -53
  200. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  201. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  202. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  203. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  204. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  205. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  206. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  207. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +1 -1
  208. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  209. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
  210. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  211. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  212. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  213. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  214. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  215. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +89 -53
  216. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  217. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  218. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  219. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  220. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  221. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  222. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  223. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +18 -2
  224. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  225. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +3 -3
  226. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  227. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +66 -8
  228. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  229. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  230. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  231. package/artifacts/contracts/shared/Service.sol/Service.json +42 -0
  232. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  233. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  234. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  235. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +2 -2
  236. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  237. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +55 -28
  238. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  239. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  240. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  241. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
  242. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  243. package/artifacts/contracts/staking/Staking.sol/Staking.json +138 -78
  244. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  245. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  246. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  247. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +68 -42
  248. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  249. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -12
  250. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  251. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +66 -53
  252. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  253. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +45 -33
  254. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  255. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +144 -103
  256. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  257. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  258. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  259. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  260. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  261. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  264. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  266. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  268. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  269. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  270. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  272. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  273. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  274. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  276. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  278. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  280. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  282. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  284. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  286. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  291. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  292. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
  295. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  296. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
  297. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  299. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  300. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  301. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +28 -12
  302. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  303. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  304. package/contracts/authorization/AccessAdmin.sol +65 -61
  305. package/contracts/authorization/Authorization.sol +111 -39
  306. package/contracts/authorization/IAccess.sol +1 -0
  307. package/contracts/authorization/IAccessAdmin.sol +4 -2
  308. package/contracts/authorization/IAuthorization.sol +13 -7
  309. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  310. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  311. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  312. package/contracts/distribution/BasicDistribution.sol +2 -1
  313. package/contracts/distribution/Distribution.sol +6 -16
  314. package/contracts/distribution/DistributionService.sol +55 -36
  315. package/contracts/distribution/IDistributionComponent.sol +1 -1
  316. package/contracts/examples/fire/DamageLevel.sol +59 -0
  317. package/contracts/examples/fire/FirePool.sol +73 -0
  318. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  319. package/contracts/examples/fire/FireProduct.sol +415 -0
  320. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  321. package/contracts/examples/fire/FireUSD.sol +26 -0
  322. package/contracts/examples/unpermissioned/SimpleDistribution.sol +4 -4
  323. package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -4
  324. package/contracts/examples/unpermissioned/SimplePool.sol +4 -4
  325. package/contracts/examples/unpermissioned/SimpleProduct.sol +10 -10
  326. package/contracts/instance/IInstance.sol +4 -1
  327. package/contracts/instance/IInstanceService.sol +0 -20
  328. package/contracts/instance/Instance.sol +20 -17
  329. package/contracts/instance/InstanceAdmin.sol +22 -30
  330. package/contracts/instance/InstanceAuthorizationV3.sol +9 -19
  331. package/contracts/instance/InstanceReader.sol +83 -18
  332. package/contracts/instance/InstanceService.sol +15 -70
  333. package/contracts/instance/module/IComponents.sol +9 -4
  334. package/contracts/instance/module/IPolicy.sol +2 -2
  335. package/contracts/oracle/BasicOracle.sol +0 -1
  336. package/contracts/oracle/IOracleService.sol +2 -1
  337. package/contracts/oracle/Oracle.sol +4 -15
  338. package/contracts/oracle/OracleService.sol +39 -29
  339. package/contracts/pool/BasicPool.sol +14 -26
  340. package/contracts/pool/BasicPoolAuthorization.sol +0 -1
  341. package/contracts/pool/BundleService.sol +75 -20
  342. package/contracts/pool/IBundleService.sol +9 -0
  343. package/contracts/pool/IPoolComponent.sol +18 -8
  344. package/contracts/pool/IPoolService.sol +21 -14
  345. package/contracts/pool/Pool.sol +38 -29
  346. package/contracts/pool/PoolService.sol +116 -80
  347. package/contracts/product/ApplicationService.sol +16 -4
  348. package/contracts/product/BasicProduct.sol +6 -6
  349. package/contracts/product/BasicProductAuthorization.sol +0 -1
  350. package/contracts/product/ClaimService.sol +180 -104
  351. package/contracts/product/IClaimService.sol +3 -2
  352. package/contracts/product/IPolicyService.sol +3 -0
  353. package/contracts/product/IPricingService.sol +9 -9
  354. package/contracts/product/IProductComponent.sol +23 -3
  355. package/contracts/product/PolicyService.sol +66 -21
  356. package/contracts/product/PricingService.sol +8 -8
  357. package/contracts/product/Product.sol +82 -52
  358. package/contracts/registry/ChainNft.sol +6 -9
  359. package/contracts/registry/IRegistry.sol +6 -3
  360. package/contracts/registry/IRegistryService.sol +5 -12
  361. package/contracts/registry/ITransferInterceptor.sol +1 -2
  362. package/contracts/registry/Registry.sol +21 -6
  363. package/contracts/registry/RegistryAdmin.sol +7 -23
  364. package/contracts/registry/RegistryService.sol +33 -44
  365. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  366. package/contracts/registry/ReleaseRegistry.sol +201 -191
  367. package/contracts/registry/ServiceAuthorizationV3.sol +14 -19
  368. package/contracts/shared/Component.sol +25 -28
  369. package/contracts/shared/ComponentService.sol +235 -131
  370. package/contracts/shared/ComponentVerifyingService.sol +22 -13
  371. package/contracts/shared/IComponent.sol +6 -2
  372. package/contracts/shared/IComponentService.sol +25 -13
  373. package/contracts/shared/IInstanceLinkedComponent.sol +3 -11
  374. package/contracts/shared/ILifecycle.sol +3 -1
  375. package/contracts/shared/INftOwnable.sol +2 -0
  376. package/contracts/shared/IRegisterable.sol +11 -0
  377. package/contracts/shared/InstanceLinkedComponent.sol +68 -27
  378. package/contracts/shared/KeyValueStore.sol +1 -1
  379. package/contracts/shared/Lifecycle.sol +15 -4
  380. package/contracts/shared/NftOwnable.sol +23 -3
  381. package/contracts/shared/PolicyHolder.sol +4 -0
  382. package/contracts/shared/Registerable.sol +15 -5
  383. package/contracts/shared/Service.sol +4 -7
  384. package/contracts/staking/IStakingService.sol +0 -3
  385. package/contracts/staking/Staking.sol +2 -3
  386. package/contracts/staking/StakingReader.sol +12 -5
  387. package/contracts/staking/StakingService.sol +15 -15
  388. package/contracts/type/Amount.sol +15 -0
  389. package/contracts/type/ClaimId.sol +6 -1
  390. package/contracts/type/NftId.sol +1 -0
  391. package/contracts/type/ObjectType.sol +1 -0
  392. package/contracts/type/PayoutId.sol +10 -10
  393. package/contracts/type/RiskId.sol +15 -1
  394. package/contracts/type/RoleId.sol +0 -12
  395. package/contracts/type/StateId.sol +14 -1
  396. package/contracts/type/UFixed.sol +4 -0
  397. package/contracts/upgradeability/ProxyManager.sol +2 -1
  398. package/package.json +2 -1
  399. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  400. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  401. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  402. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  403. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  404. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  405. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  406. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  407. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -13,7 +13,7 @@ import {IRegistryService} from "../registry/IRegistryService.sol";
13
13
  import {AmountLib} from "../type/Amount.sol";
14
14
  import {Seconds} from "../type/Seconds.sol";
15
15
  import {zeroTimestamp} from "../type/Timestamp.sol";
16
- import {ObjectType, DISTRIBUTION, PRODUCT, REGISTRY, APPLICATION, POLICY, PRICE} from "../type/ObjectType.sol";
16
+ import {ObjectType, BUNDLE, DISTRIBUTION, PRODUCT, REGISTRY, APPLICATION, POLICY, PRICE} from "../type/ObjectType.sol";
17
17
  import {REVOKED} from "../type/StateId.sol";
18
18
  import {NftId, NftIdLib} from "../type/NftId.sol";
19
19
  import {ReferralId} from "../type/Referral.sol";
@@ -134,8 +134,11 @@ contract ApplicationService is
134
134
  )
135
135
  external
136
136
  virtual
137
+ nonReentrant()
137
138
  returns (NftId applicationNftId)
138
139
  {
140
+ _checkNftType(bundleNftId, BUNDLE());
141
+
139
142
  (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
140
143
 
141
144
  // check if provided references are valid and linked to calling product contract
@@ -208,9 +211,12 @@ contract ApplicationService is
208
211
  NftId bundleNftId // will likely need a newer bundle for underwriting
209
212
  )
210
213
  external
211
- virtual override
214
+ virtual
215
+ nonReentrant()
212
216
  returns (NftId applicationNftId)
213
217
  {
218
+ _checkNftType(policyNftId, POLICY());
219
+ _checkNftType(bundleNftId, BUNDLE());
214
220
  // TODO implement
215
221
  }
216
222
 
@@ -225,15 +231,21 @@ contract ApplicationService is
225
231
  bytes memory applicationData
226
232
  )
227
233
  external
228
- virtual override
234
+ virtual
235
+ nonReentrant()
229
236
  {
237
+ _checkNftType(applicationNftId, POLICY());
238
+ _checkNftType(bundleNftId, BUNDLE());
230
239
  // TODO implement
231
240
  }
232
241
 
233
242
  function revoke(NftId applicationNftId)
234
243
  external
235
- virtual override
244
+ virtual
245
+ nonReentrant()
236
246
  {
247
+ _checkNftType(applicationNftId, POLICY());
248
+
237
249
  (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
238
250
  instance.getInstanceStore().updateApplicationState(applicationNftId, REVOKED());
239
251
  }
@@ -30,8 +30,8 @@ abstract contract BasicProduct is
30
30
  string memory name,
31
31
  address token,
32
32
  bool isInterceptor,
33
- address pool,
34
- address distribution
33
+ bool hasDistribution,
34
+ uint8 numberOfOracles
35
35
  )
36
36
  internal
37
37
  virtual
@@ -45,9 +45,9 @@ abstract contract BasicProduct is
45
45
  name,
46
46
  token,
47
47
  isInterceptor,
48
- pool,
49
- distribution,
50
- "", //registryData,
51
- ""); // componentData
48
+ false, // is processing funded claims
49
+ hasDistribution,
50
+ numberOfOracles,
51
+ ""); // component data
52
52
  }
53
53
  }
@@ -36,7 +36,6 @@ contract BasicProductAuthorization
36
36
  // authorize public role (open access to any account, only allows to lock target)
37
37
  functions = _authorizeForTarget(getTargetName(), PUBLIC_ROLE());
38
38
  _authorize(functions, BasicProduct.setFees.selector, "setFees");
39
-
40
39
  _authorize(functions, IInstanceLinkedComponent.withdrawFees.selector, "withdrawFees");
41
40
  }
42
41
  }
@@ -1,12 +1,9 @@
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";
6
+ import {ObjectType, CLAIM, POLICY, POOL, PRODUCT} from "../type/ObjectType.sol";
10
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";
@@ -16,8 +13,14 @@ import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
16
13
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
17
14
  import {ContractLib} from "../shared/ContractLib.sol";
18
15
  import {InstanceReader} from "../instance/InstanceReader.sol";
16
+ import {InstanceStore} from "../instance/InstanceStore.sol";
19
17
  import {IClaimService} from "./IClaimService.sol";
18
+ import {IComponents} from "../instance/module/IComponents.sol";
19
+ import {IInstance} from "../instance/IInstance.sol";
20
+ import {IPolicy} from "../instance/module/IPolicy.sol";
20
21
  import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
22
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
23
+ import {IPolicyService} from "../product/IPolicyService.sol";
21
24
  import {IPoolService} from "../pool/IPoolService.sol";
22
25
 
23
26
 
@@ -26,6 +29,7 @@ contract ClaimService is
26
29
  IClaimService
27
30
  {
28
31
 
32
+ IPolicyService internal _policyService;
29
33
  IPoolService internal _poolService;
30
34
 
31
35
  function _initialize(
@@ -43,6 +47,7 @@ contract ClaimService is
43
47
 
44
48
  _initializeService(registryAddress, authority, owner);
45
49
 
50
+ _policyService = IPolicyService(getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart()));
46
51
  _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
47
52
 
48
53
  _registerInterface(type(IClaimService).interfaceId);
@@ -55,11 +60,15 @@ contract ClaimService is
55
60
  )
56
61
  external
57
62
  virtual
63
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
58
64
  returns (ClaimId claimId)
59
65
  {
66
+ _checkNftType(policyNftId, POLICY());
67
+
60
68
  (
61
- IInstance instance,
62
- InstanceReader instanceReader,
69
+ ,
70
+ IInstance instance,,
71
+ InstanceStore instanceStore,
63
72
  IPolicy.PolicyInfo memory policyInfo
64
73
  ) = _verifyCallerWithPolicy(policyNftId);
65
74
 
@@ -79,7 +88,7 @@ contract ClaimService is
79
88
 
80
89
  // create new claim
81
90
  claimId = ClaimIdLib.toClaimId(policyInfo.claimsCount + 1);
82
- instance.getInstanceStore().createClaim(
91
+ instanceStore.createClaim(
83
92
  policyNftId,
84
93
  claimId,
85
94
  IPolicy.ClaimInfo({
@@ -92,10 +101,10 @@ contract ClaimService is
92
101
  closedAt: TimestampLib.zero()}));
93
102
 
94
103
  // update and save policy info with instance
104
+ // policy claim amount is only updated when claim is confirmed
95
105
  policyInfo.claimsCount += 1;
96
106
  policyInfo.openClaimsCount += 1;
97
- // policy claim amount is only updated when claim is confirmed
98
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
107
+ instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
99
108
 
100
109
  emit LogClaimServiceClaimSubmitted(policyNftId, claimId, claimAmount);
101
110
  }
@@ -109,10 +118,15 @@ contract ClaimService is
109
118
  )
110
119
  external
111
120
  virtual
121
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
112
122
  {
123
+ _checkNftType(policyNftId, POLICY());
124
+
113
125
  (
126
+ NftId productNftId,
114
127
  IInstance instance,
115
128
  InstanceReader instanceReader,
129
+ InstanceStore instanceStore,
116
130
  IPolicy.PolicyInfo memory policyInfo
117
131
  ) = _verifyCallerWithPolicy(policyNftId);
118
132
 
@@ -122,17 +136,22 @@ contract ClaimService is
122
136
  IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
123
137
  claimInfo.claimAmount = confirmedAmount;
124
138
  claimInfo.processData = data;
125
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CONFIRMED());
126
-
127
- // TODO test if claim results in total claim amount == sum insured amount
128
- // should policy still be active it needs to automatically become expired
139
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, CONFIRMED());
129
140
 
130
141
  // update and save policy info with instance
131
142
  policyInfo.claimAmount = policyInfo.claimAmount + confirmedAmount;
132
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
143
+ instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
144
+
145
+ // should policy still be active it needs to become expired
146
+ if (policyInfo.claimAmount >= policyInfo.sumInsuredAmount) {
147
+ _policyService.expirePolicy(instance, policyNftId, TimestampLib.blockTimestamp());
148
+ }
133
149
 
134
150
  emit LogClaimServiceClaimConfirmed(policyNftId, claimId, confirmedAmount);
135
151
 
152
+ // callback to pool if applicable
153
+ _processConfirmedClaimByPool(instanceReader, productNftId, policyNftId, claimId, confirmedAmount);
154
+
136
155
  // callback to policy holder if applicable
137
156
  _policyHolderClaimConfirmed(policyNftId, claimId, confirmedAmount);
138
157
  }
@@ -145,10 +164,15 @@ contract ClaimService is
145
164
  )
146
165
  external
147
166
  virtual
167
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
148
168
  {
169
+ _checkNftType(policyNftId, POLICY());
170
+
149
171
  (
172
+ ,
150
173
  IInstance instance,
151
174
  InstanceReader instanceReader,
175
+ InstanceStore instanceStore,
152
176
  IPolicy.PolicyInfo memory policyInfo
153
177
  ) = _verifyCallerWithPolicy(policyNftId);
154
178
 
@@ -156,11 +180,11 @@ contract ClaimService is
156
180
  IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
157
181
  claimInfo.processData = data;
158
182
  claimInfo.closedAt = TimestampLib.blockTimestamp();
159
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, DECLINED());
183
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, DECLINED());
160
184
 
161
185
  // update and save policy info with instance
162
186
  policyInfo.openClaimsCount -= 1;
163
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
187
+ instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
164
188
 
165
189
  emit LogClaimServiceClaimDeclined(policyNftId, claimId);
166
190
  }
@@ -173,21 +197,26 @@ contract ClaimService is
173
197
  )
174
198
  external
175
199
  virtual
200
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
176
201
  {
202
+ _checkNftType(policyNftId, POLICY());
203
+
177
204
  (
205
+ ,
178
206
  IInstance instance,
179
207
  InstanceReader instanceReader,
208
+ InstanceStore instanceStore,
180
209
  IPolicy.PolicyInfo memory policyInfo
181
210
  ) = _verifyCallerWithPolicy(policyNftId);
182
211
 
183
212
  // check/update claim info
184
213
  IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
185
214
  claimInfo.closedAt = TimestampLib.blockTimestamp();
186
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, REVOKED());
215
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, REVOKED());
187
216
 
188
217
  // update and save policy info with instance
189
218
  policyInfo.openClaimsCount -= 1;
190
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
219
+ instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
191
220
 
192
221
  emit LogClaimServiceClaimRevoked(policyNftId, claimId);
193
222
  }
@@ -199,10 +228,15 @@ contract ClaimService is
199
228
  )
200
229
  external
201
230
  virtual
231
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
202
232
  {
233
+ _checkNftType(policyNftId, POLICY());
234
+
203
235
  (
236
+ ,
204
237
  IInstance instance,
205
238
  InstanceReader instanceReader,
239
+ InstanceStore instanceStore,
206
240
  IPolicy.PolicyInfo memory policyInfo
207
241
  ) = _verifyCallerWithPolicy(policyNftId);
208
242
 
@@ -227,10 +261,10 @@ contract ClaimService is
227
261
  }
228
262
 
229
263
  claimInfo.closedAt = TimestampLib.blockTimestamp();
230
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CLOSED());
264
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, CLOSED());
231
265
  }
232
266
 
233
- // TODO add test
267
+
234
268
  function createPayoutForBeneficiary(
235
269
  NftId policyNftId,
236
270
  ClaimId claimId,
@@ -240,8 +274,11 @@ contract ClaimService is
240
274
  )
241
275
  external
242
276
  virtual
277
+ // nonReentrant() // prevents creating a reinsurance claim in a single tx
243
278
  returns (PayoutId payoutId)
244
279
  {
280
+ _checkNftType(policyNftId, POLICY());
281
+
245
282
  if (beneficiary == address(0)) {
246
283
  revert ErrorClaimServiceBeneficiaryIsZero(policyNftId, claimId);
247
284
  }
@@ -263,8 +300,11 @@ contract ClaimService is
263
300
  )
264
301
  external
265
302
  virtual
303
+ // nonReentrant() // prevents creating a reinsurance payout in a single tx
266
304
  returns (PayoutId payoutId)
267
305
  {
306
+ _checkNftType(policyNftId, POLICY());
307
+
268
308
  return _createPayout(
269
309
  policyNftId,
270
310
  claimId,
@@ -273,6 +313,94 @@ contract ClaimService is
273
313
  data);
274
314
  }
275
315
 
316
+
317
+ function processPayout(
318
+ NftId policyNftId,
319
+ PayoutId payoutId
320
+ )
321
+ external
322
+ virtual
323
+ // nonReentrant() // prevents creating a reinsurance payout in a single tx
324
+ {
325
+ _checkNftType(policyNftId, POLICY());
326
+
327
+ (
328
+ ,
329
+ IInstance instance,
330
+ InstanceReader instanceReader,
331
+ InstanceStore instanceStore,
332
+ IPolicy.PolicyInfo memory policyInfo
333
+ ) = _verifyCallerWithPolicy(policyNftId);
334
+
335
+ // TODO add check that payout exists and is open
336
+ IPolicy.PayoutInfo memory payoutInfo = instanceReader.getPayoutInfo(policyNftId, payoutId);
337
+
338
+ // update and save payout info with instance
339
+ payoutInfo.paidAt = TimestampLib.blockTimestamp();
340
+ instanceStore.updatePayout(policyNftId, payoutId, payoutInfo, PAID());
341
+
342
+ Amount payoutAmount = payoutInfo.amount;
343
+
344
+ {
345
+ ClaimId claimId = payoutId.toClaimId();
346
+ IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
347
+ claimInfo.paidAmount = claimInfo.paidAmount.add(payoutAmount);
348
+ claimInfo.openPayoutsCount -= 1;
349
+
350
+ // check if this payout is closing the linked claim
351
+ // update claim and policy info accordingly
352
+ if(claimInfo.openPayoutsCount == 0 && claimInfo.paidAmount == claimInfo.claimAmount) {
353
+ claimInfo.closedAt = TimestampLib.blockTimestamp();
354
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, CLOSED());
355
+
356
+ policyInfo.openClaimsCount -= 1;
357
+ } else {
358
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
359
+ }
360
+ }
361
+
362
+ // update and save policy info with instance
363
+ policyInfo.payoutAmount = policyInfo.payoutAmount.add(payoutAmount);
364
+ instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
365
+
366
+ // inform pool about payout
367
+ _poolService.processPayout(
368
+ instance,
369
+ address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
370
+ policyNftId,
371
+ policyInfo,
372
+ payoutAmount);
373
+
374
+ // transfer payout token and fee
375
+ {
376
+ (
377
+ Amount netPayoutAmount,
378
+ Amount processingFeeAmount,
379
+ address beneficiary
380
+ ) = _calculatePayoutAmount(
381
+ instanceReader,
382
+ policyNftId,
383
+ policyInfo,
384
+ payoutInfo);
385
+
386
+ emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount, processingFeeAmount);
387
+
388
+ {
389
+ NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
390
+ IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
391
+ poolInfo.tokenHandler.distributeTokens(poolInfo.wallet, beneficiary, netPayoutAmount);
392
+
393
+ // TODO add 2nd token tx if processingFeeAmount > 0
394
+ }
395
+
396
+ // callback to policy holder if applicable
397
+ _policyHolderPayoutExecuted(policyNftId, payoutId, beneficiary, payoutAmount);
398
+ }
399
+ }
400
+
401
+ // internal functions
402
+
403
+
276
404
  function _createPayout(
277
405
  NftId policyNftId,
278
406
  ClaimId claimId,
@@ -285,8 +413,10 @@ contract ClaimService is
285
413
  returns (PayoutId payoutId)
286
414
  {
287
415
  (
288
- IInstance instance,
416
+ ,
417
+ ,
289
418
  InstanceReader instanceReader,
419
+ InstanceStore instanceStore,
290
420
  IPolicy.PolicyInfo memory policyInfo
291
421
  ) = _verifyCallerWithPolicy(policyNftId);
292
422
 
@@ -299,9 +429,13 @@ contract ClaimService is
299
429
 
300
430
  // check/update claim info
301
431
  // create payout info with instance
302
- uint8 claimNo = claimInfo.payoutsCount + 1;
303
- payoutId = PayoutIdLib.toPayoutId(claimId, claimNo);
304
- instance.getInstanceStore().createPayout(
432
+ uint24 payoutNo = claimInfo.payoutsCount + 1;
433
+ payoutId = PayoutIdLib.toPayoutId(claimId, payoutNo);
434
+ if (beneficiary == address(0)) {
435
+ beneficiary = getRegistry().ownerOf(policyNftId);
436
+ }
437
+
438
+ instanceStore.createPayout(
305
439
  policyNftId,
306
440
  payoutId,
307
441
  IPolicy.PayoutInfo({
@@ -314,91 +448,16 @@ contract ClaimService is
314
448
  // update and save claim info with instance
315
449
  claimInfo.payoutsCount += 1;
316
450
  claimInfo.openPayoutsCount += 1;
317
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
451
+ instanceStore.updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
318
452
 
319
453
  // update and save policy info with instance
320
454
  policyInfo.payoutAmount.add(amount);
321
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
455
+ instanceStore.updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
322
456
 
323
- emit LogClaimServicePayoutCreated(policyNftId, payoutId, amount);
457
+ emit LogClaimServicePayoutCreated(policyNftId, payoutId, amount, beneficiary);
324
458
  }
325
459
 
326
460
 
327
- function processPayout(
328
- NftId policyNftId,
329
- PayoutId payoutId
330
- )
331
- external
332
- virtual
333
- {
334
- (
335
- IInstance instance,
336
- InstanceReader instanceReader,
337
- IPolicy.PolicyInfo memory policyInfo
338
- ) = _verifyCallerWithPolicy(policyNftId);
339
-
340
- // TODO add check that payout exists and is open
341
- IPolicy.PayoutInfo memory payoutInfo = instanceReader.getPayoutInfo(policyNftId, payoutId);
342
-
343
- // update and save payout info with instance
344
- payoutInfo.paidAt = TimestampLib.blockTimestamp();
345
- instance.getInstanceStore().updatePayout(policyNftId, payoutId, payoutInfo, PAID());
346
-
347
- // TODO update and save claim info with instance
348
- ClaimId claimId = payoutId.toClaimId();
349
- Amount payoutAmount = payoutInfo.amount;
350
- IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
351
- claimInfo.paidAmount = claimInfo.paidAmount.add(payoutAmount);
352
- claimInfo.openPayoutsCount -= 1;
353
-
354
- // check if this payout is closing the linked claim
355
- // update claim and policy info accordingly
356
- if(claimInfo.openPayoutsCount == 0 && claimInfo.paidAmount == claimInfo.claimAmount) {
357
- claimInfo.closedAt == TimestampLib.blockTimestamp();
358
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CLOSED());
359
-
360
- policyInfo.openClaimsCount -= 1;
361
- } else {
362
- instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
363
- }
364
-
365
- // update and save policy info with instance
366
- policyInfo.payoutAmount = policyInfo.payoutAmount.add(payoutAmount);
367
- instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
368
-
369
- // inform pool about payout
370
- _poolService.reduceCollateral(
371
- instance,
372
- address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
373
- policyNftId,
374
- policyInfo,
375
- payoutAmount);
376
-
377
- // transfer payout token and fee
378
- (
379
- Amount netPayoutAmount,
380
- Amount processingFeeAmount,
381
- address beneficiary
382
- ) = _calculatePayoutAmount(
383
- instanceReader,
384
- policyNftId,
385
- policyInfo,
386
- payoutInfo);
387
-
388
- emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount, processingFeeAmount);
389
-
390
- {
391
- NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
392
- IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
393
- poolInfo.tokenHandler.distributeTokens(poolInfo.wallet, beneficiary, netPayoutAmount);
394
-
395
- // TODO add 2nd token tx if processingFeeAmount > 0
396
- }
397
-
398
- // callback to policy holder if applicable
399
- _policyHolderPayoutExecuted(policyNftId, payoutId, beneficiary, payoutAmount);
400
- }
401
-
402
461
  function _calculatePayoutAmount(
403
462
  InstanceReader instanceReader,
404
463
  NftId policyNftId,
@@ -436,7 +495,6 @@ contract ClaimService is
436
495
  }
437
496
  }
438
497
 
439
- // internal functions
440
498
 
441
499
  function _verifyCallerWithPolicy(
442
500
  NftId policyNftId
@@ -445,14 +503,16 @@ contract ClaimService is
445
503
  view
446
504
  virtual
447
505
  returns (
506
+ NftId productNftId,
448
507
  IInstance instance,
449
508
  InstanceReader instanceReader,
509
+ InstanceStore instanceStore,
450
510
  IPolicy.PolicyInfo memory policyInfo
451
511
  )
452
512
  {
453
- NftId productNftId;
454
513
  (productNftId,, instance) = _getAndVerifyActiveComponent(PRODUCT());
455
514
  instanceReader = instance.getInstanceReader();
515
+ instanceStore = instance.getInstanceStore();
456
516
 
457
517
  // check caller(product) policy match
458
518
  policyInfo = instanceReader.getPolicyInfo(policyNftId);
@@ -486,6 +546,22 @@ contract ClaimService is
486
546
  claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
487
547
  }
488
548
 
549
+ function _processConfirmedClaimByPool(
550
+ InstanceReader instanceReader,
551
+ NftId productNftId,
552
+ NftId policyNftId,
553
+ ClaimId claimId,
554
+ Amount amount
555
+ )
556
+ internal
557
+ {
558
+ NftId poolNftId = instanceReader.getProductInfo(productNftId).poolNftId;
559
+ if (instanceReader.getPoolInfo(poolNftId).isProcessingConfirmedClaims) {
560
+ address poolAddress = getRegistry().getObjectAddress(poolNftId);
561
+ IPoolComponent(poolAddress).processConfirmedClaim(policyNftId, claimId, amount);
562
+ }
563
+ }
564
+
489
565
 
490
566
  function _policyHolderClaimConfirmed(
491
567
  NftId policyNftId,
@@ -26,8 +26,9 @@ interface IClaimService is
26
26
  event LogClaimServiceClaimRevoked(NftId policyNftId, ClaimId claimId);
27
27
  event LogClaimServiceClaimClosed(NftId policyNftId, ClaimId claimId);
28
28
 
29
- event LogClaimServicePayoutCreated(NftId policyNftId, PayoutId payoutId, Amount amount);
29
+ event LogClaimServicePayoutCreated(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary);
30
30
  event LogClaimServicePayoutProcessed(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary, Amount netAmount, Amount processingFeeAmount);
31
+ error ErrorClaimServiceBeneficiarySet(NftId policyNftId, PayoutId payoutId, address beneficiary);
31
32
 
32
33
  error ErrorClaimServicePolicyProductMismatch(NftId policyNftId, NftId expectedProduct, NftId actualProduct);
33
34
  error ErrorClaimServicePolicyNotOpen(NftId policyNftId);
@@ -35,7 +36,7 @@ interface IClaimService is
35
36
  error ErrorClaimServiceBeneficiaryIsZero(NftId policyNftId, ClaimId claimId);
36
37
  error ErrorClaimsServicePayoutAmountIsZero(NftId policyNftId, PayoutId payoutId);
37
38
 
38
- error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint8 openPayouts);
39
+ error ErrorClaimServiceClaimWithOpenPayouts(NftId policyNftId, ClaimId claimId, uint24 openPayouts);
39
40
  error ErrorClaimServiceClaimWithMissingPayouts(NftId policyNftId, ClaimId claimId, Amount claimAmount, Amount paidAmount);
40
41
  error ErrorClaimServiceClaimNotInExpectedState(NftId policyNftId, ClaimId claimId, StateId expectedState, StateId actualState);
41
42
 
@@ -4,6 +4,7 @@ pragma solidity ^0.8.20;
4
4
  import {IService} from "../shared/IService.sol";
5
5
 
6
6
  import {Amount} from "../type/Amount.sol";
7
+ import {IInstance} from "../instance/IInstance.sol";
7
8
  import {NftId} from "../type/NftId.sol";
8
9
  import {StateId} from "../type/StateId.sol";
9
10
  import {Timestamp} from "../type/Timestamp.sol";
@@ -69,6 +70,8 @@ interface IPolicyService is IService {
69
70
  /// @return expiredAt the effective expiry date
70
71
  function expire(NftId policyNftId, Timestamp expireAt) external returns (Timestamp expiredAt);
71
72
 
73
+ function expirePolicy(IInstance instance, NftId policyNftId, Timestamp expireAt) external returns (Timestamp expiredAt);
74
+
72
75
  /// @dev closes the specified policy and sets the closed data in the policy metadata
73
76
  /// a policy can only be closed when it has been expired. in addition, it must not have any open claims
74
77
  /// this function can only be called by a product. the policy needs to match with the calling product
@@ -14,15 +14,15 @@ interface IPricingService is IService
14
14
  {
15
15
 
16
16
  error ErrorPricingServiceTargetWalletAmountsMismatch();
17
- error ErrorIPricingServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
18
- error ErrorIPricingServiceFeeCalculationMismatch(
19
- Amount distributionFeeFixAmount,
20
- Amount distributionFeeVarAmount,
21
- Amount distributionOwnerFeeFixAmount,
22
- Amount distributionOwnerFeeVarAmount,
23
- Amount commissionAmount,
24
- Amount discountAmount
25
- );
17
+ error ErrorPricingServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
18
+ error ErrorPricingServiceFeeCalculationMismatch(
19
+ Amount distributionFeeFixAmount,
20
+ Amount distributionFeeVarAmount,
21
+ Amount distributionOwnerFeeFixAmount,
22
+ Amount distributionOwnerFeeVarAmount,
23
+ Amount commissionAmount,
24
+ Amount discountAmount
25
+ );
26
26
 
27
27
  function calculatePremium(
28
28
  NftId productNftId,