@etherisc/gif-next 0.0.2-78e428e-483 → 0.0.2-79292f9-089

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