@etherisc/gif-next 0.0.2-8fb3945-498 → 0.0.2-906d113-035

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/README.md +1 -1
  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 +151 -249
  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 -213
  24. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +174 -237
  26. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +99 -111
  28. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +78 -66
  30. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +78 -31
  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 +132 -230
  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 +73 -61
  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 +86 -208
  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 +109 -216
  105. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  106. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +82 -22
  107. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  108. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +184 -185
  109. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +120 -104
  111. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  112. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +53 -0
  113. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  114. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +98 -58
  115. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  116. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +232 -131
  117. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  118. package/artifacts/contracts/pool/Pool.sol/Pool.json +109 -203
  119. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  120. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +328 -292
  121. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  122. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +102 -94
  123. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  124. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +71 -152
  125. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  126. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +72 -84
  127. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  128. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +143 -224
  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 +288 -188
  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 +29 -0
  137. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  138. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +161 -7
  139. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  140. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +141 -16
  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 +131 -78
  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 +248 -222
  149. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  150. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +110 -110
  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 +143 -224
  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 +68 -175
  187. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  188. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +355 -339
  189. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  190. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +122 -148
  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 -28
  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 +73 -61
  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 +86 -208
  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 +149 -49
  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 -29
  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 +83 -30
  244. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  245. package/artifacts/contracts/staking/Staking.sol/Staking.json +173 -298
  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 +103 -124
  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 +80 -47
  319. package/contracts/distribution/DistributionServiceManager.sol +6 -6
  320. package/contracts/distribution/IDistributionComponent.sol +1 -1
  321. package/contracts/distribution/IDistributionService.sol +8 -2
  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 +106 -19
  338. package/contracts/instance/InstanceService.sol +25 -81
  339. package/contracts/instance/InstanceServiceManager.sol +6 -7
  340. package/contracts/instance/InstanceStore.sol +11 -1
  341. package/contracts/instance/base/ObjectLifecycle.sol +7 -1
  342. package/contracts/instance/module/IComponents.sol +10 -5
  343. package/contracts/instance/module/IPolicy.sol +23 -23
  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 +78 -34
  352. package/contracts/pool/BundleServiceManager.sol +6 -6
  353. package/contracts/pool/IBundleService.sol +10 -0
  354. package/contracts/pool/IPoolComponent.sol +18 -8
  355. package/contracts/pool/IPoolService.sol +49 -29
  356. package/contracts/pool/Pool.sol +53 -46
  357. package/contracts/pool/PoolService.sol +140 -124
  358. package/contracts/pool/PoolServiceManager.sol +4 -4
  359. package/contracts/product/ApplicationService.sol +13 -12
  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 +268 -93
  364. package/contracts/product/ClaimServiceManager.sol +4 -4
  365. package/contracts/product/IClaimService.sol +30 -7
  366. package/contracts/product/IPolicyService.sol +16 -20
  367. package/contracts/product/IPricingService.sol +10 -10
  368. package/contracts/product/IProductComponent.sol +23 -4
  369. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -2
  370. package/contracts/product/PolicyService.sol +198 -101
  371. package/contracts/product/PolicyServiceManager.sol +4 -4
  372. package/contracts/product/PricingService.sol +45 -52
  373. package/contracts/product/PricingServiceManager.sol +3 -3
  374. package/contracts/product/Product.sol +108 -66
  375. package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
  376. package/contracts/product/RiskServiceManager.sol +39 -0
  377. package/contracts/registry/ChainNft.sol +68 -38
  378. package/contracts/registry/IRegistry.sol +55 -18
  379. package/contracts/registry/IRegistryService.sol +5 -12
  380. package/contracts/registry/ITransferInterceptor.sol +1 -2
  381. package/contracts/registry/Registry.sol +342 -201
  382. package/contracts/registry/RegistryAdmin.sol +134 -51
  383. package/contracts/registry/RegistryService.sol +35 -46
  384. package/contracts/registry/RegistryServiceManager.sol +2 -2
  385. package/contracts/registry/ReleaseLifecycle.sol +6 -3
  386. package/contracts/registry/ReleaseRegistry.sol +204 -188
  387. package/contracts/registry/ServiceAuthorizationV3.sol +16 -22
  388. package/contracts/shared/Component.sol +30 -33
  389. package/contracts/shared/ComponentService.sol +233 -137
  390. package/contracts/shared/ComponentServiceManager.sol +8 -5
  391. package/contracts/shared/ComponentVerifyingService.sol +23 -14
  392. package/contracts/shared/ContractLib.sol +38 -0
  393. package/contracts/shared/IComponent.sol +6 -2
  394. package/contracts/shared/IComponentService.sol +25 -13
  395. package/contracts/shared/IInstanceLinkedComponent.sol +2 -17
  396. package/contracts/shared/ILifecycle.sol +3 -1
  397. package/contracts/shared/INftOwnable.sol +2 -0
  398. package/contracts/shared/IPolicyHolder.sol +12 -22
  399. package/contracts/shared/IRegisterable.sol +11 -0
  400. package/contracts/shared/InitializableERC165.sol +2 -2
  401. package/contracts/shared/InstanceLinkedComponent.sol +72 -31
  402. package/contracts/shared/KeyValueStore.sol +1 -1
  403. package/contracts/shared/Lifecycle.sol +15 -4
  404. package/contracts/shared/NftOwnable.sol +23 -7
  405. package/contracts/shared/PolicyHolder.sol +15 -52
  406. package/contracts/shared/Registerable.sol +19 -9
  407. package/contracts/shared/RegistryLinked.sol +3 -2
  408. package/contracts/shared/Service.sol +20 -18
  409. package/contracts/shared/TokenHandler.sol +24 -16
  410. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  411. package/contracts/staking/IStaking.sol +2 -1
  412. package/contracts/staking/IStakingService.sol +0 -3
  413. package/contracts/staking/StakeManagerLib.sol +18 -0
  414. package/contracts/staking/Staking.sol +11 -10
  415. package/contracts/staking/StakingManager.sol +8 -6
  416. package/contracts/staking/StakingReader.sol +12 -5
  417. package/contracts/staking/StakingService.sol +3 -17
  418. package/contracts/staking/StakingServiceManager.sol +2 -2
  419. package/contracts/staking/TargetManagerLib.sol +7 -3
  420. package/contracts/type/Amount.sol +15 -0
  421. package/contracts/type/ClaimId.sol +6 -1
  422. package/contracts/type/NftId.sol +1 -0
  423. package/contracts/type/ObjectType.sol +16 -11
  424. package/contracts/type/PayoutId.sol +10 -10
  425. package/contracts/type/RiskId.sol +15 -1
  426. package/contracts/type/RoleId.sol +0 -12
  427. package/contracts/type/Seconds.sol +8 -0
  428. package/contracts/type/StateId.sol +15 -1
  429. package/contracts/type/UFixed.sol +4 -0
  430. package/contracts/upgradeability/ProxyManager.sol +68 -34
  431. package/contracts/upgradeability/Versionable.sol +2 -2
  432. package/package.json +2 -1
  433. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
  434. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
  435. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
  436. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
  437. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  438. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  439. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  440. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  441. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  442. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
  443. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
  444. package/contracts/authorization/IModuleAuthorization.sol +0 -21
  445. package/contracts/authorization/ModuleAuthorization.sol +0 -78
  446. package/contracts/product/ProductServiceManager.sol +0 -39
  447. package/contracts/shared/InitializableCustom.sol +0 -177
