@etherisc/gif-next 0.0.2-e9a637d-547 → 0.0.2-ead1eb0-841

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 (412) hide show
  1. package/README.md +6 -12
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/{components → distribution}/Distribution.sol/Distribution.json +61 -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 +45 -14
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/{instance/service → distribution}/IDistributionService.sol/IDistributionService.json +24 -274
  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 +93 -13
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +5 -43
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +109 -29
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +6 -6
  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 +349 -64
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +49 -278
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +39 -128
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +427 -257
  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/IBundle.sol/IBundle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  51. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  52. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  53. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  54. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  55. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  56. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +105 -29
  57. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  58. package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +56 -25
  59. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  60. package/artifacts/contracts/{instance/service → pool}/IPoolService.sol/IPoolService.json +272 -39
  61. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  62. package/artifacts/contracts/{components → pool}/Pool.sol/Pool.json +56 -25
  63. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  64. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  65. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  66. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
  67. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  68. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  69. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  70. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
  71. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  72. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
  73. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  74. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
  75. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  76. package/artifacts/contracts/{instance/service/IClaimService.sol/IClaimService.json → product/IApplicationService.sol/IApplicationService.json} +119 -101
  77. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  78. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  79. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  80. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +129 -84
  81. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  82. package/artifacts/contracts/{instance/service/IApplicationService.sol/IApplicationService.json → product/IPricingService.sol/IPricingService.json} +63 -175
  83. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  84. package/artifacts/contracts/{components → product}/IProductComponent.sol/IProductComponent.json +53 -22
  85. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  86. package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +6 -14
  87. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  88. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  89. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  90. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  91. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  92. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  93. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  94. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  95. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  96. package/artifacts/contracts/{components → product}/Product.sol/Product.json +53 -22
  97. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  98. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  99. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  100. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -13
  105. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  106. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  107. package/artifacts/contracts/registry/Registry.sol/Registry.json +6 -6
  108. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  109. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +4 -4
  110. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +21 -29
  112. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -40
  114. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +9 -9
  116. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  118. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  119. package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
  120. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  121. package/artifacts/contracts/{components → shared}/Component.sol/Component.json +38 -7
  122. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  123. package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +38 -14
  124. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  126. package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +38 -7
  127. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
  129. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
  131. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
  133. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  135. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IService.sol/IService.json +5 -13
  137. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +8 -21
  140. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  141. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
  142. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  143. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +20 -33
  144. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  145. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -21
  146. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  147. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  148. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  149. package/artifacts/contracts/shared/Service.sol/Service.json +5 -13
  150. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  151. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  152. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  153. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  154. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  155. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  156. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -0
  157. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  158. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +628 -0
  159. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  160. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
  161. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  162. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  163. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  164. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  165. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  166. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  167. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  168. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  169. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  170. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  171. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  172. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  173. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  174. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  175. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  176. package/artifacts/contracts/{types → type}/NftId.sol/NftIdLib.json +5 -5
  177. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  178. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  179. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  180. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  181. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  182. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  183. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  184. package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
  185. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  186. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  187. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  188. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  189. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  190. package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
  191. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  192. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  193. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  194. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
  195. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  196. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  197. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  198. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  199. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  200. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  201. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  202. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  203. package/contracts/{components → distribution}/Distribution.sol +21 -16
  204. package/contracts/{instance/service → distribution}/DistributionService.sol +85 -173
  205. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +5 -5
  206. package/contracts/{components → distribution}/IDistributionComponent.sol +7 -7
  207. package/contracts/{instance/service → distribution}/IDistributionService.sol +18 -30
  208. package/contracts/instance/BundleManager.sol +8 -9
  209. package/contracts/instance/IInstance.sol +30 -13
  210. package/contracts/instance/IInstanceService.sol +6 -17
  211. package/contracts/instance/Instance.sol +76 -46
  212. package/contracts/instance/InstanceAccessManager.sol +8 -5
  213. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  214. package/contracts/instance/InstanceReader.sol +91 -16
  215. package/contracts/instance/InstanceService.sol +75 -297
  216. package/contracts/instance/InstanceServiceManager.sol +1 -1
  217. package/contracts/instance/InstanceStore.sol +57 -65
  218. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +1 -1
  219. package/contracts/instance/base/IKeyValueStore.sol +14 -10
  220. package/contracts/instance/base/ILifecycle.sol +3 -3
  221. package/contracts/instance/base/KeyValueStore.sol +32 -43
  222. package/contracts/instance/base/Lifecycle.sol +17 -5
  223. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +7 -7
  224. package/contracts/instance/module/IAccess.sol +2 -2
  225. package/contracts/instance/module/IBundle.sol +5 -5
  226. package/contracts/instance/module/IComponents.sol +8 -8
  227. package/contracts/instance/module/IDistribution.sol +7 -6
  228. package/contracts/instance/module/IPolicy.sol +22 -16
  229. package/contracts/instance/module/IRisk.sol +1 -1
  230. package/contracts/instance/module/ISetup.sol +4 -4
  231. package/contracts/instance/module/ITreasury.sol +2 -2
  232. package/contracts/{instance/service → pool}/BundleService.sol +95 -144
  233. package/contracts/{instance/service → pool}/BundleServiceManager.sol +5 -5
  234. package/contracts/{instance/service → pool}/IBundleService.sol +43 -18
  235. package/contracts/{components → pool}/IPoolComponent.sol +14 -13
  236. package/contracts/{instance/service → pool}/IPoolService.sol +28 -13
  237. package/contracts/{components → pool}/Pool.sol +20 -21
  238. package/contracts/{instance/service → pool}/PoolService.sol +149 -49
  239. package/contracts/{instance/service → pool}/PoolServiceManager.sol +5 -5
  240. package/contracts/product/ApplicationService.sol +186 -0
  241. package/contracts/{instance/service → product}/ApplicationServiceManager.sol +2 -2
  242. package/contracts/product/ClaimService.sol +442 -0
  243. package/contracts/{instance/service → product}/ClaimServiceManager.sol +2 -2
  244. package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
  245. package/contracts/product/IClaimService.sol +93 -0
  246. package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
  247. package/contracts/product/IPricingService.sol +37 -0
  248. package/contracts/{components → product}/IProductComponent.sol +11 -10
  249. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  250. package/contracts/{instance/service → product}/PolicyService.sol +148 -134
  251. package/contracts/{instance/service → product}/PolicyServiceManager.sol +5 -5
  252. package/contracts/product/PricingService.sol +275 -0
  253. package/contracts/product/PricingServiceManager.sol +51 -0
  254. package/contracts/{components → product}/Product.sol +160 -74
  255. package/contracts/{instance/service → product}/ProductService.sol +44 -43
  256. package/contracts/{instance/service → product}/ProductServiceManager.sol +5 -5
  257. package/contracts/registry/IRegistry.sol +4 -4
  258. package/contracts/registry/IRegistryService.sol +4 -6
  259. package/contracts/registry/Registry.sol +3 -3
  260. package/contracts/registry/RegistryAccessManager.sol +2 -2
  261. package/contracts/registry/RegistryService.sol +23 -20
  262. package/contracts/registry/RegistryServiceManager.sol +0 -2
  263. package/contracts/registry/ReleaseManager.sol +12 -8
  264. package/contracts/registry/TokenRegistry.sol +2 -2
  265. package/contracts/{components → shared}/Component.sol +26 -8
  266. package/contracts/{instance/base → shared}/ComponentService.sol +63 -34
  267. package/contracts/{components → shared}/IComponent.sol +19 -5
  268. package/contracts/shared/INftOwnable.sol +1 -1
  269. package/contracts/shared/IPolicyHolder.sol +24 -10
  270. package/contracts/shared/IRegistryLinked.sol +0 -1
  271. package/contracts/shared/IService.sol +3 -1
  272. package/contracts/shared/IVersionable.sol +1 -1
  273. package/contracts/shared/NftOwnable.sol +1 -3
  274. package/contracts/shared/PolicyHolder.sol +31 -18
  275. package/contracts/shared/ProxyManager.sol +3 -3
  276. package/contracts/shared/Registerable.sol +12 -11
  277. package/contracts/shared/RegistryLinked.sol +0 -5
  278. package/contracts/shared/Service.sol +3 -3
  279. package/contracts/shared/TokenHandler.sol +4 -2
  280. package/contracts/shared/Versionable.sol +1 -1
  281. package/contracts/staking/IStakingService.sol +102 -0
  282. package/contracts/staking/StakeingServiceManager.sol +37 -0
  283. package/contracts/staking/StakingService.sol +166 -0
  284. package/contracts/{types → type}/Amount.sol +49 -0
  285. package/contracts/{types → type}/ClaimId.sol +25 -2
  286. package/contracts/{types → type}/Fee.sol +7 -6
  287. package/contracts/{types → type}/NftIdSet.sol +1 -1
  288. package/contracts/{types → type}/ObjectType.sol +10 -5
  289. package/contracts/{types → type}/PayoutId.sol +33 -5
  290. package/contracts/{types → type}/RoleId.sol +44 -9
  291. package/contracts/{types → type}/StateId.sol +6 -2
  292. package/contracts/{types → type}/Timestamp.sol +5 -0
  293. package/package.json +1 -1
  294. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  295. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  296. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
  297. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  298. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  299. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  300. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  301. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  302. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  303. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  304. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  305. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
  306. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
  307. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -1039
  308. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
  309. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -673
  310. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  311. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1231
  312. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  313. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -721
  314. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
  315. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -817
  316. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
  317. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -641
  318. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  319. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1798
  320. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  321. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -805
  322. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
  323. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  324. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
  325. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  326. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  327. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  328. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  329. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  330. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1092
  331. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  332. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -697
  333. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  334. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -1237
  335. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  336. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -661
  337. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  338. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -840
  339. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  340. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -653
  341. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  342. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  343. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  344. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  345. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  346. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
  347. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  348. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  349. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  350. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -596
  351. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  352. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  353. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  354. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  355. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  356. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
  357. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  358. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  359. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  360. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +0 -4
  361. package/artifacts/contracts/types/Amount.sol/AmountLib.json +0 -161
  362. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  363. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  364. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  365. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
  366. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
  367. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  368. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  369. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -288
  370. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  371. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  372. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  373. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  374. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  375. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  376. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
  377. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
  378. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  379. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  380. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  381. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
  382. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  383. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  384. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  385. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  386. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  387. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  388. package/contracts/instance/service/ApplicationService.sol +0 -351
  389. package/contracts/instance/service/ClaimService.sol +0 -151
  390. package/contracts/instance/service/IClaimService.sol +0 -61
  391. package/contracts/shared/ContractDeployerLib.sol +0 -72
  392. package/contracts/test/TestFee.sol +0 -25
  393. package/contracts/test/TestRegisterable.sol +0 -18
  394. package/contracts/test/TestRoleId.sol +0 -14
  395. package/contracts/test/TestService.sol +0 -25
  396. package/contracts/test/TestToken.sol +0 -26
  397. package/contracts/test/TestVersion.sol +0 -44
  398. package/contracts/test/TestVersionable.sol +0 -17
  399. package/contracts/test/Usdc.sol +0 -26
  400. package/contracts/types/ChainId.sol +0 -38
  401. package/contracts/types/NumberId.sol +0 -52
  402. /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
  403. /package/contracts/{types → type}/AddressSet.sol +0 -0
  404. /package/contracts/{types → type}/Blocknumber.sol +0 -0
  405. /package/contracts/{types → type}/DistributorType.sol +0 -0
  406. /package/contracts/{types → type}/Key32.sol +0 -0
  407. /package/contracts/{types → type}/NftId.sol +0 -0
  408. /package/contracts/{types → type}/Referral.sol +0 -0
  409. /package/contracts/{types → type}/RiskId.sol +0 -0
  410. /package/contracts/{types → type}/Seconds.sol +0 -0
  411. /package/contracts/{types → type}/UFixed.sol +0 -0
  412. /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,141 @@ 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
