@etherisc/gif-next 0.0.2-f30e0eb-805 → 0.0.2-f398177-971

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 (266) hide show
  1. package/README.md +6 -83
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +47 -6
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +70 -13
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +137 -6
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +144 -13
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +161 -20
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +151 -20
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +71 -20
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +62 -21
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  20. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  21. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +310 -2004
  23. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +101 -52
  25. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  26. package/artifacts/contracts/instance/Instance.sol/Instance.json +425 -2757
  27. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +95 -58
  29. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  30. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +348 -58
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +153 -207
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +38 -83
  37. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  38. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2788 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  40. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  41. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +113 -34
  43. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +8 -8
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +6 -6
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +6 -6
  51. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +186 -236
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +38 -55
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +377 -182
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -39
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +713 -83
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +147 -32
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +266 -442
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +82 -107
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +111 -174
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +233 -128
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +385 -51
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +109 -282
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +210 -99
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +682 -33
  86. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +510 -0
  88. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +85 -27
  90. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +420 -160
  92. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +104 -53
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +880 -82
  96. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +90 -39
  98. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +1004 -0
  100. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  102. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +144 -57
  104. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +28 -37
  106. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  107. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  109. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -37
  110. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  111. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  113. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  114. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +22 -49
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +21 -34
  119. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  120. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  121. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  122. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +10 -23
  123. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  124. package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
  125. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  126. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  127. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
  129. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
  131. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
  133. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  135. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IService.sol/IService.json +85 -27
  137. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -19
  140. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  141. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
  142. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  143. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +14 -27
  144. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  145. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +6 -19
  146. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  147. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  148. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  149. package/artifacts/contracts/shared/Service.sol/Service.json +91 -28
  150. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  151. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  152. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  153. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  156. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +6 -19
  158. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  159. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  160. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  161. package/artifacts/contracts/test/TestService.sol/TestService.json +106 -39
  162. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  164. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  165. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  166. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  167. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  168. package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
  169. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
  173. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  174. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  175. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/Fee.sol/FeeLib.json +74 -19
  177. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  179. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  181. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  182. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  183. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  186. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
  188. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  194. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  197. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +17 -4
  199. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  201. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  203. package/contracts/components/Component.sol +25 -4
  204. package/contracts/components/Distribution.sol +11 -6
  205. package/contracts/components/IComponent.sol +19 -3
  206. package/contracts/components/IPoolComponent.sol +8 -7
  207. package/contracts/components/IProductComponent.sol +5 -4
  208. package/contracts/components/Pool.sol +17 -14
  209. package/contracts/components/Product.sol +144 -62
  210. package/contracts/instance/BundleManager.sol +3 -4
  211. package/contracts/instance/IInstance.sol +32 -53
  212. package/contracts/instance/IInstanceService.sol +15 -14
  213. package/contracts/instance/Instance.sol +107 -205
  214. package/contracts/instance/InstanceAccessManager.sol +44 -25
  215. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  216. package/contracts/instance/InstanceReader.sol +85 -7
  217. package/contracts/instance/InstanceService.sol +102 -289
  218. package/contracts/instance/InstanceStore.sol +212 -0
  219. package/contracts/instance/ObjectManager.sol +1 -1
  220. package/contracts/instance/base/ComponentService.sol +53 -39
  221. package/contracts/instance/base/KeyValueStore.sol +8 -34
  222. package/contracts/instance/base/Lifecycle.sol +15 -4
  223. package/contracts/instance/module/IAccess.sol +2 -2
  224. package/contracts/instance/module/IBundle.sol +6 -4
  225. package/contracts/instance/module/IComponents.sol +7 -1
  226. package/contracts/instance/module/IDistribution.sol +3 -2
  227. package/contracts/instance/module/IPolicy.sol +13 -8
  228. package/contracts/instance/service/ApplicationService.sol +62 -226
  229. package/contracts/instance/service/BundleService.sol +172 -126
  230. package/contracts/instance/service/ClaimService.sol +318 -32
  231. package/contracts/instance/service/DistributionService.sol +71 -190
  232. package/contracts/instance/service/IApplicationService.sol +8 -28
  233. package/contracts/instance/service/IBundleService.sol +82 -26
  234. package/contracts/instance/service/IClaimService.sol +52 -23
  235. package/contracts/instance/service/IDistributionService.sol +11 -22
  236. package/contracts/instance/service/IPolicyService.sol +24 -16
  237. package/contracts/instance/service/IPoolService.sol +82 -3
  238. package/contracts/instance/service/IPricingService.sol +37 -0
  239. package/contracts/instance/service/PolicyService.sol +152 -179
  240. package/contracts/instance/service/PoolService.sol +239 -56
  241. package/contracts/instance/service/PricingService.sol +275 -0
  242. package/contracts/instance/service/PricingServiceManager.sol +51 -0
  243. package/contracts/instance/service/ProductService.sol +27 -58
  244. package/contracts/registry/IRegistryService.sol +2 -3
  245. package/contracts/registry/RegistryService.sol +24 -21
  246. package/contracts/registry/ReleaseManager.sol +20 -18
  247. package/contracts/shared/IPolicyHolder.sol +23 -9
  248. package/contracts/shared/IRegistryLinked.sol +0 -1
  249. package/contracts/shared/IService.sol +6 -6
  250. package/contracts/shared/NftOwnable.sol +0 -2
  251. package/contracts/shared/PolicyHolder.sol +30 -17
  252. package/contracts/shared/Registerable.sol +10 -9
  253. package/contracts/shared/RegistryLinked.sol +0 -5
  254. package/contracts/shared/Service.sol +21 -7
  255. package/contracts/shared/TokenHandler.sol +4 -2
  256. package/contracts/test/TestService.sol +1 -1
  257. package/contracts/types/Amount.sol +109 -0
  258. package/contracts/types/ClaimId.sol +25 -2
  259. package/contracts/types/Fee.sol +16 -8
  260. package/contracts/types/ObjectType.sol +9 -5
  261. package/contracts/types/PayoutId.sol +33 -5
  262. package/contracts/types/StateId.sol +6 -2
  263. package/contracts/types/Timestamp.sol +5 -0
  264. package/package.json +1 -1
  265. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  266. /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
