@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,275 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Seconds} from "../type/Seconds.sol";
5
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
6
+ import {ObjectType} from "../type/ObjectType.sol";
7
+ import {NftId} from "../type/NftId.sol";
8
+ import {Fee} from "../type/Fee.sol";
9
+ import {ReferralId} from "../type/Referral.sol";
10
+ import {RiskId} from "../type/RiskId.sol";
11
+ import {PRODUCT, DISTRIBUTION, PRICE} from "../type/ObjectType.sol";
12
+ import {Amount} from "../type/Amount.sol";
13
+ import {IRegistry} from "../registry/IRegistry.sol";
14
+
15
+ import {IProductComponent} from "./IProductComponent.sol";
16
+
17
+ import {IInstance} from "../instance/IInstance.sol";
18
+ import {InstanceReader} from "../instance/InstanceReader.sol";
19
+ import {IComponents} from "../instance/module/IComponents.sol";
20
+ import {IPolicy} from "../instance/module/IPolicy.sol";
21
+ import {IBundle} from "../instance/module/IBundle.sol";
22
+ import {ISetup} from "../instance/module/ISetup.sol";
23
+ import {IDistribution} from "../instance/module/IDistribution.sol";
24
+
25
+ import {ComponentService} from "../shared/ComponentService.sol";
26
+
27
+ import {IPricingService} from "./IPricingService.sol";
28
+ import {IDistributionService} from "../distribution/IDistributionService.sol";
29
+
30
+
31
+ contract PricingService is
32
+ ComponentService,
33
+ IPricingService
34
+ {
35
+ using UFixedLib for UFixed;
36
+
37
+ IDistributionService internal _distributionService;
38
+
39
+
40
+ function _initialize(
41
+ address owner,
42
+ bytes memory data
43
+ )
44
+ internal
45
+ virtual override
46
+ initializer()
47
+ {
48
+ // TODO check this, might no longer be the way, refactor if necessary
49
+ address registryAddress;
50
+ address initialOwner;
51
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
52
+
53
+ initializeService(registryAddress, address(0), owner);
54
+ registerInterface(type(IPricingService).interfaceId);
55
+
56
+ _distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
57
+ }
58
+
59
+
60
+ function getDomain() public pure override returns(ObjectType) {
61
+ return PRICE();
62
+ }
63
+
64
+ /// @dev calculates the premium amount for the specified attributes
65
+ /// also returns the various fee components involved with creating a policy
66
+ function calculatePremium(
67
+ NftId productNftId,
68
+ RiskId riskId,
69
+ Amount sumInsuredAmount,
70
+ Seconds lifetime,
71
+ bytes memory applicationData,
72
+ NftId bundleNftId,
73
+ ReferralId referralId
74
+ )
75
+ external
76
+ view
77
+ virtual override
78
+ returns (
79
+ IPolicy.Premium memory premium
80
+ )
81
+ {
82
+ InstanceReader reader;
83
+ Amount netPremiumAmount;
84
+
85
+ {
86
+ // verify product
87
+ (
88
+ IRegistry.ObjectInfo memory productInfo,
89
+ IInstance instance
90
+ ) = _getAndVerifyComponentInfoAndInstance(productNftId, PRODUCT());
91
+
92
+ reader = instance.getInstanceReader();
93
+
94
+ // calculate net premium
95
+ netPremiumAmount = IProductComponent(productInfo.objectAddress).calculateNetPremium(
96
+ sumInsuredAmount,
97
+ riskId,
98
+ lifetime,
99
+ applicationData
100
+ );
101
+ }
102
+
103
+ {
104
+ // get configurations for all involed objects
105
+ ISetup.ProductSetupInfo memory productSetup = reader.getProductSetupInfo(productNftId);
106
+
107
+ bytes memory componentData = reader.getComponentInfo(productSetup.poolNftId).data;
108
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentData, (IComponents.PoolInfo));
109
+
110
+ IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
111
+ if(bundleInfo.poolNftId != productSetup.poolNftId) {
112
+ revert ErrorIPricingServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, productSetup.poolNftId);
113
+ }
114
+
115
+ NftId distributionNftId = productSetup.distributionNftId;
116
+ ISetup.DistributionSetupInfo memory distSetup = reader.getDistributionSetupInfo(distributionNftId);
117
+
118
+ // calculate premium, order is important
119
+ premium = _getFixedFeeAmounts(
120
+ netPremiumAmount,
121
+ productSetup,
122
+ poolInfo,
123
+ distSetup,
124
+ bundleInfo
125
+ );
126
+
127
+ premium = _calculateVariableFeeAmounts(
128
+ premium,
129
+ productSetup,
130
+ poolInfo,
131
+ distSetup,
132
+ bundleInfo
133
+ );
134
+
135
+ premium = _calculateDistributionOwnerFeeAmount(
136
+ premium,
137
+ distSetup,
138
+ referralId,
139
+ distributionNftId,
140
+ reader
141
+ );
142
+
143
+ // sanity check to validate the fee calculation
144
+ if (premium.distributionOwnerFeeFixAmount < distSetup.minDistributionOwnerFee.fixedFee) {
145
+ revert ErrorIPricingServiceFeeCalculationMismatch(
146
+ premium.distributionFeeFixAmount,
147
+ premium.distributionFeeVarAmount,
148
+ premium.distributionOwnerFeeFixAmount,
149
+ premium.distributionOwnerFeeVarAmount,
150
+ premium.commissionAmount,
151
+ premium.discountAmount
152
+ );
153
+ }
154
+
155
+ if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
156
+ revert ErrorIPricingServiceFeeCalculationMismatch(
157
+ premium.distributionFeeFixAmount,
158
+ premium.distributionFeeVarAmount,
159
+ premium.distributionOwnerFeeFixAmount,
160
+ premium.distributionOwnerFeeVarAmount,
161
+ premium.commissionAmount,
162
+ premium.discountAmount
163
+ );
164
+ }
165
+ }
166
+ }
167
+
168
+ // internal functions
169
+ function _getFixedFeeAmounts(
170
+ Amount netPremiumAmount,
171
+ ISetup.ProductSetupInfo memory productInfo,
172
+ IComponents.PoolInfo memory poolInfo,
173
+ ISetup.DistributionSetupInfo memory distInfo,
174
+ IBundle.BundleInfo memory bundleInfo
175
+ )
176
+ internal
177
+ view
178
+ returns (
179
+ IPolicy.Premium memory premium
180
+ )
181
+ {
182
+ // initial premium amount is the net premium
183
+ premium.netPremiumAmount = netPremiumAmount.toInt();
184
+ premium.fullPremiumAmount = netPremiumAmount.toInt();
185
+
186
+ uint256 t = productInfo.productFee.fixedFee;
187
+ premium.productFeeFixAmount = t;
188
+ premium.fullPremiumAmount += t;
189
+
190
+ t = poolInfo.poolFee.fixedFee;
191
+ premium.poolFeeFixAmount = t;
192
+ premium.fullPremiumAmount += t;
193
+
194
+ t = bundleInfo.fee.fixedFee;
195
+ premium.bundleFeeFixAmount = t;
196
+ premium.fullPremiumAmount += t;
197
+
198
+ t = distInfo.distributionFee.fixedFee;
199
+ premium.distributionFeeFixAmount = t;
200
+ premium.fullPremiumAmount += t;
201
+ }
202
+
203
+ function _calculateVariableFeeAmounts(
204
+ IPolicy.Premium memory premium,
205
+ ISetup.ProductSetupInfo memory productInfo,
206
+ IComponents.PoolInfo memory poolInfo,
207
+ ISetup.DistributionSetupInfo memory distInfo,
208
+ IBundle.BundleInfo memory bundleInfo
209
+ )
210
+ internal
211
+ view
212
+ returns (
213
+ IPolicy.Premium memory intermadiatePremium
214
+ )
215
+ {
216
+ UFixed netPremiumAmount = UFixedLib.toUFixed(premium.netPremiumAmount);
217
+
218
+ uint256 t = (netPremiumAmount * productInfo.productFee.fractionalFee).toInt();
219
+ premium.productFeeVarAmount = t;
220
+ premium.fullPremiumAmount += t;
221
+
222
+ t = (netPremiumAmount * poolInfo.poolFee.fractionalFee).toInt();
223
+ premium.poolFeeVarAmount = t;
224
+ premium.fullPremiumAmount += t;
225
+
226
+ t = (netPremiumAmount * bundleInfo.fee.fractionalFee).toInt();
227
+ premium.bundleFeeVarAmount = t;
228
+ premium.fullPremiumAmount += t;
229
+
230
+ t = (netPremiumAmount * distInfo.distributionFee.fractionalFee).toInt();
231
+ premium.distributionFeeVarAmount = t;
232
+ premium.fullPremiumAmount += t;
233
+
234
+ return premium;
235
+ }
236
+
237
+ function _calculateDistributionOwnerFeeAmount(
238
+ IPolicy.Premium memory premium,
239
+ ISetup.DistributionSetupInfo memory distInfo,
240
+ ReferralId referralId,
241
+ NftId distributionNftId,
242
+ InstanceReader reader
243
+ )
244
+ internal
245
+ view
246
+ returns (IPolicy.Premium memory finalPremium)
247
+ {
248
+ // if the referral is not valid, then the distribution owner gets everything
249
+ if (! _distributionService.referralIsValid(distributionNftId, referralId)) {
250
+ premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
251
+ premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
252
+ premium.premiumAmount = premium.fullPremiumAmount;
253
+ return premium;
254
+ }
255
+
256
+ Fee memory minDistributionOwnerFee = distInfo.minDistributionOwnerFee;
257
+
258
+ // if the referral is valid, the the commission and discount are calculated based in the full premium
259
+ // the remaing amount goes to the distribution owner
260
+ {
261
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
262
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
263
+ IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
264
+
265
+ uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
266
+ premium.commissionAmount = commissionAmount;
267
+ premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
268
+ premium.distributionOwnerFeeFixAmount = distInfo.minDistributionOwnerFee.fixedFee;
269
+ premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount - commissionAmount - premium.discountAmount;
270
+ premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
271
+ }
272
+
273
+ return premium;
274
+ }
275
+ }
@@ -0,0 +1,51 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../shared/ProxyManager.sol";
6
+ import {PricingService} from "./PricingService.sol";
7
+ import {Registry} from "../registry/Registry.sol";
8
+ import {RegistryService} from "../registry/RegistryService.sol";
9
+ import {REGISTRY} from "../type/ObjectType.sol";
10
+
11
+ contract PricingServiceManager is ProxyManager {
12
+
13
+ PricingService private _pricingService;
14
+
15
+ /// @dev initializes proxy manager with distribution service implementation and deploys instance
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager(registryAddress)
20
+ {
21
+ PricingService pricingSrv = new PricingService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(pricingSrv),
25
+ data);
26
+
27
+ _pricingService = PricingService(address(versionable));
28
+
29
+ // TODO `thi` must have a role or own nft to register service
30
+ //Registry registry = Registry(registryAddress);
31
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _distributionService.getMajorVersion());
32
+ //RegistryService registryService = RegistryService(registryServiceAddress);
33
+ //registryService.registerService(_distributionService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_distributionService));
40
+ }
41
+
42
+ //--- view functions ----------------------------------------------------//
43
+ function getPricingService()
44
+ external
45
+ view
46
+ returns (PricingService)
47
+ {
48
+ return _pricingService;
49
+ }
50
+
51
+ }
@@ -3,21 +3,25 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
+ import {Amount, AmountLib} from "../type/Amount.sol";
7
+ import {ClaimId} from "../type/ClaimId.sol";
8
+ import {Component} from "../shared/Component.sol";
9
+ import {Fee} from "../type/Fee.sol";
6
10
  import {IRisk} from "../instance/module/IRisk.sol";
