@etherisc/gif-next 0.0.2-2a59cd5-352 → 0.0.2-2af39ab-356

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 (325) hide show
  1. package/README.md +8 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +62 -145
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +112 -226
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +59 -92
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +90 -171
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +247 -205
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +63 -164
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +264 -292
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +67 -218
  18. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +30 -11
  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 +415 -522
  23. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +19 -184
  25. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  26. package/artifacts/contracts/instance/Instance.sol/Instance.json +501 -633
  27. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +2 -2
  29. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +120 -222
  31. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +70 -284
  33. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +196 -113
  35. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  37. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +18 -220
  39. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  43. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  45. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  48. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  49. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  54. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  55. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +182 -331
  56. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  57. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +665 -0
  58. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  59. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +141 -366
  60. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  61. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +182 -107
  62. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  63. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
  64. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
  66. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +645 -268
  68. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +300 -109
  70. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +124 -206
  72. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +89 -257
  74. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
  76. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +369 -167
  78. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +25 -290
  80. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +69 -153
  82. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +12 -177
  84. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +65 -443
  86. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +188 -141
  88. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +108 -249
  90. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +183 -104
  92. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +42 -272
  94. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +179 -104
  96. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  97. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  98. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  99. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +12 -177
  100. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  101. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  102. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  103. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  104. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  105. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  106. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +31 -261
  107. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  108. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +182 -113
  109. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  110. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +11 -11
  111. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  112. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +34 -67
  113. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  114. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  115. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  116. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  117. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +4 -30
  118. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  119. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  120. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +4 -30
  121. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  122. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -21
  123. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IService.sol/IService.json +12 -177
  125. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  126. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -150
  127. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +10 -62
  129. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  130. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -23
  131. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  132. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +171 -88
  133. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +11 -74
  135. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  136. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -23
  137. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  138. package/artifacts/contracts/shared/Service.sol/Service.json +13 -215
  139. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  140. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  141. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  142. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  143. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -150
  145. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  147. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +11 -74
  149. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  151. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestService.sol/TestService.json +31 -269
  153. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  156. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +6 -188
  158. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  159. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  160. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  162. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  164. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  165. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  167. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
  169. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  171. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  172. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  173. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  174. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  175. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  178. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  179. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  180. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  182. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  183. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  184. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  186. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  188. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  189. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  190. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
  192. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  193. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  194. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  196. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  198. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  200. package/contracts/components/Component.sol +88 -83
  201. package/contracts/components/Distribution.sol +16 -31
  202. package/contracts/components/IComponent.sol +40 -16
  203. package/contracts/components/IDistributionComponent.sol +1 -22
  204. package/contracts/components/IPoolComponent.sol +73 -47
  205. package/contracts/components/IProductComponent.sol +3 -2
  206. package/contracts/components/Pool.sol +171 -126
  207. package/contracts/components/Product.sol +38 -23
  208. package/contracts/instance/BundleManager.sol +7 -5
  209. package/contracts/instance/IInstance.sol +10 -3
  210. package/contracts/instance/IInstanceService.sol +2 -1
  211. package/contracts/instance/Instance.sol +25 -11
  212. package/contracts/instance/InstanceReader.sol +4 -3
  213. package/contracts/instance/InstanceService.sol +59 -11
  214. package/contracts/instance/InstanceServiceManager.sol +1 -1
  215. package/contracts/instance/base/KeyValueStore.sol +5 -2
  216. package/contracts/instance/base/Lifecycle.sol +11 -2
  217. package/contracts/instance/module/IBundle.sol +2 -1
  218. package/contracts/instance/module/IComponents.sol +35 -0
  219. package/contracts/instance/module/IDistribution.sol +2 -0
  220. package/contracts/instance/module/IPolicy.sol +30 -3
  221. package/contracts/instance/module/ISetup.sol +23 -7
  222. package/contracts/instance/service/ApplicationService.sol +139 -57
  223. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  224. package/contracts/instance/service/BundleService.sol +76 -38
  225. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  226. package/contracts/instance/service/ClaimService.sol +151 -0
  227. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  228. package/contracts/instance/service/DistributionService.sol +133 -21
  229. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  230. package/contracts/instance/service/IApplicationService.sol +9 -9
  231. package/contracts/instance/service/IBundleService.sol +19 -11
  232. package/contracts/instance/service/IClaimService.sol +61 -0
  233. package/contracts/instance/service/IDistributionService.sol +23 -2
  234. package/contracts/instance/service/IPolicyService.sol +17 -35
  235. package/contracts/instance/service/IPoolService.sol +17 -2
  236. package/contracts/instance/service/PolicyService.sol +61 -175
  237. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  238. package/contracts/instance/service/PoolService.sol +72 -18
  239. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  240. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  241. package/contracts/registry/IRegistryService.sol +7 -7
  242. package/contracts/registry/RegistryService.sol +51 -45
  243. package/contracts/registry/RegistryServiceManager.sol +13 -13
  244. package/contracts/registry/ReleaseManager.sol +10 -19
  245. package/contracts/registry/TokenRegistry.sol +13 -10
  246. package/contracts/shared/ERC165.sol +2 -1
  247. package/contracts/shared/INftOwnable.sol +4 -9
  248. package/contracts/shared/IRegistryLinked.sol +0 -3
  249. package/contracts/shared/IService.sol +2 -0
  250. package/contracts/shared/IVersionable.sol +4 -47
  251. package/contracts/shared/NftOwnable.sol +10 -80
  252. package/contracts/shared/ProxyManager.sol +98 -24
  253. package/contracts/shared/Registerable.sol +3 -10
  254. package/contracts/shared/RegistryLinked.sol +10 -26
  255. package/contracts/shared/Service.sol +10 -12
  256. package/contracts/shared/TokenHandler.sol +11 -5
  257. package/contracts/shared/Versionable.sol +1 -90
  258. package/contracts/types/Blocknumber.sol +1 -0
  259. package/contracts/types/ClaimId.sol +52 -0
  260. package/contracts/types/Fee.sol +1 -0
  261. package/contracts/types/NftId.sol +8 -0
  262. package/contracts/types/ObjectType.sol +5 -4
  263. package/contracts/types/PayoutId.sol +54 -0
  264. package/contracts/types/RoleId.sol +10 -5
  265. package/contracts/types/Seconds.sol +54 -0
  266. package/contracts/types/StateId.sol +1 -0
  267. package/contracts/types/Timestamp.sol +13 -13
  268. package/contracts/types/UFixed.sol +1 -0
  269. package/contracts/types/Version.sol +1 -0
  270. package/package.json +1 -1
  271. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  272. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  273. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  274. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  275. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  276. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  277. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  278. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  279. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  280. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  281. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  282. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  283. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  284. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  285. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  286. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  287. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  288. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  289. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  290. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  291. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  292. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  293. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  294. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  295. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  296. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  297. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  298. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  299. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  300. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  301. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  302. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  303. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  304. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  305. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  306. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  307. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  308. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  309. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  311. package/contracts/experiment/cloning/Cloner.sol +0 -47
  312. package/contracts/experiment/errors/Require.sol +0 -38
  313. package/contracts/experiment/errors/Revert.sol +0 -44
  314. package/contracts/experiment/inheritance/A.sol +0 -53
  315. package/contracts/experiment/inheritance/B.sol +0 -28
  316. package/contracts/experiment/inheritance/C.sol +0 -34
  317. package/contracts/experiment/inheritance/IA.sol +0 -13
  318. package/contracts/experiment/inheritance/IB.sol +0 -10
  319. package/contracts/experiment/inheritance/IC.sol +0 -12
  320. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  321. package/contracts/experiment/statemachine/ISM.sol +0 -25
  322. package/contracts/experiment/statemachine/SM.sol +0 -57
  323. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  324. package/contracts/experiment/types/TypeA.sol +0 -47
  325. package/contracts/experiment/types/TypeB.sol +0 -29
