@etherisc/gif-next 0.0.2-f1f3b2c-994 → 0.0.2-f2273b3-211

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 (483) hide show
  1. package/README.md +27 -6
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -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 +163 -55
  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/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +233 -5
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +200 -16
  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 +94 -14
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +107 -15
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +2 -2
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  24. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +8 -8
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  26. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +175 -216
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  28. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +206 -27
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  30. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +113 -130
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  32. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +275 -171
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +111 -65
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  36. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +100 -112
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  38. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +148 -72
  39. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  40. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  41. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +158 -195
  42. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  43. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +206 -27
  44. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  45. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +336 -295
  46. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  47. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +203 -28
  48. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  49. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  50. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +215 -168
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +589 -0
  53. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  54. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +156 -153
  55. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  56. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +282 -193
  57. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +589 -0
  59. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  60. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +717 -292
  61. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
  62. package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +589 -0
  63. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  64. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
  65. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  66. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +158 -57
  67. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  68. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +105 -103
  69. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  70. package/artifacts/contracts/instance/Instance.sol/Instance.json +211 -82
  71. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  72. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +386 -117
  73. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  74. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +150 -90
  75. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  76. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +590 -204
  77. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +129 -157
  79. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  80. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -45
  81. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  82. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +445 -375
  83. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  84. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
  85. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  86. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  87. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  88. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  89. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  90. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  91. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +3 -3
  92. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  93. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
  94. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  95. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  96. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  97. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  98. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  99. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  100. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  101. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  103. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +132 -173
  104. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  105. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +180 -29
  106. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  107. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  108. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +94 -106
  109. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  110. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +69 -11
  111. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  112. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +108 -125
  113. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  114. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +151 -81
  115. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  116. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +95 -41
  117. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  118. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +107 -152
  119. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  120. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +206 -27
  121. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  122. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +156 -326
  123. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  124. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +79 -101
  125. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  126. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +84 -135
  127. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  128. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +94 -145
  129. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  130. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +192 -229
  131. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  132. package/artifacts/contracts/pool/Pool.sol/Pool.json +107 -163
  133. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  134. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +456 -0
  135. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  136. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +330 -368
  137. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  138. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +119 -69
  139. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  140. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +130 -54
  141. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  142. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +71 -41
  143. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  144. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +228 -186
  145. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  146. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +206 -27
  147. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  148. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +272 -173
  149. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +100 -78
  151. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  152. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +89 -9
  153. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  154. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +170 -19
  155. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  156. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +139 -54
  157. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  158. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +105 -52
  159. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  160. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +211 -164
  161. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  162. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +55 -2
  163. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  164. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +235 -170
  165. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  166. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +293 -0
  167. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  168. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +102 -64
  169. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  170. package/artifacts/contracts/product/PricingService.sol/PricingService.json +181 -116
  171. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  172. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +89 -51
  173. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  174. package/artifacts/contracts/product/Product.sol/Product.json +224 -182
  175. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  176. package/artifacts/contracts/product/RiskService.sol/RiskService.json +112 -63
  177. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  178. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +80 -38
  179. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  180. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  181. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  182. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +98 -2
  183. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  184. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +144 -41
  185. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  186. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  187. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  188. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  189. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  190. package/artifacts/contracts/registry/Registry.sol/Registry.json +142 -38
  191. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  192. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +277 -213
  193. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  194. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +181 -74
  195. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  196. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -33
  197. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  198. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1849 -0
  199. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  200. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +3 -3
  201. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  202. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +337 -65
  203. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  204. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +12 -12
  205. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  206. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
  207. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  208. package/artifacts/contracts/shared/Component.sol/Component.json +105 -104
  209. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  210. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +483 -485
  211. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  212. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +99 -73
  213. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  214. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +55 -2
  215. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  216. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +454 -5
  217. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  218. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  219. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  220. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  221. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  222. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  223. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  224. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +92 -86
  225. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  226. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +446 -276
  227. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  228. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +94 -106
  229. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  230. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  231. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  232. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  233. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  234. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  235. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +148 -0
  236. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  237. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  238. package/artifacts/contracts/shared/IService.sol/IService.json +55 -2
  239. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  240. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  241. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +107 -124
  242. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  243. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +1 -1
  244. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  245. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +1 -1
  246. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  247. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  248. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  249. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +18 -2
  250. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  251. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  252. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  253. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +152 -38
  254. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  255. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  256. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  257. package/artifacts/contracts/shared/Service.sol/Service.json +55 -2
  258. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  259. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +327 -73
  260. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  261. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  262. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  263. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
  264. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  265. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +113 -136
  266. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  267. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +130 -16
  268. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  269. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +49 -49
  270. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  271. package/artifacts/contracts/staking/Staking.sol/Staking.json +203 -206
  272. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  273. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +3 -3
  274. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  275. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +93 -51
  276. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  277. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -57
  278. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  279. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +181 -55
  280. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  281. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +77 -39
  282. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  283. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +130 -130
  284. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  285. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +23 -23
  286. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  287. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Amount.sol/AmountLib.json +3 -3
  289. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  290. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  292. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  294. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/Fee.sol/FeeLib.json +3 -3
  296. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  297. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  298. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  299. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  300. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  301. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  302. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  303. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  304. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  305. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  306. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  307. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  308. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  309. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  310. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  311. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  312. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +62 -5
  314. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +79 -15
  316. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  317. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  318. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  319. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  320. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  321. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  322. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  324. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  325. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  326. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +3 -3
  327. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  328. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  329. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  330. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +47 -2
  331. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  332. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  333. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +44 -12
  334. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  335. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  336. package/contracts/accounting/AccountingService.sol +262 -0
  337. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  338. package/contracts/accounting/IAccountingService.sol +45 -0
  339. package/contracts/authorization/AccessAdmin.sol +216 -125
  340. package/contracts/authorization/AccessManagerCloneable.sol +136 -3
  341. package/contracts/authorization/Authorization.sol +321 -205
  342. package/contracts/authorization/IAccess.sol +1 -0
  343. package/contracts/authorization/IAccessAdmin.sol +14 -8
  344. package/contracts/authorization/IAuthorization.sol +27 -7
  345. package/contracts/authorization/IServiceAuthorization.sol +1 -1
  346. package/contracts/authorization/ServiceAuthorization.sol +4 -4
  347. package/contracts/distribution/BasicDistribution.sol +15 -12
  348. package/contracts/distribution/BasicDistributionAuthorization.sol +22 -9
  349. package/contracts/distribution/Distribution.sol +41 -47
  350. package/contracts/distribution/DistributionService.sol +100 -78
  351. package/contracts/distribution/DistributionServiceManager.sol +1 -1
  352. package/contracts/distribution/IDistributionComponent.sol +1 -1
  353. package/contracts/distribution/IDistributionService.sol +19 -19
  354. package/contracts/examples/fire/FirePool.sol +25 -10
  355. package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
  356. package/contracts/examples/fire/FireProduct.sol +40 -13
  357. package/contracts/examples/fire/FireProductAuthorization.sol +3 -3
  358. package/contracts/examples/unpermissioned/SimpleDistribution.sol +11 -4
  359. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  360. package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -4
  361. package/contracts/examples/unpermissioned/SimplePool.sol +37 -7
  362. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  363. package/contracts/examples/unpermissioned/SimpleProduct.sol +49 -23
  364. package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
  365. package/contracts/instance/BundleSet.sol +42 -38
  366. package/contracts/instance/IInstance.sol +17 -10
  367. package/contracts/instance/IInstanceService.sol +9 -29
  368. package/contracts/instance/Instance.sol +52 -34
  369. package/contracts/instance/InstanceAdmin.sol +249 -100
  370. package/contracts/instance/InstanceAuthorizationV3.sol +54 -45
  371. package/contracts/instance/InstanceReader.sol +174 -32
  372. package/contracts/instance/InstanceService.sol +85 -146
  373. package/contracts/instance/InstanceServiceManager.sol +1 -1
  374. package/contracts/instance/InstanceStore.sol +13 -2
  375. package/contracts/instance/RiskSet.sol +118 -0
  376. package/contracts/instance/base/ObjectCounter.sol +1 -2
  377. package/contracts/instance/base/ObjectLifecycle.sol +4 -2
  378. package/contracts/instance/base/ObjectSet.sol +31 -33
  379. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  380. package/contracts/instance/module/IComponents.sol +10 -7
  381. package/contracts/instance/module/IDistribution.sol +2 -1
  382. package/contracts/instance/module/IPolicy.sol +2 -1
  383. package/contracts/instance/module/IRisk.sol +3 -0
  384. package/contracts/oracle/BasicOracle.sol +0 -1
  385. package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
  386. package/contracts/oracle/IOracleService.sol +2 -1
  387. package/contracts/oracle/Oracle.sol +5 -16
  388. package/contracts/oracle/OracleService.sol +107 -78
  389. package/contracts/oracle/OracleServiceManager.sol +1 -1
  390. package/contracts/pool/BasicPool.sol +33 -24
  391. package/contracts/pool/BasicPoolAuthorization.sol +27 -9
  392. package/contracts/pool/BundleService.sol +88 -154
  393. package/contracts/pool/BundleServiceManager.sol +1 -1
  394. package/contracts/pool/IBundleService.sol +15 -43
  395. package/contracts/pool/IPoolComponent.sol +1 -7
  396. package/contracts/pool/IPoolService.sol +58 -64
  397. package/contracts/pool/Pool.sol +112 -120
  398. package/contracts/pool/PoolLib.sol +216 -0
  399. package/contracts/pool/PoolService.sol +436 -242
  400. package/contracts/pool/PoolServiceManager.sol +1 -1
  401. package/contracts/product/ApplicationService.sol +24 -16
  402. package/contracts/product/ApplicationServiceManager.sol +1 -1
  403. package/contracts/product/BasicProduct.sol +10 -12
  404. package/contracts/product/BasicProductAuthorization.sol +24 -11
  405. package/contracts/product/ClaimService.sol +202 -151
  406. package/contracts/product/ClaimServiceManager.sol +1 -1
  407. package/contracts/product/IApplicationService.sol +5 -2
  408. package/contracts/product/IClaimService.sol +14 -2
  409. package/contracts/product/IPolicyService.sol +26 -11
  410. package/contracts/product/IPricingService.sol +9 -9
  411. package/contracts/product/IProductComponent.sol +10 -1
  412. package/contracts/product/PolicyService.sol +248 -252
  413. package/contracts/product/PolicyServiceLib.sol +65 -0
  414. package/contracts/product/PolicyServiceManager.sol +1 -1
  415. package/contracts/product/PricingService.sol +30 -26
  416. package/contracts/product/PricingServiceManager.sol +3 -3
  417. package/contracts/product/Product.sol +106 -60
  418. package/contracts/product/RiskService.sol +74 -25
  419. package/contracts/product/RiskServiceManager.sol +1 -1
  420. package/contracts/registry/ChainNft.sol +10 -11
  421. package/contracts/registry/IRegistry.sol +14 -15
  422. package/contracts/registry/IRegistryService.sol +6 -4
  423. package/contracts/registry/IRelease.sol +26 -0
  424. package/contracts/registry/ITransferInterceptor.sol +1 -2
  425. package/contracts/registry/Registry.sol +29 -6
  426. package/contracts/registry/RegistryAdmin.sol +132 -226
  427. package/contracts/registry/RegistryService.sol +40 -58
  428. package/contracts/registry/RegistryServiceManager.sol +1 -1
  429. package/contracts/registry/ReleaseAdmin.sol +245 -0
  430. package/contracts/registry/ReleaseLifecycle.sol +2 -0
  431. package/contracts/registry/ReleaseRegistry.sol +139 -124
  432. package/contracts/registry/ServiceAuthorizationV3.sol +97 -48
  433. package/contracts/registry/TokenRegistry.sol +6 -8
  434. package/contracts/shared/Component.sol +69 -118
  435. package/contracts/shared/ComponentService.sol +422 -371
  436. package/contracts/shared/ComponentServiceManager.sol +1 -1
  437. package/contracts/shared/ComponentVerifyingService.sol +27 -15
  438. package/contracts/shared/ContractLib.sol +224 -9
  439. package/contracts/shared/IComponent.sol +8 -20
  440. package/contracts/shared/IComponentService.sol +41 -37
  441. package/contracts/shared/IInstanceLinkedComponent.sol +3 -22
  442. package/contracts/shared/INftOwnable.sol +2 -0
  443. package/contracts/shared/IRegisterable.sol +23 -1
  444. package/contracts/shared/IService.sol +3 -5
  445. package/contracts/shared/InstanceLinkedComponent.sol +68 -42
  446. package/contracts/shared/Lifecycle.sol +7 -7
  447. package/contracts/shared/NftOwnable.sol +26 -6
  448. package/contracts/shared/PolicyHolder.sol +1 -1
  449. package/contracts/shared/Registerable.sol +53 -19
  450. package/contracts/shared/RegistryLinked.sol +7 -13
  451. package/contracts/shared/Service.sol +9 -31
  452. package/contracts/shared/TokenHandler.sol +274 -72
  453. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  454. package/contracts/staking/IStaking.sol +6 -10
  455. package/contracts/staking/IStakingService.sol +12 -4
  456. package/contracts/staking/StakeManagerLib.sol +69 -20
  457. package/contracts/staking/Staking.sol +73 -41
  458. package/contracts/staking/StakingReader.sol +1 -16
  459. package/contracts/staking/StakingService.sol +70 -24
  460. package/contracts/staking/StakingServiceManager.sol +5 -4
  461. package/contracts/type/Key32.sol +2 -2
  462. package/contracts/type/Key32Set.sol +62 -0
  463. package/contracts/type/NftId.sol +6 -0
  464. package/contracts/type/ObjectType.sol +48 -21
  465. package/contracts/type/RiskId.sol +23 -6
  466. package/contracts/type/RoleId.sol +23 -15
  467. package/contracts/type/Selector.sol +5 -0
  468. package/contracts/type/Timestamp.sol +0 -5
  469. package/contracts/type/UFixed.sol +9 -119
  470. package/contracts/type/Version.sol +15 -5
  471. package/contracts/upgradeability/ProxyManager.sol +2 -1
  472. package/package.json +3 -3
  473. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  474. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  475. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  476. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  477. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  478. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  479. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  480. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  481. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  482. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  483. package/contracts/instance/module/IAccess.sol +0 -46
