@etherisc/gif-next 0.0.2-98bc1be-984 → 0.0.2-998ff1b-277

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