@etherisc/gif-next 0.0.2-ce87da3-250 → 0.0.2-ceb30b2-601

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 (278) 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 +78 -102
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +139 -153
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +155 -76
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +181 -125
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +342 -178
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -151
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +286 -245
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +83 -175
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +707 -463
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +167 -76
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +630 -625
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -126
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +258 -236
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +291 -238
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +79 -48
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +114 -35
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  46. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  48. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
  50. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  52. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  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 +322 -99
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +59 -44
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +459 -242
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +90 -39
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +646 -84
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +119 -32
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +673 -129
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +96 -69
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +205 -59
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +253 -185
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +373 -51
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +480 -37
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +170 -102
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +776 -46
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +85 -27
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +255 -222
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +37 -78
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +929 -58
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +84 -37
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +145 -58
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +28 -37
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -37
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -50
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +21 -34
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +10 -23
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
  124. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +45 -9
  126. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
  128. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  130. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  131. package/artifacts/contracts/shared/IService.sol/IService.json +85 -27
  132. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -19
  135. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  136. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +47 -24
  137. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  138. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +14 -27
  139. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +7 -20
  141. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  142. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  143. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Service.sol/Service.json +92 -29
  145. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  146. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  147. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  148. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  149. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  152. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +7 -20
  154. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  156. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestService.sol/TestService.json +107 -40
  158. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  159. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  161. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  162. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  163. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  164. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  165. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  166. package/artifacts/contracts/types/Amount.sol/AmountLib.json +209 -0
  167. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  169. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
  172. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  174. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  176. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  178. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  180. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  181. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  182. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  185. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
  187. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  189. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  191. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  192. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  193. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  194. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  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 +38 -7
  199. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  201. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  203. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  205. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  206. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  207. package/contracts/components/Component.sol +99 -87
  208. package/contracts/components/Distribution.sol +18 -21
  209. package/contracts/components/IComponent.sol +40 -18
  210. package/contracts/components/IDistributionComponent.sol +1 -22
  211. package/contracts/components/IPoolComponent.sol +73 -47
  212. package/contracts/components/IProductComponent.sol +3 -2
  213. package/contracts/components/Pool.sol +178 -130
  214. package/contracts/components/Product.sol +157 -71
  215. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  216. package/contracts/instance/BundleManager.sol +10 -9
  217. package/contracts/instance/Cloneable.sol +7 -2
  218. package/contracts/instance/IInstance.sol +39 -27
  219. package/contracts/instance/IInstanceService.sol +16 -12
  220. package/contracts/instance/Instance.sol +125 -98
  221. package/contracts/instance/InstanceAccessManager.sol +388 -158
  222. package/contracts/instance/InstanceReader.sol +36 -12
  223. package/contracts/instance/InstanceService.sol +220 -212
  224. package/contracts/instance/ObjectManager.sol +6 -8
  225. package/contracts/instance/base/ComponentService.sol +28 -32
  226. package/contracts/instance/base/KeyValueStore.sol +13 -36
  227. package/contracts/instance/base/Lifecycle.sol +23 -6
  228. package/contracts/instance/module/IAccess.sol +21 -14
  229. package/contracts/instance/module/IBundle.sol +8 -5
  230. package/contracts/instance/module/IComponents.sol +41 -0
  231. package/contracts/instance/module/IDistribution.sol +2 -1
  232. package/contracts/instance/module/IPolicy.sol +38 -7
  233. package/contracts/instance/module/ISetup.sol +7 -22
  234. package/contracts/instance/service/ApplicationService.sol +138 -50
  235. package/contracts/instance/service/BundleService.sol +228 -83
  236. package/contracts/instance/service/ClaimService.sol +240 -30
  237. package/contracts/instance/service/DistributionService.sol +179 -114
  238. package/contracts/instance/service/IApplicationService.sol +9 -13
  239. package/contracts/instance/service/IBundleService.sol +74 -26
  240. package/contracts/instance/service/IClaimService.sol +52 -23
  241. package/contracts/instance/service/IDistributionService.sol +21 -3
  242. package/contracts/instance/service/IPolicyService.sol +20 -29
  243. package/contracts/instance/service/IPoolService.sol +127 -3
  244. package/contracts/instance/service/PolicyService.sol +133 -251
  245. package/contracts/instance/service/PoolService.sol +258 -18
  246. package/contracts/instance/service/ProductService.sol +31 -54
  247. package/contracts/registry/ChainNft.sol +8 -0
  248. package/contracts/registry/IRegistry.sol +2 -0
  249. package/contracts/registry/IRegistryService.sol +2 -3
  250. package/contracts/registry/ITransferInterceptor.sol +1 -0
  251. package/contracts/registry/Registry.sol +23 -20
  252. package/contracts/registry/RegistryService.sol +15 -16
  253. package/contracts/registry/ReleaseManager.sol +20 -18
  254. package/contracts/shared/IPolicyHolder.sol +20 -8
  255. package/contracts/shared/IRegistryLinked.sol +0 -1
  256. package/contracts/shared/IService.sol +6 -6
  257. package/contracts/shared/NftOwnable.sol +0 -2
  258. package/contracts/shared/PolicyHolder.sol +14 -8
  259. package/contracts/shared/Registerable.sol +12 -11
  260. package/contracts/shared/RegistryLinked.sol +0 -5
  261. package/contracts/shared/Service.sol +21 -7
  262. package/contracts/shared/TokenHandler.sol +11 -5
  263. package/contracts/test/TestService.sol +1 -1
  264. package/contracts/types/Amount.sol +70 -0
  265. package/contracts/types/Blocknumber.sol +1 -0
  266. package/contracts/types/ClaimId.sol +25 -2
  267. package/contracts/types/Fee.sol +13 -5
  268. package/contracts/types/NftId.sol +8 -0
  269. package/contracts/types/ObjectType.sol +6 -5
  270. package/contracts/types/PayoutId.sol +33 -5
  271. package/contracts/types/Referral.sol +4 -0
  272. package/contracts/types/RoleId.sol +13 -6
  273. package/contracts/types/Seconds.sol +54 -0
  274. package/contracts/types/StateId.sol +7 -2
  275. package/contracts/types/Timestamp.sol +18 -13
  276. package/contracts/types/UFixed.sol +1 -0
  277. package/contracts/types/Version.sol +1 -0
  278. package/package.json +1 -1
