@etherisc/gif-next 0.0.2-e9a637d-547 → 0.0.2-eadf4ad-211

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 (417) 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 +819 -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 +83 -133
  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 +735 -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 +747 -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 +687 -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 +787 -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 +779 -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 +727 -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 +679 -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/IRegistry.sol/IRegistry.json +73 -13
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +154 -60
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/Registry.sol/Registry.json +97 -29
  109. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +50 -97
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +174 -80
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +78 -47
  115. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +369 -82
  117. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  119. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  120. package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
  121. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  122. package/artifacts/contracts/{components → shared}/Component.sol/Component.json +38 -7
  123. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  124. package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +38 -14
  125. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  126. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  127. package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +38 -7
  128. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  129. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
  130. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  131. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
  134. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  135. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  136. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  137. package/artifacts/contracts/shared/IService.sol/IService.json +5 -13
  138. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  140. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +8 -21
  141. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  142. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
  143. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  144. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +49 -33
  145. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  146. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -21
  147. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  148. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  149. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  150. package/artifacts/contracts/shared/Service.sol/Service.json +5 -13
  151. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  152. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  153. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  154. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  155. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  156. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  157. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -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/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  161. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +667 -0
  162. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  163. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  164. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  165. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  166. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  167. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  168. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  169. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  170. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  171. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  172. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  173. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  174. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  175. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  176. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  177. package/artifacts/contracts/{types → type}/NftId.sol/NftIdLib.json +5 -5
  178. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  179. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  180. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  181. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  182. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  183. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  184. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  185. package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
  186. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  188. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  189. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  190. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  191. package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
  192. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  193. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  194. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  195. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
  196. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  197. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  198. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  199. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  200. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  201. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  202. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  203. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  204. package/contracts/{components → distribution}/Distribution.sol +21 -16
  205. package/contracts/{instance/service → distribution}/DistributionService.sol +93 -179
  206. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +14 -11
  207. package/contracts/{components → distribution}/IDistributionComponent.sol +7 -7
  208. package/contracts/{instance/service → distribution}/IDistributionService.sol +18 -30
  209. package/contracts/instance/BundleManager.sol +8 -9
  210. package/contracts/instance/IInstance.sol +30 -13
  211. package/contracts/instance/IInstanceService.sol +6 -17
  212. package/contracts/instance/Instance.sol +76 -46
  213. package/contracts/instance/InstanceAccessManager.sol +8 -5
  214. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  215. package/contracts/instance/InstanceReader.sol +91 -16
  216. package/contracts/instance/InstanceService.sol +78 -307
  217. package/contracts/instance/InstanceServiceManager.sol +11 -21
  218. package/contracts/instance/InstanceStore.sol +57 -65
  219. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +1 -1
  220. package/contracts/instance/base/IKeyValueStore.sol +14 -10
  221. package/contracts/instance/base/ILifecycle.sol +3 -3
  222. package/contracts/instance/base/KeyValueStore.sol +32 -43
  223. package/contracts/instance/base/Lifecycle.sol +17 -5
  224. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +7 -7
  225. package/contracts/instance/module/IAccess.sol +2 -2
  226. package/contracts/instance/module/IBundle.sol +5 -5
  227. package/contracts/instance/module/IComponents.sol +8 -8
  228. package/contracts/instance/module/IDistribution.sol +7 -6
  229. package/contracts/instance/module/IPolicy.sol +22 -16
  230. package/contracts/instance/module/IRisk.sol +1 -1
  231. package/contracts/instance/module/ISetup.sol +4 -4
  232. package/contracts/instance/module/ITreasury.sol +2 -2
  233. package/contracts/{instance/service → pool}/BundleService.sol +108 -155
  234. package/contracts/pool/BundleServiceManager.sol +42 -0
  235. package/contracts/{instance/service → pool}/IBundleService.sol +43 -18
  236. package/contracts/{components → pool}/IPoolComponent.sol +14 -13
  237. package/contracts/{instance/service → pool}/IPoolService.sol +28 -13
  238. package/contracts/{components → pool}/Pool.sol +20 -21
  239. package/contracts/{instance/service → pool}/PoolService.sol +160 -59
  240. package/contracts/pool/PoolServiceManager.sol +42 -0
  241. package/contracts/product/ApplicationService.sol +187 -0
  242. package/contracts/{instance/service → product}/ApplicationServiceManager.sol +11 -8
  243. package/contracts/product/ClaimService.sol +443 -0
  244. package/contracts/{instance/service → product}/ClaimServiceManager.sol +11 -8
  245. package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
  246. package/contracts/product/IClaimService.sol +93 -0
  247. package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
  248. package/contracts/product/IPricingService.sol +37 -0
  249. package/contracts/{components → product}/IProductComponent.sol +11 -10
  250. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  251. package/contracts/{instance/service → product}/PolicyService.sol +154 -138
  252. package/contracts/product/PolicyServiceManager.sol +42 -0
  253. package/contracts/product/PricingService.sol +276 -0
  254. package/contracts/product/PricingServiceManager.sol +42 -0
  255. package/contracts/{components → product}/Product.sol +160 -74
  256. package/contracts/{instance/service → product}/ProductService.sol +50 -47
  257. package/contracts/product/ProductServiceManager.sol +42 -0
  258. package/contracts/registry/IRegistry.sol +23 -16
  259. package/contracts/registry/IRegistryService.sol +26 -36
  260. package/contracts/registry/Registry.sol +43 -39
  261. package/contracts/registry/RegistryAccessManager.sol +39 -123
  262. package/contracts/registry/RegistryService.sol +32 -83
  263. package/contracts/registry/RegistryServiceManager.sol +21 -11
  264. package/contracts/registry/ReleaseManager.sol +247 -189
  265. package/contracts/registry/TokenRegistry.sol +2 -2
  266. package/contracts/{components → shared}/Component.sol +26 -8
  267. package/contracts/{instance/base → shared}/ComponentService.sol +60 -40
  268. package/contracts/{components → shared}/IComponent.sol +19 -5
  269. package/contracts/shared/INftOwnable.sol +1 -1
  270. package/contracts/shared/IPolicyHolder.sol +24 -10
  271. package/contracts/shared/IRegistryLinked.sol +0 -1
  272. package/contracts/shared/IService.sol +3 -1
  273. package/contracts/shared/IVersionable.sol +1 -1
  274. package/contracts/shared/NftOwnable.sol +1 -3
  275. package/contracts/shared/PolicyHolder.sol +31 -18
  276. package/contracts/shared/ProxyManager.sol +29 -3
  277. package/contracts/shared/Registerable.sol +12 -11
  278. package/contracts/shared/RegistryLinked.sol +0 -5
  279. package/contracts/shared/Service.sol +3 -3
  280. package/contracts/shared/TokenHandler.sol +4 -2
  281. package/contracts/shared/Versionable.sol +1 -1
  282. package/contracts/staking/IStakingService.sol +102 -0
  283. package/contracts/staking/StakingService.sol +169 -0
  284. package/contracts/staking/StakingServiceManager.sol +40 -0
  285. package/contracts/{types → type}/Amount.sol +49 -0
  286. package/contracts/{types → type}/ClaimId.sol +25 -2
  287. package/contracts/{types → type}/Fee.sol +7 -6
  288. package/contracts/{types → type}/NftIdSet.sol +1 -1
  289. package/contracts/{types → type}/ObjectType.sol +10 -5
  290. package/contracts/{types → type}/PayoutId.sol +33 -5
  291. package/contracts/{types → type}/RoleId.sol +50 -8
  292. package/contracts/{types → type}/StateId.sol +6 -2
  293. package/contracts/{types → type}/Timestamp.sol +5 -0
  294. package/package.json +1 -1
  295. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  296. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  297. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
  298. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  299. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  300. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  301. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  302. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  303. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  304. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  305. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  306. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
  307. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
  308. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -1039
  309. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
  310. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -673
  311. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  312. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1231
  313. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  314. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -721
  315. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
  316. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -817
  317. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
  318. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -641
  319. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  320. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1798
  321. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  322. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -805
  323. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
  324. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  325. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
  326. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  327. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  328. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  329. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  330. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  331. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1092
  332. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  333. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -697
  334. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  335. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -1237
  336. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  337. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -661
  338. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  339. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -840
  340. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  341. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -653
  342. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  343. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  344. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  345. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  346. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  347. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
  348. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  349. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  350. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  351. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -596
  352. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  353. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  354. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  355. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  356. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  357. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
  358. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  359. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  360. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  361. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +0 -4
  362. package/artifacts/contracts/types/Amount.sol/AmountLib.json +0 -161
  363. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  364. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  365. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  366. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
  367. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
  368. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  369. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  370. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -288
  371. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  372. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  373. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  374. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  375. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  376. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  377. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
  378. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
  379. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  380. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  381. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  382. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
  383. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  384. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  385. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  386. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  387. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  388. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  389. package/contracts/instance/service/ApplicationService.sol +0 -351
  390. package/contracts/instance/service/BundleServiceManager.sol +0 -51
  391. package/contracts/instance/service/ClaimService.sol +0 -151
  392. package/contracts/instance/service/IClaimService.sol +0 -61
  393. package/contracts/instance/service/PolicyServiceManager.sol +0 -54
  394. package/contracts/instance/service/PoolServiceManager.sol +0 -51
  395. package/contracts/instance/service/ProductServiceManager.sol +0 -54
  396. package/contracts/shared/ContractDeployerLib.sol +0 -72
  397. package/contracts/test/TestFee.sol +0 -25
  398. package/contracts/test/TestRegisterable.sol +0 -18
  399. package/contracts/test/TestRoleId.sol +0 -14
  400. package/contracts/test/TestService.sol +0 -25
  401. package/contracts/test/TestToken.sol +0 -26
  402. package/contracts/test/TestVersion.sol +0 -44
  403. package/contracts/test/TestVersionable.sol +0 -17
  404. package/contracts/test/Usdc.sol +0 -26
  405. package/contracts/types/ChainId.sol +0 -38
  406. package/contracts/types/NumberId.sol +0 -52
  407. /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
  408. /package/contracts/{types → type}/AddressSet.sol +0 -0
  409. /package/contracts/{types → type}/Blocknumber.sol +0 -0
  410. /package/contracts/{types → type}/DistributorType.sol +0 -0
  411. /package/contracts/{types → type}/Key32.sol +0 -0
  412. /package/contracts/{types → type}/NftId.sol +0 -0
  413. /package/contracts/{types → type}/Referral.sol +0 -0
  414. /package/contracts/{types → type}/RiskId.sol +0 -0
  415. /package/contracts/{types → type}/Seconds.sol +0 -0
  416. /package/contracts/{types → type}/UFixed.sol +0 -0
  417. /package/contracts/{types → type}/Version.sol +0 -0
