@etherisc/gif-next 0.0.2-9275c39-670 → 0.0.2-92c1619-347

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