@etherisc/gif-next 0.0.2-f36fd21-685 → 0.0.2-f47f21f-178

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 +174 -292
  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 +310 -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 +433 -327
  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 +213 -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 +250 -140
  362. package/contracts/pool/PoolServiceManager.sol +4 -4
  363. package/contracts/product/ApplicationService.sol +59 -30
  364. package/contracts/product/ApplicationServiceManager.sol +4 -4
  365. package/contracts/product/BasicProduct.sol +7 -6
  366. package/contracts/product/BasicProductAuthorization.sol +0 -1
  367. package/contracts/product/ClaimService.sol +313 -118
  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 -34
  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 +394 -196
  376. package/contracts/product/PolicyServiceManager.sol +4 -4
  377. package/contracts/product/PricingService.sol +54 -54
  378. package/contracts/product/PricingServiceManager.sol +3 -3
  379. package/contracts/product/Product.sol +125 -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 +27 -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";
22
- import {NftId, NftIdLib} from "../type/NftId.sol";
23
- import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
17
+ import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED, PAID} from "../type/StateId.sol";
18
+ import {NftId} from "../type/NftId.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,23 +70,19 @@ 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);
73
+ _registerInterface(type(IPolicyService).interfaceId);
85
74
  }
86
75
 
87
76
 
88
- function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
89
- IRegistry.ObjectInfo memory productInfo;
90
- (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
91
- product = Product(productInfo.objectAddress);
92
- }
93
-
94
-
95
77
  function decline(
96
78
  NftId applicationNftId // = policyNftId
97
79
  )
98
80
  external