@@ -14,24 +14,29 @@ import {ISetup} from "../module/ISetup.sol";
14
14
 
15
15
  import {TokenHandler} from "../../shared/TokenHandler.sol";
16
16
 
17
+ import {Amount, AmountLib} from "../../types/Amount.sol";
18
+ import {ClaimId, ClaimIdLib} from "../../types/ClaimId.sol";
17
19
  import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
18
20
  import {UFixed, UFixedLib} from "../../types/UFixed.sol";
19
- import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
20
- import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
21
+ import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM, PRICE} from "../../types/ObjectType.sol";
22
+ import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED, CONFIRMED} from "../../types/StateId.sol";
21
23
  import {NftId, NftIdLib} from "../../types/NftId.sol";
24
+ import {PayoutId, PayoutIdLib} from "../../types/PayoutId.sol";
22
25
  import {StateId} from "../../types/StateId.sol";
26
+ import {VersionPart} from "../../types/Version.sol";
23
27
 
24
28
  import {ComponentService} from "../base/ComponentService.sol";
25
29
  import {IApplicationService} from "./IApplicationService.sol";
26
30
  import {IBundleService} from "./IBundleService.sol";
31
+ import {IClaimService} from "./IClaimService.sol";
27
32
  import {IDistributionService} from "./IDistributionService.sol";
28
33
  import {InstanceReader} from "../InstanceReader.sol";
29
34
  import {IPolicyService} from "./IPolicyService.sol";
30
35
  import {IPoolService} from "./IPoolService.sol";
36
+ import {IPricingService} from "./IPricingService.sol";
31
37
  import {IService} from "../../shared/IService.sol";
32
38
  import {Service} from "../../shared/Service.sol";
33
39
 
34
-
35
40
  contract PolicyService is
36
41
  ComponentService,
37
42
  IPolicyService
@@ -39,10 +44,12 @@ contract PolicyService is
39
44
  using NftIdLib for NftId;
40
45
  using TimestampLib for Timestamp;
41
46
 
42
- IPoolService internal _poolService;
43
- IBundleService internal _bundleService;
44
47
  IApplicationService internal _applicationService;
48
+ IBundleService internal _bundleService;
49
+ IClaimService internal _claimService;
45
50
  IDistributionService internal _distributionService;
51
+ IPoolService internal _poolService;
52
+ IPricingService internal _pricingService;
46
53
 
47
54
  event LogProductServiceSender(address sender);
48
55
 
@@ -58,59 +65,31 @@ contract PolicyService is
58
65
  address initialOwner;
59
66
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
60
67
 
61
- initializeService(registryAddress, owner);
68
+ initializeService(registryAddress, address(0), owner);
62
69
 