@@ -2,43 +2,39 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
- import {IProductComponent} from "../../components/IProductComponent.sol";
6
5
  import {Product} from "../../components/Product.sol";
7
- import {IPoolComponent} from "../../components/IPoolComponent.sol";
6
+ import {IComponents} from "../module/IComponents.sol";
8
7
  import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
9
8
  import {IInstance} from "../IInstance.sol";
10
9
  import {IPolicy} from "../module/IPolicy.sol";
10
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
11
11
  import {IRisk} from "../module/IRisk.sol";
12
12
  import {IBundle} from "../module/IBundle.sol";
13
- import {IProductService} from "./IProductService.sol";
14
- import {ITreasury} from "../module/ITreasury.sol";
15
13
  import {ISetup} from "../module/ISetup.sol";
16
14
 
17
15
  import {TokenHandler} from "../../shared/TokenHandler.sol";
18
16
 
19
- import {IVersionable} from "../../shared/IVersionable.sol";
20
- import {Versionable} from "../../shared/Versionable.sol";
21
-
17
+ import {Amount, AmountLib} from "../../types/Amount.sol";
18
+ import {ClaimId, ClaimIdLib} from "../../types/ClaimId.sol";
22
19
  import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
23
20
  import {UFixed, UFixedLib} from "../../types/UFixed.sol";
24
- import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
25
- import {ObjectType, INSTANCE, PRODUCT, POOL, POLICY, BUNDLE} from "../../types/ObjectType.sol";
26
- import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
27
- import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
28
- import {Fee, FeeLib} from "../../types/Fee.sol";
29
- import {ReferralId} from "../../types/Referral.sol";
30
- import {RiskId} from "../../types/RiskId.sol";
21
+ import {ObjectType, APPLICATION, DISTRIBUTION, PRODUCT, POOL, POLICY, BUNDLE, CLAIM} from "../../types/ObjectType.sol";
22
+ import {APPLIED, COLLATERALIZED, ACTIVE, KEEP_STATE, CLOSED, DECLINED, CONFIRMED} from "../../types/StateId.sol";
23
+ import {NftId, NftIdLib} from "../../types/NftId.sol";
24
+ import {PayoutId, PayoutIdLib} from "../../types/PayoutId.sol";
31
25
  import {StateId} from "../../types/StateId.sol";
32
- import {Version, VersionLib} from "../../types/Version.sol";
33
- //import {RoleId, PRODUCT_OWNER_ROLE} from "../../types/RoleId.sol";
26
+ import {VersionPart} from "../../types/Version.sol";
34
27
 
