@etherisc/gif-next 0.0.2-9105e58-225 → 0.0.2-917cede-703

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 (332) 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 -100
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +139 -194
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +156 -64
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +169 -143
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +353 -176
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -138
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +291 -248
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +83 -173
  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 +527 -400
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +166 -181
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +500 -623
  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 +253 -236
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +300 -384
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +246 -84
  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 +71 -166
  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 +266 -253
  60. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  61. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +214 -76
  62. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +409 -386
  64. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  65. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +249 -71
  66. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +338 -230
  68. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +225 -63
  70. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +883 -233
  72. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +308 -78
  74. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +196 -181
  76. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +233 -296
  78. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +231 -177
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +594 -134
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +405 -190
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +583 -109
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +68 -141
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +525 -296
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +228 -86
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +734 -206
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +234 -68
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +107 -222
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +191 -73
  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 +0 -163
  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 +24 -221
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +184 -70
  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 +2 -2
  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/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  126. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IService.sol/IService.json +68 -141
  128. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -150
  130. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  132. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  133. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  134. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  135. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +169 -53
  136. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +5 -16
  138. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  139. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  140. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  141. package/artifacts/contracts/shared/Service.sol/Service.json +82 -161
  142. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  143. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  144. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  145. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  146. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  147. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -150
  148. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  150. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +6 -17
  152. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  153. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  154. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestService.sol/TestService.json +100 -211
  156. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  157. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  158. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  159. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  160. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +6 -188
  161. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  162. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  163. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  164. package/artifacts/contracts/types/Amount.sol/AmountLib.json +209 -0
  165. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  167. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
  170. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  172. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  174. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  175. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  176. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  178. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  179. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  180. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  181. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  183. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
  185. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  187. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  188. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  189. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  190. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  191. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  192. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  193. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  194. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  195. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  197. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  198. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  199. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  201. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  203. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  205. package/contracts/components/Component.sol +99 -88
  206. package/contracts/components/Distribution.sol +22 -46
  207. package/contracts/components/IComponent.sol +40 -19
  208. package/contracts/components/IDistributionComponent.sol +1 -30
  209. package/contracts/components/IPoolComponent.sol +73 -47
  210. package/contracts/components/IProductComponent.sol +3 -2
  211. package/contracts/components/Pool.sol +178 -130
  212. package/contracts/components/Product.sol +157 -71
  213. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  214. package/contracts/instance/BundleManager.sol +10 -9
  215. package/contracts/instance/Cloneable.sol +7 -2
  216. package/contracts/instance/IInstance.sol +37 -27
  217. package/contracts/instance/IInstanceService.sol +18 -9
  218. package/contracts/instance/Instance.sol +117 -98
  219. package/contracts/instance/InstanceAccessManager.sol +388 -158
  220. package/contracts/instance/InstanceReader.sol +36 -12
  221. package/contracts/instance/InstanceService.sol +193 -191
  222. package/contracts/instance/ObjectManager.sol +6 -8
  223. package/contracts/instance/base/ComponentService.sol +17 -30
  224. package/contracts/instance/base/KeyValueStore.sol +13 -5
  225. package/contracts/instance/base/Lifecycle.sol +23 -6
  226. package/contracts/instance/module/IAccess.sol +21 -14
  227. package/contracts/instance/module/IBundle.sol +8 -5
  228. package/contracts/instance/module/IComponents.sol +41 -0
  229. package/contracts/instance/module/IDistribution.sol +2 -0
  230. package/contracts/instance/module/IPolicy.sol +37 -7
  231. package/contracts/instance/module/ISetup.sol +7 -21
  232. package/contracts/instance/service/ApplicationService.sol +137 -50
  233. package/contracts/instance/service/BundleService.sol +228 -83
  234. package/contracts/instance/service/ClaimService.sol +114 -26
  235. package/contracts/instance/service/DistributionService.sol +225 -71
  236. package/contracts/instance/service/IApplicationService.sol +9 -13
  237. package/contracts/instance/service/IBundleService.sol +74 -26
  238. package/contracts/instance/service/IClaimService.sol +46 -15
  239. package/contracts/instance/service/IDistributionService.sol +37 -3
  240. package/contracts/instance/service/IPolicyService.sol +69 -21
  241. package/contracts/instance/service/IPoolService.sol +85 -3
  242. package/contracts/instance/service/PolicyService.sol +301 -230
  243. package/contracts/instance/service/PolicyServiceManager.sol +1 -1
  244. package/contracts/instance/service/PoolService.sol +245 -18
  245. package/contracts/instance/service/ProductService.sol +31 -54
  246. package/contracts/instance/service/ProductServiceManager.sol +1 -1
  247. package/contracts/registry/ChainNft.sol +8 -0
  248. package/contracts/registry/IRegistry.sol +2 -0
  249. package/contracts/registry/IRegistryService.sol +4 -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 +26 -33
  254. package/contracts/registry/TokenRegistry.sol +1 -6
  255. package/contracts/shared/IService.sol +4 -4
  256. package/contracts/shared/IVersionable.sol +4 -47
  257. package/contracts/shared/ProxyManager.sol +89 -22
  258. package/contracts/shared/Registerable.sol +2 -6
  259. package/contracts/shared/Service.sol +29 -17
  260. package/contracts/shared/TokenHandler.sol +11 -5
  261. package/contracts/shared/Versionable.sol +1 -90
  262. package/contracts/test/TestService.sol +1 -1
  263. package/contracts/types/Amount.sol +70 -0
  264. package/contracts/types/Blocknumber.sol +1 -0
  265. package/contracts/types/ClaimId.sol +25 -2
  266. package/contracts/types/Fee.sol +13 -5
  267. package/contracts/types/NftId.sol +8 -0
  268. package/contracts/types/ObjectType.sol +6 -5
  269. package/contracts/types/PayoutId.sol +33 -5
  270. package/contracts/types/Referral.sol +4 -0
  271. package/contracts/types/RoleId.sol +13 -6
  272. package/contracts/types/Seconds.sol +54 -0
  273. package/contracts/types/StateId.sol +7 -2
  274. package/contracts/types/Timestamp.sol +18 -13
  275. package/contracts/types/UFixed.sol +1 -0
  276. package/contracts/types/Version.sol +1 -0
  277. package/package.json +1 -1
  278. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  279. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  280. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  281. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  282. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  283. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  284. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  285. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  286. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  287. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  288. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  289. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  290. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  291. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  292. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  293. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  294. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  295. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  296. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  297. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  298. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  299. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  300. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  301. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  302. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  303. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  304. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  305. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  306. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  307. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  308. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  309. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  310. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  311. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  312. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  313. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  314. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  315. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  316. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  317. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  318. package/contracts/experiment/cloning/Cloner.sol +0 -47
  319. package/contracts/experiment/errors/Require.sol +0 -38
  320. package/contracts/experiment/errors/Revert.sol +0 -44
  321. package/contracts/experiment/inheritance/A.sol +0 -53
  322. package/contracts/experiment/inheritance/B.sol +0 -28
  323. package/contracts/experiment/inheritance/C.sol +0 -34
  324. package/contracts/experiment/inheritance/IA.sol +0 -13
  325. package/contracts/experiment/inheritance/IB.sol +0 -10
  326. package/contracts/experiment/inheritance/IC.sol +0 -12
  327. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  328. package/contracts/experiment/statemachine/ISM.sol +0 -25
  329. package/contracts/experiment/statemachine/SM.sol +0 -57
  330. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  331. package/contracts/experiment/types/TypeA.sol +0 -47
  332. package/contracts/experiment/types/TypeB.sol +0 -29
