@etherisc/gif-next 0.0.2-f1e0c66-773 → 0.0.2-f1f3b2c-994

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