35
- import {IService} from "../../shared/IService.sol";
36
- import {Service} from "../../shared/Service.sol";
37
28
  import {ComponentService} from "../base/ComponentService.sol";
38
- import {IPolicyService} from "./IPolicyService.sol";
29
+ import {IApplicationService} from "./IApplicationService.sol";
30
+ import {IBundleService} from "./IBundleService.sol";
31
+ import {IClaimService} from "./IClaimService.sol";
32
+ import {IDistributionService} from "./IDistributionService.sol";
39
33
  import {InstanceReader} from "../InstanceReader.sol";
34
+ import {IPolicyService} from "./IPolicyService.sol";
40
35
  import {IPoolService} from "./IPoolService.sol";
41
- import {IBundleService} from "./IBundleService.sol";
36
+ import {IService} from "../../shared/IService.sol";
37
+ import {Service} from "../../shared/Service.sol";
42
38
 
43
39
 
44
40
  contract PolicyService is
@@ -48,8 +44,11 @@ contract PolicyService is
48
44
  using NftIdLib for NftId;
49
45
  using TimestampLib for Timestamp;
50
46
 
51
- IPoolService internal _poolService;
47
+ IApplicationService internal _applicationService;
52
48
  IBundleService internal _bundleService;
49
+ IClaimService internal _claimService;
50
+ IDistributionService internal _distributionService;
51
+ IPoolService internal _poolService;
53
52
 
54
53
  event LogProductServiceSender(address sender);
55
54
 
@@ -65,143 +64,30 @@ contract PolicyService is
65
64
  address initialOwner;
66
65
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
67
66
 
68
- initializeService(registryAddress, owner);
67
+ initializeService(registryAddress, address(0), owner);
69
68
 
70
- _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getMajorVersion()));
71
- _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getMajorVersion()));
69
+ VersionPart majorVersion = getVersion().toMajorPart();
70
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), majorVersion));
71
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), majorVersion));
72
+ _claimService = IClaimService(getRegistry().getServiceAddress(CLAIM(), majorVersion));
73
+ _applicationService = IApplicationService(getRegistry().getServiceAddress(APPLICATION(), majorVersion));
74
+ _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), majorVersion));
72
75
 
73
76
  registerInterface(type(IPolicyService).interfaceId);
74
77
  }
75
78
 
76
79
 