@@ -0,0 +1,65 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {InstanceReader} from "../instance/InstanceReader.sol";
5
+ import {IPolicy} from "../instance/module/IPolicy.sol";
6
+ import {IPolicyService} from "../product/IPolicyService.sol";
7
+ import {NftId} from "../type/NftId.sol";
8
+ import {StateId, CLOSED, COLLATERALIZED} from "../type/StateId.sol";
9
+ import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
10
+
11
+ library PolicyServiceLib {
12
+
13
+ function checkExpiration(
14
+ Timestamp newExpiredAt,
15
+ NftId policyNftId,
16
+ StateId policyState,
17
+ IPolicy.PolicyInfo memory policyInfo
18
+ )
19
+ external
20
+ view
21
+ {
22
+ if (policyState != COLLATERALIZED()) {
23
+ revert IPolicyService.ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
24
+ }
25
+ if (TimestampLib.blockTimestamp() < policyInfo.activatedAt) {
26
+ revert IPolicyService.ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
27
+ }
28
+
29
+ // check expiredAt represents a valid expiry time
30
+ if (newExpiredAt >= policyInfo.expiredAt) {
31
+ revert IPolicyService.ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, newExpiredAt);
32
+ }
33
+
34
+ if (newExpiredAt.gtz() && newExpiredAt < TimestampLib.blockTimestamp()) {
35
+ revert IPolicyService.ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), newExpiredAt);
36
+ }
37
+ }
38
+
39
+ function policyIsCloseable(InstanceReader instanceReader, NftId policyNftId)
40
+ external
41
+ view
42
+ returns (bool isCloseable)
43
+ {
44
+ // policy already closed
45
+ if (instanceReader.getPolicyState(policyNftId) == CLOSED()) {
46
+ return false;
47
+ }
48
+
49
+ IPolicy.PolicyInfo memory info = instanceReader.getPolicyInfo(policyNftId);
50
+
51
+ if (info.productNftId.eqz()) { return false; } // not closeable: policy does not exist (or does not belong to this instance)
52
+ if (info.activatedAt.eqz()) { return false; } // not closeable: not yet activated
53
+ if (info.openClaimsCount > 0) { return false; } // not closeable: has open claims
54
+
55
+ // closeable: if sum of claims matches sum insured a policy may be closed prior to the expiry date
56
+ if (info.claimAmount == info.sumInsuredAmount) { return true; }
57
+
58
+ // not closeable: not yet expired
59
+ if (TimestampLib.blockTimestamp() < info.expiredAt) { return false; }
60
+
61
+ // all conditions to close the policy are met
62
+ return true;
63
+ }
64
+
65
+ }
@@ -17,7 +17,7 @@ contract PolicyServiceManager is ProxyManager {
17
17
  )
