@etherisc/gif-next 0.0.2-c17621f-221 → 0.0.2-c2496d8-605

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