@etherisc/gif-next 0.0.2-c9711ab-345 → 0.0.2-c9ad04b-284

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