@etherisc/gif-next 0.0.2-8feedcc-442 → 0.0.2-906d113-035

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 (454) hide show
  1. package/README.md +19 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -32
  10. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
  12. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
  14. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
  15. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
  16. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
  18. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +163 -309
  20. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
  22. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +91 -277
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +172 -290
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +99 -123
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +78 -92
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +78 -62
  32. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
  33. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
  34. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  35. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1538 -0
  36. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
  38. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2077 -0
  40. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  41. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
  42. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  43. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1471 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1231 -0
  48. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  49. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1592 -0
  50. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2095 -0
  52. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  53. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +53 -31
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +29 -84
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +56 -123
  60. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +166 -139
  62. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
  64. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  65. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +459 -131
  66. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +77 -242
  68. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -87
  70. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +330 -233
  72. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  73. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  74. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  75. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  76. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  77. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  78. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
  79. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  80. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  81. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  83. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  87. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  88. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  89. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  90. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +137 -283
  91. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  92. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
  93. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  94. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  95. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +66 -80
  96. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  97. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
  98. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  99. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +79 -265
  100. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  101. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +91 -159
  102. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  103. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +75 -83
  104. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  105. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +109 -330
  106. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  107. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +82 -22
  108. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  109. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +359 -194
  110. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  111. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +145 -97
  112. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  113. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +178 -23
  114. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  115. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +88 -130
  116. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  117. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +384 -179
  118. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  119. package/artifacts/contracts/pool/Pool.sol/Pool.json +99 -313
  120. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  121. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +506 -334
  122. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +111 -87
  124. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  125. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +76 -168
  126. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  127. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +72 -92
  128. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  129. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +136 -281
  130. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  131. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
  132. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  133. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +303 -187
  134. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  135. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +119 -103
  136. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  137. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +34 -0
  138. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  139. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +176 -6
  140. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  141. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +323 -118
  142. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  143. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
  144. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  145. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +124 -97
  146. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  147. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
  148. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  149. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +444 -325
  150. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  151. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +119 -103
  152. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  153. package/artifacts/contracts/product/PricingService.sol/PricingService.json +199 -309
  154. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  155. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +96 -120
  156. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  157. package/artifacts/contracts/product/Product.sol/Product.json +136 -281
  158. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  159. package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
  160. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  161. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -0
  162. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  163. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  164. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  165. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +286 -34
  166. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  167. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
  168. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  169. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
  170. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  171. package/artifacts/contracts/registry/Registry.sol/Registry.json +492 -95
  172. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  173. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +283 -143
  174. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  175. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +78 -284
  176. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  177. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -75
  178. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  179. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
  180. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  181. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +129 -221
  182. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  183. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
  184. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  185. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  186. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  187. package/artifacts/contracts/shared/Component.sol/Component.json +65 -236
  188. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  189. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +355 -283
  190. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  191. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +122 -120
  192. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  193. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
  194. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
  195. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
  196. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  197. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +55 -54
  198. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  199. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +321 -19
  200. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  201. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +66 -80
  202. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  203. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
  204. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  205. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
  206. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  207. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
  208. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  209. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
  210. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  211. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
  212. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  213. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  214. package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
  215. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  216. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
  217. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  218. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +79 -265
  219. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  220. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
  221. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  222. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
  223. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  224. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  225. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  226. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
  227. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  228. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
  229. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  230. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
  231. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  232. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  233. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  234. package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
  235. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  236. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  237. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  238. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  239. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  240. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +82 -55
  241. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  242. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
  243. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  244. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +63 -93
  245. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  246. package/artifacts/contracts/staking/Staking.sol/Staking.json +176 -293
  247. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  248. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
  249. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  250. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +106 -91
  251. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  252. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
  253. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  254. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +71 -165
  255. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  256. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +71 -79
  257. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  258. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +169 -128
  259. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  260. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
  261. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  262. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
  264. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  266. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
  268. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  270. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
  272. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  273. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  274. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  276. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  277. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  278. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  280. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
  282. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  284. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  285. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  286. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  287. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  288. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  289. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  290. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  291. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  292. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  293. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  295. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
  296. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  297. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  299. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  300. package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
  301. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
  303. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  305. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  306. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  307. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +55 -70
  308. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  309. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  310. package/contracts/authorization/AccessAdmin.sol +64 -59
  311. package/contracts/authorization/Authorization.sol +111 -40
  312. package/contracts/authorization/IAccess.sol +1 -0
  313. package/contracts/authorization/IAccessAdmin.sol +4 -3
  314. package/contracts/authorization/IAuthorization.sol +13 -7
  315. package/contracts/authorization/IServiceAuthorization.sol +3 -1
  316. package/contracts/authorization/ReleaseAccessManager.sol +38 -0
  317. package/contracts/authorization/ServiceAuthorization.sol +26 -10
  318. package/contracts/distribution/BasicDistribution.sol +2 -1
  319. package/contracts/distribution/Distribution.sol +7 -17
  320. package/contracts/distribution/DistributionService.sol +83 -65
  321. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  322. package/contracts/distribution/IDistributionComponent.sol +1 -1
  323. package/contracts/distribution/IDistributionService.sol +9 -5
  324. package/contracts/examples/fire/DamageLevel.sol +59 -0
  325. package/contracts/examples/fire/FirePool.sol +75 -0
  326. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  327. package/contracts/examples/fire/FireProduct.sol +418 -0
  328. package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
  329. package/contracts/examples/fire/FireUSD.sol +26 -0
  330. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  331. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  332. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  333. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  334. package/contracts/instance/IInstance.sol +10 -30
  335. package/contracts/instance/IInstanceService.sol +0 -20
  336. package/contracts/instance/Instance.sol +29 -51
  337. package/contracts/instance/InstanceAdmin.sol +42 -31
  338. package/contracts/instance/InstanceAuthorizationV3.sol +11 -21
  339. package/contracts/instance/InstanceReader.sol +115 -25
  340. package/contracts/instance/InstanceService.sol +65 -97
  341. package/contracts/instance/InstanceServiceManager.sol +6 -7
  342. package/contracts/instance/InstanceStore.sol +11 -1
  343. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  344. package/contracts/instance/module/IBundle.sol +1 -1
  345. package/contracts/instance/module/IComponents.sol +10 -10
  346. package/contracts/instance/module/IPolicy.sol +24 -24
  347. package/contracts/mock/Dip.sol +1 -1
  348. package/contracts/oracle/BasicOracle.sol +0 -1
  349. package/contracts/oracle/IOracleService.sol +2 -1
  350. package/contracts/oracle/Oracle.sol +6 -16
  351. package/contracts/oracle/OracleService.sol +47 -34
  352. package/contracts/oracle/OracleServiceManager.sol +6 -6
  353. package/contracts/pool/BasicPool.sol +21 -31
  354. package/contracts/pool/BasicPoolAuthorization.sol +5 -3
  355. package/contracts/pool/BundleService.sol +200 -61
  356. package/contracts/pool/BundleServiceManager.sol +6 -6
  357. package/contracts/pool/IBundleService.sol +31 -8
  358. package/contracts/pool/IPoolComponent.sol +18 -8
  359. package/contracts/pool/IPoolService.sol +56 -39
  360. package/contracts/pool/Pool.sol +60 -53
  361. package/contracts/pool/PoolService.sol +241 -141
  362. package/contracts/pool/PoolServiceManager.sol +4 -4
  363. package/contracts/product/ApplicationService.sol +50 -29
  364. package/contracts/product/ApplicationServiceManager.sol +4 -4
  365. package/contracts/product/BasicProduct.sol +9 -38
  366. package/contracts/product/BasicProductAuthorization.sol +0 -1
  367. package/contracts/product/ClaimService.sol +275 -101
  368. package/contracts/product/ClaimServiceManager.sol +4 -4
  369. package/contracts/product/IApplicationService.sol +1 -0
  370. package/contracts/product/IClaimService.sol +31 -7
  371. package/contracts/product/IPolicyService.sol +34 -32
  372. package/contracts/product/IPricingService.sol +10 -10
  373. package/contracts/product/IProductComponent.sol +23 -4
  374. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  375. package/contracts/product/PolicyService.sol +404 -197
  376. package/contracts/product/PolicyServiceManager.sol +4 -4
  377. package/contracts/product/PricingService.sol +50 -53
  378. package/contracts/product/PricingServiceManager.sol +3 -3
  379. package/contracts/product/Product.sol +134 -71
  380. package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
  381. package/contracts/product/RiskServiceManager.sol +39 -0
  382. package/contracts/registry/ChainNft.sol +68 -38
  383. package/contracts/registry/IRegistry.sol +55 -18
  384. package/contracts/registry/IRegistryService.sol +5 -12
  385. package/contracts/registry/ITransferInterceptor.sol +1 -2
  386. package/contracts/registry/Registry.sol +342 -201
  387. package/contracts/registry/RegistryAdmin.sol +134 -51
  388. package/contracts/registry/RegistryService.sol +35 -46
  389. package/contracts/registry/RegistryServiceManager.sol +2 -2
  390. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  391. package/contracts/registry/ReleaseRegistry.sol +204 -188
  392. package/contracts/registry/ServiceAuthorizationV3.sol +16 -22
  393. package/contracts/shared/Component.sol +40 -55
  394. package/contracts/shared/ComponentService.sol +235 -151
  395. package/contracts/shared/ComponentServiceManager.sol +8 -5
  396. package/contracts/shared/ComponentVerifyingService.sol +23 -14
  397. package/contracts/shared/ContractLib.sol +38 -0
  398. package/contracts/shared/IComponent.sol +10 -6
  399. package/contracts/shared/IComponentService.sol +25 -13
  400. package/contracts/shared/IInstanceLinkedComponent.sol +7 -22
  401. package/contracts/shared/ILifecycle.sol +3 -1
  402. package/contracts/shared/INftOwnable.sol +2 -0
  403. package/contracts/shared/IPolicyHolder.sol +12 -22
  404. package/contracts/shared/IRegisterable.sol +11 -0
  405. package/contracts/shared/InitializableERC165.sol +2 -2
  406. package/contracts/shared/InstanceLinkedComponent.sol +72 -31
  407. package/contracts/shared/KeyValueStore.sol +1 -1
  408. package/contracts/shared/Lifecycle.sol +15 -4
  409. package/contracts/shared/NftOwnable.sol +23 -7
  410. package/contracts/shared/PolicyHolder.sol +15 -52
  411. package/contracts/shared/Registerable.sol +19 -9
  412. package/contracts/shared/RegistryLinked.sol +3 -2
  413. package/contracts/shared/Service.sol +20 -18
  414. package/contracts/shared/TokenHandler.sol +100 -19
  415. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  416. package/contracts/staking/IStaking.sol +2 -1
  417. package/contracts/staking/IStakingService.sol +0 -3
  418. package/contracts/staking/StakeManagerLib.sol +18 -25
  419. package/contracts/staking/Staking.sol +13 -32
  420. package/contracts/staking/StakingManager.sol +8 -6
  421. package/contracts/staking/StakingReader.sol +12 -5
  422. package/contracts/staking/StakingService.sol +11 -29
  423. package/contracts/staking/StakingServiceManager.sol +2 -2
  424. package/contracts/staking/TargetManagerLib.sol +7 -3
  425. package/contracts/type/Amount.sol +15 -0
  426. package/contracts/type/Blocknumber.sol +7 -1
  427. package/contracts/type/ClaimId.sol +6 -1
  428. package/contracts/type/NftId.sol +1 -0
  429. package/contracts/type/ObjectType.sol +16 -11
  430. package/contracts/type/PayoutId.sol +10 -10
  431. package/contracts/type/RiskId.sol +15 -1
  432. package/contracts/type/RoleId.sol +0 -12
  433. package/contracts/type/Seconds.sol +21 -1
  434. package/contracts/type/StateId.sol +15 -1
  435. package/contracts/type/Timestamp.sol +11 -1
  436. package/contracts/type/UFixed.sol +4 -0
  437. package/contracts/upgradeability/ProxyManager.sol +68 -34
  438. package/contracts/upgradeability/Versionable.sol +2 -2
  439. package/package.json +2 -1
  440. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  441. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  442. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  443. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  444. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  445. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  446. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  447. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  448. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  449. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  450. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  451. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  452. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  453. package/contracts/product/ProductServiceManager.sol +0 -39
  454. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -1,31 +1,27 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
