@etherisc/gif-next 0.0.2-8daf0fe-431 → 0.0.2-8e0a1a3-817

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