@@ -14,13 +14,14 @@ import {TokenHandler} from "../shared/TokenHandler.sol";
14
14
  import {Amount, AmountLib} from "../type/Amount.sol";
15
15
  import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
16
16
  import {ObjectType, APPLICATION, COMPONENT, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../type/ObjectType.sol";
17
- import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED} from "../type/StateId.sol";
17
+ import {APPLIED, COLLATERALIZED, KEEP_STATE, CLOSED, DECLINED, PAID} from "../type/StateId.sol";
18
18
  import {NftId, NftIdLib} from "../type/NftId.sol";
19
19
  import {ReferralId} from "../type/Referral.sol";
20
20
  import {StateId} from "../type/StateId.sol";
21
21
  import {VersionPart} from "../type/Version.sol";
22
22
 
23
23
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
24
+ import {ContractLib} from "../shared/ContractLib.sol";
24
25
  import {IApplicationService} from "./IApplicationService.sol";
25
26
  import {IBundleService} from "../pool/IBundleService.sol";
26
27
  import {IClaimService} from "./IClaimService.sol";
@@ -28,6 +29,7 @@ import {IComponentService} from "../shared/IComponentService.sol";
28
29
  import {IDistributionService} from "../distribution/IDistributionService.sol";
29
30
  import {InstanceReader} from "../instance/InstanceReader.sol";