4
6
  import {IRegistry} from "../registry/IRegistry.sol";
5
7
  import {Product} from "./Product.sol";
6
8
  import {IComponents} from "../instance/module/IComponents.sol";
7
- import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
8
9
  import {IInstance} from "../instance/IInstance.sol";
9
10
  import {IPolicy} from "../instance/module/IPolicy.sol";
10
- import {IPoolComponent} from "../pool/IPoolComponent.sol";
11
- import {IRisk} from "../instance/module/IRisk.sol";
12
- import {IBundle} from "../instance/module/IBundle.sol";
13
11
 
14
12
  import {TokenHandler} from "../shared/TokenHandler.sol";
15
13
 
16
14
  import {Amount, AmountLib} from "../type/Amount.sol";
17
- import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
18
15
  import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
19
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
20
16
  import {ObjectType, APPLICATION, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
21
- import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED, CONFIRMED} from "../type/StateId.sol";
17
+ import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED, PAID} from "../type/StateId.sol";
22
18
  import {NftId, NftIdLib} from "../type/NftId.sol";
23
- import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
24
19
  import {ReferralId} from "../type/Referral.sol";
25
20
  import {StateId} from "../type/StateId.sol";
26
21
  import {VersionPart} from "../type/Version.sol";
27
22
 