@@ -0,0 +1,35 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
6
+ import {Fee} from "../../types/Fee.sol";
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {RoleId} from "../../types/RoleId.sol";
9
+ import {TokenHandler} from "../../shared/TokenHandler.sol";
10
+ import {UFixed} from "../../types/UFixed.sol";
11
+
12
+ interface IComponents {
13
+
14
+ struct ComponentInfo {
15
+ string name; // component name (needs to be unique per instance)
16
+ IERC20Metadata token;
17
+ TokenHandler tokenHandler;
18
+ address wallet;
19
+ bytes data; // will hold component type specific additional info (eg encoded pool info)
20
+ }
21
+
22
+ struct PoolInfo {
23
+ NftId productNftId; // the nft of the product this pool is linked to
24
+ RoleId bundleOwnerRole; // the required role for bundle owners
25
+ uint256 maxCapitalAmount; // max capital amount allowed for pool
26
+ bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
27
+ bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
28
+ bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
29
+ UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
30
+ UFixed retentionLevel; // amount of collateral held in pool (default 100%)
31
+ Fee poolFee; // pool fee on net premium
32
+ Fee stakingFee; // pool fee on staked capital from investor
33
+ Fee performanceFee; // pool fee on profits from capital investors
34
+ }
35
+ }
@@ -24,6 +24,8 @@ interface IDistribution {
24
24
  DistributorType distributorType;
25
25
  bool active;
26
26
  bytes data;
27
+ uint256 sumCommisions;
28
+ uint256 numPoliciesSold;
27
29
  }