30
31
  import {InstanceStore} from "../instance/InstanceStore.sol";
32
+ import {IPolicyHolder} from "../shared/IPolicyHolder.sol";
31
33
  import {IPolicyService} from "./IPolicyService.sol";
32
34
  import {IPoolService} from "../pool/IPoolService.sol";
33
35
  import {IPricingService} from "./IPricingService.sol";
@@ -36,9 +38,6 @@ contract PolicyService is
36
38
  ComponentVerifyingService,
37
39
  IPolicyService
38
40
  {
39
- using NftIdLib for NftId;
40
- using TimestampLib for Timestamp;
41
-
42
41
  IApplicationService internal _applicationService;
43
42
  IComponentService internal _componentService;
44
43
  IBundleService internal _bundleService;
@@ -47,8 +46,6 @@ contract PolicyService is
47
46
  IPoolService internal _poolService;
48
47
  IPricingService internal _pricingService;
49
48
 
50
- event LogProductServiceSender(address sender);
51
-
52
49
  function _initialize(
53
50
  address owner,
54
51
  bytes memory data
@@ -58,12 +55,11 @@ contract PolicyService is
58
55
  initializer
59
56
  {
60
57
  (
61
- address registryAddress,,
62
- //address managerAddress
58
+ address registryAddress,
63
59
  address authority
64
- ) = abi.decode(data, (address, address, address));
60
+ ) = abi.decode(data, (address, address));
65
61
 
66
- initializeService(registryAddress, authority, owner);
62
+ _initializeService(registryAddress, authority, owner);
67
63
 
68
64
  VersionPart majorVersion = getVersion().toMajorPart();
69
65
  _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
@@ -74,7 +70,7 @@ contract PolicyService is
74
70
  _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
75
71
  _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
76
72
 
77
- registerInterface(type(IPolicyService).interfaceId);
73
+ _registerInterface(type(IPolicyService).interfaceId);
78
74
  }
79
75
 
80
76
 
@@ -82,7 +78,8 @@ contract PolicyService is
82
78
  NftId applicationNftId // = policyNftId
83
79
  )
84
80
  external