7
- import {IApplicationService} from "../instance/service/IApplicationService.sol";
8
- import {IPolicyService} from "../instance/service/IPolicyService.sol";
9
- import {IProductService} from "../instance/service/IProductService.sol";
10
- import {IClaimService} from "../instance/service/IClaimService.sol";
11
+ import {IApplicationService} from "./IApplicationService.sol";
12
+ import {IPolicyService} from "./IPolicyService.sol";
13
+ import {IProductService} from "./IProductService.sol";
14
+ import {IClaimService} from "./IClaimService.sol";
15
+ import {IPricingService} from "./IPricingService.sol";
11
16
  import {IProductComponent} from "./IProductComponent.sol";
12
- import {NftId, NftIdLib} from "../types/NftId.sol";
13
- import {PRODUCT, APPLICATION, POLICY, CLAIM } from "../types/ObjectType.sol";
14
- import {ReferralId} from "../types/Referral.sol";
15
- import {RiskId, RiskIdLib} from "../types/RiskId.sol";
16
- import {Seconds} from "../types/Seconds.sol";
17
- import {StateId} from "../types/StateId.sol";
18
- import {Timestamp} from "../types/Timestamp.sol";
19
- import {Fee} from "../types/Fee.sol";
20
- import {Component} from "./Component.sol";
17
+ import {NftId, NftIdLib} from "../type/NftId.sol";
18
+ import {PayoutId} from "../type/PayoutId.sol";
19
+ import {PRODUCT, APPLICATION, POLICY, CLAIM, PRICE } from "../type/ObjectType.sol";
20
+ import {ReferralId} from "../type/Referral.sol";
21
+ import {RiskId, RiskIdLib} from "../type/RiskId.sol";
22
+ import {Seconds} from "../type/Seconds.sol";
23
+ import {StateId} from "../type/StateId.sol";
24
+ import {Timestamp} from "../type/Timestamp.sol";
21
25
 