28
23
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
24
+ import {ContractLib} from "../shared/ContractLib.sol";
29
25
  import {IApplicationService} from "./IApplicationService.sol";
30
26
  import {IBundleService} from "../pool/IBundleService.sol";
31
27
  import {IClaimService} from "./IClaimService.sol";
@@ -33,19 +29,15 @@ import {IComponentService} from "../shared/IComponentService.sol";
33
29
  import {IDistributionService} from "../distribution/IDistributionService.sol";
34
30
  import {InstanceReader} from "../instance/InstanceReader.sol";
35
31
  import {InstanceStore} from "../instance/InstanceStore.sol";
32
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
36
33
  import {IPolicyService} from "./IPolicyService.sol";
37
34
  import {IPoolService} from "../pool/IPoolService.sol";
38
35
  import {IPricingService} from "./IPricingService.sol";
39
- import {IService} from "../shared/IService.sol";
40
- import {Service} from "../shared/Service.sol";
41
36
 
42
37
  contract PolicyService is
43
38
  ComponentVerifyingService,
44
39
  IPolicyService
45
40
  {
46
- using NftIdLib for NftId;
47
- using TimestampLib for Timestamp;
48
-
49
41
  IApplicationService internal _applicationService;
50
42
  IComponentService internal _componentService;
51
43
  IBundleService internal _bundleService;
@@ -54,8 +46,6 @@ contract PolicyService is
54
46
  IPoolService internal _poolService;
55
47
  IPricingService internal _pricingService;
56
48
 
57
- event LogProductServiceSender(address sender);
58
-
59
49
  function _initialize(
60
50
  address owner,
61
51
  bytes memory data
@@ -65,12 +55,11 @@ contract PolicyService is
65
55
  initializer
66
56
  {
67
57
  (
68
- address registryAddress,,
69
- //address managerAddress
58
+ address registryAddress,
70
59
  address authority
71
- ) = abi.decode(data, (address, address, address));
60
+ ) = abi.decode(data, (address, address));
72
61
 
73
- initializeService(registryAddress, authority, owner);
62
+ _initializeService(registryAddress, authority, owner);
74
63
 
75
64
  VersionPart majorVersion = getVersion().toMajorPart();
76
65
  _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
@@ -81,36 +70,52 @@ contract PolicyService is
81
70
  _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
82
71
  _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
83
72
 
84
- registerInterface(type(IPolicyService).interfaceId);
85
- }
86
-
87
-
88
- function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
89
- IRegistry.ObjectInfo memory productInfo;
90
- (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
91
- product = Product(productInfo.objectAddress);
73
+ _registerInterface(type(IPolicyService).interfaceId);
92
74
  }
93
75
 
94
76
 
95
77
  function decline(
96
- NftId policyNftId
78
+ NftId applicationNftId // = policyNftId
97
79
  )
98
80
  external
99
- override
81
+ virtual
82
+ nonReentrant()
100
83
  {
101
- revert();
84
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
85
+ InstanceReader instanceReader = instance.getInstanceReader();
86
+
87
+ // check policy is in state applied
88
+ if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
89
+ revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
90
+ }
91
+
92
+ // check policy matches with calling product
93
+ IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
94
+ if(applicationInfo.productNftId != productNftId) {
95
+ revert ErrorPolicyServicePolicyProductMismatch(
96
+ applicationNftId,
97
+ applicationInfo.productNftId,
98
+ productNftId);
99
+ }
100
+
101
+
102
+ // store updated policy info
103
+ instance.getInstanceStore().updatePolicyState(
104
+ applicationNftId,
105
+ DECLINED());
106
+
107
+ emit LogPolicyServicePolicyDeclined(applicationNftId);
102
108
  }
