@etherisc/gif-next 0.0.2-8dd2f76-992 → 0.0.2-8e4a894-109

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 (411) hide show
  1. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  2. package/artifacts/contracts/{components → distribution}/Distribution.sol/Distribution.json +61 -14
  3. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
  5. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +780 -0
  7. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  8. package/artifacts/contracts/{components → distribution}/IDistributionComponent.sol/IDistributionComponent.json +45 -14
  9. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  10. package/artifacts/contracts/{instance/service → distribution}/IDistributionService.sol/IDistributionService.json +24 -274
  11. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +6 -6
  13. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +309 -2023
  15. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +21 -38
  17. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  18. package/artifacts/contracts/instance/Instance.sol/Instance.json +407 -2759
  19. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +71 -53
  21. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  23. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +343 -63
  25. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +65 -265
  27. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +39 -124
  29. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2837 -0
  31. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  32. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +1 -1
  33. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  35. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  36. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  37. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +61 -12
  38. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  39. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +8 -8
  40. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  41. package/artifacts/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol}/ObjectManager.json +3 -3
  42. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  43. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  45. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  50. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  51. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  52. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  53. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  54. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  55. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +105 -29
  56. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  57. package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +56 -25
  58. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  59. package/artifacts/contracts/{instance/service → pool}/IPoolService.sol/IPoolService.json +270 -37
  60. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  61. package/artifacts/contracts/{components → pool}/Pool.sol/Pool.json +56 -25
  62. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  63. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  64. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
  66. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  67. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  68. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
  70. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  71. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1376 -0
  72. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
  74. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  75. package/artifacts/contracts/{instance/service/IClaimService.sol/IClaimService.json → product/IApplicationService.sol/IApplicationService.json} +119 -101
  76. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  77. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +743 -0
  78. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  79. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +129 -84
  80. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  81. package/artifacts/contracts/{instance/service/IApplicationService.sol/IApplicationService.json → product/IPricingService.sol/IPricingService.json} +63 -175
  82. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  83. package/artifacts/contracts/{components → product}/IProductComponent.sol/IProductComponent.json +53 -22
  84. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  85. package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +6 -14
  86. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  87. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  88. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  89. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  90. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  91. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  92. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  93. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  94. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  95. package/artifacts/contracts/{components → product}/Product.sol/Product.json +53 -22
  96. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  97. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  98. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  102. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -13
  104. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  105. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  106. package/artifacts/contracts/registry/Registry.sol/Registry.json +6 -6
  107. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  108. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +4 -4
  109. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  110. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +21 -29
  111. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  112. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -40
  113. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  114. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +9 -9
  115. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  116. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  117. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  118. package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
  119. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  120. package/artifacts/contracts/{components → shared}/Component.sol/Component.json +38 -7
  121. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  122. package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +38 -14
  123. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  125. package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +38 -7
  126. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
  128. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  129. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
  130. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
  132. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  133. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  134. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  135. package/artifacts/contracts/shared/IService.sol/IService.json +5 -13
  136. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +8 -21
  139. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  140. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
  141. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  142. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +20 -33
  143. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -21
  145. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  146. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  147. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  148. package/artifacts/contracts/shared/Service.sol/Service.json +5 -13
  149. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  150. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  151. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  152. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  153. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  154. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  155. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -0
  156. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  157. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +628 -0
  158. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  159. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
  160. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  161. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  162. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  163. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  164. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  165. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  166. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  167. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  168. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  169. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  170. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  171. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  172. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  173. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  174. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  175. package/artifacts/contracts/{types → type}/NftId.sol/NftIdLib.json +5 -5
  176. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  177. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  178. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  179. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  180. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  181. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  182. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  183. package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
  184. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  185. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  186. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  188. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  189. package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
  190. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  191. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  192. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  193. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
  194. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  195. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  196. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  197. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  198. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  199. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  200. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  201. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  202. package/contracts/{components → distribution}/Distribution.sol +21 -16
  203. package/contracts/{instance/service → distribution}/DistributionService.sol +91 -178
  204. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +5 -5
  205. package/contracts/{components → distribution}/IDistributionComponent.sol +7 -7
  206. package/contracts/{instance/service → distribution}/IDistributionService.sol +18 -30
  207. package/contracts/instance/BundleManager.sol +8 -9
  208. package/contracts/instance/IInstance.sol +43 -64
  209. package/contracts/instance/IInstanceService.sol +18 -17
  210. package/contracts/instance/Instance.sol +116 -214
  211. package/contracts/instance/InstanceAccessManager.sol +38 -24
  212. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  213. package/contracts/instance/InstanceReader.sol +95 -18
  214. package/contracts/instance/InstanceService.sol +97 -284
  215. package/contracts/instance/InstanceServiceManager.sol +1 -1
  216. package/contracts/instance/InstanceStore.sol +211 -0
  217. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +1 -1
  218. package/contracts/instance/base/IKeyValueStore.sol +14 -10
  219. package/contracts/instance/base/ILifecycle.sol +3 -3
  220. package/contracts/instance/base/KeyValueStore.sol +31 -43
  221. package/contracts/instance/base/Lifecycle.sol +16 -5
  222. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +7 -7
  223. package/contracts/instance/module/IAccess.sol +2 -2
  224. package/contracts/instance/module/IBundle.sol +5 -5
  225. package/contracts/instance/module/IComponents.sol +8 -8
  226. package/contracts/instance/module/IDistribution.sol +7 -6
  227. package/contracts/instance/module/IPolicy.sol +19 -14
  228. package/contracts/instance/module/IRisk.sol +1 -1
  229. package/contracts/instance/module/ISetup.sol +4 -4
  230. package/contracts/instance/module/ITreasury.sol +2 -2
  231. package/contracts/{instance/service → pool}/BundleService.sol +101 -150
  232. package/contracts/{instance/service → pool}/BundleServiceManager.sol +5 -5
  233. package/contracts/{instance/service → pool}/IBundleService.sol +43 -18
  234. package/contracts/{components → pool}/IPoolComponent.sol +14 -13
  235. package/contracts/{instance/service → pool}/IPoolService.sol +28 -13
  236. package/contracts/{components → pool}/Pool.sol +20 -21
  237. package/contracts/{instance/service → pool}/PoolService.sol +153 -53
  238. package/contracts/{instance/service → pool}/PoolServiceManager.sol +5 -5
  239. package/contracts/product/ApplicationService.sol +186 -0
  240. package/contracts/{instance/service → product}/ApplicationServiceManager.sol +2 -2
  241. package/contracts/product/ClaimService.sol +437 -0
  242. package/contracts/{instance/service → product}/ClaimServiceManager.sol +2 -2
  243. package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
  244. package/contracts/product/IClaimService.sol +90 -0
  245. package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
  246. package/contracts/product/IPricingService.sol +37 -0
  247. package/contracts/{components → product}/IProductComponent.sol +11 -10
  248. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  249. package/contracts/{instance/service → product}/PolicyService.sol +152 -138
  250. package/contracts/{instance/service → product}/PolicyServiceManager.sol +5 -5
  251. package/contracts/product/PricingService.sol +275 -0
  252. package/contracts/product/PricingServiceManager.sol +51 -0
  253. package/contracts/{components → product}/Product.sol +156 -74
  254. package/contracts/{instance/service → product}/ProductService.sol +46 -46
  255. package/contracts/{instance/service → product}/ProductServiceManager.sol +5 -5
  256. package/contracts/registry/IRegistry.sol +4 -4
  257. package/contracts/registry/IRegistryService.sol +4 -6
  258. package/contracts/registry/Registry.sol +3 -3
  259. package/contracts/registry/RegistryAccessManager.sol +1 -1
  260. package/contracts/registry/RegistryService.sol +23 -20
  261. package/contracts/registry/RegistryServiceManager.sol +0 -2
  262. package/contracts/registry/ReleaseManager.sol +5 -5
  263. package/contracts/registry/TokenRegistry.sol +2 -2
  264. package/contracts/{components → shared}/Component.sol +26 -8
  265. package/contracts/{instance/base → shared}/ComponentService.sol +63 -34
  266. package/contracts/{components → shared}/IComponent.sol +19 -5
  267. package/contracts/shared/INftOwnable.sol +1 -1
  268. package/contracts/shared/IPolicyHolder.sol +24 -10
  269. package/contracts/shared/IRegistryLinked.sol +0 -1
  270. package/contracts/shared/IService.sol +3 -1
  271. package/contracts/shared/IVersionable.sol +1 -1
  272. package/contracts/shared/NftOwnable.sol +1 -3
  273. package/contracts/shared/PolicyHolder.sol +31 -18
  274. package/contracts/shared/ProxyManager.sol +3 -3
  275. package/contracts/shared/Registerable.sol +12 -11
  276. package/contracts/shared/RegistryLinked.sol +0 -5
  277. package/contracts/shared/Service.sol +3 -3
  278. package/contracts/shared/TokenHandler.sol +4 -2
  279. package/contracts/shared/Versionable.sol +1 -1
  280. package/contracts/staking/IStakingService.sol +102 -0
  281. package/contracts/staking/StakeingServiceManager.sol +37 -0
  282. package/contracts/staking/StakingService.sol +166 -0
  283. package/contracts/{types → type}/Amount.sol +49 -0
  284. package/contracts/{types → type}/ClaimId.sol +25 -2
  285. package/contracts/{types → type}/Fee.sol +7 -6
  286. package/contracts/{types → type}/NftIdSet.sol +1 -1
  287. package/contracts/{types → type}/ObjectType.sol +10 -5
  288. package/contracts/{types → type}/PayoutId.sol +33 -5
  289. package/contracts/{types → type}/StateId.sol +6 -2
  290. package/contracts/{types → type}/Timestamp.sol +5 -0
  291. package/package.json +1 -1
  292. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  293. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  294. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
  295. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  296. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  297. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  298. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  299. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  300. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  301. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  302. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  303. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
  304. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
  305. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -1039
  306. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
  307. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -673
  308. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  309. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1231
  310. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  311. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -721
  312. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
  313. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -817
  314. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
  315. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -641
  316. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  317. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1798
  318. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  319. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -805
  320. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
  321. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  322. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
  323. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  324. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  325. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  326. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  327. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  328. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1092
  329. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  330. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -697
  331. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  332. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -1237
  333. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  334. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -661
  335. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  336. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -840
  337. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  338. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -653
  339. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  340. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  341. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  342. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  343. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  344. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
  345. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  346. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  347. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  348. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -596
  349. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  350. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  351. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  352. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  353. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  354. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
  355. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  356. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  357. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  358. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +0 -4
  359. package/artifacts/contracts/types/Amount.sol/AmountLib.json +0 -161
  360. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  361. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  362. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  363. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
  364. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
  365. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  366. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  367. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -288
  368. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  369. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  370. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  371. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  372. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  373. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  374. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
  375. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
  376. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  377. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  378. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  379. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
  380. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  381. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  382. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  383. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  384. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  385. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  386. package/contracts/instance/service/ApplicationService.sol +0 -350
  387. package/contracts/instance/service/ClaimService.sol +0 -151
  388. package/contracts/instance/service/IClaimService.sol +0 -61
  389. package/contracts/shared/ContractDeployerLib.sol +0 -72
  390. package/contracts/test/TestFee.sol +0 -25
  391. package/contracts/test/TestRegisterable.sol +0 -18
  392. package/contracts/test/TestRoleId.sol +0 -14
  393. package/contracts/test/TestService.sol +0 -25
  394. package/contracts/test/TestToken.sol +0 -26
  395. package/contracts/test/TestVersion.sol +0 -44
  396. package/contracts/test/TestVersionable.sol +0 -17
  397. package/contracts/test/Usdc.sol +0 -26
  398. package/contracts/types/ChainId.sol +0 -38
  399. package/contracts/types/NumberId.sol +0 -52
  400. /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
  401. /package/contracts/{types → type}/AddressSet.sol +0 -0
  402. /package/contracts/{types → type}/Blocknumber.sol +0 -0
  403. /package/contracts/{types → type}/DistributorType.sol +0 -0
  404. /package/contracts/{types → type}/Key32.sol +0 -0
  405. /package/contracts/{types → type}/NftId.sol +0 -0
  406. /package/contracts/{types → type}/Referral.sol +0 -0
  407. /package/contracts/{types → type}/RiskId.sol +0 -0
  408. /package/contracts/{types → type}/RoleId.sol +0 -0
  409. /package/contracts/{types → type}/Seconds.sol +0 -0
  410. /package/contracts/{types → type}/UFixed.sol +0 -0
  411. /package/contracts/{types → type}/Version.sol +0 -0
