@etherisc/gif-next 0.0.2-b61b9f6-206 → 0.0.2-b62165c-823

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