@etherisc/gif-next 0.0.2-d5b7b78-706 → 0.0.2-d5fac82-078

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 (453) hide show
  1. package/README.md +8 -84
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/{components → distribution}/Distribution.sol/Distribution.json +90 -14
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1575 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +851 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/{components → distribution}/IDistributionComponent.sol/IDistributionComponent.json +145 -14
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/{instance/service → distribution}/IDistributionService.sol/IDistributionService.json +110 -283
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +6 -6
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +310 -2004
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +104 -55
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +420 -2725
  20. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  21. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +746 -0
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +188 -0
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +366 -71
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +179 -214
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +121 -95
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2847 -0
  32. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  33. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +1 -1
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  36. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  37. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +61 -12
  39. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +8 -8
  41. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol}/ObjectManager.json +3 -3
  43. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +1 -130
  45. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  52. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  53. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1307 -0
  54. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  55. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +767 -0
  56. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  57. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +234 -129
  58. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  59. package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +162 -21
  60. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  61. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +1077 -0
  62. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  63. package/artifacts/contracts/{components → pool}/Pool.sol/Pool.json +91 -21
  64. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  65. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1641 -0
  66. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +779 -0
  68. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  69. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +937 -0
  70. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  71. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +719 -0
  72. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  73. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1405 -0
  74. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  75. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +819 -0
  76. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  77. package/artifacts/contracts/{instance/service/IClaimService.sol/IClaimService.json → product/IApplicationService.sol/IApplicationService.json} +184 -100
  78. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  79. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  80. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  81. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +211 -100
  82. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  83. package/artifacts/contracts/{instance/service/IApplicationService.sol/IApplicationService.json → product/IPricingService.sol/IPricingService.json} +120 -166
  84. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  85. package/artifacts/contracts/{components → product}/IProductComponent.sol/IProductComponent.json +152 -21
  86. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  87. package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +86 -28
  88. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  89. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1300 -0
  90. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  91. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +811 -0
  92. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  93. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1023 -0
  94. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  95. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +759 -0
  96. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  97. package/artifacts/contracts/{components → product}/Product.sol/Product.json +82 -22
  98. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  99. package/artifacts/contracts/product/ProductService.sol/ProductService.json +883 -0
  100. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  101. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +711 -0
  102. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  104. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +110 -30
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +165 -84
  107. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  108. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  109. package/artifacts/contracts/registry/Registry.sol/Registry.json +133 -45
  110. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  111. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +305 -0
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +209 -104
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +103 -55
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +542 -86
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +20 -35
  120. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +4 -0
  121. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +1193 -0
  122. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +4 -0
  123. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +1715 -0
  124. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +4 -0
  125. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +1728 -0
  126. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +4 -0
  127. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +1747 -0
  128. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +4 -0
  129. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +1765 -0
  130. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  131. package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
  132. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  133. package/artifacts/contracts/{components → shared}/Component.sol/Component.json +67 -7
  134. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  135. package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +133 -35
  136. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  137. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +4 -0
  138. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +1562 -0
  139. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +4 -0
  140. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +1594 -0
  141. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  142. package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +138 -7
  143. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  144. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
  145. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  146. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
  147. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  148. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
  149. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  150. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  151. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  152. package/artifacts/contracts/shared/IService.sol/IService.json +85 -27
  153. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  154. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  155. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +23 -43
  156. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  157. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
  158. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  159. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +81 -33
  160. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  161. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +27 -21
  162. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  163. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  164. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  165. package/artifacts/contracts/shared/Service.sol/Service.json +110 -28
  166. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  167. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  168. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  169. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  170. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  171. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  172. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -0
  173. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  174. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +786 -0
  175. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  176. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +699 -0
  177. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  178. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  179. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  180. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  181. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  182. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  183. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  184. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  185. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  186. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  187. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  188. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  189. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  190. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  191. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  192. package/artifacts/contracts/{types → type}/NftId.sol/NftIdLib.json +5 -5
  193. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  194. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  195. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  196. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  197. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  198. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  199. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  200. package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
  201. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  202. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  203. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  204. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  205. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  206. package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
  207. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  208. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  209. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  210. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
  211. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  212. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  213. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  214. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  215. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  216. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  217. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  218. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  219. package/contracts/{components → distribution}/Distribution.sol +21 -16
  220. package/contracts/distribution/DistributionService.sol +351 -0
  221. package/contracts/distribution/DistributionServiceManager.sol +42 -0
  222. package/contracts/{components → distribution}/IDistributionComponent.sol +7 -7
  223. package/contracts/{instance/service → distribution}/IDistributionService.sol +19 -30
  224. package/contracts/instance/BundleManager.sol +8 -9
  225. package/contracts/instance/IInstance.sol +45 -66
  226. package/contracts/instance/IInstanceService.sol +21 -20
  227. package/contracts/instance/Instance.sol +121 -218
  228. package/contracts/instance/InstanceAdmin.sol +354 -0
  229. package/contracts/instance/InstanceAuthorizationsLib.sol +320 -0
  230. package/contracts/instance/InstanceReader.sol +96 -18
  231. package/contracts/instance/InstanceService.sol +120 -317
  232. package/contracts/instance/InstanceServiceManager.sol +11 -21
  233. package/contracts/instance/InstanceStore.sol +211 -0
  234. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +1 -1
  235. package/contracts/instance/base/IKeyValueStore.sol +14 -10
  236. package/contracts/instance/base/ILifecycle.sol +3 -3
  237. package/contracts/instance/base/KeyValueStore.sol +39 -45
  238. package/contracts/instance/base/Lifecycle.sol +17 -5
  239. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +7 -7
  240. package/contracts/instance/module/IAccess.sol +3 -13
  241. package/contracts/instance/module/IBundle.sol +10 -8
  242. package/contracts/instance/module/IComponents.sol +11 -5
  243. package/contracts/instance/module/IDistribution.sol +7 -6
  244. package/contracts/instance/module/IPolicy.sol +22 -16
  245. package/contracts/instance/module/IRisk.sol +1 -1
  246. package/contracts/instance/module/ISetup.sol +4 -4
  247. package/contracts/instance/module/ITreasury.sol +2 -2
  248. package/contracts/pool/BundleService.sol +384 -0
  249. package/contracts/pool/BundleServiceManager.sol +42 -0
  250. package/contracts/pool/IBundleService.sol +118 -0
  251. package/contracts/{components → pool}/IPoolComponent.sol +14 -13
  252. package/contracts/pool/IPoolService.sol +114 -0
  253. package/contracts/{components → pool}/Pool.sol +25 -22
  254. package/contracts/pool/PoolService.sol +404 -0
  255. package/contracts/pool/PoolServiceManager.sol +42 -0
  256. package/contracts/product/ApplicationService.sol +187 -0
  257. package/contracts/{instance/service → product}/ApplicationServiceManager.sol +11 -8
  258. package/contracts/product/ClaimService.sol +443 -0
  259. package/contracts/{instance/service → product}/ClaimServiceManager.sol +11 -8
  260. package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
  261. package/contracts/product/IClaimService.sol +93 -0
  262. package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
  263. package/contracts/product/IPricingService.sol +37 -0
  264. package/contracts/{components → product}/IProductComponent.sol +11 -10
  265. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  266. package/contracts/product/PolicyService.sol +378 -0
  267. package/contracts/product/PolicyServiceManager.sol +42 -0
  268. package/contracts/product/PricingService.sol +276 -0
  269. package/contracts/product/PricingServiceManager.sol +42 -0
  270. package/contracts/{components → product}/Product.sol +160 -74
  271. package/contracts/product/ProductService.sol +212 -0
  272. package/contracts/product/ProductServiceManager.sol +42 -0
  273. package/contracts/registry/IRegistry.sol +28 -17
  274. package/contracts/registry/IRegistryService.sol +29 -37
  275. package/contracts/registry/Registry.sol +46 -48
  276. package/contracts/registry/RegistryAdmin.sol +143 -0
  277. package/contracts/registry/RegistryService.sol +37 -88
  278. package/contracts/registry/RegistryServiceManager.sol +21 -23
  279. package/contracts/registry/ReleaseManager.sol +318 -177
  280. package/contracts/registry/TokenRegistry.sol +6 -4
  281. package/contracts/shared/AccessManagerCustom.sol +736 -0
  282. package/contracts/shared/AccessManagerExtended.sol +469 -0
  283. package/contracts/shared/AccessManagerExtendedInitializeable.sol +13 -0
  284. package/contracts/shared/AccessManagerExtendedWithDisable.sol +125 -0
  285. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +14 -0
  286. package/contracts/{components → shared}/Component.sol +31 -11
  287. package/contracts/shared/ComponentService.sol +141 -0
  288. package/contracts/shared/IAccessManagerExtended.sol +74 -0
  289. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +17 -0
  290. package/contracts/{components → shared}/IComponent.sol +22 -6
  291. package/contracts/shared/INftOwnable.sol +1 -1
  292. package/contracts/shared/IPolicyHolder.sol +24 -10
  293. package/contracts/shared/IRegistryLinked.sol +0 -1
  294. package/contracts/shared/IService.sol +6 -6
  295. package/contracts/shared/IVersionable.sol +1 -1
  296. package/contracts/shared/NftOwnable.sol +13 -16
  297. package/contracts/shared/PolicyHolder.sol +31 -18
  298. package/contracts/shared/ProxyManager.sol +34 -3
  299. package/contracts/shared/Registerable.sol +12 -11
  300. package/contracts/shared/RegistryLinked.sol +0 -5
  301. package/contracts/shared/Service.sol +23 -9
  302. package/contracts/shared/TokenHandler.sol +4 -2
  303. package/contracts/shared/Versionable.sol +1 -1
  304. package/contracts/staking/IStakingService.sol +102 -0
  305. package/contracts/staking/StakingService.sol +169 -0
  306. package/contracts/staking/StakingServiceManager.sol +40 -0
  307. package/contracts/type/Amount.sol +109 -0
  308. package/contracts/{types → type}/ClaimId.sol +25 -2
  309. package/contracts/{types → type}/Fee.sol +16 -8
  310. package/contracts/{types → type}/NftIdSet.sol +1 -1
  311. package/contracts/{types → type}/ObjectType.sol +10 -5
  312. package/contracts/{types → type}/PayoutId.sol +33 -5
  313. package/contracts/{types → type}/RoleId.sol +50 -8
  314. package/contracts/{types → type}/StateId.sol +6 -2
  315. package/contracts/{types → type}/Timestamp.sol +5 -0
  316. package/package.json +1 -1
  317. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  318. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  319. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
  320. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  321. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  322. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  323. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  324. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  325. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  326. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  327. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  328. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -1311
  329. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  330. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
  331. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
  332. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -968
  333. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
  334. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -665
  335. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  336. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1093
  337. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  338. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -661
  339. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
  340. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -754
  341. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
  342. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -637
  343. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  344. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1732
  345. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  346. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -805
  347. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
  348. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  349. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
  350. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  351. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  352. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  353. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +0 -428
  354. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  355. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  356. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1021
  357. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  358. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -689
  359. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  360. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -824
  361. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  362. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -657
  363. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  364. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -777
  365. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  366. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -649
  367. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  368. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -285
  369. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  370. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  371. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  372. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  373. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  374. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
  375. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  376. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  377. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  378. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -521
  379. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  380. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  381. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  382. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  383. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  384. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
  385. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  386. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  387. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  388. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  389. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  390. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  391. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
  392. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
  393. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  394. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  395. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -257
  396. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  397. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  398. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  399. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  400. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  401. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  402. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
  403. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
  404. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  405. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  406. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  407. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
  408. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  409. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  410. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  411. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  412. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  413. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  414. package/contracts/instance/InstanceAccessManager.sol +0 -522
  415. package/contracts/instance/base/ComponentService.sol +0 -134
  416. package/contracts/instance/service/ApplicationService.sol +0 -350
  417. package/contracts/instance/service/BundleService.sol +0 -336
  418. package/contracts/instance/service/BundleServiceManager.sol +0 -51
  419. package/contracts/instance/service/ClaimService.sol +0 -151
  420. package/contracts/instance/service/DistributionService.sol +0 -467
  421. package/contracts/instance/service/DistributionServiceManager.sol +0 -51
  422. package/contracts/instance/service/IBundleService.sol +0 -62
  423. package/contracts/instance/service/IClaimService.sol +0 -61
  424. package/contracts/instance/service/IPoolService.sol +0 -35
  425. package/contracts/instance/service/PolicyService.sol +0 -403
  426. package/contracts/instance/service/PolicyServiceManager.sol +0 -54
  427. package/contracts/instance/service/PoolService.sol +0 -220
  428. package/contracts/instance/service/PoolServiceManager.sol +0 -51
  429. package/contracts/instance/service/ProductService.sol +0 -241
  430. package/contracts/instance/service/ProductServiceManager.sol +0 -54
  431. package/contracts/registry/RegistryAccessManager.sol +0 -216
  432. package/contracts/shared/ContractDeployerLib.sol +0 -72
  433. package/contracts/test/TestFee.sol +0 -25
  434. package/contracts/test/TestRegisterable.sol +0 -18
  435. package/contracts/test/TestRoleId.sol +0 -14
  436. package/contracts/test/TestService.sol +0 -25
  437. package/contracts/test/TestToken.sol +0 -26
  438. package/contracts/test/TestVersion.sol +0 -44
  439. package/contracts/test/TestVersionable.sol +0 -17
  440. package/contracts/test/Usdc.sol +0 -26
  441. package/contracts/types/ChainId.sol +0 -38
  442. package/contracts/types/NumberId.sol +0 -52
  443. /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
  444. /package/contracts/{types → type}/AddressSet.sol +0 -0
  445. /package/contracts/{types → type}/Blocknumber.sol +0 -0
  446. /package/contracts/{types → type}/DistributorType.sol +0 -0
  447. /package/contracts/{types → type}/Key32.sol +0 -0
  448. /package/contracts/{types → type}/NftId.sol +0 -0
  449. /package/contracts/{types → type}/Referral.sol +0 -0
  450. /package/contracts/{types → type}/RiskId.sol +0 -0
  451. /package/contracts/{types → type}/Seconds.sol +0 -0
  452. /package/contracts/{types → type}/UFixed.sol +0 -0
  453. /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
+ }