99
- virtual override
81
+ virtual
82
+ nonReentrant()
100
83
  {
84
+ _checkNftType(applicationNftId, POLICY());
85
+
101
86
  (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
102
87
  InstanceReader instanceReader = instance.getInstanceReader();
103
88
 
@@ -124,17 +109,18 @@ contract PolicyService is
124
109
  emit LogPolicyServicePolicyDeclined(applicationNftId);
125
110
  }
126
111
 
127
- event LogDebug(uint idx, string message);
128
112
 
129
- /// @dev underwites application which includes the locking of the required collateral from the pool.
130
- function collateralize(
113
+ /// @inheritdoc IPolicyService
114
+ function createPolicy(
131
115
  NftId applicationNftId, // = policyNftId
132
- bool requirePremiumPayment,
133
116
  Timestamp activateAt
134
117
  )
135
118
  external
136
- virtual override
119
+ virtual
120
+ nonReentrant()
137
121
  {
122
+ _checkNftType(applicationNftId, POLICY());
123
+
138
124
  // check caller is registered product
139
125
  (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
140
126
  InstanceReader instanceReader = instance.getInstanceReader();
@@ -153,13 +139,8 @@ contract PolicyService is
153
139
  productNftId);
154
140
  }
155
141
 
156
- StateId newPolicyState = COLLATERALIZED();
157
-
158
142
  // actual collateralizaion
159
- (
160
- Amount localCollateralAmount,
161
- Amount totalCollateralAmount
162
- ) = _poolService.lockCollateral(
143
+ _poolService.lockCollateral(
163
144
  instance,
164
145
  address(instanceReader.getComponentInfo(productNftId).token),
165
146
  productNftId,
@@ -169,267 +150,348 @@ contract PolicyService is
169
150
 
170
151
  // optional activation of policy
171
152
  if(activateAt > zeroTimestamp()) {
172
- newPolicyState = ACTIVE();
173
- applicationInfo.activatedAt = activateAt;
174
- applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
175
- }
176
-
177
- // optional collection of premium
178
- if(requirePremiumPayment) {
179
- Amount premiumPaidAmount = _calculateAndCollectPremium(
180
- instance,
181
- applicationNftId,
182
- applicationInfo);
183
-
184
- applicationInfo.premiumPaidAmount = premiumPaidAmount;
153
+ applicationInfo = _activate(
154
+ applicationNftId,
155
+ applicationInfo,
156
+ activateAt);
185
157
  }
186
158
 
187
- // store updated policy info
159
+ // update policy and set state to collateralized
188
160
  instance.getInstanceStore().updatePolicy(
189
161
  applicationNftId,
190
162
  applicationInfo,
191
- newPolicyState);
163
+ COLLATERALIZED());
164
+
165
+ // calculate and store premium
166
+ IPolicy.PremiumInfo memory premium = _pricingService.calculatePremium(
167
+ productNftId,
168
+ applicationInfo.riskId,
169
+ applicationInfo.sumInsuredAmount,
170
+ applicationInfo.lifetime,
171
+ applicationInfo.applicationData,
172
+ applicationInfo.bundleNftId,
173
+ applicationInfo.referralId);
174
+
175
+ instance.getInstanceStore().createPremium(
176
+ applicationNftId,
177
+ premium);
178
+
179
+ // update referral counter
180
+ {
181
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
182
+
183
+ if (! productInfo.distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
184
+ _distributionService.processReferral(
185
+ productInfo.distributionNftId,
186
+ applicationInfo.referralId);
187
+ }
188
+ }
189
+
190
+ // log policy creation before interactions with token and policy holder
191
+ emit LogPolicyServicePolicyCreated(applicationNftId, premium.premiumAmount, activateAt);
192
192
 
193
193
  // TODO add calling pool contract if it needs to validate application
194
194
 
195
- // TODO: add logging
195
+ // callback to policy holder if applicable
196
+ _policyHolderPolicyActivated(applicationNftId, activateAt);
196
197
  }
197
198
 
198
199
 
200
+ /// @inheritdoc IPolicyService
199
201
  function collectPremium(
200
202
  NftId policyNftId,
201
203
  Timestamp activateAt
202
204
  )
203
205
  external
204
206
  virtual
207
+ nonReentrant()
205
208
  {
209
+ _checkNftType(policyNftId, POLICY());
210
+
206
211
  // check caller is registered product
207
212
  (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
208
213
  InstanceReader instanceReader = instance.getInstanceReader();
209
214
  StateId stateId = instanceReader.getPolicyState(policyNftId);
210
215
 
211
216
  // check policy is in state collateralized or active
212
- if (!(stateId == COLLATERALIZED() || stateId == ACTIVE())) {
213
- revert ErrorPolicyServicePolicyStateNotCollateralizedOrApplied(policyNftId);
217
+ if (!(stateId == COLLATERALIZED())) {
218
+ revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
214
219
  }
215
220
 
216
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
217
-
218
221
  // check if premium is already collected
219
- if (policyInfo.premiumPaidAmount.gtz()) {
220
- revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
222
+ if (instanceReader.getPremiumInfoState(policyNftId) == PAID()) {
223
+ revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId);
221
224
  }
222
225
 
223
- policyInfo.premiumPaidAmount = _calculateAndCollectPremium(
224
- instance,
225
- policyNftId,
226
- policyInfo);
226
+ IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
227
+ IPolicy.PremiumInfo memory premium = instanceReader.getPremiumInfo(policyNftId);
228
+
229
+ _processPremium(
230
+ instance,
231
+ policyNftId,
232
+ policyInfo,
233
+ premium);
234
+
235
+ // optionally activate policy
236
+ if(activateAt.gtz()) {
237
+ policyInfo = _activate(policyNftId, policyInfo, activateAt);
238
+ }
227
239
 
228
240
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
241
+ instance.getInstanceStore().updatePremiumState(policyNftId, PAID());
229
242
 
230
- if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
231
- activate(policyNftId, activateAt);
232
- }
243
+ // log premium collection before interactions with token
244
+ emit LogPolicyServicePolicyPremiumCollected(policyNftId, premium.premiumAmount);
233
245
 
234
- // TODO: add logging
246
+ _transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
235
247
  }
236
248
 
237
- function activate(NftId policyNftId, Timestamp activateAt) public override {
249
+ /// @inheritdoc IPolicyService
250
+ function activate(NftId policyNftId, Timestamp activateAt)
251
+ external
252
+ virtual
253
+ nonReentrant()
254
+ {
255
+ _checkNftType(policyNftId, POLICY());
256
+
238
257
  // check caller is registered product
239
258
  (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
240
259
  InstanceReader instanceReader = instance.getInstanceReader();
241
260
 
242
261
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
262
+ policyInfo = _activate(policyNftId, policyInfo, activateAt);
243
263
 
244
- require(
245
- policyInfo.activatedAt.eqz(),
246
- "ERROR:PRS-020:ALREADY_ACTIVATED");
247
-
248
- policyInfo.activatedAt = activateAt;
249
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
264
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
250
265
 
251
- instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, ACTIVE());
266
+ // log policy activation before interactions with policy holder
267
+ emit LogPolicyServicePolicyActivated(policyNftId, activateAt);
252
268
 
253
- // TODO: add logging
269
+ // callback to policy holder if applicable
270
+ _policyHolderPolicyActivated(policyNftId, activateAt);
254
271
  }
255
272
 
256
273
 
274
+ /// @inheritdoc IPolicyService
257
275
  function expire(
258
- NftId policyNftId
276
+ NftId policyNftId,
277
+ Timestamp expireAt
278
+ )
279
+ external
280
+ virtual
281
+ nonReentrant()
282
+ returns (Timestamp expiredAt)
283
+ {
284
+ _checkNftType(policyNftId, POLICY());
285
+
286
+ (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
287
+
288
+ // check policy matches with calling product
289
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
290
+ if(policyInfo.productNftId != productNftId) {
291
+ revert ErrorPolicyServicePolicyProductMismatch(
292
+ policyNftId,
293
+ policyInfo.productNftId,
294
+ productNftId);
295
+ }
296
+
297
+ return _expire(
298
+ instance,
299
+ policyNftId,
300
+ expireAt
301
+ );
302
+ }
303
+
304
+ /// @inheritdoc IPolicyService
305
+ function expirePolicy(
306
+ IInstance instance,
307
+ NftId policyNftId,
308
+ Timestamp expireAt
259
309
  )
260
310
  external
261
- override
262
- // solhint-disable-next-line no-empty-blocks
311
+ virtual
312
+ nonReentrant()
313
+ returns (Timestamp expiredAt)
263
314
  {
315
+ _checkNftType(policyNftId, POLICY());
316
+
317
+ return _expire(
318
+ instance,
319
+ policyNftId,
320
+ expireAt
321
+ );
322
+ }
323
+
324
+ function _expire(
325
+ IInstance instance,
326
+ NftId policyNftId,
327
+ Timestamp expireAt
328
+ )
329
+ internal
330
+ returns (Timestamp expiredAt)
331
+ {
332
+ InstanceReader instanceReader = instance.getInstanceReader();
264
333
 
334
+ // check policy is active
335
+ StateId policyState = instanceReader.getPolicyState(policyNftId);
336
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
337
+ if (!_policyHasBeenActivated(policyState, policyInfo)) {
338
+ revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
339
+ }
340
+
341
+ // set return value to provided timestamp
342
+ expiredAt = expireAt;
343
+
344
+ // update expiredAt to current block timestamp if not set
345
+ if (expiredAt.eqz()) {
346
+ expiredAt = TimestampLib.blockTimestamp();
347
+ }
348
+
349
+ // check expiredAt represents a valid expiry time
350
+ if (expiredAt >= policyInfo.expiredAt) {
351
+ revert ErrorPolicyServicePolicyExpirationTooLate(policyNftId, policyInfo.expiredAt, expireAt);
352
+ }
353
+ if (expiredAt < TimestampLib.blockTimestamp()) {
354
+ revert ErrorPolicyServicePolicyExpirationTooEarly(policyNftId, TimestampLib.blockTimestamp(), expireAt);
355
+ }
356
+
357
+ // update policyInfo with new expiredAt timestamp
358
+ Timestamp originalExpiredAt = policyInfo.expiredAt;
359
+ policyInfo.expiredAt = expiredAt;
360
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
361
+
362
+ emit LogPolicyServicePolicyExpirationUpdated(policyNftId, originalExpiredAt, expiredAt);
363
+
364
+ // callback to policy holder if applicable
365
+ _policyHolderPolicyExpired(policyNftId, expiredAt);
265
366
  }
266
367
 
368
+
267
369
  function close(
268
370
  NftId policyNftId
269
371
  )
270
372
  external
271
- override
373
+ virtual
374
+ nonReentrant()
272
375
  {
376
+ _checkNftType(policyNftId, POLICY());
377
+
273
378
  (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
274
379
  InstanceReader instanceReader = instance.getInstanceReader();
275
380
 
381
+ // check that policy has been activated
276
382
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
277
-
278
- if (policyInfo.activatedAt.eqz()) {
279
- revert ErrorIPolicyServicePolicyNotActivated(policyNftId);
280
- }
281
-
282
- StateId state = instanceReader.getPolicyState(policyNftId);
283
- if (state != ACTIVE()) {
284
- revert ErrorIPolicyServicePolicyNotActive(policyNftId, state);
383
+ StateId policyState = instanceReader.getPolicyState(policyNftId);
384
+ if (!_policyHasBeenActivated(policyState, policyInfo)) {
385
+ revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
285
386
  }
286
387
 
388
+ // check that policy has not already been closed
287
389
  if (policyInfo.closedAt.gtz()) {
288
- revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
289
- }
290
-
291
- // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
292
- if (!(policyInfo.premiumAmount == policyInfo.premiumPaidAmount)) {
293
- revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
390
+ revert ErrorPolicyServicePolicyAlreadyClosed(policyNftId);
294
391
  }
295
392
 
393
+ // check that policy does not have any open claims
296
394
  if (policyInfo.openClaimsCount > 0) {
297
- revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
395
+ revert ErrorPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
298
396
  }
299
397
 
300
- policyInfo.closedAt = TimestampLib.blockTimestamp();
398
+ // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
399
+ // TODO consider to remove requirement for fully paid premiums altogether
400
+ if (! instanceReader.getPremiumInfoState(policyNftId).eq(PAID())) {
401
+ revert ErrorPolicyServicePremiumNotPaid(policyNftId, policyInfo.premiumAmount);
402
+ }
301
403
 
404
+ // release (remaining) collateral that was blocked by policy
302
405
  _poolService.releaseCollateral(
303
406
  instance,
304
407
  address(instanceReader.getComponentInfo(policyInfo.productNftId).token),
305
408
  policyNftId,
306
409
  policyInfo);
307
410
 
411
+ // TODO consider to also set expiredAt to current block timestamp if that timestamp is still in the futue
412
+
413
+ // update policy state to closed
414
+ policyInfo.closedAt = TimestampLib.blockTimestamp();
308
415
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
416
+
417
+ emit LogPolicyServicePolicyClosed(policyNftId);
309
418
  }
310
419
 
311
420
 
312
- function _calculateAndCollectPremium(
421
+ /// @dev calculates the premium and updates all counters in the other services
422
+ function _processPremium(
313
423
  IInstance instance,
314
424
  NftId applicationNftId,
315
- IPolicy.PolicyInfo memory applicationInfo
425
+ IPolicy.PolicyInfo memory applicationInfo,
426
+ IPolicy.PremiumInfo memory premium
316
427
  )
317
428
  internal
318
429
  virtual
319
- returns (
320
- Amount premiumPaidAmount
321
- )
322
430
  {
323
431
  NftId productNftId = applicationInfo.productNftId;
324
-
325
- // calculate premium details
326
- IPolicy.Premium memory premium = _pricingService.calculatePremium(
327
- productNftId,
328
- applicationInfo.riskId,
329
- applicationInfo.sumInsuredAmount,
330
- applicationInfo.lifetime,
331
- applicationInfo.applicationData,
332
- applicationInfo.bundleNftId,
333
- applicationInfo.referralId);
334
-
335
-
336
- // update financials and transfer premium tokens
337
- premiumPaidAmount = _processAndCollect(
338
- instance,
339
- productNftId,
340
- applicationNftId,
341
- applicationInfo.premiumAmount,
342
- applicationInfo.bundleNftId,
343
- applicationInfo.referralId,
344
- premium);
345
- }
346
-
347
-
348
- function _processAndCollect(
349
- IInstance instance,
350
- NftId productNftId,
351
- NftId policyNftId,
352
- Amount premiumExpectedAmount,
353
- NftId bundleNftId,
354
- ReferralId referralId,
355
- IPolicy.Premium memory premium
356
- )
357
- internal
358
- virtual
359
- returns (Amount premiumPaidAmount)
360
- {
361
432
  InstanceReader instanceReader = instance.getInstanceReader();
362
- TokenHandler tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
363
- address policyHolder = getRegistry().ownerOf(policyNftId);
364
- premiumPaidAmount = AmountLib.toAmount(premium.premiumAmount);
365
433
 
366
- _checkPremiumBalanceAndAllowance(
367
- tokenHandler,
368
- policyHolder,
369
- premiumExpectedAmount,
370
- premiumPaidAmount);
434
+ // check if premium balance and allowance of policy holder is sufficient
435
+ {
436
+ TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
437
+ address policyHolder = getRegistry().ownerOf(applicationNftId);
438
+
439
+ _checkPremiumBalanceAndAllowance(
440
+ tokenHandler.getToken(),
441
+ address(tokenHandler),
442
+ policyHolder,
443
+ premium.premiumAmount);
444
+ }
371
445
 
372
- _processSaleAndTransferFunds(
446
+ // update the counters
447
+ _processSale(
373
448
  instanceReader,
374
449
  instance.getInstanceStore(),
375
- tokenHandler,
376
- policyHolder,
377
450
  productNftId,
378
- bundleNftId,
379
- referralId,
451
+ applicationInfo.bundleNftId,
452
+ applicationInfo.referralId,
380
453
  premium);
381
454
  }
382
455
 
383
-
384
- function _checkPremiumBalanceAndAllowance(
385
- TokenHandler tokenHandler,
386
- address policyHolder,
387
- Amount premiumExpectedAmount,
388
- Amount premiumPaidAmount
456
+ function _activate(
457
+ NftId policyNftId,
458
+ IPolicy.PolicyInfo memory policyInfo,
459
+ Timestamp activateAt
389
460
  )
390
461
  internal
391
462
  virtual
392
- view
463
+ view
464
+ returns (IPolicy.PolicyInfo memory)
393
465
  {
394
- // TODO decide how to handle this properly
395
- // not clear if this is the best way to handle this
396
- if (premiumExpectedAmount < premiumPaidAmount) {
397
- revert ErrorPolicyServicePremiumHigherThanExpected(premiumExpectedAmount, premiumPaidAmount);
466
+ // fail if policy has already been activated and activateAt is different
467
+ if(! policyInfo.activatedAt.eqz() && activateAt != policyInfo.activatedAt) {
468
+ revert ErrorPolicyServicePolicyAlreadyActivated(policyNftId);
398
469
  }
399
470
 
400
- uint256 premiumAmount = premiumPaidAmount.toInt();
401
- uint256 balance = tokenHandler.getToken().balanceOf(policyHolder);
402
- uint256 allowance = tokenHandler.getToken().allowance(policyHolder, address(tokenHandler));
403
-
404
- if (balance < premiumAmount) {
405
- revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premiumAmount, balance);
471
+ // ignore if policy has already been activated and activateAt is the same
472
+ if (policyInfo.activatedAt == activateAt) {
473
+ return policyInfo;
406
474
  }
407
475
 
408
- if (allowance < premiumAmount) {
409
- revert ErrorPolicyServiceAllowanceInsufficient(policyHolder, address(tokenHandler), premiumAmount, allowance);
410
- }
411
- }
476
+ policyInfo.activatedAt = activateAt;
477
+ policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
412
478
 
479
+ return policyInfo;
480
+ }
413
481
 
414
- function _processSaleAndTransferFunds(
482
+ /// @dev update counters by calling the involved services
483
+ function _processSale(
415
484
  InstanceReader instanceReader,
416
485
  InstanceStore instanceStore,
417
- TokenHandler tokenHandler,
418
- address policyHolder,
419
486
  NftId productNftId,
420
487
  NftId bundleNftId,
421
488
  ReferralId referralId,
422
- IPolicy.Premium memory premium
489
+ IPolicy.PremiumInfo memory premium
423
490
  )
424
491
  internal
425
492
  virtual
426
493
  {
427
- (
428
- NftId distributionNftId,
429
- address distributionWallet,
430
- address poolWallet,
431
- address productWallet
432
- ) = _getDistributionNftAndWallets(
494
+ (NftId distributionNftId, , , ) = _getDistributionNftAndWallets(
433
495
  instanceReader,
434
496
  productNftId);
435
497
 
@@ -437,28 +499,156 @@ contract PolicyService is
437
499
  _componentService.increaseProductFees(
438
500
  instanceStore,
439
501
  productNftId,
440
- AmountLib.toAmount(premium.productFeeVarAmount + premium.productFeeFixAmount));
502
+ premium.productFeeVarAmount + premium.productFeeFixAmount);
441
503
 
442
504
  // update distribution fees and distributor commission and pool fees
443
- _distributionService.processSale(
444
- distributionNftId,
445
- referralId,
446
- premium);
505
+ if (!distributionNftId.eqz()) { // only call distribution service if a distribution component is connected to the product
506
+ _distributionService.processSale(
507
+ distributionNftId,
508
+ referralId,
509
+ premium);
510
+ }
447
511
 
448
512
  // update pool and bundle fees
449
513
  _poolService.processSale(
450
514
  bundleNftId,
451
515
  premium);
516
+ }
452
517
 
453
- // TODO: centralize token handling (issue #471)
454
- // transfer premium amounts to target wallets
455
- tokenHandler.transfer(policyHolder, productWallet, premium.productFeeAmount);
456
- tokenHandler.transfer(policyHolder, distributionWallet, premium.distributionFeeAndCommissionAmount);
457
- tokenHandler.transfer(policyHolder, poolWallet, premium.poolPremiumAndFeeAmount);
518
+
519
+ /// @dev transfer the premium to the wallets the premium is distributed to
520
+ function _transferFunds(
521
+ InstanceReader instanceReader,
522
+ NftId policyNftId,
523
+ NftId productNftId,
524
+ IPolicy.PremiumInfo memory premium
525
+ )
526
+ internal
527
+ virtual
528
+ {
529
+ TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
530
+ address policyHolder = getRegistry().ownerOf(policyNftId);
531
+
532
+ (
533
+ ,
534
+ address distributionWallet,
535
+ address poolWallet,
536
+ address productWallet
537
+ ) = _getDistributionNftAndWallets(
538
+ instanceReader,
539
+ productNftId);
540
+
541
+ tokenHandler.collectTokensToThreeRecipients(
542
+ policyHolder,
543
+ productWallet,
544
+ premium.productFeeAmount,
545
+ distributionWallet,
546
+ premium.distributionFeeAndCommissionAmount,
547
+ poolWallet,
548
+ premium.poolPremiumAndFeeAmount);
458
549
  }
459
550
 
460
551
 
461
- function _getTokenHandlerAndProductWallet(
552
+ /// @dev checks that policy has been collateralized and has been activated.
553
+ /// does not check if policy has been expired or closed.
554
+ function _policyHasBeenActivated(
555
+ StateId policyState,
556
+ IPolicy.PolicyInfo memory policyInfo
557
+ )
558
+ internal
559
+ view
560
+ returns (bool)
561
+ {
562
+ if (policyState != COLLATERALIZED()) { return false; }
563
+ if (TimestampLib.blockTimestamp() < policyInfo.activatedAt) { return false; }
564
+ return true;
565
+ }
566
+
567
+
568
+ /// @dev checks the balance and allowance of the policy holder
569
+ function _checkPremiumBalanceAndAllowance(
570
+ IERC20Metadata token,
571
+ address tokenHandlerAddress,
572
+ address policyHolder,
573
+ Amount premiumAmount
574
+ )
575
+ internal
576
+ virtual
577
+ view
578
+ {
579
+ uint256 premium = premiumAmount.toInt();
580
+ uint256 balance = token.balanceOf(policyHolder);
581
+ uint256 allowance = token.allowance(policyHolder, tokenHandlerAddress);
582
+
583
+ if (balance < premium) {
584
+ revert ErrorPolicyServiceBalanceInsufficient(policyHolder, premium, balance);
585
+ }
586
+
587
+ if (allowance < premium) {
588
+ revert ErrorPolicyServiceAllowanceInsufficient(policyHolder, tokenHandlerAddress, premium, allowance);
589
+ }
590
+ }
591
+
592
+
593
+ function _policyHolderPolicyActivated(
594
+ NftId policyNftId,
595
+ Timestamp activateAt
596
+ )
597
+ internal
598
+ virtual
599
+ {
600
+ // immediately return if policy is not activated
601
+ if (activateAt.eqz()) {
602
+ return;
603
+ }
604
+
605
+ // get policy holder address
606
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
607
+
608
+ // execute callback if policy holder implements IPolicyHolder
609
+ if (address(policyHolder) != address(0)) {
610
+ policyHolder.policyActivated(policyNftId, activateAt);
611
+ }
612
+ }
613
+
614
+
615
+ function _policyHolderPolicyExpired(
616
+ NftId policyNftId,
617
+ Timestamp expiredAt
618
+ )
619
+ internal
620
+ virtual
621
+ {
622
+ // immediately return if policy is not activated
623
+ if (expiredAt.eqz()) {
624
+ return;
625
+ }
626
+
627
+ // get policy holder address
628
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
629
+
630
+ // execute callback if policy holder implements IPolicyHolder
631
+ if (address(policyHolder) != address(0)) {
632
+ policyHolder.policyExpired(policyNftId, expiredAt);
633
+ }
634
+ }
635
+
636
+
637
+ function _getPolicyHolder(NftId policyNftId)
638
+ internal
639
+ view
640
+ returns (IPolicyHolder policyHolder)
641
+ {
642
+ address policyHolderAddress = getRegistry().ownerOf(policyNftId);
643
+ policyHolder = IPolicyHolder(policyHolderAddress);
644
+
645
+ if (!ContractLib.isPolicyHolder(policyHolderAddress)) {
646
+ policyHolder = IPolicyHolder(address(0));
647
+ }
648
+ }
649
+
650
+
651
+ function _getTokenHandler(
462
652
  InstanceReader instanceReader,
463
653
  NftId productNftId
464
654
  )
@@ -472,6 +662,7 @@ contract PolicyService is
472
662
  tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
473
663
  }
474
664
 
665
+
475
666
  function _getDistributionNftAndWallets(
476
667
  InstanceReader instanceReader,
477
668
  NftId productNftId
@@ -493,6 +684,13 @@ contract PolicyService is
493
684
  }
494
685
 
495
686
 
687
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
688
+ IRegistry.ObjectInfo memory productInfo;
689
+ (, productInfo,) = _getAndVerifyActiveComponent(PRODUCT());
690
+ product = Product(productInfo.objectAddress);
691
+ }
692
+
693
+
496
694
  function _getDomain() internal pure override returns(ObjectType) {
497
695
  return POLICY();
498
696
  }