28
30
 
29
31
  struct ReferralInfo {
@@ -2,12 +2,39 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {NftId} from "../../types/NftId.sol";
5
- import {NumberId} from "../../types/NumberId.sol";
5
+ import {ClaimId} from "../../types/ClaimId.sol";
6
6
  import {ReferralId} from "../../types/Referral.sol";
7
7
  import {RiskId} from "../../types/RiskId.sol";
8
+ import {Seconds} from "../../types/Seconds.sol";
8
9
  import {Timestamp} from "../../types/Timestamp.sol";
9
10
 
10
11
  interface IPolicy {
12
+
13
+ struct Premium {
14
+ // this is the net premium calculated by the product
15
+ uint256 netPremiumAmount;
16
+ // fullPremium = netPremium + all fixed amounts + all variable amounts (excl commission and minDistribtuionOwnerFee variable part)
17
+ uint256 fullPremiumAmount;
18
+ // premium = fullPremium - discount
19
+ uint256 premiumAmount;
20
+ uint256 productFeeFixAmount;
21
+ uint256 poolFeeFixAmount;
22
+ uint256 bundleFeeFixAmount;
23
+ uint256 distributionFeeFixAmount;
24
+ uint256 productFeeVarAmount;
25
+ uint256 poolFeeVarAmount;
26
+ uint256 bundleFeeVarAmount;
27
+ uint256 distributionFeeVarAmount;
28
+ uint256 distributionOwnerFeeFixAmount;
29
+ // this is the remaining amount when the commission and discount are subtracted from the distribution fee variable part (must be at least the minDistributionOwnerFee)
30
+ uint256 distributionOwnerFeeVarAmount;
31
+ // this value is based on distributor type referenced in the referral
32
+ uint256 commissionAmount;
33
+ // this is based on referral used
34
+ uint256 discountAmount;
35
+ }
36
+
37
+ /// @dev policy data for the full policy lifecycle
11
38
  struct PolicyInfo {
12
39
  NftId productNftId;
13
40
  NftId bundleNftId;
@@ -16,7 +43,7 @@ interface IPolicy {
16
43
  uint256 sumInsuredAmount;
17
44
  uint256 premiumAmount;
18
45
  uint256 premiumPaidAmount;
19
- uint256 lifetime;
46
+ Seconds lifetime;
20
47
  bytes applicationData;
21
48
  bytes policyData;
22
49
  uint16 claimsCount;
@@ -37,7 +64,7 @@ interface IPolicy {
37
64
 
38
65
  // claimId neeeds to be encoded policyNftId:claimId combination
39
66
  struct PayoutInfo {
40
- NumberId claimId;
67
+ ClaimId claimId;
41
68
  uint256 amount;
42
69
  bytes data;
43
70
  Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
@@ -5,21 +5,33 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
5
5
 
6
6
  import {Fee} from "../../types/Fee.sol";
7
7
  import {NftId} from "../../types/NftId.sol";
8
- import {UFixed} from "../../types/UFixed.sol";
8
+ import {RoleId} from "../../types/RoleId.sol";
9
9
  import {TokenHandler} from "../../shared/TokenHandler.sol";
10
+ import {UFixed} from "../../types/UFixed.sol";
10
11
 
11
12
  interface ISetup {
13
+
14
+ struct PoolInfo {
15
+ NftId productNftId; // the nft of the product this pool is linked to
16
+ RoleId bundleOwnerRole; // the required role for bundle owners
17
+ uint256 maxCapitalAmount; // max capital amount allowed for pool
18
+ bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
19
+ bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
20
+ bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
21
+ UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
22
+ UFixed retentionLevel; // amount of collateral held in pool (default 100%)
23
+ Fee poolFee; // pool fee on net premium
24
+ Fee stakingFee; // pool fee on staked capital from investor
25
+ Fee performanceFee; // pool fee on profits from capital investors
26
+ }
27
+
12
28
  struct ProductSetupInfo {
13
29
  IERC20Metadata token;
14
30
  TokenHandler tokenHandler;
15
31
  NftId distributionNftId;
16
32
  NftId poolNftId;
17
- Fee distributionFee; // default distribution fee (no referral id)
18
33
  Fee productFee; // product fee on net premium
19
- Fee processingFee; // product fee on payout amounts
20
- Fee poolFee; // pool fee on net premium
21
- Fee stakingFee; // pool fee on staked capital from investor
22
- Fee performanceFee; // pool fee on profits from capital investors
34
+ Fee processingFee; // product fee on payout amounts
23
35
  bool isIntercepting; // intercepts nft transfers (for products)
24
36
  address wallet;
25
37
  }
@@ -27,13 +39,17 @@ interface ISetup {
27
39
  struct DistributionSetupInfo {
28
40
  NftId productNftId;
29
41
  TokenHandler tokenHandler;
30
- Fee distributionFee; // default distribution fee (no referral id)
42
+ Fee minDistributionOwnerFee;
43
+ Fee distributionFee; // recalculated whenever any fee on the product/pool/dist/disttype is changed
31
44
  address wallet;
45
+ uint256 sumDistributionFees;
32
46
  }
33
47
 
34
48
  struct PoolSetupInfo {
35
49
  NftId productNftId;
36
50
  TokenHandler tokenHandler;
51
+ RoleId bundleOwnerRole;
52
+ uint256 maxCapitalAmount; // max capital amount allowed for pool
37
53
  bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
38
54
  bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
39
55
  bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
@@ -10,6 +10,7 @@ import {Product} from "../../components/Product.sol";
10
10
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
11
11
  import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
12
12
  import {IInstance} from "../IInstance.sol";
13
+ import {IComponents} from "../module/IComponents.sol";
13
14
  import {IPolicy} from "../module/IPolicy.sol";
14
15
  import {IRisk} from "../module/IRisk.sol";
15
16
  import {IBundle} from "../module/IBundle.sol";
@@ -22,11 +23,12 @@ import {TokenHandler} from "../../shared/TokenHandler.sol";
22
23
  import {IVersionable} from "../../shared/IVersionable.sol";
23
24
  import {Versionable} from "../../shared/Versionable.sol";
24
25
 
26
+ import {Seconds} from "../../types/Seconds.sol";
25
27
  import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
26
28
  import {UFixed, UFixedLib} from "../../types/UFixed.sol";
27
29
  import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
28
- import {ObjectType, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, BUNDLE} from "../../types/ObjectType.sol";
29
- import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
30
+ import {ObjectType, DISTRIBUTION, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, BUNDLE} from "../../types/ObjectType.sol";
31
+ import {APPLIED, REVOKED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
30
32
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
31
33
  import {Fee, FeeLib} from "../../types/Fee.sol";
32
34
  import {ReferralId} from "../../types/Referral.sol";
@@ -38,6 +40,7 @@ import {ComponentService} from "../base/ComponentService.sol";
38
40
  import {InstanceReader} from "../InstanceReader.sol";
39
41
  import {IApplicationService} from "./IApplicationService.sol";
40
42
  import {IBundleService} from "./IBundleService.sol";
43
+ import {IDistributionService} from "./IDistributionService.sol";
41
44
  import {IPoolService} from "./IPoolService.sol";
42
45
  import {IService} from "../../shared/IService.sol";
43
46
  import {Service} from "../../shared/Service.sol";
@@ -47,14 +50,14 @@ contract ApplicationService is
47
50
  ComponentService,
48
51
  IApplicationService
49
52
  {
53
+ IDistributionService internal _distributionService;
50
54
 
51
-
52
- function initialize(
55
+ function _initialize(
53
56
  address owner,
54
57
  bytes memory data
55
58
  )
56
- public
57
- virtual
59
+ internal
60
+ virtual override
58
61
  initializer()
59
62
  {
60
63
  // TODO check this, might no longer be the way, refactor if necessary
@@ -64,20 +67,27 @@ contract ApplicationService is
64
67
 
65
68
  initializeService(registryAddress, owner);
66
69
  registerInterface(type(IApplicationService).interfaceId);
70
+
71
+ _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getMajorVersion()));
72
+ }
73
+
74
+
75
+ function getDomain() public pure override(IService, Service) returns(ObjectType) {
76
+ return APPLICATION();
67
77
  }
68
78
 
69
79
 
70
80
  function create(
71
81
  address applicationOwner,
72
82
  RiskId riskId,
83
+ uint256 sumInsuredAmount,
84
+ Seconds lifetime,
73
85
  NftId bundleNftId,
74
86
  ReferralId referralId,
75
- uint256 sumInsuredAmount,
76
- uint256 lifetime,
77
87
  bytes memory applicationData
78
88
  )
79
89
  external
80
- virtual override
90
+ virtual
81
91
  returns (NftId applicationNftId)
82
92
  {
83
93
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
@@ -95,7 +105,9 @@ contract ApplicationService is
95
105
  )
96
106
  );
97
107
 
98
- (uint256 premiumAmount,,,,) = calculatePremium(
108
+ // (uint256 premiumAmount,,,,,) = calculatePremium(
109
+ IPolicy.Premium memory premium = calculatePremium(
110
+ productInfo.nftId,
99
111
  riskId,
100
112
  sumInsuredAmount,
101
113
  lifetime,
@@ -110,7 +122,7 @@ contract ApplicationService is
110
122
  referralId,
111
123
  riskId,
112
124
  sumInsuredAmount,
113
- premiumAmount,
125
+ premium.premiumAmount,
114
126
  0,
115
127
  lifetime,
116
128
  applicationData,
@@ -123,8 +135,7 @@ contract ApplicationService is
123
135
  zeroTimestamp()
124
136
  );
125
137
 
126
- instance.createPolicy(applicationNftId, policyInfo);
127
- instance.updatePolicyState(applicationNftId, APPLIED());
138
+ instance.createApplication(applicationNftId, policyInfo);
128
139
 
129
140
  // TODO: add logging
130
141
  }
@@ -142,7 +153,7 @@ contract ApplicationService is
142
153
  }
143
154
 
144
155
 
145
- function ajust(
156
+ function adjust(
146
157
  NftId applicationNftId,
147
158
  RiskId riskId,
148
159
  NftId bundleNftId,
@@ -157,18 +168,20 @@ contract ApplicationService is
157
168
 
158
169
  }
159
170
 
160
- function revoke(NftId policyNftId)
171
+ function revoke(NftId applicationNftId)
161
172
  external
162
173
  virtual override
163
174
  {
164
-
175
+ (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
176
+ instance.updateApplicationState(applicationNftId, REVOKED());
165
177
  }
166
178
 
167
-
179
+ // TODO: maybe move this to a pricing service later
168
180
  function calculatePremium(
181
+ NftId productNftId,
169
182
  RiskId riskId,
170
183
  uint256 sumInsuredAmount,
171
- uint256 lifetime,
184
+ Seconds lifetime,
172
185
  bytes memory applicationData,
173
186
  NftId bundleNftId,
174
187
  ReferralId referralId
@@ -177,47 +190,36 @@ contract ApplicationService is
177
190
  view
178
191
  virtual override
179
192
  returns (
180
- uint256 premiumAmount,
181
- uint256 distributionFeeAmount,
182
- uint256 productFeeAmount,
183
- uint256 poolFeeAmount,
184
- uint256 bundleFeeAmount
193
+ IPolicy.Premium memory premium
185
194
  )
186
195
  {
187
- Product product = _getAndVerifyInstanceAndProduct();
188
- uint256 netPremiumAmount = product.calculateNetPremium(
196
+ uint256 netPremiumAmount = _getAndVerifyProduct(productNftId).calculateNetPremium(
189
197
  sumInsuredAmount,
190
198
  riskId,
191
199
  lifetime,
192
200
  applicationData
193
201
  );
194
202
 
195
- (
196
- productFeeAmount,
197
- poolFeeAmount,
198
- bundleFeeAmount,
199
- distributionFeeAmount
200
- ) = _calculateFeeAmounts(
203
+ premium = _getFixedFeeAmounts(
201
204
  netPremiumAmount,
202
- product,
205
+ _getAndVerifyProduct(productNftId),
203
206
  bundleNftId,
204
207
  referralId
205
208
  );
206
209
 
207
- premiumAmount = netPremiumAmount + productFeeAmount;
208
- premiumAmount += poolFeeAmount + bundleFeeAmount;
209
- premiumAmount += distributionFeeAmount;
210
- }
211
-
212
-
213
- function getDomain() public pure override(IService, Service) returns(ObjectType) {
214
- return APPLICATION();
210
+ (
211
+ premium
212
+ ) = _calculateVariableFeeAmounts(
213
+ premium,
214
+ _getAndVerifyProduct(productNftId),
215
+ bundleNftId,
216
+ referralId
217
+ );
215
218
  }
216
219
 
217
220
 
218
221
  // internal functions
219
-
220
- function _calculateFeeAmounts(
222
+ function _getFixedFeeAmounts(
221
223
  uint256 netPremiumAmount,
222
224
  Product product,
223
225
  NftId bundleNftId,
@@ -226,10 +228,7 @@ contract ApplicationService is
226
228
  internal
227
229
  view
228
230
  returns (
229
- uint256 productFeeAmount,
230
- uint256 poolFeeAmount,
231
- uint256 bundleFeeAmount,
232
- uint256 distributionFeeAmount
231
+ IPolicy.Premium memory premium
233
232
  )
234
233
  {
235
234
  InstanceReader instanceReader;
@@ -239,24 +238,100 @@ contract ApplicationService is
239
238
  }
240
239
 
241
240
  NftId poolNftId = product.getPoolNftId();
242
- IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
243
- require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
241
+ premium = IPolicy.Premium(
242
+ netPremiumAmount, // net premium
243
+ netPremiumAmount, // full premium
244
+ 0, // premium
245
+ 0, 0, 0, 0, // fix fees
246
+ 0, 0, 0, 0, // variable fees
247
+ 0, 0, 0, 0); // distribution owner fee/commission/discount
244
248
 
245
249
  {
246
- ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
247
- (productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
250
+ {
251
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
252
+ uint256 t = productSetupInfo.productFee.fixedFee;
253
+ premium.productFeeFixAmount = t;
254
+ premium.fullPremiumAmount += t;
255
+ }
256
+ {
257
+ bytes memory componentData = instanceReader.getComponentInfo(poolNftId).data;
258
+ uint256 t = abi.decode(componentData, (IComponents.PoolInfo)).poolFee.fixedFee;
259
+ premium.poolFeeFixAmount = t;
260
+ premium.fullPremiumAmount += t;
261
+ }
262
+ {
263
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
264
+ if(bundleInfo.poolNftId != poolNftId) {
265
+ revert IApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
266
+ }
267
+ uint256 t = bundleInfo.fee.fixedFee;
268
+ premium.bundleFeeFixAmount = t;
269
+ premium.fullPremiumAmount += t;
270
+ }
271
+ {
272
+ ISetup.DistributionSetupInfo memory distInto = instanceReader.getDistributionSetupInfo(product.getDistributionNftId());
273
+ uint256 t = distInto.distributionFee.fixedFee;
274
+ premium.distributionFeeFixAmount = t;
275
+ premium.fullPremiumAmount += t;
276
+ }
248
277
  }
278
+
279
+ }
280
+
281
+ function _calculateVariableFeeAmounts(
282
+ IPolicy.Premium memory premium,
283
+ Product product,
284
+ NftId bundleNftId,
285
+ ReferralId referralId
286
+ )
287
+ internal
288
+ view
289
+ returns (
290
+ IPolicy.Premium memory finalPremium
291
+ )
292
+ {
293
+ InstanceReader instanceReader;
249
294
  {
250
- ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
251
- (poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
295
+ IInstance instance = product.getInstance();
296
+ instanceReader = instance.getInstanceReader();
252
297
  }
298
+
299
+ NftId poolNftId = product.getPoolNftId();
300
+ uint256 netPremiumAmount = premium.netPremiumAmount;
301
+
253
302
  {
254
- NftId distributionNftId = product.getDistributionNftId();
255
- ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
256
- (distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
303
+ {
304
+ ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
305
+ uint256 t = (UFixedLib.toUFixed(netPremiumAmount) * productSetupInfo.productFee.fractionalFee).toInt();
306
+ premium.productFeeVarAmount = t;
307
+ premium.fullPremiumAmount += t;
308
+ }
309
+ {
310
+ bytes memory componentData = instanceReader.getComponentInfo(poolNftId).data;
311
+ UFixed poolFractionalFee = abi.decode(componentData, (IComponents.PoolInfo)).poolFee.fractionalFee;
312
+ uint256 t = (UFixedLib.toUFixed(netPremiumAmount) * poolFractionalFee).toInt();
313
+ premium.poolFeeVarAmount = t;
314
+ premium.fullPremiumAmount += t;
315
+ }
316
+ {
317
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
318
+ if(bundleInfo.poolNftId != poolNftId) {
319
+ revert IApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
320
+ }
321
+ uint256 t = (UFixedLib.toUFixed(netPremiumAmount) * bundleInfo.fee.fractionalFee).toInt();
322
+ premium.bundleFeeVarAmount = t;
323
+ premium.fullPremiumAmount += t;
324
+ }
325
+ {
326
+ premium = _distributionService.calculateFeeAmount(
327
+ product.getDistributionNftId(),
328
+ referralId,
329
+ premium
330
+ );
331
+ }
257
332
  }
258
-
259
- (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
333
+
334
+ return premium;
260
335
  }
261
336
 
262
337
 
@@ -265,4 +340,11 @@ contract ApplicationService is
265
340
  (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
266
341
  product = Product(productInfo.objectAddress);
267
342
  }
343
+
344
+ function _getAndVerifyProduct(NftId productNftId) internal view returns (Product product) {
345
+ IRegistry registry = getRegistry();
346
+ IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productNftId);
347
+ require(productInfo.objectType == PRODUCT(), "OBJECT_TYPE_INVALID");
348
+ product = Product(productInfo.objectAddress);
349
+ }
268
350
  }
@@ -0,0 +1,35 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {ApplicationService} from "./ApplicationService.sol";
7
+
8
+ contract ApplicationServiceManager is ProxyManager {
9
+
10
+ ApplicationService private _applicationService;
11
+
12
+ /// @dev initializes proxy manager with service implementation
13
+ constructor(
14
+ address registryAddress
15
+ )
16
+ ProxyManager(registryAddress)
17
+ {
18
+ ApplicationService svc = new ApplicationService();
19
+ bytes memory data = abi.encode(registryAddress, address(this));
20
+ IVersionable versionable = deploy(
21
+ address(svc),
22
+ data);
23
+
24
+ _applicationService = ApplicationService(address(versionable));
25
+ }
26
+
27
+ //--- view functions ----------------------------------------------------//
28
+ function getApplicationService()
29
+ external
30
+ view
31
+ returns (ApplicationService)
32
+ {
33
+ return _applicationService;
34
+ }
35
+ }