85
- virtual override
81
+ virtual
82
+ nonReentrant()
86
83
  {
87
84
  (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
88
85
  InstanceReader instanceReader = instance.getInstanceReader();
@@ -114,11 +111,11 @@ contract PolicyService is
114
111
  /// @inheritdoc IPolicyService
115
112
  function createPolicy(
116
113
  NftId applicationNftId, // = policyNftId
117
- bool requirePremiumPayment,
118
114
  Timestamp activateAt
119
115
  )
120
116
  external
121
- virtual override
117
+ virtual
118
+ nonReentrant()
122
119
  {
123
120
  // check caller is registered product
124
121
  (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
@@ -138,13 +135,8 @@ contract PolicyService is
138
135
  productNftId);
139
136
  }
140
137
 
141
- StateId newPolicyState = COLLATERALIZED();
142
-
143
138
  // actual collateralizaion
144
- (
145
- Amount localCollateralAmount,
146
- Amount totalCollateralAmount
147
- ) = _poolService.lockCollateral(
139
+ _poolService.lockCollateral(
148
140
  instance,
149
141
  address(instanceReader.getComponentInfo(productNftId).token),
150
142
  productNftId,
@@ -154,38 +146,50 @@ contract PolicyService is
154
146
 
155
147
  // optional activation of policy
156
148
  if(activateAt > zeroTimestamp()) {
157
- applicationInfo.activatedAt = activateAt;
158
- applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
159
- }
160
-
161
- IPolicy.Premium memory premium;
162
-
163
- // optional: calculate the premium and update counters for collection at the end of this function
164
- if(requirePremiumPayment) {
165
- premium = _calculateAndProcessPremium(
166
- instance,
167
- applicationNftId,
168
- applicationInfo);
169
-
170
- applicationInfo.premiumPaidAmount = AmountLib.toAmount(premium.premiumAmount);
149
+ applicationInfo = _activate(
150
+ applicationNftId,
151
+ applicationInfo,
152
+ activateAt);
171
153
  }
172
154
 
173
- // store updated policy info
155
+ // update policy and set state to collateralized
174
156
  instance.getInstanceStore().updatePolicy(
175
157
  applicationNftId,
176
158
  applicationInfo,
177
- newPolicyState);
159
+ COLLATERALIZED());
178
160
 
179
- // TODO add calling pool contract if it needs to validate application
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);
180
174
 
181
- // TODO: add logging
175
+ // update referral counter
176
+ {
177
+ IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
182
178
 
183
- // optional: transfer funds for premium
184
- if(requirePremiumPayment) {
185
- _transferFunds(instanceReader, applicationNftId, applicationInfo.productNftId, premium);
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
+ }
186
184
  }
187
185
 
188
- // TODO: add callback IPolicyHolder.policyActivated() if applicable
186
+ // log policy creation before interactions with token and policy holder
187
+ emit LogPolicyServicePolicyCreated(applicationNftId, premium.premiumAmount, activateAt);
188
+
189
+ // TODO add calling pool contract if it needs to validate application
190
+
191
+ // callback to policy holder if applicable
192
+ _policyHolderPolicyActivated(applicationNftId, activateAt);
189
193
  }
190
194
 
191
195
 
@@ -196,6 +200,7 @@ contract PolicyService is
196
200
  )
197
201
  external
198
202
  virtual
203
+ nonReentrant()
199
204
  {
200
205
  // check caller is registered product
201
206
  (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
@@ -207,20 +212,19 @@ contract PolicyService is
207
212
  revert ErrorPolicyServicePolicyStateNotCollateralized(policyNftId);
208
213
  }
209
214
 
210
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
211
-
212
215
  // check if premium is already collected
213
- if (policyInfo.premiumPaidAmount.gtz()) {
214
- revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
216
+ if (instanceReader.getPremiumInfoState(policyNftId) == PAID()) {
217
+ revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId);
215
218
  }
216
219
 
217
- // calculate premium
218
- IPolicy.Premium memory premium = _calculateAndProcessPremium(
219
- instance,
220
- policyNftId,
221
- policyInfo);
222
-
223
- policyInfo.premiumPaidAmount = AmountLib.toAmount(premium.premiumAmount);
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);
224
228
 
225
229
  // optionally activate policy
226
230
  if(activateAt.gtz()) {
@@ -228,16 +232,20 @@ contract PolicyService is
228
232
  }
229
233
 
230
234
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
235
+ instance.getInstanceStore().updatePremiumState(policyNftId, PAID());
231
236
 
232
- // TODO: add logging
237
+ // log premium collection before interactions with token
238
+ emit LogPolicyServicePolicyPremiumCollected(policyNftId, premium.premiumAmount);
233
239
 
234
240
  _transferFunds(instanceReader, policyNftId, policyInfo.productNftId, premium);
235
-
236
- // TODO: add callback IPolicyHolder.policyActivated() if applicable
237
241
  }