18
18
  {
19
19
  PolicyService svc = new PolicyService{salt: salt}();
20
- bytes memory data = abi.encode(registry, authority);
20
+ bytes memory data = abi.encode(authority, registry);
21
21
  IVersionable versionable = initialize(
22
22
  registry,
23
23
  address(svc),
@@ -9,7 +9,7 @@ import {NftId} from "../type/NftId.sol";
9
9
  import {Fee} from "../type/Fee.sol";
10
10
  import {ReferralId} from "../type/Referral.sol";
11
11
  import {RiskId} from "../type/RiskId.sol";
12
- import {PRODUCT, DISTRIBUTION, PRICE} from "../type/ObjectType.sol";
12
+ import {PRODUCT, BUNDLE, DISTRIBUTION, PRICE} from "../type/ObjectType.sol";
13
13
  import {IRegistry} from "../registry/IRegistry.sol";
14
14
 
15
15
  import {IProductComponent} from "./IProductComponent.sol";
@@ -31,11 +31,8 @@ contract PricingService is
31
31
  ComponentVerifyingService,
32
32
  IPricingService
33
33
  {
34
- using UFixedLib for UFixed;
35
-
36
34
  IDistributionService internal _distributionService;
37
35
 
38
-
39
36
  function _initialize(
40
37
  address owner,
41
38
  bytes memory data
@@ -45,14 +42,15 @@ contract PricingService is
45
42
  initializer()
46
43
  {
47
44
  (
48
- address registryAddress,
49
- address authority
45
+ address authority,
46
+ address registry
50
47
  ) = abi.decode(data, (address, address));
51
48
 
52
- _initializeService(registryAddress, authority, owner);
53
- _registerInterface(type(IPricingService).interfaceId);
49
+ __Service_init(authority, registry, owner);
54
50
 
55
51
  _distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
52
+
53
+ _registerInterface(type(IPricingService).interfaceId);
56
54
  }
57
55
 
58
56
  /// @dev calculates the premium amount for the specified attributes
@@ -73,6 +71,9 @@ contract PricingService is
73
71
  IPolicy.PremiumInfo memory premium
74
72
  )
75
73
  {
74
+ _checkNftType(productNftId, PRODUCT());
75
+ _checkNftType(bundleNftId, BUNDLE());
76
+
76
77
  InstanceReader reader;
77
78
  Amount netPremiumAmount;
78
79
 
@@ -98,30 +99,32 @@ contract PricingService is
98
99
  {
99
100
  // get configurations for all involed objects
100
101
  IComponents.ProductInfo memory productInfo = reader.getProductInfo(productNftId);
102
+ IComponents.FeeInfo memory feeInfo = reader.getFeeInfo(productNftId);
101
103
 
102
104
  IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
103
105
  if(bundleInfo.poolNftId != productInfo.poolNftId) {
104
- revert ErrorIPricingServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, productInfo.poolNftId);
106
+ revert ErrorPricingServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, productInfo.poolNftId);
105
107
  }
106
108
 
107
109
  // calculate fixed fees for product, pool, bundle
108
110
  premium = _getFixedFeeAmounts(
109
111
  netPremiumAmount,
110
- productInfo,
112
+ feeInfo,
111
113
  bundleInfo
112
114
  );
113
115
 
114
116
  // calculate variable fees for product, pool, bundle
115
117
  premium = _calculateVariableFeeAmounts(
116
118
  premium,
117
- productInfo,
119
+ feeInfo,
118
120
  bundleInfo
119
121
  );
120
122
 
121
123
  // calculate distribution fee and (if applicable) commission
122
124
  premium = _calculateDistributionOwnerFeeAmount(
123
125
  premium,
124
- productInfo,
126
+ feeInfo,
127
+ productInfo.distributionNftId,
125
128
  referralId,
126
129
  reader
127
130
  );
@@ -137,8 +140,8 @@ contract PricingService is
137
140
  revert ErrorPricingServiceTargetWalletAmountsMismatch();
138
141
  }
139
142
 
140
- if (premium.distributionOwnerFeeFixAmount.toInt() < productInfo.minDistributionOwnerFee.fixedFee) {
141
- revert ErrorIPricingServiceFeeCalculationMismatch(
143
+ if (premium.distributionOwnerFeeFixAmount.toInt() < feeInfo.minDistributionOwnerFee.fixedFee) {
144
+ revert ErrorPricingServiceFeeCalculationMismatch(
142
145
  premium.distributionFeeFixAmount,
143
146
  premium.distributionFeeVarAmount,
144
147
  premium.distributionOwnerFeeFixAmount,
@@ -149,7 +152,7 @@ contract PricingService is
149
152
  }
150
153
 
151
154
  if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
152
- revert ErrorIPricingServiceFeeCalculationMismatch(
155
+ revert ErrorPricingServiceFeeCalculationMismatch(
153
156
  premium.distributionFeeFixAmount,
154
157
  premium.distributionFeeVarAmount,
155
158
  premium.distributionOwnerFeeFixAmount,
@@ -164,7 +167,7 @@ contract PricingService is
164
167
  // internal functions
165
168
  function _getFixedFeeAmounts(
166
169
  Amount netPremiumAmount,
167
- IComponents.ProductInfo memory productInfo,
170
+ IComponents.FeeInfo memory feeInfo,
168
171
  IBundle.BundleInfo memory bundleInfo
169
172
  )
170
173
  internal
@@ -177,11 +180,11 @@ contract PricingService is
177
180
  premium.netPremiumAmount = netPremiumAmount;
178
181
  premium.fullPremiumAmount = netPremiumAmount;
179
182
 
180
- Amount t = AmountLib.toAmount(productInfo.productFee.fixedFee);
183
+ Amount t = AmountLib.toAmount(feeInfo.productFee.fixedFee);
181
184
  premium.productFeeFixAmount = t;
182
185
  premium.fullPremiumAmount = premium.fullPremiumAmount + t;
183
186
 
184
- t = AmountLib.toAmount(productInfo.poolFee.fixedFee);
187
+ t = AmountLib.toAmount(feeInfo.poolFee.fixedFee);
185
188
  premium.poolFeeFixAmount = t;
186
189
  premium.fullPremiumAmount = premium.fullPremiumAmount + t;
187
190
 
@@ -189,14 +192,14 @@ contract PricingService is
189
192
  premium.bundleFeeFixAmount = t;
190
193
  premium.fullPremiumAmount = premium.fullPremiumAmount + t;
191
194
 
192
- t = AmountLib.toAmount(productInfo.distributionFee.fixedFee);
195
+ t = AmountLib.toAmount(feeInfo.distributionFee.fixedFee);
193
196
  premium.distributionFeeFixAmount = t;
194
197
  premium.fullPremiumAmount = premium.fullPremiumAmount + t;
195
198
  }
196
199
 
197
200
  function _calculateVariableFeeAmounts(
198
201
  IPolicy.PremiumInfo memory premium,
199
- IComponents.ProductInfo memory productInfo,
202
+ IComponents.FeeInfo memory feeInfo,
200
203
  IBundle.BundleInfo memory bundleInfo
201
204
  )
202
205
  internal
@@ -207,11 +210,11 @@ contract PricingService is
207
210
  {
208
211
  Amount netPremiumAmount = premium.netPremiumAmount;
209
212
 
210
- Amount t = netPremiumAmount.multiplyWith(productInfo.productFee.fractionalFee);
213
+ Amount t = netPremiumAmount.multiplyWith(feeInfo.productFee.fractionalFee);
211
214
  premium.productFeeVarAmount = t;
212
215
  premium.fullPremiumAmount = premium.fullPremiumAmount + t;
213
216
 
214
- t = netPremiumAmount.multiplyWith(productInfo.poolFee.fractionalFee);
217
+ t = netPremiumAmount.multiplyWith(feeInfo.poolFee.fractionalFee);
215
218
  premium.poolFeeVarAmount = t;
216
219
  premium.fullPremiumAmount = premium.fullPremiumAmount + t;
217
220
 
@@ -219,7 +222,7 @@ contract PricingService is
219
222
  premium.bundleFeeVarAmount = t;
220
223
  premium.fullPremiumAmount = premium.fullPremiumAmount + t;
221
224
 
222
- t = netPremiumAmount.multiplyWith(productInfo.distributionFee.fractionalFee);
225
+ t = netPremiumAmount.multiplyWith(feeInfo.distributionFee.fractionalFee);
223
226
  premium.distributionFeeVarAmount = t;
224
227
  premium.fullPremiumAmount = premium.fullPremiumAmount + t;
225
228
 
@@ -228,7 +231,8 @@ contract PricingService is
228
231
 
229
232
  function _calculateDistributionOwnerFeeAmount(
230
233
  IPolicy.PremiumInfo memory premium,
231
- IComponents.ProductInfo memory productInfo,
234
+ IComponents.FeeInfo memory feeInfo,
235
+ NftId distributionNftId,
232
236
  // ISetup.DistributionSetupInfo memory distInfo,
233
237
  ReferralId referralId,
234
238
  InstanceReader reader
@@ -239,14 +243,14 @@ contract PricingService is
239
243
  {
240
244
 
241
245
  // if the referral is not valid, then the distribution owner gets everything
242
- if (! _distributionService.referralIsValid(productInfo.distributionNftId, referralId)) {
246
+ if (distributionNftId.eqz() || ! _distributionService.referralIsValid(distributionNftId, referralId)) {
243
247
  premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
244
248
  premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
245
249
  premium.premiumAmount = premium.fullPremiumAmount;
246
250
  return premium;
247
251
  }
248
252
 
249
- Fee memory minDistributionOwnerFee = productInfo.minDistributionOwnerFee;
253
+ Fee memory minDistributionOwnerFee = feeInfo.minDistributionOwnerFee;
250
254
 
251
255
  // if the referral is valid, the the commission and discount are calculated based in the full premium
252
256
  // the remaing amount goes to the distribution owner
@@ -12,14 +12,14 @@ contract PricingServiceManager is ProxyManager {
12
12
  /// @dev initializes proxy manager with pricing service implementation and deploys instance
13
13
  constructor(
14
14
  address authority,
15
- address registryAddress,
15
+ address registry,
16
16
  bytes32 salt
17
17
  )
18
18
  {
19
19
  PricingService pricingSrv = new PricingService{salt: salt}();
20
- bytes memory data = abi.encode(registryAddress, authority);
20
+ bytes memory data = abi.encode(authority, registry);
21
21
  IVersionable versionable = initialize(
22
- registryAddress,
22
+ registry,
23
23
  address(pricingSrv),
24
24
  data,
25
25
  salt);
@@ -3,20 +3,23 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Amount, AmountLib} from "../type/Amount.sol";
5
5
  import {ClaimId} from "../type/ClaimId.sol";
6
- import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
6
+ import {IComponent} from "../shared/IComponent.sol";
7
7
  import {Fee, FeeLib} from "../type/Fee.sol";
8
8
  import {IRisk} from "../instance/module/IRisk.sol";
9
9
  import {IApplicationService} from "./IApplicationService.sol";
10
10
  import {IAuthorization} from "../authorization/IAuthorization.sol";
11
11
  import {IComponentService} from "../shared/IComponentService.sol";
12
+ import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
13
+ import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
12
14
  import {IPolicyService} from "./IPolicyService.sol";
13
15
  import {IRiskService} from "./IRiskService.sol";
14
16
  import {IClaimService} from "./IClaimService.sol";
15
17
  import {IPricingService} from "./IPricingService.sol";
16
18
  import {IProductComponent} from "./IProductComponent.sol";
17
- import {NftId} from "../type/NftId.sol";
19
+ import {NftId, NftIdLib} from "../type/NftId.sol";
20
+ import {ObjectType, COMPONENT, DISTRIBUTION, ORACLE, POOL, PRODUCT, BUNDLE, APPLICATION, POLICY, CLAIM, PRICE } from "../type/ObjectType.sol";
18
21
  import {PayoutId} from "../type/PayoutId.sol";
19
- import {COMPONENT, PRODUCT, APPLICATION, POLICY, CLAIM, PRICE } from "../type/ObjectType.sol";
22
+ import {COMPONENT, PRODUCT, APPLICATION, POLICY, CLAIM, PRICE, BUNDLE, RISK } from "../type/ObjectType.sol";
20
23
  import {ReferralId} from "../type/Referral.sol";
21
24
  import {RiskId, RiskIdLib} from "../type/RiskId.sol";
22
25
  import {Seconds} from "../type/Seconds.sol";
@@ -25,8 +28,9 @@ import {Timestamp} from "../type/Timestamp.sol";
25
28
 
26
29
  import {IPolicy} from "../instance/module/IPolicy.sol";
27
30
  import {IComponents} from "../instance/module/IComponents.sol";
28
- import {Pool} from "../pool/Pool.sol";
29
- import {Distribution} from "../distribution/Distribution.sol";
31
+ import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
32
+ import {IOracleComponent} from "../oracle/IOracleComponent.sol";
33
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
30
34
 
31
35
  abstract contract Product is
32
36
  InstanceLinkedComponent,
@@ -36,26 +40,24 @@ abstract contract Product is
36
40
  bytes32 public constant PRODUCT_STORAGE_LOCATION_V1 = 0x0bb7aafdb8e380f81267337bc5b5dfdf76e6d3a380ecadb51ec665246d9d6800;
37
41
 
38
42
  struct ProductStorage {
43
+ IComponents.ProductInfo _productInfo;
44
+ IComponents.FeeInfo _feeInfo;
45
+ IComponentService _componentService;
39
46
  IRiskService _riskService;
40
47
  IApplicationService _applicationService;
41
48
  IPolicyService _policyService;
42
49
  IClaimService _claimService;
43
50
  IPricingService _pricingService;
44
- IComponentService _componentService;
45
- NftId _poolNftId;
46
- NftId _distributionNftId;
47
- Pool _pool;
48
- Distribution _distribution;
49
51
  }
50
52
 
51
53
 
52
- function register()
54
+ function registerComponent(address component)
53
55
  external
54
56
  virtual
55
57
  onlyOwner()
58
+ returns (NftId componentNftId)
56
59
  {
57
- _getProductStorage()._componentService.registerProduct();
58
- _approveTokenHandler(type(uint256).max);
60
+ return _getProductStorage()._componentService.registerComponent(component);
59
61
  }
60
62
 
61
63
 
@@ -67,6 +69,7 @@ abstract contract Product is
67
69
  external
68
70
  virtual
69
71
  restricted() // pool service role
72
+ onlyNftOfType(policyNftId, POLICY())
70
73
  {
71
74
  // default implementation does nothing
72
75
  }
@@ -83,6 +86,7 @@ abstract contract Product is
83
86
  public
84
87
  view
85
88
  override
89
+ onlyNftOfType(bundleNftId, BUNDLE())
86
90
  returns (Amount premiumAmount)
87
91
  {
88
92
  IPolicy.PremiumInfo memory premium = _getProductStorage()._pricingService.calculatePremium(
@@ -120,35 +124,28 @@ abstract contract Product is
120
124
  view
121
125
  returns (IComponents.ProductInfo memory poolInfo)
122
126
  {
123
- ProductStorage storage $ = _getProductStorage();
127
+ return _getProductStorage()._productInfo;
128
+ }
124
129
 
125
- return IComponents.ProductInfo({
126
- distributionNftId: $._distributionNftId,
127
- poolNftId: $._poolNftId,
128
- isProcessingFundedClaims: false,
129
- productFee: FeeLib.zero(),
130
- processingFee: FeeLib.zero(),
131
- distributionFee: FeeLib.zero(),
132
- minDistributionOwnerFee: FeeLib.zero(),
133
- poolFee: FeeLib.zero(),
134
- stakingFee: FeeLib.zero(),
135
- performanceFee: FeeLib.zero()
136
- });
130
+ function getInitialFeeInfo()
131
+ public
132
+ virtual
133
+ view
134
+ returns (IComponents.FeeInfo memory feeInfo)
135
+ {
136
+ return _getProductStorage()._feeInfo;
137
137
  }
138
138
 
139
139
 
140
140
  function _initializeProduct(
141
141
  address registry,
142
142
  NftId instanceNftId,
143
- IAuthorization authorization,
144
- address initialOwner,
145
143
  string memory name,
146
144
  address token,
147
- bool isInterceptor,
148
- address pool, // switch to pool nft id (#527)
149
- address distribution, // switch to distribution nft id (#527)
150
- // add NftId [] oracleNftIds (#527)
151
- bytes memory registryData, // writeonly data that will saved in the object info record of the registry
145
+ IComponents.ProductInfo memory productInfo,
146
+ IComponents.FeeInfo memory feeInfo,
147
+ IAuthorization authorization,
148
+ address initialOwner,
152
149
  bytes memory componentData // writeonly data that will saved in the object info record of the registry
153
150
  )
154
151
  internal
@@ -162,24 +159,19 @@ abstract contract Product is
162
159
  token,
163
160
  PRODUCT(),
164
161
  authorization,
165
- isInterceptor,
162
+ productInfo.isInterceptingPolicyTransfers,
166
163
  initialOwner,
167
- registryData,
168
164
  componentData);
169
165
 
170
166
  ProductStorage storage $ = _getProductStorage();
171
- // TODO add validation
172
- // TODO refactor to go via registry for all components linked to this product (#527)
173
- $._riskService = IRiskService(_getServiceAddress(PRODUCT()));
167
+ $._productInfo = productInfo;
168
+ $._feeInfo = feeInfo;
169
+ $._riskService = IRiskService(_getServiceAddress(RISK()));
174
170
  $._applicationService = IApplicationService(_getServiceAddress(APPLICATION()));
175
171
  $._policyService = IPolicyService(_getServiceAddress(POLICY()));
176
172
  $._claimService = IClaimService(_getServiceAddress(CLAIM()));
177
173
  $._pricingService = IPricingService(_getServiceAddress(PRICE()));
178
174
  $._componentService = IComponentService(_getServiceAddress(COMPONENT()));
179
- $._pool = Pool(pool);
180
- $._distribution = Distribution(distribution);
181
- $._poolNftId = getRegistry().getNftIdForAddress(pool);
182
- $._distributionNftId = getRegistry().getNftIdForAddress(distribution);
183
175
 
184
176
  _registerInterface(type(IProductComponent).interfaceId);
185
177
  }
@@ -199,8 +191,11 @@ abstract contract Product is
199
191
  function _createRisk(
200
192
  RiskId id,
201
193
  bytes memory data
202
- ) internal {
203
- _getRiskService().createRisk(
194
+ )
195
+ internal
196
+ virtual
197
+ {
198
+ _getProductStorage()._riskService.createRisk(
204
199
  id,
205
200
  data
206
201
  );
@@ -209,8 +204,11 @@ abstract contract Product is
209
204
  function _updateRisk(
210
205
  RiskId id,
211
206
  bytes memory data
212
- ) internal {
213
- _getRiskService().updateRisk(
207
+ )
208
+ internal
209
+ virtual
210
+ {
211
+ _getProductStorage()._riskService.updateRisk(
214
212
  id,
215
213
  data
216
214
  );
@@ -219,19 +217,17 @@ abstract contract Product is
219
217
  function _updateRiskState(
220
218
  RiskId id,
221
219
  StateId state
222
- ) internal {
223
- _getRiskService().updateRiskState(
220
+ )
221
+ internal
222
+ virtual
223
+ {
224
+ _getProductStorage()._riskService.updateRiskState(
224
225
  id,
225
226
  state
226
227
  );
227
228
  }
228
229
 
229
230
 
230
- function _getRiskInfo(RiskId id) internal view returns (IRisk.RiskInfo memory info) {
231
- return getInstance().getInstanceReader().getRiskInfo(id);
232
- }
233
-
234
-
235
231
  function _createApplication(
236
232
  address applicationOwner,
237
233
  RiskId riskId,
@@ -243,6 +239,7 @@ abstract contract Product is
243
239
  bytes memory applicationData
244
240
  )
245
241
  internal
242
+ virtual
246
243
  returns (NftId applicationNftId)
247
244
  {
248
245
  return _getProductStorage()._applicationService.create(
@@ -262,8 +259,10 @@ abstract contract Product is
262
259
  Timestamp activateAt
263
260
  )
264
261
  internal
262
+ virtual
263
+ returns (Amount premiumAmount)
265
264
  {
266
- _getProductStorage()._policyService.createPolicy(
265
+ premiumAmount = _getProductStorage()._policyService.createPolicy(
267
266
  applicationNftId,
268
267
  activateAt);
269
268
  }
@@ -272,6 +271,7 @@ abstract contract Product is
272
271
  NftId policyNftId
273
272
  )
274
273
  internal
274
+ virtual
275
275
  {
276
276
  _getProductStorage()._policyService.decline(
277
277
  policyNftId);
@@ -282,16 +282,33 @@ abstract contract Product is
282
282
  Timestamp expireAt
283
283
  )
284
284
  internal
285
+ virtual
285
286
  returns (Timestamp expiredAt)
286
287
  {
287
288
  expiredAt = _getProductStorage()._policyService.expire(policyNftId, expireAt);
288
289
  }
289
290
 
291
+ /// @dev adjust the activation date of the policy.
292
+ /// The policy must already have an activation date set.
293
+ /// Allowed values are from the current blocktime to the expiration date of the policy.
294
+ function _adjustActivation(
295
+ NftId policyNftId,
296
+ Timestamp activateAt
297
+ )
298
+ internal
299
+ virtual
300
+ {
301
+ _getProductStorage()._policyService.adjustActivation(
302
+ policyNftId,
303
+ activateAt);
304
+ }
305
+
290
306
  function _collectPremium(
291
307
  NftId policyNftId,
292
308
  Timestamp activateAt
293
309
  )
294
310
  internal
311
+ virtual
295
312
  {
296
313
  _getProductStorage()._policyService.collectPremium(
297
314
  policyNftId,
@@ -303,6 +320,7 @@ abstract contract Product is
303
320
  Timestamp activateAt
304
321
  )
305
322
  internal
323
+ virtual
306
324
  {
307
325
  _getProductStorage()._policyService.activate(
308
326
  policyNftId,
@@ -313,6 +331,7 @@ abstract contract Product is
313
331
  NftId policyNftId
314
332
  )
315
333
  internal
334
+ virtual
316
335
  {
317
336
  _getProductStorage()._policyService.close(
318
337
  policyNftId);
@@ -324,6 +343,7 @@ abstract contract Product is
324
343
  bytes memory claimData
325
344
  )
326
345
  internal
346
+ virtual
327
347
  returns(ClaimId)
328
348
  {
329
349
  return _getProductStorage()._claimService.submit(
@@ -332,6 +352,18 @@ abstract contract Product is
332
352
  claimData);
333
353
  }
334
354
 
355
+ function _revokeClaim(
356
+ NftId policyNftId,
357
+ ClaimId claimId
358
+ )
359
+ internal
360
+ virtual
361
+ {
362
+ _getProductStorage()._claimService.revoke(
363
+ policyNftId,
364
+ claimId);
365
+ }
366
+
335
367
  function _confirmClaim(
336
368
  NftId policyNftId,
337
369
  ClaimId claimId,
@@ -339,6 +371,7 @@ abstract contract Product is
339
371
  bytes memory data
340
372
  )
341
373
  internal
374
+ virtual
342
375
  {
343
376
  _getProductStorage()._claimService.confirm(
344
377
  policyNftId,
@@ -353,6 +386,7 @@ abstract contract Product is
353
386
  bytes memory data
354
387
  )
355
388
  internal
389
+ virtual
356
390
  {
357
391
  _getProductStorage()._claimService.decline(
358
392
  policyNftId,
@@ -365,6 +399,7 @@ abstract contract Product is
365
399
  ClaimId claimId
366
400
  )
367
401
  internal
402
+ virtual
368
403
  {
369
404
  _getProductStorage()._claimService.close(
370
405
  policyNftId,
@@ -378,6 +413,7 @@ abstract contract Product is
378
413
  bytes memory data
379
414
  )
380
415
  internal
416
+ virtual
381
417
  returns (PayoutId)
382
418
  {
383
419
  return _getProductStorage()._claimService.createPayout(
@@ -395,6 +431,7 @@ abstract contract Product is
395
431
  bytes memory data
396
432
  )
397
433
  internal
434
+ virtual
398
435
  returns (PayoutId)
399
436
  {
400
437
  return _getProductStorage()._claimService.createPayoutForBeneficiary(
@@ -410,23 +447,32 @@ abstract contract Product is
410
447
  PayoutId payoutId
411
448
  )
412
449
  internal
450
+ virtual
413
451
  {
414
452
  _getProductStorage()._claimService.processPayout(
415
453
  policyNftId,
416
454
  payoutId);
417
455
  }
418
456
 
419
- function _toRiskId(string memory riskName) internal pure returns (RiskId riskId) {
457
+ function _cancelPayout(
458
+ NftId policyNftId,
459
+ PayoutId payoutId
460
+ )
461
+ internal
462
+ virtual
463
+ {
464
+ _getProductStorage()._claimService.cancelPayout(
465
+ policyNftId,
466
+ payoutId);
467
+ }
468
+
469
+ function _toRiskId(string memory riskName) internal virtual pure returns (RiskId riskId) {
420
470
  return RiskIdLib.toRiskId(riskName);
421
471
  }
422
472
 
423
- function _getProductStorage() internal pure returns (ProductStorage storage $) {
473
+ function _getProductStorage() internal virtual pure returns (ProductStorage storage $) {
424
474
  assembly {
425
475
  $.slot := PRODUCT_STORAGE_LOCATION_V1
426
476
  }
427
477
  }
428
-
429
- function _getRiskService() internal view returns (IRiskService) {
430
- return _getProductStorage()._riskService;
431
- }
432
478
  }