@@ -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,142 +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
- (distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
170
- }
171
-
172
- (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
173
- }
174
-
175
- function _getAndVerifyUnderwritingSetup(
176
- IInstance instance,
177
- InstanceReader instanceReader,
178
- IPolicy.PolicyInfo memory policyInfo,
179
- ISetup.ProductSetupInfo memory productSetupInfo
180
- )
181
- internal
182
- view
183
- returns (
184
- NftId poolNftId,
185
- NftId bundleNftId,
186
- IBundle.BundleInfo memory bundleInfo,
187
- uint256 collateralAmount
188
- )
189
- {
190
- // check match between policy and bundle (via pool)
191
- poolNftId = productSetupInfo.poolNftId;
192
- bundleNftId = policyInfo.bundleNftId;
193
- bundleInfo = instanceReader.getBundleInfo(bundleNftId);
194
- require(bundleInfo.poolNftId == poolNftId, "POLICY_BUNDLE_MISMATCH");
195
-
196
- // calculate required collateral
197
- ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
198
-
199
- // obtain remaining return values
200
- // TODO required collateral amount should be calculated by pool service, not policy service
201
- collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
202
- }
203
-
204
91
 
205
92
  function decline(
206
93
  NftId policyNftId
@@ -213,7 +100,7 @@ contract PolicyService is
213
100
 
214
101
 
215
102
  /// @dev underwites application which includes the locking of the required collateral from the pool.
216
- function underwrite(
103
+ function collateralize(
217
104
  NftId applicationNftId, // = policyNftId
218
105
  bool requirePremiumPayment,
219
106
  Timestamp activateAt
@@ -222,42 +109,23 @@ contract PolicyService is
222
109
  virtual override
223
110
  {
224
111
  // check caller is registered product
225
- IInstance instance;
226
- InstanceReader instanceReader;
227
- NftId productNftId;
228
- {
229
- IRegistry.ObjectInfo memory productInfo;
230
- (productInfo, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
231
- instanceReader = instance.getInstanceReader();
232
- productNftId = productInfo.nftId;
233
- }
112
+ (NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
113
+ InstanceReader instanceReader = instance.getInstanceReader();
234
114
 
235
115
  // check policy matches with calling product
236
- IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(applicationNftId);
237
- require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
116
+ IPolicy.PolicyInfo memory applicationInfo = instanceReader.getPolicyInfo(applicationNftId);
117
+ require(applicationInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
238
118
 
239
119
  // check policy is in state applied
240
120
  require(instanceReader.getPolicyState(applicationNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
241
121
 
242
- (
243
- NftId poolNftId,
244
- NftId bundleNftId,
245
- IBundle.BundleInfo memory bundleInfo,
246
- uint256 collateralAmount
247
- ) = _getAndVerifyUnderwritingSetup(
248
- instance,
249
- instanceReader,
250
- policyInfo,
251
- instanceReader.getProductSetupInfo(productNftId)
252
- );
253
-
254
- StateId newPolicyState = UNDERWRITTEN();
122
+ StateId newPolicyState = COLLATERALIZED();
255
123
 
256
124
  // optional activation of policy
257
125
  if(activateAt > zeroTimestamp()) {
258
126
  newPolicyState = ACTIVE();
259
- policyInfo.activatedAt = activateAt;
260
- policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
127
+ applicationInfo.activatedAt = activateAt;
128
+ applicationInfo.expiredAt = activateAt.addSeconds(applicationInfo.lifetime);
261
129
  }
262
130
 
263
131
  // lock bundle collateral
@@ -267,44 +135,26 @@ contract PolicyService is
267
135
  if(requirePremiumPayment) {
268
136
  netPremiumAmount = _processPremiumByTreasury(
269
137
  instance,
270
- productNftId,
271
138
  applicationNftId,
272
- policyInfo.premiumAmount);
139
+ applicationInfo.premiumAmount);
273
140
 
274
- policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
141
+ applicationInfo.premiumPaidAmount += applicationInfo.premiumAmount;
275
142
  }
276
143
 
277
- // lock collateral and update bundle book keeping
278
- // TODO introduct indirection via pool service?
279
- // well pool would only need to be involved when a part of the collateral
280
- // is provided by a "re insurance policy" of the pool
281
- // but then again the policiy would likely best be attached to the bundle. really? why?
282
- // retention level: fraction of sum insured that product will cover from pool funds directly
144
+ // store updated policy info
145
+ instance.updatePolicy(applicationNftId, applicationInfo, newPolicyState);
146
+
147
+ // lock collateral and update pool and bundle book keeping
148
+ // pool retention level: fraction of sum insured that product will cover from pool funds directly
283
149
  // eg retention level 30%, payouts up to 30% of the sum insured will be made from the product's pool directly
284
150
  // for the remaining 70% the pool owns a policy that will cover claims that exceed the 30% of the sum insured
285
- // open points:
286
- // - do we need a link of a bundle to this policy or is it enough to know that the pool has an active policy?
287
- // - when to buy such policies and for which amount? manual trigger or link to bundle creation and/or funding?
288
- bundleInfo = _bundleService.lockCollateral(
151
+ // might also call pool component (for isVerifyingApplications pools)
152
+ _poolService.lockCollateral(
289
153
  instance,
154
+ productNftId,
290
155
  applicationNftId,
291
- bundleNftId,
292
- collateralAmount,
293
- netPremiumAmount);
294
-
295
- instance.updatePolicy(applicationNftId, policyInfo, newPolicyState);
296
-
297
- // also verify/confirm application by pool if necessary
298
- if(instanceReader.getPoolSetupInfo(poolNftId).isVerifyingApplications) {
299
- IPoolComponent pool = IPoolComponent(
300
- getRegistry().getObjectInfo(poolNftId).objectAddress);
301
-
302
- pool.verifyApplication(
303
- applicationNftId,
304
- policyInfo.applicationData,
305
- bundleInfo.filter,
306
- collateralAmount);
307
- }
156
+ applicationInfo,
157
+ netPremiumAmount); // for pool book keeping (fee + additional capital)
308
158
 
309
159
  // TODO: add logging
310
160
  }
@@ -318,7 +168,7 @@ contract PolicyService is
318
168
 
319
169
  function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
320
170
  // check caller is registered product
321
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
171
+ (NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
322
172
  InstanceReader instanceReader = instance.getInstanceReader();
323
173
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
324
174
 
@@ -330,7 +180,6 @@ contract PolicyService is
330
180
 
331
181
  uint256 netPremiumAmount = _processPremiumByTreasury(
332
182
  instance,
333
- productInfo.nftId,
334
183
  policyNftId,
335
184
  unpaidPremiumAmount);
336
185
 
@@ -348,7 +197,7 @@ contract PolicyService is
348
197
 
349
198
  function activate(NftId policyNftId, Timestamp activateAt) public override {
350
199
  // check caller is registered product
351
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
200
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
352
201
  InstanceReader instanceReader = instance.getInstanceReader();
353
202
 
354
203
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
@@ -382,7 +231,7 @@ contract PolicyService is
382
231
  external
383
232
  override
384
233
  {
385
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
234
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
386
235
  InstanceReader instanceReader = instance.getInstanceReader();
387
236
 
388
237
  IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
@@ -400,6 +249,7 @@ contract PolicyService is
400
249
  revert ErrorIPolicyServicePolicyAlreadyClosed(policyNftId);
401
250
  }
402
251
 
252
+ // TODO consider to allow for underpaid premiums (with the effects of reducing max payouts accordingly)
403
253
  if (policyInfo.premiumAmount != policyInfo.premiumPaidAmount) {
404
254
  revert ErrorIPolicyServicePremiumNotFullyPaid(policyNftId, policyInfo.premiumAmount, policyInfo.premiumPaidAmount);
405
255
  }
@@ -408,16 +258,215 @@ contract PolicyService is
408
258
  revert ErrorIPolicyServiceOpenClaims(policyNftId, policyInfo.openClaimsCount);
409
259
  }
410
260
 
411
- if (TimestampLib.blockTimestamp().lte(policyInfo.expiredAt) && (policyInfo.payoutAmount < policyInfo.sumInsuredAmount)) {
412
- revert ErrorIPolicyServicePolicyHasNotExpired(policyNftId, policyInfo.expiredAt);
413
- }
414
-
415
261
  policyInfo.closedAt = TimestampLib.blockTimestamp();
416
262
 
417
- _bundleService.closePolicy(instance, policyNftId, policyInfo.bundleNftId, policyInfo.sumInsuredAmount);
263
+ _poolService.releaseCollateral(
264
+ instance,
265
+ policyNftId,
266
+ policyInfo);
267
+
418
268
  instance.updatePolicy(policyNftId, policyInfo, CLOSED());
419
269
  }
420
270
 
271
+ function submitClaim(
272
+ NftId policyNftId,
273
+ Amount claimAmount,
274
+ bytes memory claimData
275
+ )
276
+ external
277
+ virtual
278
+ returns (ClaimId claimId)
279
+ {
280
+ (
281
+ IInstance instance,
282
+ InstanceReader instanceReader,
283
+ IPolicy.PolicyInfo memory policyInfo
284
+ ) = _verifyCallerWithPolicy(policyNftId);
285
+
286
+ // check policy is in its active period
287
+ if(policyInfo.activatedAt.eqz() || TimestampLib.blockTimestamp() >= policyInfo.expiredAt) {
288
+ revert ErrorPolicyServicePolicyNotOpen(policyNftId);
289
+ }
290
+
291
+ // check policy including this claim is still within sum insured
292
+ if(policyInfo.payoutAmount.toInt() + claimAmount.toInt() > policyInfo.sumInsuredAmount) {
293
+ revert ErrorPolicyServiceClaimExceedsSumInsured(
294
+ policyNftId,
295
+ AmountLib.toAmount(policyInfo.sumInsuredAmount),
296
+ AmountLib.toAmount(policyInfo.payoutAmount.toInt() + claimAmount.toInt()));
297
+ }
298
+
299
+ // create new claim
300
+ claimId = ClaimIdLib.toClaimId(policyInfo.claimsCount + 1);
301
+ _claimService.submit(instance, policyNftId, claimId, claimAmount, claimData);
302
+
303
+ // update and save policy info with instance
304
+ policyInfo.claimsCount += 1;
305
+ policyInfo.openClaimsCount += 1;
306
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
307
+
308
+ emit LogPolicyServiceClaimSubmitted(policyNftId, claimId, claimAmount);
309
+ }
310
+
311
+ function confirmClaim(
312
+ NftId policyNftId,
313
+ ClaimId claimId,
314
+ Amount confirmedAmount
315
+ )
316
+ external
317
+ {
318
+ (
319
+ IInstance instance,
320
+ InstanceReader instanceReader,
321
+ IPolicy.PolicyInfo memory policyInfo
322
+ ) = _verifyCallerWithPolicy(policyNftId);
323
+
324
+ // check/update claim info
325
+ _claimService.confirm(instance, instanceReader, policyNftId, claimId, confirmedAmount);
326
+
327
+ // update and save policy info with instance
328
+ instance.updatePolicy(policyNftId, policyInfo, CONFIRMED());
329
+
330
+ emit LogPolicyServiceClaimConfirmed(policyNftId, claimId, confirmedAmount);
331
+ }
332
+
333
+ function declineClaim(
334
+ NftId policyNftId,
335
+ ClaimId claimId
336
+ )
337
+ external
338
+ {
339
+ (
340
+ IInstance instance,
341
+ InstanceReader instanceReader,
342
+ IPolicy.PolicyInfo memory policyInfo
343
+ ) = _verifyCallerWithPolicy(policyNftId);
344
+
345
+ // check/update claim info
346
+ _claimService.decline(instance, instanceReader, policyNftId, claimId);
347
+
348
+ // update and save policy info with instance
349
+ policyInfo.openClaimsCount -= 1;
350
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
351
+
352
+ emit LogPolicyServiceClaimDeclined(policyNftId, claimId);
353
+ }
354
+
355
+ function closeClaim(
356
+ NftId policyNftId,
357
+ ClaimId claimId
358
+ )
359
+ external
360
+ {
361
+ (
362
+ IInstance instance,
363
+ InstanceReader instanceReader,
364
+ IPolicy.PolicyInfo memory policyInfo
365
+ ) = _verifyCallerWithPolicy(policyNftId);
366
+
367
+ // check/update claim info
368
+ _claimService.close(instance, instanceReader, policyNftId, claimId);
369
+
370
+ // update and save policy info with instance
371
+ policyInfo.openClaimsCount -= 1;
372
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
373
+
374
+ emit LogPolicyServiceClaimClosed(policyNftId, claimId);
375
+ }
376
+
377
+ function createPayout(
378
+ NftId policyNftId,
379
+ ClaimId claimId,
380
+ Amount amount,
381
+ bytes memory data
382
+ )
383
+ external
384
+ returns (PayoutId payoutId)
385
+ {
386
+ (
387
+ IInstance instance,
388
+ InstanceReader instanceReader,
389
+ IPolicy.PolicyInfo memory policyInfo
390
+ ) = _verifyCallerWithPolicy(policyNftId);
391
+
392
+ IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
393
+ StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
394
+
395
+ // TODO add checks
396
+ // claim needs to be open
397
+ // claim.paidAmount + amount <= claim.claimAmount
398
+
399
+ // check/update claim info
400
+ uint8 claimNo = claimInfo.payoutsCount + 1;
401
+ payoutId = PayoutIdLib.toPayoutId(claimId, claimNo);
402
+ _claimService.createPayout(
403
+ instance,
404
+ policyNftId,
405
+ payoutId,
406
+ amount,
407
+ data);
408
+
409
+ // update and save policy info with instance
410
+ policyInfo.payoutAmount.add(amount);
411
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
412
+
413
+ emit LogPolicyServicePayoutCreated(policyNftId, payoutId, amount);
414
+ }
415
+
416
+ function processPayout(
417
+ NftId policyNftId,
418
+ PayoutId payoutId
419
+ )
420
+ external
421
+ {
422
+ (
423
+ IInstance instance,
424
+ InstanceReader instanceReader,
425
+ IPolicy.PolicyInfo memory policyInfo
426
+ ) = _verifyCallerWithPolicy(policyNftId);
427
+
428
+ // check/update claim info
429
+ (
430
+ Amount amount,
431
+ bool payoutIsClosingClaim
432
+ ) = _claimService.processPayout(
433
+ instance,
434
+ instanceReader,
435
+ policyNftId,
436
+ payoutId);
437
+
438
+ // update policy info if affected by processed payout
439
+ if(payoutIsClosingClaim) {
440
+ policyInfo.openClaimsCount -= 1;
441
+ instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
442
+ }
443
+
444
+ emit LogPolicyServicePayoutProcessed(policyNftId, payoutId, amount);
445
+ }
446
+
447
+ function _verifyCallerWithPolicy(
448
+ NftId policyNftId
449
+ )
450
+ internal
451
+ returns (
452
+ IInstance instance,
453
+ InstanceReader instanceReader,
454
+ IPolicy.PolicyInfo memory policyInfo
455
+ )
456
+ {
457
+ NftId productNftId;
458
+ (productNftId,, instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
459
+ instanceReader = instance.getInstanceReader();
460
+
461
+ // check caller(product) policy match
462
+ policyInfo = instanceReader.getPolicyInfo(policyNftId);
463
+ if(policyInfo.productNftId != productNftId) {
464
+ revert ErrorPolicyServicePolicyProductMismatch(policyNftId,
465
+ policyInfo.productNftId,
466
+ productNftId);
467
+ }
468
+ }
469
+
421
470
  function _getPoolNftId(
422
471
  IInstance instance,
423
472
  NftId productNftId
@@ -434,39 +483,61 @@ contract PolicyService is
434
483
 
435
484
  function _processPremiumByTreasury(
436
485
  IInstance instance,
437
- NftId productNftId,
438
486
  NftId policyNftId,
439
- uint256 premiumAmount
487
+ uint256 premiumExpectedAmount
440
488
  )
441
489
  internal
442
490
  returns (uint256 netPremiumAmount)
443
491
  {
444
492
  // process token transfer(s)
445
- if(premiumAmount > 0) {
493
+ if(premiumExpectedAmount > 0) {
494
+ NftId productNftId = getRegistry().getObjectInfo(policyNftId).parentNftId;
446
495
  ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
496
+ IPolicy.PolicyInfo memory policyInfo = instance.getInstanceReader().getPolicyInfo(policyNftId);
447
497
  TokenHandler tokenHandler = productSetupInfo.tokenHandler;
448
498
  address policyOwner = getRegistry().ownerOf(policyNftId);
449
- ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
450
- address poolWallet = poolSetupInfo.wallet;
451
- netPremiumAmount = premiumAmount;
452
- Fee memory productFee = productSetupInfo.productFee;
453
-
454
- if (FeeLib.feeIsZero(productFee)) {
455
- tokenHandler.transfer(
456
- policyOwner,
457
- poolWallet,
458
- premiumAmount
499
+ address poolWallet = instance.getInstanceReader().getComponentInfo(productSetupInfo.poolNftId).wallet;
500
+ IPolicy.Premium memory premium = _applicationService.calculatePremium(
501
+ productNftId,
502
+ policyInfo.riskId,
503
+ policyInfo.sumInsuredAmount,
504
+ policyInfo.lifetime,
505
+ policyInfo.applicationData,
506
+ policyInfo.bundleNftId,
507
+ policyInfo.referralId
459
508
  );
460
- } else {
461
- (uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
462
- address productWallet = productSetupInfo.wallet;
463
- if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
464
- revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
465
- }
466
- tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
467
- tokenHandler.transfer(policyOwner, poolWallet, netAmount);
468
- netPremiumAmount = netAmount;
509
+
510
+ if (premium.premiumAmount != premiumExpectedAmount) {
511
+ revert ErrorIPolicyServicePremiumMismatch(
512
+ policyNftId,
513
+ premiumExpectedAmount,
514
+ premium.premiumAmount);
515
+ }
516
+
517
+ // move product fee to product wallet
518
+ address productWallet = productSetupInfo.wallet;
519
+ if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premium.premiumAmount) {
520
+ revert ErrorIPolicyServiceInsufficientAllowance(policyOwner, address(tokenHandler), premium.premiumAmount);
469
521
  }
522
+ tokenHandler.transfer(policyOwner, productWallet, premium.productFeeFixAmount + premium.productFeeVarAmount);
523
+
524
+ // move distribution fee to distribution wallet
525
+ ISetup.DistributionSetupInfo memory distributionSetupInfo = instance.getInstanceReader().getDistributionSetupInfo(productSetupInfo.distributionNftId);
526
+ address distributionWallet = distributionSetupInfo.wallet;
527
+ uint256 distributionFeeAmountToTransfer = premium.distributionFeeFixAmount + premium.distributionFeeVarAmount - premium.discountAmount;
528
+ tokenHandler.transfer(policyOwner, distributionWallet, distributionFeeAmountToTransfer);
529
+ _distributionService.processSale(productSetupInfo.distributionNftId, policyInfo.referralId, premium, distributionFeeAmountToTransfer);
530
+
531
+ // move distribution fee to distribution wallet
532
+ uint256 poolFeeAmountToTransfer = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
533
+ uint256 bundleFeeAmountToTransfer = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
534
+
535
+ // move netpremium to pool wallet
536
+ uint256 poolAmountToTransfer = premium.netPremiumAmount + poolFeeAmountToTransfer + bundleFeeAmountToTransfer;
537
+ tokenHandler.transfer(policyOwner, poolWallet, poolAmountToTransfer);
538
+ _poolService.processSale(policyInfo.bundleNftId, premium, AmountLib.toAmount(poolAmountToTransfer));
539
+
540
+ netPremiumAmount = premium.netPremiumAmount;
470
541
  }
471
542
 
472
543
  // TODO: add logging