@etherisc/gif-next 0.0.2-e964d24-516 → 0.0.2-e987ccf-894

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