103
109
 
104
- event LogDebug(uint idx, string message);
105
110
 
106
- /// @dev underwites application which includes the locking of the required collateral from the pool.
107
- function collateralize(
111
+ /// @inheritdoc IPolicyService
112
+ function createPolicy(
108
113
  NftId applicationNftId, // = policyNftId
109
- bool requirePremiumPayment,
110
114
  Timestamp activateAt
111
115
  )
112
116
  external
113
- virtual override
117
+ virtual
118
+ nonReentrant()
114
119
  {
115
120
  // check caller is registered product
116
121
  (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
@@ -130,13 +135,8 @@ contract PolicyService is
130
135
  productNftId);
131
136
  }
132
137
 
133
- StateId newPolicyState = COLLATERALIZED();
134
-
135
138
  // actual collateralizaion
136
- (
137
- Amount localCollateralAmount,
138
- Amount totalCollateralAmount
139
- ) = _poolService.lockCollateral(
139
+ _poolService.lockCollateral(
140
140
  instance,
141
141
  address(instanceReader.getComponentInfo(productNftId).token),
142
142
  productNftId,
@@ -146,39 +146,61 @@ contract PolicyService is
146
146
 
147
147
  // optional activation of policy
148
148
  if(activateAt > zeroTimestamp()) {
149
- newPolicyState = ACTIVE();
150
- applicationInfo.activatedAt = activateAt;
151
- applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
152
- }
153
-
154
- // optional collection of premium
155
- if(requirePremiumPayment) {
156
- Amount premiumPaidAmount = _calculateAndCollectPremium(
157
- instance,
158
- applicationNftId,
159
- applicationInfo);
160
-
161
- applicationInfo.premiumPaidAmount = premiumPaidAmount;
149
+ applicationInfo = _activate(
150
+ applicationNftId,
151
+ applicationInfo,
152
+ activateAt);
162
153
  }
163
154
 
164
- // store updated policy info
155
+ // update policy and set state to collateralized
165
156
  instance.getInstanceStore().updatePolicy(
166
157
  applicationNftId,
167
158
  applicationInfo,
168
- newPolicyState);
159
+ COLLATERALIZED());
160
+
161
+ // calculate and store premium
162
+ IPolicy.PremiumInfo memory premium = _pricingService.calculatePremium(
163
+ productNftId,
164
+ applicationInfo.riskId,
165
+ applicationInfo.sumInsuredAmount,
166
+ applicationInfo.lifetime,
167
+ applicationInfo.applicationData,
168
+ applicationInfo.bundleNftId,
169
+ applicationInfo.referralId);
170
+
171
+ instance.getInstanceStore().createPremium(
172
+ applicationNftId,
173
+ premium);
174
+
175
+ // update referral counter
176
+ {
177
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
178
+
179
+ if (! productInfo.distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
180
+ _distributionService.processReferral(
181
+ productInfo.distributionNftId,
182
+ applicationInfo.referralId);
183
+ }
184
+ }
185
+
186
+ // log policy creation before interactions with token and policy holder
187
+ emit LogPolicyServicePolicyCreated(applicationNftId, premium.premiumAmount, activateAt);
169
188
 
170
189
  // TODO add calling pool contract if it needs to validate application
171
190
 
172
- // TODO: add logging
191
+ // callback to policy holder if applicable
192
+ _policyHolderPolicyActivated(applicationNftId, activateAt);
173
193
  }
174
194
 
175
195
 
196
+ /// @inheritdoc IPolicyService
176
197
  function collectPremium(
177
198
  NftId policyNftId,
178
199
  Timestamp activateAt
179
200
  )
180
201
  external
181
202
  virtual
203
+ nonReentrant()
182
204
  {
183
205
  // check caller is registered product
184
206
  (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
@@ -186,227 +208,276 @@ contract PolicyService is
186
208
  StateId stateId = instanceReader.getPolicyState(policyNftId);
187
209
 
188
210
  // check policy is in state collateralized or active
189
- if (!(stateId == COLLATERALIZED() || stateId == ACTIVE())) {
190
- revert ErrorPolicyServicePolicyStateNotCollateralizedOrApplied(policyNftId);
211
+ if (!(stateId == COLLATERALIZED())) {
212
+ revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
191
213
  }
192
214
 
193
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
194
-
195
215
  // check if premium is already collected
196
- if (policyInfo.premiumPaidAmount.gtz()) {
197
- revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
216
+ if (instanceReader.getPremiumInfoState(policyNftId) == PAID()) {
217
+ revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId);
198
218
  }
199
219
 
200
- policyInfo.premiumPaidAmount = _calculateAndCollectPremium(
201
- instance,
202
- policyNftId,
203
- policyInfo);
220
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
221
+ IPolicy.PremiumInfo memory premium = instanceReader.getPremiumInfo(policyNftId);
222
+
223
+ _processPremium(
224
+ instance,
225
+ policyNftId,
226
+ policyInfo,
227
+ premium);
228
+
229
+ // optionally activate policy
230
+ if(activateAt.gtz()) {
231
+ policyInfo = _activate(policyNftId, policyInfo, activateAt);
232
+ }
204
233
 
205
234
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
235
+ instance.getInstanceStore().updatePremiumState(policyNftId, PAID());
206
236
 
207
- if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
208
- activate(policyNftId, activateAt);
209
- }
237
+ // log premium collection before interactions with token
238
+ emit LogPolicyServicePolicyPremiumCollected(policyNftId, premium.premiumAmount);
210
239
 
211
- // TODO: add logging
240
+ _transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
212
241
  }
213
242
 
214
- function activate(NftId policyNftId, Timestamp activateAt) public override {
243
+ /// @inheritdoc IPolicyService
244
+ function activate(NftId policyNftId, Timestamp activateAt)
245
+ external
246
+ virtual
247
+ nonReentrant()
248
+ {
215
249
  // check caller is registered product
216
250
  (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
217
251
  InstanceReader instanceReader = instance.getInstanceReader();
218
252
 
219
253
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
254
+ policyInfo = _activate(policyNftId, policyInfo, activateAt);
220
255
 
221
- require(
222
- policyInfo.activatedAt.eqz(),
223
- "ERROR:PRS-020:ALREADY_ACTIVATED");
224
-
225
- policyInfo.activatedAt = activateAt;
226
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
256
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
227
257
 
228
- instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, ACTIVE());
258
+ // log policy activation before interactions with policy holder
259
+ emit LogPolicyServicePolicyActivated(policyNftId, activateAt);
229
260
 
230
- // TODO: add logging
261
+ // callback to policy holder if applicable
262
+ _policyHolderPolicyActivated(policyNftId, activateAt);
231
263
  }
232
264
 
233
265
 
266
+ /// @inheritdoc IPolicyService
234
267
  function expire(
235
- NftId policyNftId
268
+ NftId policyNftId,
269
+ Timestamp expireAt
236
270
  )
237
271
  external
238
- override
239
- // solhint-disable-next-line no-empty-blocks
272
+ virtual
273
+ nonReentrant()
274
+ returns (Timestamp expiredAt)
240
275
  {
276
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
241
277
 
278
+ // check policy matches with calling product
279
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
280
+ if(policyInfo.productNftId != productNftId) {
281
+ revert ErrorPolicyServicePolicyProductMismatch(
282
+ policyNftId,
283
+ policyInfo.productNftId,
284
+ productNftId);
285
+ }
286
+
287
+ return _expire(
288
+ instance,
289
+ policyNftId,
290
+ expireAt
291
+ );
242
292
  }
243
293
 
294
+ /// @inheritdoc IPolicyService
295
+ function expirePolicy(
296
+ IInstance instance,
297
+ NftId policyNftId,
298
+ Timestamp expireAt
299
+ )
300
+ external
301
+ virtual
302
+ nonReentrant()
303
+ returns (Timestamp expiredAt)
304
+ {
305
+ return _expire(
306
+ instance,
307
+ policyNftId,
308
+ expireAt
309
+ );
310
+ }
311
+
312
+ function _expire(
313
+ IInstance instance,
314
+ NftId policyNftId,
315
+ Timestamp expireAt
316
+ )
317
+ internal
318
+ returns (Timestamp expiredAt)
319
+ {
320
+ InstanceReader instanceReader = instance.getInstanceReader();
321
+
322
+ // check policy is active
323
+ StateId policyState = instanceReader.getPolicyState(policyNftId);
324
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
325
+ if (!_policyHasBeenActivated(policyState, policyInfo)) {
326
+ revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
327
+ }
328
+
329
+ // set return value to provided timestamp
330
+ expiredAt = expireAt;
331
+
332
+ // update expiredAt to current block timestamp if not set
333
+ if (expiredAt.eqz()) {
334
+ expiredAt = TimestampLib.blockTimestamp();
335
+ }
336
+
337
+ // check expiredAt represents a valid expiry time
338
+ if (expiredAt >= policyInfo.expiredAt) {
339
+ revert ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
340
+ }
341
+ if (expiredAt < TimestampLib.blockTimestamp()) {
342
+ revert ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
343
+ }
344
+
345
+ // update policyInfo with new expiredAt timestamp
346
+ Timestamp originalExpiredAt = policyInfo.expiredAt;
347
+ policyInfo.expiredAt = expiredAt;
348
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
349
+
350
+ emit LogPolicyServicePolicyExpirationUpdated(policyNftId, originalExpiredAt, expiredAt);
351
+
352
+ // callback to policy holder if applicable
353
+ _policyHolderPolicyExpired(policyNftId, expiredAt);
354
+ }
355
+
356
+
244
357
  function close(
245
358
  NftId policyNftId
246
359
  )
247
360
  external
248
- override
361
+ virtual
362
+ nonReentrant()
249
363
  {
250
364
  (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
251
365
  InstanceReader instanceReader = instance.getInstanceReader();
252
366
 
367
+ // check that policy has been activated
253
368
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
254
-
255
- if (policyInfo.activatedAt.eqz()) {
256
- revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
257
- }
258
-
259
- StateId state = instanceReader.getPolicyState(policyNftId);
260
- if (state != ACTIVE()) {
261
- revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
369
+ StateId policyState = instanceReader.getPolicyState(policyNftId);
370
+ if (!_policyHasBeenActivated(policyState, policyInfo)) {
371
+ revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
262
372
  }
263
373
 
374
+ // check that policy has not already been closed
264
375
  if (policyInfo.closedAt.gtz()) {
265
- revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
266
- }
267
-
268
- // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
269
- if (!(policyInfo.premiumAmount == policyInfo.premiumPaidAmount)) {
270
- revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
376
+ revert ErrorPolicyServicePolicyAlreadyClosed(policyNftId);
271
377
  }
272
378
 
379
+ // check that policy does not have any open claims
273
380
  if (policyInfo.openClaimsCount > 0) {
274
- revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
381
+ revert ErrorPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
275
382
  }
276
383
 
277
- policyInfo.closedAt = TimestampLib.blockTimestamp();
384
+ // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
385
+ // TODO consider to remove requirement for fully paid premiums altogether
386
+ if (! instanceReader.getPremiumInfoState(policyNftId).eq(PAID())) {
387
+ revert ErrorPolicyServicePremiumNotPaid(policyNftId, policyInfo.premiumAmount);
388
+ }
278
389
 
390
+ // release (remaining) collateral that was blocked by policy
279
391
  _poolService.releaseCollateral(
280
392
  instance,
281
393
  address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
282
394
  policyNftId,
283
395
  policyInfo);
284
396
 
397
+ // TODO consider to also set expiredAt to current block timestamp if that timestamp is still in the futue
398
+
399
+ // update policy state to closed
400
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
285
401
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
402
+
403
+ emit LogPolicyServicePolicyClosed(policyNftId);
286
404
  }
287
405
 
288
406
 
289
- function _calculateAndCollectPremium(
407
+ /// @dev calculates the premium and updates all counters in the other services
408
+ function _processPremium(
290
409
  IInstance instance,
291
410
  NftId applicationNftId,
292
- IPolicy.PolicyInfo memory applicationInfo
411
+ IPolicy.PolicyInfo memory applicationInfo,
412
+ IPolicy.PremiumInfo memory premium
293
413
  )
294
414
  internal
295
415
  virtual
296
- returns (
297
- Amount premiumPaidAmount
298
- )
299
416
  {
300
417
  NftId productNftId = applicationInfo.productNftId;
301
-
302
- // calculate premium details
303
- IPolicy.Premium memory premium = _pricingService.calculatePremium(
304
- productNftId,
305
- applicationInfo.riskId,
306
- applicationInfo.sumInsuredAmount,
307
- applicationInfo.lifetime,
308
- applicationInfo.applicationData,
309
- applicationInfo.bundleNftId,
310
- applicationInfo.referralId);
311
-
312
-
313
- // update financials and transfer premium tokens
314
- premiumPaidAmount = _processAndCollect(
315
- instance,
316
- productNftId,
317
- applicationNftId,
318
- applicationInfo.premiumAmount,
319
- applicationInfo.bundleNftId,
320
- applicationInfo.referralId,
321
- premium);
322
- }
323
-
324
-
325
- function _processAndCollect(
326
- IInstance instance,
327
- NftId productNftId,
328
- NftId policyNftId,
329
- Amount premiumExpectedAmount,
330
- NftId bundleNftId,
331
- ReferralId referralId,
332
- IPolicy.Premium memory premium
333
- )
334
- internal
335
- virtual
336
- returns (Amount premiumPaidAmount)
337
- {
338
418
  InstanceReader instanceReader = instance.getInstanceReader();
339
- TokenHandler tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
340
- address policyHolder = getRegistry().ownerOf(policyNftId);
341
- premiumPaidAmount = AmountLib.toAmount(premium.premiumAmount);
342
419
 
343
- _checkPremiumBalanceAndAllowance(
344
- tokenHandler,
345
- policyHolder,
346
- premiumExpectedAmount,
347
- premiumPaidAmount);
420
+ // check if premium balance and allowance of policy holder is sufficient
421
+ {
422
+ TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
423
+ address policyHolder = getRegistry().ownerOf(applicationNftId);
424
+
425
+ _checkPremiumBalanceAndAllowance(
426
+ tokenHandler.getToken(),
427
+ address(tokenHandler),
428
+ policyHolder,
429
+ premium.premiumAmount);
430
+ }
348
431
 
349
- _processSaleAndTransferFunds(
432
+ // update the counters
433
+ _processSale(
350
434
  instanceReader,
351
435
  instance.getInstanceStore(),
352
- tokenHandler,
353
- policyHolder,
354
436
  productNftId,
355
- bundleNftId,
356
- referralId,
437
+ applicationInfo.bundleNftId,
438
+ applicationInfo.referralId,
357
439
  premium);
358
440
  }
359
441
 
360
-
361
- function _checkPremiumBalanceAndAllowance(
362
- TokenHandler tokenHandler,
363
- address policyHolder,
364
- Amount premiumExpectedAmount,
365
- Amount premiumPaidAmount
442
+ function _activate(
443
+ NftId policyNftId,
444
+ IPolicy.PolicyInfo memory policyInfo,
445
+ Timestamp activateAt
366
446
  )
367
447
  internal
368
448
  virtual
369
- view
449
+ view
450
+ returns (IPolicy.PolicyInfo memory)
370
451
  {
371
- // TODO decide how to handle this properly
372
- // not clear if this is the best way to handle this
373
- if (premiumExpectedAmount < premiumPaidAmount) {
374
- revert ErrorPolicyServicePremiumHigherThanExpected(premiumExpectedAmount, premiumPaidAmount);
452
+ // fail if policy has already been activated and activateAt is different
453
+ if(! policyInfo.activatedAt.eqz() && activateAt != policyInfo.activatedAt) {
454
+ revert ErrorPolicyServicePolicyAlreadyActivated(policyNftId);
375
455
  }
376
456
 
377
- uint256 premiumAmount = premiumPaidAmount.toInt();
378
- uint256 balance = tokenHandler.getToken().balanceOf(policyHolder);
379
- uint256 allowance = tokenHandler.getToken().allowance(policyHolder, address(tokenHandler));
380
-
381
- if (balance < premiumAmount) {
382
- revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premiumAmount, balance);
457
+ // ignore if policy has already been activated and activateAt is the same
458
+ if (policyInfo.activatedAt == activateAt) {
459
+ return policyInfo;
383
460
  }
384
461
 
385
- if (allowance < premiumAmount) {
386
- revert ErrorPolicyServiceAllowanceInsufficient(policyHolder, address(tokenHandler), premiumAmount, allowance);
387
- }
388
- }
462
+ policyInfo.activatedAt = activateAt;
463
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
389
464
 
465
+ return policyInfo;
466
+ }
390
467
 
391
- function _processSaleAndTransferFunds(
468
+ /// @dev update counters by calling the involved services
469
+ function _processSale(
392
470
  InstanceReader instanceReader,
393
471
  InstanceStore instanceStore,
394
- TokenHandler tokenHandler,
395
- address policyHolder,
396
472
  NftId productNftId,
397
473
  NftId bundleNftId,
398
474
  ReferralId referralId,
399
- IPolicy.Premium memory premium
475
+ IPolicy.PremiumInfo memory premium
400
476
  )
401
477
  internal
402
478
  virtual
403
479
  {
404
- (
405
- NftId distributionNftId,
406
- address distributionWallet,
407
- address poolWallet,
408
- address productWallet
409
- ) = _getDistributionNftAndWallets(
480
+ (NftId distributionNftId, , , ) = _getDistributionNftAndWallets(
410
481
  instanceReader,
411
482
  productNftId);
412
483
 
@@ -414,28 +485,156 @@ contract PolicyService is
414
485
  _componentService.increaseProductFees(
415
486
  instanceStore,
416
487
  productNftId,
417
- AmountLib.toAmount(premium.productFeeVarAmount + premium.productFeeFixAmount));
488
+ premium.productFeeVarAmount + premium.productFeeFixAmount);
418
489
 
419
490
  // update distribution fees and distributor commission and pool fees
420
- _distributionService.processSale(
421
- distributionNftId,
422
- referralId,
423
- premium);
491
+ if (!distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
492
+ _distributionService.processSale(
493
+ distributionNftId,
494
+ referralId,
495
+ premium);
496
+ }
424
497
 
425
498
  // update pool and bundle fees
426
499
  _poolService.processSale(
427
500
  bundleNftId,
428
501
  premium);
502
+ }
503
+
504
+
505
+ /// @dev transfer the premium to the wallets the premium is distributed to
506
+ function _transferFunds(
507
+ InstanceReader instanceReader,
508
+ NftId policyNftId,
509
+ NftId productNftId,
510
+ IPolicy.PremiumInfo memory premium
511
+ )
512
+ internal
513
+ virtual
514
+ {
515
+ TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
516
+ address policyHolder = getRegistry().ownerOf(policyNftId);
517
+
518
+ (
519
+ ,
520
+ address distributionWallet,
521
+ address poolWallet,
522
+ address productWallet
523
+ ) = _getDistributionNftAndWallets(
524
+ instanceReader,
525
+ productNftId);
429
526
 
430
- // TODO: centralize token handling (issue #471)
431
- // transfer premium amounts to target wallets
432
- tokenHandler.transfer(policyHolder, productWallet, premium.productFeeAmount);
433
- tokenHandler.transfer(policyHolder, distributionWallet, premium.distributionFeeAndCommissionAmount);
434
- tokenHandler.transfer(policyHolder, poolWallet, premium.poolPremiumAndFeeAmount);
527
+ tokenHandler.collectTokensToThreeRecipients(
528
+ policyHolder,
529
+ productWallet,
530
+ premium.productFeeAmount,
531
+ distributionWallet,
532
+ premium.distributionFeeAndCommissionAmount,
533
+ poolWallet,
534
+ premium.poolPremiumAndFeeAmount);
435
535
  }
436
536
 
437
537
 
438
- function _getTokenHandlerAndProductWallet(
538
+ /// @dev checks that policy has been collateralized and has been activated.
539
+ /// does not check if policy has been expired or closed.
540
+ function _policyHasBeenActivated(
541
+ StateId policyState,
542
+ IPolicy.PolicyInfo memory policyInfo
543
+ )
544
+ internal
545
+ view
546
+ returns (bool)
547
+ {
548
+ if (policyState != COLLATERALIZED()) { return false; }
549
+ if (TimestampLib.blockTimestamp() < policyInfo.activatedAt) { return false; }
550
+ return true;
551
+ }
552
+
553
+
554
+ /// @dev checks the balance and allowance of the policy holder
555
+ function _checkPremiumBalanceAndAllowance(
556
+ IERC20Metadata token,
557
+ address tokenHandlerAddress,
558
+ address policyHolder,
559
+ Amount premiumAmount
560
+ )
561
+ internal
562
+ virtual
563
+ view
564
+ {
565
+ uint256 premium = premiumAmount.toInt();
566
+ uint256 balance = token.balanceOf(policyHolder);
567
+ uint256 allowance = token.allowance(policyHolder, tokenHandlerAddress);
568
+
569
+ if (balance < premium) {
570
+ revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premium, balance);
571
+ }
572
+
573
+ if (allowance < premium) {
574
+ revert ErrorPolicyServiceAllowanceInsufficient(policyHolder, tokenHandlerAddress, premium, allowance);
575
+ }
576
+ }
577
+
578
+
579
+ function _policyHolderPolicyActivated(
580
+ NftId policyNftId,
581
+ Timestamp activateAt
582
+ )
583
+ internal
584
+ virtual
585
+ {
586
+ // immediately return if policy is not activated
587
+ if (activateAt.eqz()) {
588
+ return;
589
+ }
590
+
591
+ // get policy holder address
592
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
593
+
594
+ // execute callback if policy holder implements IPolicyHolder
595
+ if (address(policyHolder) != address(0)) {
596
+ policyHolder.policyActivated(policyNftId, activateAt);
597
+ }
598
+ }
599
+
600
+
601
+ function _policyHolderPolicyExpired(
602
+ NftId policyNftId,
603
+ Timestamp expiredAt
604
+ )
605
+ internal
606
+ virtual
607
+ {
608
+ // immediately return if policy is not activated
609
+ if (expiredAt.eqz()) {
610
+ return;
611
+ }
612
+
613
+ // get policy holder address
614
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
615
+
616
+ // execute callback if policy holder implements IPolicyHolder
617
+ if (address(policyHolder) != address(0)) {
618
+ policyHolder.policyExpired(policyNftId, expiredAt);
619
+ }
620
+ }
621
+
622
+
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
+
636
+
637
+ function _getTokenHandler(
439
638
  InstanceReader instanceReader,
440
639
  NftId productNftId
441
640
  )
@@ -449,6 +648,7 @@ contract PolicyService is
449
648
  tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
450
649
  }
451
650
 
651
+
452
652
  function _getDistributionNftAndWallets(
453
653
  InstanceReader instanceReader,
454
654
  NftId productNftId
@@ -470,6 +670,13 @@ contract PolicyService is
470
670
  }
471
671
 
472
672
 
673
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
674
+ IRegistry.ObjectInfo memory productInfo;
675
+ (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
676
+ product = Product(productInfo.objectAddress);
677
+ }
678
+
679
+
473
680
  function _getDomain() internal pure override returns(ObjectType) {
474
681
  return POLICY();
475
682
  }