@etherisc/gif-next 0.0.2-866ef18-420 → 0.0.2-86dae40-160

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