@@ -0,0 +1,276 @@
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
+ (
49
+ address registryAddress,,
50
+ //address managerAddress
51
+ address authority
52
+ ) = abi.decode(data, (address, address, address));
53
+
54
+ initializeService(registryAddress, authority, owner);
55
+ registerInterface(type(IPricingService).interfaceId);
56
+
57
+ _distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
58
+ }
59
+
60
+
61
+ function getDomain() public pure override returns(ObjectType) {
62
+ return PRICE();
63
+ }
64
+
65
+ /// @dev calculates the premium amount for the specified attributes
66
+ /// also returns the various fee components involved with creating a policy
67
+ function calculatePremium(
68
+ NftId productNftId,
69
+ RiskId riskId,
70
+ Amount sumInsuredAmount,
71
+ Seconds lifetime,
72
+ bytes memory applicationData,
73
+ NftId bundleNftId,
74
+ ReferralId referralId
75
+ )
76
+ external
77
+ view
78
+ virtual override
79
+ returns (
80
+ IPolicy.Premium memory premium
81
+ )
82
+ {
83
+ InstanceReader reader;
84
+ Amount netPremiumAmount;
85
+
86
+ {
87
+ // verify product
88
+ (
89
+ IRegistry.ObjectInfo memory productInfo,
90
+ IInstance instance
91
+ ) = _getAndVerifyComponentInfoAndInstance(productNftId, PRODUCT());
92
+
93
+ reader = instance.getInstanceReader();
94
+
95
+ // calculate net premium
96
+ netPremiumAmount = IProductComponent(productInfo.objectAddress).calculateNetPremium(
97
+ sumInsuredAmount,
98
+ riskId,
99
+ lifetime,
100
+ applicationData
101
+ );
102
+ }
103
+
104
+ {
105
+ // get configurations for all involed objects
106
+ ISetup.ProductSetupInfo memory productSetup = reader.getProductSetupInfo(productNftId);
107
+
108
+ bytes memory componentData = reader.getComponentInfo(productSetup.poolNftId).data;
109
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentData, (IComponents.PoolInfo));
110
+
111
+ IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
112
+ if(bundleInfo.poolNftId != productSetup.poolNftId) {
113
+ revert ErrorIPricingServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, productSetup.poolNftId);
114
+ }
115
+
116
+ NftId distributionNftId = productSetup.distributionNftId;
117
+ ISetup.DistributionSetupInfo memory distSetup = reader.getDistributionSetupInfo(distributionNftId);
118
+
119
+ // calculate premium, order is important
120
+ premium = _getFixedFeeAmounts(
121
+ netPremiumAmount,
122
+ productSetup,
123
+ poolInfo,
124
+ distSetup,
125
+ bundleInfo
126
+ );
127
+
128
+ premium = _calculateVariableFeeAmounts(
129
+ premium,
130
+ productSetup,
131
+ poolInfo,
132
+ distSetup,
133
+ bundleInfo
134
+ );
135
+
136
+ premium = _calculateDistributionOwnerFeeAmount(
137
+ premium,
138
+ distSetup,
139
+ referralId,
140
+ distributionNftId,
141
+ reader
142
+ );
143
+
144
+ // sanity check to validate the fee calculation
145
+ if (premium.distributionOwnerFeeFixAmount < distSetup.minDistributionOwnerFee.fixedFee) {
146
+ revert ErrorIPricingServiceFeeCalculationMismatch(
147
+ premium.distributionFeeFixAmount,
148
+ premium.distributionFeeVarAmount,
149
+ premium.distributionOwnerFeeFixAmount,
150
+ premium.distributionOwnerFeeVarAmount,
151
+ premium.commissionAmount,
152
+ premium.discountAmount
153
+ );
154
+ }
155
+
156
+ if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
157
+ revert ErrorIPricingServiceFeeCalculationMismatch(
158
+ premium.distributionFeeFixAmount,
159
+ premium.distributionFeeVarAmount,
160
+ premium.distributionOwnerFeeFixAmount,
161
+ premium.distributionOwnerFeeVarAmount,
162
+ premium.commissionAmount,
163
+ premium.discountAmount
164
+ );
165
+ }
166
+ }
167
+ }
168
+
169
+ // internal functions
170
+ function _getFixedFeeAmounts(
171
+ Amount netPremiumAmount,
172
+ ISetup.ProductSetupInfo memory productInfo,
173
+ IComponents.PoolInfo memory poolInfo,
174
+ ISetup.DistributionSetupInfo memory distInfo,
175
+ IBundle.BundleInfo memory bundleInfo
176
+ )
177
+ internal
178
+ view
179
+ returns (
180
+ IPolicy.Premium memory premium
181
+ )
182
+ {
183
+ // initial premium amount is the net premium
184
+ premium.netPremiumAmount = netPremiumAmount.toInt();
185
+ premium.fullPremiumAmount = netPremiumAmount.toInt();
186
+
187
+ uint256 t = productInfo.productFee.fixedFee;
188
+ premium.productFeeFixAmount = t;
189
+ premium.fullPremiumAmount += t;
190
+
191
+ t = poolInfo.poolFee.fixedFee;
192
+ premium.poolFeeFixAmount = t;
193
+ premium.fullPremiumAmount += t;
194
+
195
+ t = bundleInfo.fee.fixedFee;
196
+ premium.bundleFeeFixAmount = t;
197
+ premium.fullPremiumAmount += t;
198
+
199
+ t = distInfo.distributionFee.fixedFee;
200
+ premium.distributionFeeFixAmount = t;
201
+ premium.fullPremiumAmount += t;
202
+ }
203
+
204
+ function _calculateVariableFeeAmounts(
205
+ IPolicy.Premium memory premium,
206
+ ISetup.ProductSetupInfo memory productInfo,
207
+ IComponents.PoolInfo memory poolInfo,
208
+ ISetup.DistributionSetupInfo memory distInfo,
209
+ IBundle.BundleInfo memory bundleInfo
210
+ )
211
+ internal
212
+ view
213
+ returns (
214
+ IPolicy.Premium memory intermadiatePremium
215
+ )
216
+ {
217
+ UFixed netPremiumAmount = UFixedLib.toUFixed(premium.netPremiumAmount);
218
+
219
+ uint256 t = (netPremiumAmount * productInfo.productFee.fractionalFee).toInt();
220
+ premium.productFeeVarAmount = t;
221
+ premium.fullPremiumAmount += t;
222
+
223
+ t = (netPremiumAmount * poolInfo.poolFee.fractionalFee).toInt();
224
+ premium.poolFeeVarAmount = t;
225
+ premium.fullPremiumAmount += t;
226
+
227
+ t = (netPremiumAmount * bundleInfo.fee.fractionalFee).toInt();
228
+ premium.bundleFeeVarAmount = t;
229
+ premium.fullPremiumAmount += t;
230
+
231
+ t = (netPremiumAmount * distInfo.distributionFee.fractionalFee).toInt();
232
+ premium.distributionFeeVarAmount = t;
233
+ premium.fullPremiumAmount += t;
234
+
235
+ return premium;
236
+ }
237
+
238
+ function _calculateDistributionOwnerFeeAmount(
239
+ IPolicy.Premium memory premium,
240
+ ISetup.DistributionSetupInfo memory distInfo,
241
+ ReferralId referralId,
242
+ NftId distributionNftId,
243
+ InstanceReader reader
244
+ )
245
+ internal
246
+ view
247
+ returns (IPolicy.Premium memory finalPremium)
248
+ {
249
+ // if the referral is not valid, then the distribution owner gets everything
250
+ if (! _distributionService.referralIsValid(distributionNftId, referralId)) {
251
+ premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
252
+ premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
253
+ premium.premiumAmount = premium.fullPremiumAmount;
254
+ return premium;
255
+ }
256
+
257
+ Fee memory minDistributionOwnerFee = distInfo.minDistributionOwnerFee;
258
+
259
+ // if the referral is valid, the the commission and discount are calculated based in the full premium
260
+ // the remaing amount goes to the distribution owner
261
+ {
262
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
263
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
264
+ IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
265
+
266
+ uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
267
+ premium.commissionAmount = commissionAmount;
268
+ premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
269
+ premium.distributionOwnerFeeFixAmount = distInfo.minDistributionOwnerFee.fixedFee;
270
+ premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount - commissionAmount - premium.discountAmount;
271
+ premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
272
+ }
273
+
274
+ return premium;
275
+ }
276
+ }
@@ -0,0 +1,42 @@
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 pricing service implementation and deploys instance
16
+ constructor(
17
+ address authority,
18
+ address registryAddress,
19
+ bytes32 salt
20
+ )
21
+ ProxyManager(registryAddress)
22
+ {
23
+ PricingService pricingSrv = new PricingService{salt: salt}();
24
+ bytes memory data = abi.encode(registryAddress, address(this), authority);
25
+ IVersionable versionable = deployDetermenistic(
26
+ address(pricingSrv),
27
+ data,
28
+ salt);
29
+
30
+ _pricingService = PricingService(address(versionable));
31
+ }
32
+
33
+ //--- view functions ----------------------------------------------------//
34
+ function getPricingService()
35
+ external
36
+ view
37
+ returns (PricingService)
38
+ {
39
+ return _pricingService;
40
+ }
41
+
42
+ }
@@ -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
+ }