+ bytes memory data
228
+ )
229
+ internal
230
+ {
231
+ _getProductStorage()._claimService.confirm(
232
+ policyNftId,
233
+ claimId,
234
+ confirmedAmount,
235
+ data);
241
236
  }
242
237
 
243
- // from product component
244
- function setFees(
245
- Fee memory productFee,
246
- Fee memory processingFee
238
+ function _declineClaim(
239
+ NftId policyNftId,
240
+ ClaimId claimId,
241
+ bytes memory data
242
+ )
243
+ internal
244
+ {
245
+ _getProductStorage()._claimService.decline(
246
+ policyNftId,
247
+ claimId,
248
+ data);
249
+ }
250
+
251
+ function _closeClaim(
252
+ NftId policyNftId,
253
+ ClaimId claimId
254
+ )
255
+ internal
256
+ {
257
+ _getProductStorage()._claimService.close(
258
+ policyNftId,
259
+ claimId);
260
+ }
261
+
262
+ function _createPayout(
263
+ NftId policyNftId,
264
+ ClaimId claimId,
265
+ Amount amount,
266
+ bytes memory data
267
+ )
268
+ internal
269
+ returns (PayoutId)
270
+ {
271
+ return _getProductStorage()._claimService.createPayout(
272
+ policyNftId,
273
+ claimId,
274
+ amount,
275
+ data);
276
+ }
277
+
278
+ function _processPayout(
279
+ NftId policyNftId,
280
+ PayoutId payoutId
281
+ )
282
+ internal
283
+ {
284
+ _getProductStorage()._claimService.processPayout(
285
+ policyNftId,
286
+ payoutId);
287
+ }
288
+
289
+ function calculatePremium(
290
+ Amount sumInsuredAmount,
291
+ RiskId riskId,
292
+ Seconds lifetime,
293
+ bytes memory applicationData,
294
+ NftId bundleNftId,
295
+ ReferralId referralId
296
+ )
297
+ external
298
+ view
299
+ override
300
+ returns (Amount premiumAmount)
301
+ {
302
+ IPolicy.Premium memory premium = _getProductStorage()._pricingService.calculatePremium(
303
+ getNftId(),
304
+ riskId,
305
+ sumInsuredAmount,
306
+ lifetime,
307
+ applicationData,
308
+ bundleNftId,
309
+ referralId
310
+ );
311
+
312
+ return AmountLib.toAmount(premium.premiumAmount);
313
+ }
314
+
315
+ function calculateNetPremium(
316
+ Amount sumInsuredAmount,
317
+ RiskId riskId,
318
+ Seconds lifetime,
319
+ bytes memory applicationData
247
320
  )
248
321
  external
249
- onlyOwner
250
- restricted()
251
- override
322
+ view
323
+ virtual override
324
+ returns (Amount netPremiumAmount)
252
325
  {
253
- _getProductService().setFees(productFee, processingFee);
326
+ // default 10% of sum insured
327
+ return AmountLib.toAmount(sumInsuredAmount.toInt() / 10);
328
+ }
329
+
330
+ function _toRiskId(string memory riskName) internal pure returns (RiskId riskId) {
331
+ return RiskIdLib.toRiskId(riskName);
332
+ }
333
+
334
+ function getPoolNftId() external view override returns (NftId poolNftId) {
335
+ return getRegistry().getNftId(address(_getProductStorage()._pool));
336
+ }
337
+
338
+ function getDistributionNftId() external view override returns (NftId distributionNftId) {
339
+ return getRegistry().getNftId(address(_getProductStorage()._distribution));
254
340
  }
255
341
 
256
342
  function getSetupInfo() public view returns (ISetup.ProductSetupInfo memory setupInfo) {
@@ -290,4 +376,4 @@ abstract contract Product is
290
376
  function _getProductService() internal view returns (IProductService) {
291
377
  return _getProductStorage()._productService;
292
378
  }
293
- }
379
+ }