238
242
 
239
243
  /// @inheritdoc IPolicyService
240
- function activate(NftId policyNftId, Timestamp activateAt) public override {
244
+ function activate(NftId policyNftId, Timestamp activateAt)
245
+ external
246
+ virtual
247
+ nonReentrant()
248
+ {
241
249
  // check caller is registered product
242
250
  (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
243
251
  InstanceReader instanceReader = instance.getInstanceReader();
@@ -247,9 +255,11 @@ contract PolicyService is
247
255
 
248
256
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
249
257
 
250
- // TODO: add logging
258
+ // log policy activation before interactions with policy holder
259
+ emit LogPolicyServicePolicyActivated(policyNftId, activateAt);
251
260
 
252
- // TODO: add callback IPolicyHolder.policyActivated() if applicable
261
+ // callback to policy holder if applicable
262
+ _policyHolderPolicyActivated(policyNftId, activateAt);
253
263
  }
254
264
 
255
265
 
@@ -259,15 +269,14 @@ contract PolicyService is
259
269
  Timestamp expireAt
260
270
  )
261
271
  external
262
- override
263
272
  virtual
273
+ nonReentrant()
264
274
  returns (Timestamp expiredAt)
265
275
  {
266
276
  (NftId productNftId,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
267
- InstanceReader instanceReader = instance.getInstanceReader();
268
-
277
+
269
278
  // check policy matches with calling product
270
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
279
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
271
280
  if(policyInfo.productNftId != productNftId) {
272
281
  revert ErrorPolicyServicePolicyProductMismatch(
273
282
  policyNftId,
@@ -275,8 +284,44 @@ contract PolicyService is
275
284
  productNftId);
276
285
  }
277
286
 
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
+
278
322
  // check policy is active
279
323
  StateId policyState = instanceReader.getPolicyState(policyNftId);
324
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
280
325
  if (!_policyHasBeenActivated(policyState, policyInfo)) {
281
326
  revert ErrorPolicyServicePolicyNotActive(policyNftId, policyState);
282
327
  }
@@ -298,12 +343,14 @@ contract PolicyService is
298
343
  }
299
344
 
300
345
  // update policyInfo with new expiredAt timestamp
346
+ Timestamp originalExpiredAt = policyInfo.expiredAt;
301
347
  policyInfo.expiredAt = expiredAt;
302
348
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
303
349
 
304
- emit LogPolicyServicePolicyExpirationUpdated(policyNftId, expiredAt);
350
+ emit LogPolicyServicePolicyExpirationUpdated(policyNftId, originalExpiredAt, expiredAt);
305
351
 
306
- // TODO: add callback IPolicyHolder.policyExpired() if applicable
352
+ // callback to policy holder if applicable
353
+ _policyHolderPolicyExpired(policyNftId, expiredAt);
307
354
  }
308
355
 
309
356
 
@@ -311,7 +358,8 @@ contract PolicyService is
311
358
  NftId policyNftId
312
359
  )
313
360
  external
