@etherisc/gif-next 0.0.2-2a59cd5-352 → 0.0.2-2aa1035-611

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