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