22
26
  import {TokenHandler} from "../shared/TokenHandler.sol";
23
27
 
@@ -25,8 +29,8 @@ import {InstanceReader} from "../instance/InstanceReader.sol";
25
29
  import {IPolicy} from "../instance/module/IPolicy.sol";
26
30
  import {ISetup} from "../instance/module/ISetup.sol";
27
31
  import {IComponents} from "../instance/module/IComponents.sol";
28
- import {Pool} from "../components/Pool.sol";
29
- import {Distribution} from "../components/Distribution.sol";
32
+ import {Pool} from "../pool/Pool.sol";
33
+ import {Distribution} from "../distribution/Distribution.sol";
30
34
 
31
35
  abstract contract Product is
32
36
  Component,
@@ -40,6 +44,7 @@ abstract contract Product is
40
44
  IApplicationService _applicationService;
41
45
  IPolicyService _policyService;
42
46
  IClaimService _claimService;
47
+ IPricingService _pricingService;
43
48
  Pool _pool;
44
49
  Distribution _distribution;
45
50
  Fee _initialProductFee;
@@ -70,11 +75,12 @@ abstract contract Product is
70
75
 
71
76
  ProductStorage storage $ = _getProductStorage();
72
77
  // TODO add validation
73
- // TODO refactor to go via registry
78
+ // TODO refactor to go via registry ?
74
79
  $._productService = IProductService(_getServiceAddress(PRODUCT()));