@@ -0,0 +1,186 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {AmountLib} from "../type/Amount.sol";
5
+ import {Seconds} from "../type/Seconds.sol";
6
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
7
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
8
+ import {Blocknumber, blockNumber} from "../type/Blocknumber.sol";
9
+ import {ObjectType, DISTRIBUTION, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, BUNDLE, PRICE} from "../type/ObjectType.sol";
10
+ import {APPLIED, REVOKED, ACTIVE, KEEP_STATE} from "../type/StateId.sol";
11
+ import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
12
+ import {Fee, FeeLib} from "../type/Fee.sol";
13
+ import {ReferralId} from "../type/Referral.sol";
14
+ import {RiskId} from "../type/RiskId.sol";
15
+ import {StateId} from "../type/StateId.sol";
16
+ import {Version, VersionLib} from "../type/Version.sol";
17
+ import {Amount, AmountLib} from "../type/Amount.sol";
18
+
19
+ import {TokenHandler} from "../shared/TokenHandler.sol";
20
+ import {IVersionable} from "../shared/IVersionable.sol";
21
+ import {Versionable} from "../shared/Versionable.sol";
22
+ import {IService} from "../shared/IService.sol";
23
+ import {Service} from "../shared/Service.sol";
24
+
25
+ import {IRegistry} from "../registry/IRegistry.sol";
26
+
27
+ import {IProductComponent} from "./IProductComponent.sol";
28
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
29
+ import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
30
+ import {Product} from "./Product.sol";
31
+
32
+ import {IComponents} from "../instance/module/IComponents.sol";
33
+ import {IPolicy} from "../instance/module/IPolicy.sol";
34
+ import {IRisk} from "../instance/module/IRisk.sol";
35
+ import {IBundle} from "../instance/module/IBundle.sol";
36
+ import {IProductService} from "./IProductService.sol";
37
+ import {ITreasury} from "../instance/module/ITreasury.sol";
38
+ import {ISetup} from "../instance/module/ISetup.sol";
39
+
40
+ import {ComponentService} from "../shared/ComponentService.sol";
41
+
42
+ import {IInstance} from "../instance/IInstance.sol";
43
+ import {InstanceReader} from "../instance/InstanceReader.sol";
44
+
45
+ import {IApplicationService} from "./IApplicationService.sol";
46
+ import {IBundleService} from "../pool/IBundleService.sol";
47
+ import {IDistributionService} from "../distribution/IDistributionService.sol";
48
+ import {IPoolService} from "../pool/IPoolService.sol";
49
+ import {IPricingService} from "./IPricingService.sol";
50
+
51
+
52
+ contract ApplicationService is
53
+ ComponentService,
54
+ IApplicationService
55
+ {
56
+ IDistributionService internal _distributionService;
57
+ IPricingService internal _pricingService;
58
+
59
+ function _initialize(
60
+ address owner,
61
+ bytes memory data
62
+ )
63
+ internal
64
+ virtual override
65
+ initializer()
66
+ {
67
+ // TODO check this, might no longer be the way, refactor if necessary
68
+ address registryAddress;
69
+ address initialOwner;
70
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
71
+
72
+ initializeService(registryAddress, address(0), owner);
73
+ registerInterface(type(IApplicationService).interfaceId);
74
+
75
+ _distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
76
+ _pricingService = IPricingService(_getServiceAddress(PRICE()));
77
+ }
78
+
79
+
80
+ function getDomain() public pure override returns(ObjectType) {
81
+ return APPLICATION();
82
+ }
83
+
84
+
85
+ function create(
86
+ address applicationOwner,
87
+ RiskId riskId,
88
+ Amount sumInsuredAmount,
89
+ Seconds lifetime,
90
+ NftId bundleNftId,
91
+ ReferralId referralId,
92
+ bytes memory applicationData
93
+ )
94
+ external
95
+ virtual
96
+ returns (NftId applicationNftId)
97
+ {
98
+ (NftId productNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
99
+ // TODO: add validations (see create bundle in pool service)
100
+
101
+ applicationNftId = getRegistryService().registerPolicy(
102
+ IRegistry.ObjectInfo(
103
+ zeroNftId(),
104
+ productNftId,
105
+ POLICY(),
106
+ false, // intercepting property for policies is defined on product
107
+ address(0),
108
+ applicationOwner,
109
+ ""
110
+ )
111
+ );
112
+
113
+ // (uint256 premiumAmount,,,,,) = calculatePremium(
114
+ IPolicy.Premium memory premium = _pricingService.calculatePremium(
115
+ productNftId,
116
+ riskId,
117
+ sumInsuredAmount,
118
+ lifetime,
119
+ applicationData,
120
+ bundleNftId,
121
+ referralId
122
+ );
123
+
124
+ IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo({
125
+ productNftId: productNftId,
126
+ bundleNftId: bundleNftId,
127
+ referralId: referralId,
128
+ riskId: riskId,
129
+ sumInsuredAmount: sumInsuredAmount,
130
+ premiumAmount: AmountLib.toAmount(premium.premiumAmount),
131
+ premiumPaidAmount: AmountLib.zero(),
132
+ lifetime: lifetime,
133
+ applicationData: applicationData,
134
+ policyData: "",
135
+ claimsCount: 0,
136
+ openClaimsCount: 0,
137
+ claimAmount: AmountLib.zero(),
138
+ payoutAmount: AmountLib.zero(),
139
+ activatedAt: zeroTimestamp(),
140
+ expiredAt: zeroTimestamp(),
141
+ closedAt: zeroTimestamp()
142
+ });
143
+
144
+ instance.getInstanceStore().createApplication(applicationNftId, policyInfo);
145
+
146
+ // TODO: add logging
147
+ }
148
+
149
+
150
+ function renew(
151
+ NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
152
+ NftId bundleNftId // will likely need a newer bundle for underwriting
153
+ )
154
+ external
155
+ virtual override
156
+ returns (NftId applicationNftId)
157
+ {
158
+
159
+ }
160
+
161
+
162
+ function adjust(
163
+ NftId applicationNftId,
164
+ RiskId riskId,
165
+ NftId bundleNftId,
166
+ ReferralId referralId,
167
+ Amount sumInsuredAmount,
168
+ Seconds lifetime,
169
+ bytes memory applicationData
170
+ )
171
+ external
172
+ virtual override
173
+ {
174
+
175
+ }
176
+
177
+ function revoke(NftId applicationNftId)
178
+ external
179
+ virtual override
180
+ {
181
+ (,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
182
+ instance.getInstanceStore().updateApplicationState(applicationNftId, REVOKED());
183
+ }
184
+
185
+ // internal functions
186
+ }
@@ -1,8 +1,8 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../../shared/IVersionable.sol";
5
- import {ProxyManager} from "../../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../shared/ProxyManager.sol";
6
6
  import {ApplicationService} from "./ApplicationService.sol";
7
7
 
8
8
  contract ApplicationServiceManager is ProxyManager {
@@ -0,0 +1,437 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRisk} from "../instance/module/IRisk.sol";
5
+ import {IService} from "./IApplicationService.sol";
6
+
7
+ import {IComponents} from "../instance/module/IComponents.sol";
8
+ import {IRegistry} from "../registry/IRegistry.sol";
9
+ import {IProductComponent} from "./IProductComponent.sol";
10
+ import {Product} from "./Product.sol";
11
+ import {IPoolComponent} from "../pool/IPoolComponent.sol";
12
+ import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
13
+ import {IInstance} from "../instance/IInstance.sol";
14
+ import {IPolicy} from "../instance/module/IPolicy.sol";
15
+ import {IRisk} from "../instance/module/IRisk.sol";
16
+ import {IBundle} from "../instance/module/IBundle.sol";
17
+ import {IProductService} from "./IProductService.sol";
18
+ import {ITreasury} from "../instance/module/ITreasury.sol";
19
+ import {ISetup} from "../instance/module/ISetup.sol";
20
+
21
+ import {TokenHandler} from "../shared/TokenHandler.sol";
22
+
23
+ import {IVersionable} from "../shared/IVersionable.sol";
24
+ import {Versionable} from "../shared/Versionable.sol";
25
+
26
+ import {Amount, AmountLib} from "../type/Amount.sol";
27
+ import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
28
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
29
+ import {Blocknumber, blockNumber} from "../type/Blocknumber.sol";
30
+ import {ObjectType, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, CLAIM, BUNDLE} from "../type/ObjectType.sol";
31
+ import {SUBMITTED, ACTIVE, KEEP_STATE, DECLINED, CONFIRMED, CLOSED, PAID} from "../type/StateId.sol";
32
+ import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
33
+ import {Fee, FeeLib} from "../type/Fee.sol";
34
+ import {ReferralId} from "../type/Referral.sol";
35
+ import {RiskId} from "../type/RiskId.sol";
36
+ import {StateId} from "../type/StateId.sol";
37
+ import {ClaimId, ClaimIdLib} from "../type/ClaimId.sol";
38
+ import {PayoutId, PayoutIdLib} from "../type/PayoutId.sol";
39
+ import {Version, VersionLib} from "../type/Version.sol";
40
+
41
+ import {ComponentService} from "../shared/ComponentService.sol";
42
+ import {InstanceReader} from "../instance/InstanceReader.sol";
43
+ import {IBundleService} from "../pool/IBundleService.sol";
44
+ import {IClaimService} from "./IClaimService.sol";
45
+ import {IPoolService} from "../pool/IPoolService.sol";
46
+ import {IService} from "../shared/IService.sol";
47
+ import {Service} from "../shared/Service.sol";
48
+
49
+
50
+ contract ClaimService is
51
+ ComponentService,
52
+ IClaimService
53
+ {
54
+
55
+ IPoolService internal _poolService;
56
+
57
+ function _initialize(
58
+ address owner,
59
+ bytes memory data
60
+ )
61
+ internal
62
+ virtual override
63
+ initializer()
64
+ {
65
+ // TODO check this, might no longer be the way, refactor if necessary
66
+ address registryAddress;
67
+ address initialOwner;
68
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
69
+
70
+ initializeService(registryAddress, address(0), owner);
71
+
72
+ _poolService = IPoolService(getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart()));
73
+
74
+ registerInterface(type(IClaimService).interfaceId);
75
+ }
76
+
77
+
78
+ function getDomain() public pure override returns(ObjectType) {
79
+ return CLAIM();
80
+ }
81
+
82
+ function submit(
83
+ NftId policyNftId,
84
+ Amount claimAmount,
85
+ bytes memory claimData
86
+ )
87
+ external
88
+ virtual
89
+ returns (ClaimId claimId)
90
+ {
91
+ (
92
+ IInstance instance,
93
+ InstanceReader instanceReader,
94
+ IPolicy.PolicyInfo memory policyInfo
95
+ ) = _verifyCallerWithPolicy(policyNftId);
96
+
97
+ // check policy is in its active period
98
+ if(policyInfo.activatedAt.eqz() || TimestampLib.blockTimestamp() >= policyInfo.expiredAt) {
99
+ revert ErrorClaimServicePolicyNotOpen(policyNftId);
100
+ }
101
+
102
+ // check policy including this claim is still within sum insured
103
+ if(policyInfo.payoutAmount + claimAmount > policyInfo.sumInsuredAmount) {
104
+ revert ErrorClaimServiceClaimExceedsSumInsured(
105
+ policyNftId,
106
+ policyInfo.sumInsuredAmount,
107
+ AmountLib.toAmount(policyInfo.payoutAmount.toInt() + claimAmount.toInt()));
108
+ }
109
+
110
+ // create new claim
111
+ claimId = ClaimIdLib.toClaimId(policyInfo.claimsCount + 1);
112
+ instance.getInstanceStore().createClaim(
113
+ policyNftId,
114
+ claimId,
115
+ IPolicy.ClaimInfo(
116
+ claimAmount,
117
+ AmountLib.zero(), // paidAmount
118
+ 0, // payoutsCount
119
+ 0, // openPayoutsCount
120
+ claimData,
121
+ TimestampLib.zero())); // closedAt
122
+
123
+ // update and save policy info with instance
124
+ policyInfo.claimsCount += 1;
125
+ policyInfo.openClaimsCount += 1;
126
+ // policy claim amount is only updated when claim is confirmed
127
+ instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
128
+
129
+ emit LogClaimServiceClaimSubmitted(policyNftId, claimId, claimAmount);
130
+ }
131
+
132
+
133
+ function confirm(
134
+ NftId policyNftId,
135
+ ClaimId claimId,
136
+ Amount confirmedAmount
137
+ )
138
+ external
139
+ virtual
140
+ {
141
+ (
142
+ IInstance instance,
143
+ InstanceReader instanceReader,
144
+ IPolicy.PolicyInfo memory policyInfo
145
+ ) = _verifyCallerWithPolicy(policyNftId);
146
+
147
+ // check/update claim info
148
+ IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
149
+ claimInfo.claimAmount = confirmedAmount;
150
+ instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CONFIRMED());
151
+
152
+ // update and save policy info with instance
153
+ policyInfo.claimAmount = policyInfo.claimAmount + confirmedAmount;
154
+ instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
155
+
156
+ emit LogClaimServiceClaimConfirmed(policyNftId, claimId, confirmedAmount);
157
+ }
158
+
159
+ function decline(
160
+ NftId policyNftId,
161
+ ClaimId claimId
162
+ )
163
+ external
164
+ virtual
165
+ {
166
+ (
167
+ IInstance instance,
168
+ InstanceReader instanceReader,
169
+ IPolicy.PolicyInfo memory policyInfo
170
+ ) = _verifyCallerWithPolicy(policyNftId);
171
+
172
+ // check/update claim info
173
+ IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, SUBMITTED());
174
+ claimInfo.closedAt = TimestampLib.blockTimestamp();
175
+ instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, DECLINED());
176
+
177
+ // update and save policy info with instance
178
+ policyInfo.openClaimsCount -= 1;
179
+ instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
180
+
181
+ emit LogClaimServiceClaimDeclined(policyNftId, claimId);
182
+ }
183
+
184
+ function close(
185
+ NftId policyNftId,
186
+ ClaimId claimId
187
+ )
188
+ external
189
+ virtual
190
+ {
191
+ (
192
+ IInstance instance,
193
+ InstanceReader instanceReader,
194
+ IPolicy.PolicyInfo memory policyInfo
195
+ ) = _verifyCallerWithPolicy(policyNftId);
196
+
197
+ // check/update claim info
198
+ IPolicy.ClaimInfo memory claimInfo = _verifyClaim(instanceReader, policyNftId, claimId, CONFIRMED());
199
+
200
+ // check claim has no open payouts
201
+ if(claimInfo.openPayoutsCount > 0) {
202
+ revert ErrorClaimServiceClaimWithOpenPayouts(
203
+ policyNftId,
204
+ claimId,
205
+ claimInfo.openPayoutsCount);
206
+ }
207
+
208
+ // check claim paid amount matches with claim amount
209
+ if(claimInfo.paidAmount.toInt() < claimInfo.claimAmount.toInt()) {
210
+ revert ErrorClaimServiceClaimWithMissingPayouts(
211
+ policyNftId,
212
+ claimId,
213
+ claimInfo.claimAmount,
214
+ claimInfo.paidAmount);
215
+ }
216
+
217
+ claimInfo.closedAt = TimestampLib.blockTimestamp();
218
+ instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CLOSED());
219
+ }
220
+
221
+
222
+ function createPayout(
223
+ NftId policyNftId,
224
+ ClaimId claimId,
225
+ Amount amount,
226
+ bytes memory data
227
+ )
228
+ external
229
+ returns (PayoutId payoutId)
230
+ {
231
+ (
232
+ IInstance instance,
233
+ InstanceReader instanceReader,
234
+ IPolicy.PolicyInfo memory policyInfo
235
+ ) = _verifyCallerWithPolicy(policyNftId);
236
+
237
+ IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
238
+ StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
239
+
240
+ // TODO add checks
241
+ // claim needs to be open
242
+ // claim.paidAmount + amount <= claim.claimAmount
243
+
244
+ // check/update claim info
245
+ // create payout info with instance
246
+ uint8 claimNo = claimInfo.payoutsCount + 1;
247
+ payoutId = PayoutIdLib.toPayoutId(claimId, claimNo);
248
+ instance.getInstanceStore().createPayout(
249
+ policyNftId,
250
+ payoutId,
251
+ IPolicy.PayoutInfo(
252
+ payoutId.toClaimId(),
253
+ amount,
254
+ data,
255
+ TimestampLib.zero()));
256
+
257
+ // update and save claim info with instance
258
+ claimInfo.payoutsCount += 1;
259
+ claimInfo.openPayoutsCount += 1;
260
+ instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
261
+
262
+ // update and save policy info with instance
263
+ policyInfo.payoutAmount.add(amount);
264
+ instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
265
+
266
+ emit LogClaimServicePayoutCreated(policyNftId, payoutId, amount);
267
+ }
268
+
269
+
270
+ function processPayout(
271
+ NftId policyNftId,
272
+ PayoutId payoutId
273
+ )
274
+ external
275
+ virtual
276
+ {
277
+ (
278
+ IInstance instance,
279
+ InstanceReader instanceReader,
280
+ IPolicy.PolicyInfo memory policyInfo
281
+ ) = _verifyCallerWithPolicy(policyNftId);
282
+
283
+ // TODO add check that payout exists and is open
284
+ IPolicy.PayoutInfo memory payoutInfo = instanceReader.getPayoutInfo(policyNftId, payoutId);
285
+
286
+ // update and save payout info with instance
287
+ payoutInfo.paidAt = TimestampLib.blockTimestamp();
288
+ instance.getInstanceStore().updatePayout(policyNftId, payoutId, payoutInfo, PAID());
289
+
290
+ // TODO update and save claim info with instance
291
+ ClaimId claimId = payoutId.toClaimId();
292
+ Amount payoutAmount = payoutInfo.amount;
293
+ IPolicy.ClaimInfo memory claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
294
+ claimInfo.paidAmount = claimInfo.paidAmount.add(payoutAmount);
295
+ claimInfo.openPayoutsCount -= 1;
296
+
297
+ // check if this payout is closing the linked claim
298
+ // update claim and policy info accordingly
299
+ if(claimInfo.openPayoutsCount == 0 && claimInfo.paidAmount == claimInfo.claimAmount) {
300
+ claimInfo.closedAt == TimestampLib.blockTimestamp();
301
+ instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, CLOSED());
302
+
303
+ policyInfo.openClaimsCount -= 1;
304
+ } else {
305
+ instance.getInstanceStore().updateClaim(policyNftId, claimId, claimInfo, KEEP_STATE());
306
+ }
307
+
308
+ // update and save policy info with instance
309
+ policyInfo.payoutAmount = policyInfo.payoutAmount.add(payoutAmount);
310
+ instance.getInstanceStore().updatePolicyClaims(policyNftId, policyInfo, KEEP_STATE());
311
+
312
+ // inform pool about payout
313
+ _poolService.reduceCollateral(instance, policyNftId, policyInfo, payoutAmount);
314
+
315
+ // transfer payout token and fee
316
+ (
317
+ Amount netPayoutAmount,
318
+ address beneficiary
319
+ ) = _transferPayoutAmount(
320
+ instanceReader,
321
+ policyNftId,
322
+ policyInfo,
323
+ payoutInfo);
324
+
325
+ // TODO callback IPolicyHolder
326
+
327
+ emit LogClaimServicePayoutProcessed(policyNftId, payoutId, payoutAmount, beneficiary, netPayoutAmount);
328
+ }
329
+
330
+ // TODO create (I)TreasuryService that deals with all gif related token transfers
331
+ function _transferPayoutAmount(
332
+ InstanceReader instanceReader,
333
+ NftId policyNftId,
334
+ IPolicy.PolicyInfo memory policyInfo,
335
+ IPolicy.PayoutInfo memory payoutInfo
336
+ )
337
+ internal
338
+ returns (
339
+ Amount netPayoutAmount,
340
+ address beneficiary
341
+ )
342
+ {
343
+ Amount payoutAmount = payoutInfo.amount;
344
+
345
+ if(payoutAmount.gtz()) {
346
+ NftId productNftId = policyInfo.productNftId;
347
+ ISetup.ProductSetupInfo memory setupInfo = instanceReader.getProductSetupInfo(productNftId);
348
+
349
+ // get pool component info from policy or product
350
+ NftId poolNftId = getRegistry().getObjectInfo(policyInfo.bundleNftId).parentNftId;
351
+ IComponents.ComponentInfo memory poolInfo = instanceReader.getComponentInfo(poolNftId);
352
+
353
+ netPayoutAmount = payoutAmount;
354
+ beneficiary = _getBeneficiary(policyNftId, payoutInfo.claimId);
355
+
356
+ if(FeeLib.gtz(setupInfo.processingFee)) {
357
+ // TODO calculate net payout and processing fees
358
+ // TODO transfer processing fees to product wallet
359
+ // TODO inform product to update fee book keeping
360
+ }
361
+
362
+ poolInfo.tokenHandler.transfer(
363
+ poolInfo.wallet,
364
+ beneficiary,
365
+ netPayoutAmount);
366
+ }
367
+ }
368
+
369
+ // internal functions
370
+
371
+ function _getBeneficiary(
372
+ NftId policyNftId,
373
+ ClaimId claimId
374
+ )
375
+ internal
376
+ returns (address beneficiary)
377
+ {
378
+ // TODO check if owner is IPolicyHolder
379
+ // if so, obtain beneficiary from this contract
380
+
381
+ // default beneficiary is policy nft owner
382
+ beneficiary = getRegistry().ownerOf(policyNftId);
383
+ }
384
+
385
+
386
+ function _verifyCallerWithPolicy(
387
+ NftId policyNftId
388
+ )
389
+ internal
390
+ returns (
391
+ IInstance instance,
392
+ InstanceReader instanceReader,
393
+ IPolicy.PolicyInfo memory policyInfo
394
+ )
395
+ {
396
+ NftId productNftId;
397
+ (productNftId,, instance) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
398
+ instanceReader = instance.getInstanceReader();
399
+
400
+ // check caller(product) policy match
401
+ policyInfo = instanceReader.getPolicyInfo(policyNftId);
402
+ if(policyInfo.productNftId != productNftId) {
403
+ revert ErrorClaimServicePolicyProductMismatch(policyNftId,
404
+ policyInfo.productNftId,
405
+ productNftId);
406
+ }
407
+ }
408
+
409
+ function _verifyClaim(
410
+ InstanceReader instanceReader,
411
+ NftId policyNftId,
412
+ ClaimId claimId,
413
+ StateId expectedState
414
+ )
415
+ internal
416
+ view
417
+ returns (
418
+ IPolicy.ClaimInfo memory claimInfo
419
+ )
420
+ {
421
+ // check claim is created state
422
+ StateId claimState = instanceReader.getClaimState(policyNftId, claimId);
423
+ if(claimState != expectedState) {
424
+ revert ErrorClaimServiceClaimNotInExpectedState(
425
+ policyNftId, claimId, expectedState, claimState);
426
+ }
427
+
428
+ // get claim info
429
+ claimInfo = instanceReader.getClaimInfo(policyNftId, claimId);
430
+ }
431
+
432
+ function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
433
+ IRegistry.ObjectInfo memory productInfo;
434
+ (, productInfo,) = _getAndVerifyCallingComponentAndInstance(PRODUCT());
435
+ product = Product(productInfo.objectAddress);
436
+ }
437
+ }
@@ -1,8 +1,8 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../../shared/IVersionable.sol";
5
- import {ProxyManager} from "../../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../shared/ProxyManager.sol";
6
6
  import {ClaimService} from "./ClaimService.sol";
7
7
 
8
8
  contract ClaimServiceManager is ProxyManager {