@etherisc/gif-next 0.0.2-750c7cb-311 → 0.0.2-758fb77-627

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