@etherisc/gif-next 0.0.2-f761c0d-394 → 0.0.2-f78f882-351

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