63
- _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getMajorVersion()));
64
- _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getMajorVersion()));
65
- _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), getMajorVersion()));
66
- _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getMajorVersion()));
70
+ VersionPart majorVersion = getVersion().toMajorPart();
71
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
72
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
73
+ _claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
74
+ _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
75
+ _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
76
+ _pricingService = IPricingService(getRegistry().getServiceAddress(PRICE(), majorVersion));
67
77
 
68
78
  registerInterface(type(IPolicyService).interfaceId);
69
79
  }
70
80
 
71
81
 
72
- function getDomain() public pure override(IService, Service) returns(ObjectType) {
82
+ function getDomain() public pure override returns(ObjectType) {
73
83
  return POLICY();
74
84
  }
75
85
 
76
86
 
77
87
  function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
78
88
  IRegistry.ObjectInfo memory productInfo;
79
- (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
89
+ (, productInfo,) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
80
90
  product = Product(productInfo.objectAddress);
81
91
  }
82
92
 
83
- function _getAndVerifyUnderwritingSetup(
84
- IInstance instance,
85
- InstanceReader instanceReader,
86
- IPolicy.PolicyInfo memory policyInfo,
87
- ISetup.ProductSetupInfo memory productSetupInfo
88
- )
89
- internal
90
- view
91
- returns (
92
- NftId poolNftId,
93
- NftId bundleNftId,
94
- IBundle.BundleInfo memory bundleInfo,
95
- uint256 collateralAmount
96
- )
97
- {
98
- // check match between policy and bundle (via pool)
99
- poolNftId = productSetupInfo.poolNftId;
100
- bundleNftId = policyInfo.bundleNftId;
101
- bundleInfo = instanceReader.getBundleInfo(bundleNftId);
102
- require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
103
-
104
- // calculate required collateral
105
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
106
- IComponents.PoolInfo memory poolInfo = abi.decode(
107
- componentInfo.data, (IComponents.PoolInfo));
108
-
109
- // obtain remaining return values
110
- // TODO required collateral amount should be calculated by pool service, not policy service
111
- collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
112
- }
113
-
114
93
 
115
94
  function decline(
116
95
  NftId policyNftId
@@ -118,12 +97,12 @@ contract PolicyService is
118
97
  external
119
98
  override
120
99
  {
121
- require(false, "ERROR:PRS-235:NOT_YET_IMPLEMENTED");
100
+ revert();
122
101
  }
123
102
 
124
103
 
125
104
  /// @dev underwites application which includes the locking of the required collateral from the pool.
126
- function underwrite(
105
+ function collateralize(
127
106
  NftId applicationNftId, // = policyNftId
128
107
  bool requirePremiumPayment,
129
108
  Timestamp activateAt
@@ -132,126 +111,104 @@ contract PolicyService is
132
111
  virtual override
133
112
  {
134
113
  // check caller is registered product
135
- IInstance instance;
136
- InstanceReader instanceReader;
137
- NftId productNftId;
138
- {
139
- IRegistry.ObjectInfo memory productInfo;
140
- (productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
141
- instanceReader = instance.getInstanceReader();
142
- productNftId = productInfo.nftId;
143
- }
114
+ (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
115
+ InstanceReader instanceReader = instance.getInstanceReader();
144
116
 
145
117
  // check policy matches with calling product
146
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(applicationNftId);
147
- require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
118
+ IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
119
+ if(applicationInfo.productNftId != productNftId) {
120
+ revert ErrorPolicyServicePolicyProductMismatch(
121
+ applicationNftId,
122
+ applicationInfo.productNftId,
123
+ productNftId);
124
+ }
148
125
 
149
126
  // check policy is in state applied
150
- require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
151
-
152
- (
153
- NftId poolNftId,
154
- NftId bundleNftId,
155
- IBundle.BundleInfo memory bundleInfo,
156
- uint256 collateralAmount
157
- ) = _getAndVerifyUnderwritingSetup(
158
- instance,
159
- instanceReader,
160
- policyInfo,
161
- instanceReader.getProductSetupInfo(productNftId)
162
- );
127
+ if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
128
+ revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
129
+ }
163
130
 
164
- StateId newPolicyState = UNDERWRITTEN();
131
+ StateId newPolicyState = COLLATERALIZED();
165
132
 
166
133
  // optional activation of policy
167
134
  if(activateAt > zeroTimestamp()) {
168
135
  newPolicyState = ACTIVE();
169
- policyInfo.activatedAt = activateAt;
170
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
136
+ applicationInfo.activatedAt = activateAt;
137
+ applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
171
138
  }
172
139
 
173
140
  // lock bundle collateral
174
- uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
141
+ Amount netPremiumAmount = AmountLib.zero(); // > 0 if immediate premium payment
175
142
 
176
143
  // optional collection of premium
177
144
  if(requirePremiumPayment) {
178
145
  netPremiumAmount = _processPremiumByTreasury(
179
146
  instance,
180
147
  applicationNftId,
181
- policyInfo.premiumAmount);
148
+ applicationInfo.premiumAmount);
182
149
 
183
- policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
150
+ applicationInfo.premiumPaidAmount = applicationInfo.premiumPaidAmount + applicationInfo.premiumAmount;
184
151
  }
185
152
 
186
- // lock collateral and update bundle book keeping
187
- // TODO introduct indirection via pool service?
188
- // well pool would only need to be involved when a part of the collateral
189
- // is provided by a "re insurance policy" of the pool
190
- // but then again the policiy would likely best be attached to the bundle. really? why?
191
- // retention level: fraction of sum insured that product will cover from pool funds directly
153
+ // store updated policy info
154
+ instance.getInstanceStore().updatePolicy(applicationNftId, applicationInfo, newPolicyState);
155
+
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
192
158
  // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
193
159
  // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
194
- // open points:
195
- // - do we need a link of a bundle to this policy or is it enough to know that the pool has an active policy?
196
- // - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
197
- bundleInfo = _bundleService.lockCollateral(
160
+ // might also call pool component (for isVerifyingApplications pools)
161
+ _poolService.lockCollateral(
198
162
  instance,
163
+ productNftId,
199
164
  applicationNftId,
200
- bundleNftId,
201
- collateralAmount,
202
- netPremiumAmount);
203
-
204
- instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
205
-
206
- // also verify/confirm application by pool if necessary
207
- if(abi.decode(
208
- instanceReader.getComponentInfo(poolNftId).data,
209
- (IComponents.PoolInfo)
210
- ).isVerifyingApplications
211
- )
212
- {
213
- IPoolComponent pool = IPoolComponent(
214
- getRegistry().getObjectInfo(poolNftId).objectAddress);
215
-
216
- pool.verifyApplication(
217
- applicationNftId,
218
- policyInfo.applicationData,
219
- bundleNftId,
220
- bundleInfo.filter,
221
- collateralAmount);
222
- }
165
+ applicationInfo,
166
+ netPremiumAmount); // for pool book keeping (fee + additional capital)
223
167
 
224
168
  // TODO: add logging
225
169
  }
226
170
 
227
171
 
228
- function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
229
- UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
230
- UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
231
- return collateralUFixed.toInt();
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());
232
183
  }
233
184
 
234
- function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
185
+ function collectPremium(
186
+ NftId policyNftId,
187
+ Timestamp activateAt
188
+ )
189
+ external
190
+ virtual
191
+ {
235
192
  // check caller is registered product
236
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
193
+ (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
237
194
  InstanceReader instanceReader = instance.getInstanceReader();
238
195
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
239
196
 
240
197
  if (policyInfo.premiumPaidAmount == policyInfo.premiumAmount) {
241
- revert ErrorIPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
198
+ revert ErrorPolicyServicePremiumAlreadyPaid(policyNftId, policyInfo.premiumPaidAmount);
242
199
  }
243
200
 
244
- uint256 unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
201
+ Amount unpaidPremiumAmount = policyInfo.premiumAmount - policyInfo.premiumPaidAmount;
245
202
 
246
- uint256 netPremiumAmount = _processPremiumByTreasury(
203
+ Amount netPremiumAmount = _processPremiumByTreasury(
247
204
  instance,
248
205
  policyNftId,
249
206
  unpaidPremiumAmount);
250
207
 
251
- policyInfo.premiumPaidAmount += unpaidPremiumAmount;
208
+ policyInfo.premiumPaidAmount = policyInfo.premiumPaidAmount + unpaidPremiumAmount;
252
209
 
253
210
  _bundleService.increaseBalance(instance, policyInfo.bundleNftId, netPremiumAmount);
254
- instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
211
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, KEEP_STATE());
255
212
 
256
213
  if(activateAt.gtz() && policyInfo.activatedAt.eqz()) {
257
214
  activate(policyNftId, activateAt);
@@ -262,7 +219,7 @@ contract PolicyService is
262
219
 
263
220
  function activate(NftId policyNftId, Timestamp activateAt) public override {
264
221
  // check caller is registered product
265
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
222
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
266
223
  InstanceReader instanceReader = instance.getInstanceReader();
267
224
 
268
225
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
@@ -274,7 +231,7 @@ contract PolicyService is
274
231
  policyInfo.activatedAt = activateAt;
275
232
  policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
276
233
 
277
- instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
234
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, ACTIVE());
278
235
 
279
236
  // TODO: add logging
280
237
  }
@@ -296,7 +253,7 @@ contract PolicyService is
296
253
  external
297
254
  override
298
255
  {
299
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
256
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
300
257
  InstanceReader instanceReader = instance.getInstanceReader();
301
258
 
302
259
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
@@ -314,90 +271,106 @@ contract PolicyService is
314
271
  revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
315
272
  }
316
273
 
317
- if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
318
- revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
274
+ // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
275
+ if (!(policyInfo.premiumAmount == policyInfo.premiumPaidAmount)) {
276
+ revert ErrorPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
319
277
  }
320
278
 
321
279
  if (policyInfo.openClaimsCount > 0) {
322
280
  revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
323
281
  }
324
282
 
325
- if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
326
- revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
327
- }
328
-
329
283
  policyInfo.closedAt = TimestampLib.blockTimestamp();
330
284
 
331
- _bundleService.closePolicy(instance, policyNftId, policyInfo.bundleNftId, policyInfo.sumInsuredAmount);
332
- instance.updatePolicy(policyNftId, policyInfo, CLOSED());
333
- }
285
+ _poolService.releaseCollateral(
286
+ instance,
287
+ policyNftId,
288
+ policyInfo);
334
289
 
335
- function _getPoolNftId(
336
- IInstance instance,
337
- NftId productNftId
338
- )
339
- internal
340
- view
341
- returns (NftId poolNftid)
342
- {
343
- InstanceReader instanceReader = instance.getInstanceReader();
344
- ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
345
- return productSetupInfo.poolNftId;
290
+ instance.getInstanceStore().updatePolicy(policyNftId, policyInfo, CLOSED());
346
291
  }
347
292
 
348
293
 
349
294
  function _processPremiumByTreasury(
350
295
  IInstance instance,
351
296
  NftId policyNftId,
352
- uint256 premiumAmount
297
+ Amount premiumExpectedAmount
353
298
  )
354
299
  internal
355
- returns (uint256 netPremiumAmount)
300
+ returns (Amount netPremiumAmount)
356
301
  {
357
302
  // process token transfer(s)
358
- if(premiumAmount > 0) {
359
- NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
360
- ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
361
- IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
362
- TokenHandler tokenHandler = productSetupInfo.tokenHandler;
363
- address policyOwner = getRegistry().ownerOf(policyNftId);
364
- address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
365
- IPolicy.Premium memory premium = _applicationService.calculatePremium(
366
- productNftId,
367
- policyInfo.riskId,
368
- policyInfo.sumInsuredAmount,
369
- policyInfo.lifetime,
370
- policyInfo.applicationData,
371
- policyInfo.bundleNftId,
372
- policyInfo.referralId
373
- );
374
-
375
- if (premium.premiumAmount != premiumAmount) {
376
- revert ErrorIPolicyServicePremiumMismatch(policyNftId, premiumAmount, premium.premiumAmount);
377
- }
303
+ if(premiumExpectedAmount.eqz()) {
304
+ return AmountLib.zero();
305
+ }
306
+
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));
324
+ }
325
+
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);
331
+ }
378
332
 
379
- // move product fee to product wallet
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);
338
+
339
+ netPremiumAmount = AmountLib.toAmount(premium.netPremiumAmount);
340
+
341
+ // move product fee to product wallet
342
+ {
380
343
  address productWallet = productSetupInfo.wallet;
381
- if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
382
- revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
383
- }
384
- tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
344
+ tokenHandler.transfer(policyOwner, productWallet, productFeeAmountToTransfer);
345
+ }
385
346
 
386
- // move distribution fee to distribution wallet
347
+ // move distribution fee to distribution wallet
348
+ {
387
349
  ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
388
350
  address distributionWallet = distributionSetupInfo.wallet;
389
- uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
390
351
  tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
391
352
  _distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
392
-
393
- // move netpremium to pool wallet
394
- tokenHandler.transfer(policyOwner, poolWallet, premium.netPremiumAmount);
395
-
396
- // TODO: move pool related tokens too
397
- // TODO: move bundle related tokens too
398
- netPremiumAmount = premium.netPremiumAmount;
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);
360
+ }
361
+
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
+ }
399
372
  }
400
373
 
401
374
  // TODO: add logging
402
375
  }
403
- }
376
+ }