@etherisc/gif-next 0.0.2-9682fee-392 → 0.0.2-96b5b72-170

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