314
- override
361
+ virtual
362
+ nonReentrant()
315
363
  {
316
364
  (,, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
317
365
  InstanceReader instanceReader = instance.getInstanceReader();
@@ -335,8 +383,8 @@ contract PolicyService is
335
383
 
336
384
  // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
337
385
  // TODO consider to remove requirement for fully paid premiums altogether
338
- if (!(policyInfo.premiumAmount == policyInfo.premiumPaidAmount)) {
339
- revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
386
+ if (! instanceReader.getPremiumInfoState(policyNftId).eq(PAID())) {
387
+ revert ErrorPolicyServicePremiumNotPaid(policyNftId, policyInfo.premiumAmount);
340
388
  }
341
389
 
342
390
  // release (remaining) collateral that was blocked by policy
@@ -352,35 +400,23 @@ contract PolicyService is
352
400
  policyInfo.closedAt = TimestampLib.blockTimestamp();
353
401
  instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
354
402
 
355
- // TODO add logging
403
+ emit LogPolicyServicePolicyClosed(policyNftId);
356
404
  }
357
405
 
358
406
 
359
407
  /// @dev calculates the premium and updates all counters in the other services
360
- function _calculateAndProcessPremium(
408
+ function _processPremium(
361
409
  IInstance instance,
362
410
  NftId applicationNftId,
363
- IPolicy.PolicyInfo memory applicationInfo
411
+ IPolicy.PolicyInfo memory applicationInfo,
412
+ IPolicy.PremiumInfo memory premium
364
413
  )
365
414
  internal
366
415
  virtual
367
- returns (
368
- IPolicy.Premium memory premium
369
- )
370
416
  {
371
417
  NftId productNftId = applicationInfo.productNftId;
372
418
  InstanceReader instanceReader = instance.getInstanceReader();
373
419
 
374
- // calculate premium details
375
- premium = _pricingService.calculatePremium(
376
- productNftId,
377
- applicationInfo.riskId,
378
- applicationInfo.sumInsuredAmount,
379
- applicationInfo.lifetime,
380
- applicationInfo.applicationData,
381
- applicationInfo.bundleNftId,
382
- applicationInfo.referralId);
383
-
384
420
  // check if premium balance and allowance of policy holder is sufficient
385
421
  {
386
422
  TokenHandler tokenHandler = _getTokenHandler(instanceReader, productNftId);
@@ -390,7 +426,7 @@ contract PolicyService is
390
426
  tokenHandler.getToken(),
391
427
  address(tokenHandler),
392
428
  policyHolder,
393
- AmountLib.toAmount(premium.premiumAmount));
429
+ premium.premiumAmount);
394
430
  }
395
431
 
396
432
  // update the counters
@@ -403,7 +439,6 @@ contract PolicyService is
403
439
  premium);
404
440
  }
405
441
 