77
- function getDomain() public pure override(IService, Service) returns(ObjectType) {
80
+ function getDomain() public pure override returns(ObjectType) {
78
81
  return POLICY();
79
82
  }
80
83
 
81
84
 
82
85
  function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
83
86
  IRegistry.ObjectInfo memory productInfo;
84
- (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
87
+ (, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
85
88
  product = Product(productInfo.objectAddress);
86
89
  }
87
90
 
88
- // TODO: no access restrictions
89
- function calculatePremium(
90
- RiskId riskId,
91
- uint256 sumInsuredAmount,
92
- uint256 lifetime,
93
- bytes memory applicationData,
94
- NftId bundleNftId,
95
- ReferralId referralId
96
- )
97
- public
98
- view
99
- virtual override
100
- returns (
101
- uint256 premiumAmount,
102
- uint256 productFeeAmount,
103
- uint256 poolFeeAmount,
104
- uint256 bundleFeeAmount,
105
- uint256 distributionFeeAmount
106
- )
107
- {
108
- Product product = _getAndVerifyInstanceAndProduct();
109
- uint256 netPremiumAmount = product.calculateNetPremium(
110
- sumInsuredAmount,
111
- riskId,
112
- lifetime,
113
- applicationData
114
- );
115
-
116
- (
117
- productFeeAmount,
118
- poolFeeAmount,
119
- bundleFeeAmount,
120
- distributionFeeAmount
121
- ) = _calculateFeeAmounts(
122
- netPremiumAmount,
123
- product,
124
- bundleNftId,
125
- referralId
126
- );
127
-
128
- premiumAmount = netPremiumAmount + productFeeAmount;
129
- premiumAmount += poolFeeAmount + bundleFeeAmount;
130
- premiumAmount += distributionFeeAmount;
131
- }
132
-
133
- function _calculateFeeAmounts(
134
- uint256 netPremiumAmount,
135
- Product product,
136
- NftId bundleNftId,
137
- ReferralId referralId
138
- )
139
- internal
140
- view
141
- returns (
142
- uint256 productFeeAmount,
143
- uint256 poolFeeAmount,
144
- uint256 bundleFeeAmount,
145
- uint256 distributionFeeAmount
146
- )
147
- {
148
- InstanceReader instanceReader;
149
- {
150
- IInstance instance = product.getInstance();
151
- instanceReader = instance.getInstanceReader();
152
- }
153
-
154
- NftId poolNftId = product.getPoolNftId();
155
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
156
- require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
157
-
158
- {
159
- ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
160
- (productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
161
- }
162
- {
163
- ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
164
- (poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
165
- }
166
- {
167
- NftId distributionNftId = product.getDistributionNftId();
168
- ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
169
- // FIXME: call distributionService.calculateFeeAmount
170
- (distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
171
- }
172
-
173
- (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
174
- }
175
-
176
- function _getAndVerifyUnderwritingSetup(
177
- IInstance instance,
178
- InstanceReader instanceReader,
179
- IPolicy.PolicyInfo memory policyInfo,
180
- ISetup.ProductSetupInfo memory productSetupInfo
181
- )
182
- internal
183
- view
184
- returns (
185
- NftId poolNftId,
186
- NftId bundleNftId,
187
- IBundle.BundleInfo memory bundleInfo,
188
- uint256 collateralAmount
189
- )
190
- {
191
- // check match between policy and bundle (via pool)
192
- poolNftId = productSetupInfo.poolNftId;
193
- bundleNftId = policyInfo.bundleNftId;
194
- bundleInfo = instanceReader.getBundleInfo(bundleNftId);
195
- require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
196
-
197
- // calculate required collateral
198
- ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
199
-
200
- // obtain remaining return values
201
- // TODO required collateral amount should be calculated by pool service, not policy service
202
- collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
203
- }
204
-
205
91
 
206
92
  function decline(
207
93
  NftId policyNftId
@@ -209,12 +95,12 @@ contract PolicyService is
209
95
  external
210
96
  override
211
97
  {
212
- require(false, "ERROR:PRS-235:NOT_YET_IMPLEMENTED");
98
+ revert();
213
99
  }
214
100
 
215
101
 
216
102
  /// @dev underwites application which includes the locking of the required collateral from the pool.
217
- function underwrite(
103
+ function collateralize(
218
104
  NftId applicationNftId, // = policyNftId
219
105
  bool requirePremiumPayment,
220
106
  Timestamp activateAt
@@ -223,42 +109,28 @@ contract PolicyService is
223
109
  virtual override
224
110
  {
225
111
  // check caller is registered product
226
- IInstance instance;
227
- InstanceReader instanceReader;
228
- NftId productNftId;
229
- {
230
- IRegistry.ObjectInfo memory productInfo;
231
- (productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
232
- instanceReader = instance.getInstanceReader();
233
- productNftId = productInfo.nftId;
234
- }
112
+ (NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
113
+ InstanceReader instanceReader = instance.getInstanceReader();
235
114
 
236
115
  // check policy matches with calling product
237
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(applicationNftId);
238
- require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
116
+ IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
117
+
118
+ if (applicationInfo.productNftId != productNftId) {
119
+ revert ErrorPolicyServiceProductMismatch(applicationNftId, applicationInfo.productNftId, productNftId);
120
+ }
239
121
 
240
122
  // check policy is in state applied
241
- require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
242
-
243
- (
244
- NftId poolNftId,
245
- NftId bundleNftId,
246
- IBundle.BundleInfo memory bundleInfo,
247
- uint256 collateralAmount
248
- ) = _getAndVerifyUnderwritingSetup(
249
- instance,
250
- instanceReader,
251
- policyInfo,
252
- instanceReader.getProductSetupInfo(productNftId)
253
- );
123
+ if (instanceReader.getPolicyState(applicationNftId) != APPLIED()) {
124
+ revert ErrorPolicyServicePolicyStateNotApplied(applicationNftId);
125
+ }
254
126
 
255
- StateId newPolicyState = UNDERWRITTEN();
127
+ StateId newPolicyState = COLLATERALIZED();
256
128
 
257
129
  // optional activation of policy
258
130
  if(activateAt > zeroTimestamp()) {
259
131
  newPolicyState = ACTIVE();
260
- policyInfo.activatedAt = activateAt;
261
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
132
+ applicationInfo.activatedAt = activateAt;
133
+ applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
262
134
  }
263
135
 
264
136
  // lock bundle collateral
@@ -268,44 +140,26 @@ contract PolicyService is
268
140
  if(requirePremiumPayment) {
269
141
  netPremiumAmount = _processPremiumByTreasury(
270
142
  instance,
271
- productNftId,
272
143
  applicationNftId,
273
- policyInfo.premiumAmount);
144
+ applicationInfo.premiumAmount);
274
145
 
275
- policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
146
+ applicationInfo.premiumPaidAmount += applicationInfo.premiumAmount;
276
147
  }
277
148
 
278
- // lock collateral and update bundle book keeping
279
- // TODO introduct indirection via pool service?
280
- // well pool would only need to be involved when a part of the collateral
281
- // is provided by a "re insurance policy" of the pool
282
- // but then again the policiy would likely best be attached to the bundle. really? why?
283
- // retention level: fraction of sum insured that product will cover from pool funds directly
149
+ // store updated policy info
150
+ instance.updatePolicy(applicationNftId, applicationInfo, newPolicyState);
151
+
152
+ // lock collateral and update pool and bundle book keeping
153
+ // pool retention level: fraction of sum insured that product will cover from pool funds directly
284
154
  // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
285
155
  // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
286
- // open points:
287
- // - do we need a link of a bundle to this policy or is it enough to know that the pool has an active policy?
288
- // - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
289
- bundleInfo = _bundleService.lockCollateral(
156
+ // might also call pool component (for isVerifyingApplications pools)
157
+ _poolService.lockCollateral(
290
158
  instance,
159
+ productNftId,
291
160
  applicationNftId,
292
- bundleNftId,
293
- collateralAmount,
294
- netPremiumAmount);
295
-
296
- instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
297
-
298
- // also verify/confirm application by pool if necessary
299
- if(instanceReader.getPoolSetupInfo(poolNftId).isVerifyingApplications) {
300
- IPoolComponent pool = IPoolComponent(
301
- getRegistry().getObjectInfo(poolNftId).objectAddress);
302
-
303
- pool.verifyApplication(
304
- applicationNftId,
305
- policyInfo.applicationData,
306
- bundleInfo.filter,
307
- collateralAmount);
308
- }
161
+ applicationInfo,
162
+ netPremiumAmount); // for pool book keeping (fee + additional capital)
309
163
 
310
164
  // TODO: add logging
311
165
  }
@@ -319,7 +173,7 @@ contract PolicyService is
319
173
 
320
174
  function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
321
175
  // check caller is registered product
322
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
176
+ (NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
323
177
  InstanceReader instanceReader = instance.getInstanceReader();
324
178
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
325
179
 
@@ -331,7 +185,6 @@ contract PolicyService is
331
185
 
332
186
  uint256 netPremiumAmount = _processPremiumByTreasury(
333
187
  instance,
334
- productInfo.nftId,
335
188
  policyNftId,
336
189
  unpaidPremiumAmount);
337
190
 
@@ -349,7 +202,7 @@ contract PolicyService is
349
202
 
350
203
  function activate(NftId policyNftId, Timestamp activateAt) public override {
351
204
  // check caller is registered product
352
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
205
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
353
206
  InstanceReader instanceReader = instance.getInstanceReader();
354
207
 
355
208
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
@@ -383,7 +236,7 @@ contract PolicyService is
383
236
  external
384
237
  override
385
238
  {
386
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
239
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
387
240
  InstanceReader instanceReader = instance.getInstanceReader();
388
241
 
389
242
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
@@ -401,6 +254,7 @@ contract PolicyService is
401
254
  revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
402
255
  }
403
256
 
257
+ // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
404
258
  if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
405
259
  revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
406
260
  }
@@ -409,65 +263,93 @@ contract PolicyService is
409
263
  revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
410
264
  }
411
265
 
412
- if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
413
- revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
414
- }
415
-
416
266
  policyInfo.closedAt = TimestampLib.blockTimestamp();
417
267
 
418
- _bundleService.closePolicy(instance, policyNftId, policyInfo.bundleNftId, policyInfo.sumInsuredAmount);
419
- instance.updatePolicy(policyNftId, policyInfo, CLOSED());
420
- }
268
+ _poolService.releaseCollateral(
269
+ instance,
270
+ policyNftId,
271
+ policyInfo);
421
272
 
422
- function _getPoolNftId(
423
- IInstance instance,
424
- NftId productNftId
425
- )
426
- internal
427
- view
428
- returns (NftId poolNftid)
429
- {
430
- InstanceReader instanceReader = instance.getInstanceReader();
431
- ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
432
- return productSetupInfo.poolNftId;
273
+ instance.updatePolicy(policyNftId, policyInfo, CLOSED());
433
274
  }
434
275
 
435
276
 
436
277
  function _processPremiumByTreasury(
437
278
  IInstance instance,
438
- NftId productNftId,
439
279
  NftId policyNftId,
440
- uint256 premiumAmount
280
+ uint256 premiumExpectedAmount
441
281
  )
442
282
  internal
443
283
  returns (uint256 netPremiumAmount)
444
284
  {
445
285
  // process token transfer(s)
446
- if(premiumAmount > 0) {
447
- ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
448
- TokenHandler tokenHandler = productSetupInfo.tokenHandler;
449
- address policyOwner = getRegistry().ownerOf(policyNftId);
450
- ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
451
- address poolWallet = poolSetupInfo.wallet;
452
- netPremiumAmount = premiumAmount;
453
- Fee memory productFee = productSetupInfo.productFee;
454
-
455
- if (FeeLib.feeIsZero(productFee)) {
456
- tokenHandler.transfer(
457
- policyOwner,
458
- poolWallet,
459
- premiumAmount
460
- );
461
- } else {
462
- (uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
463
- address productWallet = productSetupInfo.wallet;
464
- if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
465
- revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
466
- }
467
- tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
468
- tokenHandler.transfer(policyOwner, poolWallet, netAmount);
469
- netPremiumAmount = netAmount;
470
- // TODO: also move distribution tokens to distribution wallet and call `Distribution.processSale` to update distribution balances
286
+ if(premiumExpectedAmount == 0) {
287
+ return 0;
288
+ }
289
+
290
+ NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
291
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
292
+ IPolicy.Premium memory premium = _applicationService.calculatePremium(
293
+ productNftId,
294
+ policyInfo.riskId,
295
+ policyInfo.sumInsuredAmount,
296
+ policyInfo.lifetime,
297
+ policyInfo.applicationData,
298
+ policyInfo.bundleNftId,
299
+ policyInfo.referralId
300
+ );
301
+
302
+ if (premium.premiumAmount != premiumExpectedAmount) {
303
+ revert ErrorIPolicyServicePremiumMismatch(
304
+ policyNftId,
305
+ premiumExpectedAmount,
306
+ premium.premiumAmount);
307
+ }
308
+
309
+ address policyOwner = getRegistry().ownerOf(policyNftId);
310
+ ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
311
+ TokenHandler tokenHandler = productSetupInfo.tokenHandler;
312
+ if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
313
+ revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
314
+ }
315
+
316
+ uint256 productFeeAmountToTransfer = premium.productFeeFixAmount + premium.productFeeVarAmount;
317
+ uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
318
+ uint256 poolFeeAmountToTransfer = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
319
+ uint256 bundleFeeAmountToTransfer = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
320
+ uint256 poolAmountToTransfer = premium.netPremiumAmount + poolFeeAmountToTransfer + bundleFeeAmountToTransfer;
321
+ netPremiumAmount = premium.netPremiumAmount;
322
+
323
+ // move product fee to product wallet
324
+ {
325
+ address productWallet = productSetupInfo.wallet;
326
+ tokenHandler.transfer(policyOwner, productWallet, productFeeAmountToTransfer);
327
+ }
328
+
329
+ // move distribution fee to distribution wallet
330
+ {
331
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
332
+ address distributionWallet = distributionSetupInfo.wallet;
333
+ tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
334
+ _distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
335
+ }
336
+
337
+ // move netpremium, bundleFee and poolFee to pool wallet
338
+ {
339
+ address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
340
+ tokenHandler.transfer(policyOwner, poolWallet, poolAmountToTransfer);
341
+ _poolService.processSale(policyInfo.bundleNftId, premium, poolAmountToTransfer);
342
+ }
343
+
344
+ // validate total amount transferred
345
+ {
346
+ uint256 totalTransferred = distributionFeeAmountToTransfer + poolAmountToTransfer + productFeeAmountToTransfer;
347
+
348
+ if (premium.premiumAmount != totalTransferred) {
349
+ revert ErrorPolicyServiceTransferredPremiumMismatch(
350
+ policyNftId,
351
+ premium.premiumAmount,
352
+ totalTransferred);
471
353
  }
472
354
  }
473
355