75
80
  $._applicationService = IApplicationService(_getServiceAddress(APPLICATION()));
76
81
  $._policyService = IPolicyService(_getServiceAddress(POLICY()));
77
82
  $._claimService = IClaimService(_getServiceAddress(CLAIM()));
83
+ $._pricingService = IPricingService(_getServiceAddress(PRICE()));
78
84
  $._pool = Pool(pool);
79
85
  $._distribution = Distribution(distribution);
80
86
  $._initialProductFee = productFee;
@@ -86,50 +92,17 @@ abstract contract Product is
86
92
  registerInterface(type(IProductComponent).interfaceId);
87
93
  }
88
94
 
89
-
90
- function calculatePremium(
91
- uint256 sumInsuredAmount,
92
- RiskId riskId,
93
- Seconds lifetime,
94
- bytes memory applicationData,
95
- NftId bundleNftId,
96
- ReferralId referralId
97
- )
98
- external
99
- view
100
- override
101
- returns (uint256 premiumAmount)
102
- {
103
- IPolicy.Premium memory premium = _getProductStorage()._applicationService.calculatePremium(
104
- getNftId(),
105
- riskId,
106
- sumInsuredAmount,
107
- lifetime,
108
- applicationData,
109
- bundleNftId,
110
- referralId
111
- );
112
- premiumAmount = premium.premiumAmount;
113
- }
114
-
115
-
116
- function calculateNetPremium(
117
- uint256 sumInsuredAmount,
118
- RiskId riskId,
119
- Seconds lifetime,
120
- bytes memory applicationData
95
+ // from product component
96
+ function setFees(
97
+ Fee memory productFee,
98
+ Fee memory processingFee
121
99
  )
122
100
  external
123
- view
124
- virtual override
125
- returns (uint256 netPremiumAmount)
101
+ onlyOwner
102
+ restricted()
103
+ override
126
104
  {
127
- // default 10% of sum insured
128
- return sumInsuredAmount / 10;
129
- }
130
-
131
- function _toRiskId(string memory riskName) internal pure returns (RiskId riskId) {
132
- return RiskIdLib.toRiskId(riskName);
105
+ _getProductService().setFees(productFee, processingFee);
133
106
  }
134
107
 
135
108
  function _createRisk(
@@ -169,7 +142,7 @@ abstract contract Product is
169
142
  function _createApplication(
170
143
  address applicationOwner,
171
144
  RiskId riskId,
172
- uint256 sumInsuredAmount,
145
+ Amount sumInsuredAmount,
173
146
  Seconds lifetime,
174
147
  NftId bundleNftId,
175
148
  ReferralId referralId,
@@ -189,14 +162,14 @@ abstract contract Product is
189
162
  );
190
163
  }
191
164
 
192
- function _underwrite(
165
+ function _collateralize(
193
166
  NftId policyNftId,
194
167
  bool requirePremiumPayment,
195
168
  Timestamp activateAt
196
169
  )
197
170
  internal
198
171
  {
199
- _getProductStorage()._policyService.underwrite(
172
+ _getProductStorage()._policyService.collateralize(
200
173
  policyNftId,
201
174
  requirePremiumPayment,
202
175
  activateAt);
@@ -229,28 +202,137 @@ abstract contract Product is
229
202
  )
230
203
  internal
231
204
  {
232
- _getProductStorage()._policyService.close(policyNftId);
205
+ _getProductStorage()._policyService.close(
206
+ policyNftId);
233
207
  }
234
208
 
235
- function getPoolNftId() external view override returns (NftId poolNftId) {
236
- return getRegistry().getNftId(address(_getProductStorage()._pool));
209
+ function _submitClaim(
210
+ NftId policyNftId,
211
+ Amount claimAmount,
212
+ bytes memory claimData
213
+ )
214
+ internal
215
+ returns(ClaimId)
216
+ {
217
+ return _getProductStorage()._claimService.submit(
218
+ policyNftId,
219
+ claimAmount,
220
+ claimData);
237
221
  }
238
222
 
239
- function getDistributionNftId() external view override returns (NftId distributionNftId) {
240
- return getRegistry().getNftId(address(_getProductStorage()._distribution));
223
+ function _confirmClaim(
224
+ NftId policyNftId,
225
+ ClaimId claimId,
226
+ Amount confirmedAmount
227
+ )
228
+ internal
229
+ {
230
+ _getProductStorage()._claimService.confirm(
231
+ policyNftId,
232
+ claimId,
233
+ confirmedAmount);
241
234
  }
242
235
 
243
- // from product component
244
- function setFees(
245
- Fee memory productFee,
246
- Fee memory processingFee
236
+ function _declineClaim(
237
+ NftId policyNftId,
238
+ ClaimId claimId
239
+ )
240
+ internal
241
+ {
242
+ _getProductStorage()._claimService.decline(
243
+ policyNftId,
244
+ claimId);
245
+ }
246
+
247
+ function _closeClaim(
248
+ NftId policyNftId,
249
+ ClaimId claimId
250
+ )
251
+ internal
252
+ {
253
+ _getProductStorage()._claimService.close(
254
+ policyNftId,
255
+ claimId);
256
+ }
257
+
258
+ function _createPayout(
259
+ NftId policyNftId,
260
+ ClaimId claimId,
261
+ Amount amount,
262
+ bytes memory data
263
+ )
264
+ internal
265
+ returns (PayoutId)
266
+ {
267
+ return _getProductStorage()._claimService.createPayout(
268
+ policyNftId,
269
+ claimId,
270
+ amount,
271
+ data);
272
+ }
273
+
274
+ function _processPayout(
275
+ NftId policyNftId,
276
+ PayoutId payoutId
277
+ )
278
+ internal
279
+ {
280
+ _getProductStorage()._claimService.processPayout(
281
+ policyNftId,
282
+ payoutId);
283
+ }
284
+
285
+ function calculatePremium(
286
+ Amount sumInsuredAmount,
287
+ RiskId riskId,
288
+ Seconds lifetime,
289
+ bytes memory applicationData,
290
+ NftId bundleNftId,
291
+ ReferralId referralId
292
+ )
293
+ external
294
+ view
295
+ override
296
+ returns (Amount premiumAmount)
297
+ {
298
+ IPolicy.Premium memory premium = _getProductStorage()._pricingService.calculatePremium(
299
+ getNftId(),
300
+ riskId,
301
+ sumInsuredAmount,
302
+ lifetime,
303
+ applicationData,
304
+ bundleNftId,
305
+ referralId
306
+ );
307
+
308
+ return AmountLib.toAmount(premium.premiumAmount);
309
+ }
310
+
311
+ function calculateNetPremium(
312
+ Amount sumInsuredAmount,
313
+ RiskId riskId,
314
+ Seconds lifetime,
315
+ bytes memory applicationData
247
316
  )
248
317
  external
249
- onlyOwner
250
- restricted()
251
- override
318
+ view
319
+ virtual override
320
+ returns (Amount netPremiumAmount)
252
321
  {
253
- _getProductService().setFees(productFee, processingFee);
322
+ // default 10% of sum insured
323
+ return AmountLib.toAmount(sumInsuredAmount.toInt() / 10);
324
+ }
325
+
326
+ function _toRiskId(string memory riskName) internal pure returns (RiskId riskId) {
327
+ return RiskIdLib.toRiskId(riskName);
328
+ }
329
+
330
+ function getPoolNftId() external view override returns (NftId poolNftId) {
331
+ return getRegistry().getNftId(address(_getProductStorage()._pool));
332
+ }
333
+
334
+ function getDistributionNftId() external view override returns (NftId distributionNftId) {
335
+ return getRegistry().getNftId(address(_getProductStorage()._distribution));
254
336
  }
255
337
 
256
338
  function getSetupInfo() public view returns (ISetup.ProductSetupInfo memory setupInfo) {
@@ -290,4 +372,4 @@ abstract contract Product is
290
372
  function _getProductService() internal view returns (IProductService) {
291
373
  return _getProductStorage()._productService;
292
374
  }
293
- }
375
+ }