406
-
407
442
  function _activate(
408
443
  NftId policyNftId,
409
444
  IPolicy.PolicyInfo memory policyInfo,
@@ -414,10 +449,16 @@ contract PolicyService is
414
449
  view
415
450
  returns (IPolicy.PolicyInfo memory)
416
451
  {
417
- if(! policyInfo.activatedAt.eqz()) {
452
+ // fail if policy has already been activated and activateAt is different
453
+ if(! policyInfo.activatedAt.eqz() && activateAt != policyInfo.activatedAt) {
418
454
  revert ErrorPolicyServicePolicyAlreadyActivated(policyNftId);
419
455
  }
420
456
 
457
+ // ignore if policy has already been activated and activateAt is the same
458
+ if (policyInfo.activatedAt == activateAt) {
459
+ return policyInfo;
460
+ }
461
+
421
462
  policyInfo.activatedAt = activateAt;
422
463
  policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
423
464
 
@@ -431,17 +472,12 @@ contract PolicyService is
431
472
  NftId productNftId,
432
473
  NftId bundleNftId,
433
474
  ReferralId referralId,
434
- IPolicy.Premium memory premium
475
+ IPolicy.PremiumInfo memory premium
435
476
  )
436
477
  internal
437
478
  virtual
438
479
  {
439
- (
440
- NftId distributionNftId,
441
- address distributionWallet,
442
- address poolWallet,
443
- address productWallet
444
- ) = _getDistributionNftAndWallets(
480
+ (NftId distributionNftId, , , ) = _getDistributionNftAndWallets(
445
481
  instanceReader,
446
482
  productNftId);
447
483
 
@@ -449,13 +485,15 @@ contract PolicyService is
449
485
  _componentService.increaseProductFees(
450
486
  instanceStore,
451
487
  productNftId,
452
- AmountLib.toAmount(premium.productFeeVarAmount + premium.productFeeFixAmount));
488
+ premium.productFeeVarAmount + premium.productFeeFixAmount);
453
489
 
454
490
  // update distribution fees and distributor commission and pool fees
455
- _distributionService.processSale(
456
- distributionNftId,
457
- referralId,
458
- 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
+ }
459
497
 
460
498
  // update pool and bundle fees
461
499
  _poolService.processSale(
@@ -469,7 +507,7 @@ contract PolicyService is
469
507
  InstanceReader instanceReader,
470
508
  NftId policyNftId,
471
509
  NftId productNftId,
472
- IPolicy.Premium memory premium
510
+ IPolicy.PremiumInfo memory premium
473
511
  )
474
512
  internal
475
513
  virtual
@@ -486,7 +524,7 @@ contract PolicyService is
486
524
  instanceReader,
487
525
  productNftId);
488
526
 
489
- tokenHandler.collectTokens(
527
+ tokenHandler.collectTokensToThreeRecipients(
490
528
  policyHolder,
491
529
  productWallet,
492
530
  premium.productFeeAmount,
@@ -538,6 +576,64 @@ contract PolicyService is
538
576
  }
539
577
 
540
578
 
579
+ function _policyHolderPolicyActivated(
580
+ NftId policyNftId,
581
+ Timestamp activateAt
582
+ )
583
+ internal
584
+ virtual
585
+ {
586
+ // immediately return if policy is not activated
587
+ if (activateAt.eqz()) {
588
+ return;
589
+ }
590
+
591
+ // get policy holder address
592
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
593
+
594
+ // execute callback if policy holder implements IPolicyHolder
595
+ if (address(policyHolder) != address(0)) {
596
+ policyHolder.policyActivated(policyNftId, activateAt);
597
+ }
598
+ }
599
+
600
+
601
+ function _policyHolderPolicyExpired(
602
+ NftId policyNftId,
603
+ Timestamp expiredAt
604
+ )
605
+ internal
606
+ virtual
607
+ {
608
+ // immediately return if policy is not activated
609
+ if (expiredAt.eqz()) {
610
+ return;
611
+ }
612
+
613
+ // get policy holder address
614
+ IPolicyHolder policyHolder = _getPolicyHolder(policyNftId);
615
+
616
+ // execute callback if policy holder implements IPolicyHolder
617
+ if (address(policyHolder) != address(0)) {
618
+ policyHolder.policyExpired(policyNftId, expiredAt);
619
+ }
620
+ }
621
+
622
+
623
+ function _getPolicyHolder(NftId policyNftId)
624
+ internal
625
+ view
626
+ returns (IPolicyHolder policyHolder)
627
+ {
628
+ address policyHolderAddress = getRegistry().ownerOf(policyNftId);
629
+ policyHolder = IPolicyHolder(policyHolderAddress);
630
+
631
+ if (!ContractLib.isPolicyHolder(policyHolderAddress)) {
632
+ policyHolder = IPolicyHolder(address(0));
633
+ }
634
+ }
635
+
636
+
541
637
  function _getTokenHandler(
542
638
  InstanceReader instanceReader,
543
639
  NftId productNftId
@@ -552,6 +648,7 @@ contract PolicyService is
552
648
  tokenHandler = instanceReader.getComponentInfo(productNftId).tokenHandler;
553
649
  }
554
650
 
651
+
555
652
  function _getDistributionNftAndWallets(
556
653
  InstanceReader instanceReader,
557
654
  NftId productNftId
@@ -12,14 +12,14 @@ contract PolicyServiceManager is ProxyManager {
12
12
  /// @dev initializes proxy manager with product service implementation
13
13
  constructor(
14
14
  address authority,
15
- address registryAddress,
15
+ address registry,
16
16
  bytes32 salt
17
17
  )
18
- ProxyManager(registryAddress)
19
18
  {
20
19
  PolicyService svc = new PolicyService{salt: salt}();
21
- bytes memory data = abi.encode(registryAddress, address(this), authority);
22
- IVersionable versionable = deployDetermenistic(
20
+ bytes memory data = abi.encode(registry, authority);
21
+ IVersionable versionable = initialize(
22
+ registry,
23
23
  address(svc),
24
24
  data,
25
25
  salt);