@etherisc/gif-next 0.0.2-2a59cd5-352 → 0.0.2-2aa1035-611

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 (363) hide show
  1. package/README.md +6 -83
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +90 -145
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +145 -233
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +158 -73
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +169 -150
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +350 -180
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -145
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +298 -288
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +95 -218
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +274 -2000
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +183 -203
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +398 -2776
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +491 -127
  32. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  34. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +253 -236
  36. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +216 -451
  38. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +184 -121
  40. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +4 -0
  41. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2663 -0
  42. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  43. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
  44. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +100 -215
  46. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  48. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
  50. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
  52. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
  54. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  56. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
  57. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  62. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  63. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +164 -379
  64. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  65. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +649 -0
  66. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  67. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +433 -425
  68. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  69. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +244 -105
  70. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1072 -0
  72. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +685 -0
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +657 -318
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +270 -115
  78. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +99 -236
  80. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +235 -319
  82. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +602 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +373 -158
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +417 -232
  88. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +568 -120
  90. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IPricingService.sol/IPricingService.json +518 -0
  92. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +64 -163
  94. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +563 -366
  96. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +220 -121
  98. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +771 -247
  100. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  101. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +237 -102
  102. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PricingService.sol/PricingService.json +988 -0
  104. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/PricingServiceManager.sol/PricingServiceManager.json +689 -0
  106. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +136 -271
  108. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +186 -107
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
  114. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +4 -193
  116. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  117. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
  118. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  119. package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
  120. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  121. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  122. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  123. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +28 -277
  124. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +182 -113
  126. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  127. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  128. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  129. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +34 -67
  130. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  132. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  134. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +4 -30
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +4 -30
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  139. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -21
  140. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  141. package/artifacts/contracts/shared/IService.sol/IService.json +64 -163
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +0 -150
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +10 -62
  146. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -23
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +171 -88
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +11 -74
  152. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -23
  154. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  155. package/artifacts/contracts/shared/Service.sol/Service.json +72 -203
  156. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
  158. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  160. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +0 -150
  162. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  164. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +11 -74
  166. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
  168. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  169. package/artifacts/contracts/test/TestService.sol/TestService.json +90 -253
  170. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  171. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  173. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +6 -188
  175. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  176. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  177. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  178. package/artifacts/contracts/types/Amount.sol/AmountLib.json +209 -0
  179. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  181. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
  184. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  186. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  187. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  188. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  189. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  190. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  191. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
  192. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  193. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  194. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  196. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  197. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  198. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
  199. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  200. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
  201. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  202. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  203. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  204. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  205. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  206. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  207. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  208. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  209. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  210. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +38 -7
  211. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  212. package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
  213. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  214. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
  215. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  216. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  217. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  218. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  219. package/contracts/components/Component.sol +100 -83
  220. package/contracts/components/Distribution.sol +22 -46
  221. package/contracts/components/IComponent.sol +43 -17
  222. package/contracts/components/IDistributionComponent.sol +1 -30
  223. package/contracts/components/IPoolComponent.sol +73 -47
  224. package/contracts/components/IProductComponent.sol +3 -2
  225. package/contracts/components/Pool.sol +178 -130
  226. package/contracts/components/Product.sol +172 -76
  227. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  228. package/contracts/instance/BundleManager.sol +10 -9
  229. package/contracts/instance/Cloneable.sol +7 -2
  230. package/contracts/instance/IInstance.sol +43 -49
  231. package/contracts/instance/IInstanceService.sol +32 -12
  232. package/contracts/instance/Instance.sol +129 -173
  233. package/contracts/instance/InstanceAccessManager.sol +404 -160
  234. package/contracts/instance/InstanceAuthorizationsLib.sol +300 -0
  235. package/contracts/instance/InstanceReader.sol +43 -16
  236. package/contracts/instance/InstanceService.sol +160 -293
  237. package/contracts/instance/InstanceServiceManager.sol +1 -1
  238. package/contracts/instance/InstanceStore.sol +208 -0
  239. package/contracts/instance/ObjectManager.sol +6 -8
  240. package/contracts/instance/base/ComponentService.sol +53 -39
  241. package/contracts/instance/base/KeyValueStore.sol +13 -5
  242. package/contracts/instance/base/Lifecycle.sol +23 -6
  243. package/contracts/instance/module/IAccess.sol +21 -14
  244. package/contracts/instance/module/IBundle.sol +8 -5
  245. package/contracts/instance/module/IComponents.sol +41 -0
  246. package/contracts/instance/module/IDistribution.sol +2 -0
  247. package/contracts/instance/module/IPolicy.sol +41 -9
  248. package/contracts/instance/module/ISetup.sol +7 -21
  249. package/contracts/instance/service/ApplicationService.sol +75 -158
  250. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  251. package/contracts/instance/service/BundleService.sol +230 -88
  252. package/contracts/instance/service/BundleServiceManager.sol +1 -1
  253. package/contracts/instance/service/ClaimService.sol +239 -0
  254. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  255. package/contracts/instance/service/DistributionService.sol +156 -96
  256. package/contracts/instance/service/DistributionServiceManager.sol +1 -1
  257. package/contracts/instance/service/IApplicationService.sol +9 -30
  258. package/contracts/instance/service/IBundleService.sol +74 -26
  259. package/contracts/instance/service/IClaimService.sol +92 -0
  260. package/contracts/instance/service/IDistributionService.sol +26 -6
  261. package/contracts/instance/service/IPolicyService.sol +89 -38
  262. package/contracts/instance/service/IPoolService.sol +85 -3
  263. package/contracts/instance/service/IPricingService.sol +36 -0
  264. package/contracts/instance/service/PolicyService.sol +358 -305
  265. package/contracts/instance/service/PolicyServiceManager.sol +2 -2
  266. package/contracts/instance/service/PoolService.sol +246 -19
  267. package/contracts/instance/service/PoolServiceManager.sol +1 -1
  268. package/contracts/instance/service/PricingService.sol +275 -0
  269. package/contracts/instance/service/PricingServiceManager.sol +51 -0
  270. package/contracts/instance/service/ProductService.sol +37 -60
  271. package/contracts/instance/service/ProductServiceManager.sol +2 -2
  272. package/contracts/registry/ChainNft.sol +8 -0
  273. package/contracts/registry/IRegistry.sol +2 -0
  274. package/contracts/registry/IRegistryService.sol +11 -10
  275. package/contracts/registry/ITransferInterceptor.sol +1 -0
  276. package/contracts/registry/Registry.sol +23 -20
  277. package/contracts/registry/RegistryService.sol +56 -47
  278. package/contracts/registry/RegistryServiceManager.sol +13 -13
  279. package/contracts/registry/ReleaseManager.sol +26 -33
  280. package/contracts/registry/TokenRegistry.sol +13 -10
  281. package/contracts/shared/ERC165.sol +2 -1
  282. package/contracts/shared/INftOwnable.sol +4 -9
  283. package/contracts/shared/IRegistryLinked.sol +0 -3
  284. package/contracts/shared/IService.sol +4 -4
  285. package/contracts/shared/IVersionable.sol +4 -47
  286. package/contracts/shared/NftOwnable.sol +10 -80
  287. package/contracts/shared/ProxyManager.sol +98 -24
  288. package/contracts/shared/Registerable.sol +3 -10
  289. package/contracts/shared/RegistryLinked.sol +10 -26
  290. package/contracts/shared/Service.sol +29 -17
  291. package/contracts/shared/TokenHandler.sol +11 -5
  292. package/contracts/shared/Versionable.sol +1 -90
  293. package/contracts/test/TestService.sol +1 -1
  294. package/contracts/types/Amount.sol +70 -0
  295. package/contracts/types/Blocknumber.sol +1 -0
  296. package/contracts/types/ClaimId.sol +75 -0
  297. package/contracts/types/Fee.sol +13 -5
  298. package/contracts/types/NftId.sol +8 -0
  299. package/contracts/types/ObjectType.sol +12 -7
  300. package/contracts/types/PayoutId.sol +82 -0
  301. package/contracts/types/Referral.sol +4 -0
  302. package/contracts/types/RoleId.sol +16 -9
  303. package/contracts/types/Seconds.sol +54 -0
  304. package/contracts/types/StateId.sol +7 -2
  305. package/contracts/types/Timestamp.sol +18 -13
  306. package/contracts/types/UFixed.sol +1 -0
  307. package/contracts/types/Version.sol +1 -0
  308. package/package.json +1 -1
  309. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
  310. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
  311. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
  312. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
  313. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
  314. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
  315. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  316. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  317. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  318. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  319. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  320. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  321. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  322. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  323. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  324. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  325. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  326. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  327. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  328. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  329. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  330. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  331. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  332. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  333. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  334. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  335. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
  336. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
  337. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
  338. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
  339. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
  340. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
  341. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
  342. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
  343. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
  344. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
  345. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  346. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  347. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  348. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  349. package/contracts/experiment/cloning/Cloner.sol +0 -47
  350. package/contracts/experiment/errors/Require.sol +0 -38
  351. package/contracts/experiment/errors/Revert.sol +0 -44
  352. package/contracts/experiment/inheritance/A.sol +0 -53
  353. package/contracts/experiment/inheritance/B.sol +0 -28
  354. package/contracts/experiment/inheritance/C.sol +0 -34
  355. package/contracts/experiment/inheritance/IA.sol +0 -13
  356. package/contracts/experiment/inheritance/IB.sol +0 -10
  357. package/contracts/experiment/inheritance/IC.sol +0 -12
  358. package/contracts/experiment/statemachine/Dummy.sol +0 -27
  359. package/contracts/experiment/statemachine/ISM.sol +0 -25
  360. package/contracts/experiment/statemachine/SM.sol +0 -57
  361. package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
  362. package/contracts/experiment/types/TypeA.sol +0 -47
  363. package/contracts/experiment/types/TypeB.sol +0 -29
@@ -16,7 +16,7 @@ contract PolicyServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  PolicyService svc = new PolicyService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -39,7 +39,7 @@ contract PolicyServiceManager is ProxyManager {
39
39
  // address(_productService));
40
40
 
41
41
  // implies that after this constructor call only upgrade functionality is available
42
- _isDeployed = true;
42
+ // _isDeployed = true;
43
43
  }
44
44
 
45
45
  //--- view functions ----------------------------------------------------//
@@ -6,25 +6,30 @@ import {IRegistry} from "../../registry/IRegistry.sol";
6
6
  import {IInstance} from "../../instance/IInstance.sol";
7
7
  import {IBundle} from "../../instance/module/IBundle.sol";
8
8
  import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
- import {ISetup} from "../module/ISetup.sol";
9
+ import {IComponents} from "../module/IComponents.sol";
10
10
  import {IPolicy} from "../module/IPolicy.sol";
11
11
 
12
12
  import {IVersionable} from "../../shared/IVersionable.sol";
13
13
  import {Versionable} from "../../shared/Versionable.sol";
14
14
  import {INftOwnable} from "../../shared/INftOwnable.sol";
15
15
 
16
+ import {Amount, AmountLib} from "../../types/Amount.sol";
17
+ import {Fee, FeeLib} from "../../types/Fee.sol";
16
18
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
17
19
  import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
18
- import {POOL_OWNER_ROLE, RoleId} from "../../types/RoleId.sol";
20
+ import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../../types/RoleId.sol";
19
21
  import {Fee, FeeLib} from "../../types/Fee.sol";
20
22
  import {Version, VersionLib} from "../../types/Version.sol";
21
23
  import {KEEP_STATE, StateId} from "../../types/StateId.sol";
24
+ import {Seconds} from "../../types/Seconds.sol";
22
25
  import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
26
+ import {Version, VersionLib} from "../../types/Version.sol";
23
27
 
24
28
  import {IService} from "../../shared/IService.sol";
25
29
  import {Service} from "../../shared/Service.sol";
26
30
  import {BundleManager} from "../BundleManager.sol";
27
31
  import {ComponentService} from "../base/ComponentService.sol";
32
+ import {IBundleService} from "./IBundleService.sol";
28
33
  import {IPoolService} from "./IPoolService.sol";
29
34
  import {IRegistryService} from "../../registry/IRegistryService.sol";
30
35
  import {InstanceService} from "../InstanceService.sol";
@@ -39,8 +44,9 @@ contract PoolService is
39
44
  IPoolService
40
45
  {
41
46
  using NftIdLib for NftId;
47
+ using AmountLib for Amount;
42
48
 
43
- address internal _registryAddress;
49
+ IBundleService internal _bundleService;
44
50
 
45
51
  function _initialize(
46
52
  address owner,
@@ -55,11 +61,14 @@ contract PoolService is
55
61
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
56
62
  // TODO while PoolService is not deployed in PoolServiceManager constructor
57
63
  // owner is PoolServiceManager deployer
58
- initializeService(registryAddress, owner);
64
+ initializeService(registryAddress, address(0), owner);
65
+
66
+ _bundleService = IBundleService(getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart()));
67
+
59
68
  registerInterface(type(IPoolService).interfaceId);
60
69
  }
61
70
 
62
- function getDomain() public pure override(Service, IService) returns(ObjectType) {
71
+ function getDomain() public pure override returns(ObjectType) {
63
72
  return POOL();
64
73
  }
65
74
 
@@ -78,32 +87,250 @@ contract PoolService is
78
87
  POOL_OWNER_ROLE());
79
88
 
80
89
  IPoolComponent pool = IPoolComponent(poolAddress);
81
- IRegistry.ObjectInfo memory poolInfo = getRegistryService().registerPool(pool, owner);
90
+ IRegistry.ObjectInfo memory registryInfo = getRegistryService().registerPool(pool, owner);
82
91
  pool.linkToRegisteredNftId();
83
- poolNftId = poolInfo.nftId;
92
+ poolNftId = registryInfo.nftId;
93
+
94
+ // amend component info with pool specific token handler
95
+ IComponents.ComponentInfo memory componentInfo = pool.getComponentInfo();
96
+ componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
84
97
 
85
- instance.createPoolSetup(poolNftId, pool.getSetupInfo());
86
- getInstanceService().createGifTarget(instanceNftId, poolAddress, pool.getName());
87
- getInstanceService().grantPoolDefaultPermissions(instanceNftId, poolAddress, pool.getName());
98
+ // save amended component info with instance
99
+ instance.getInstanceStore().createPoolSetup(poolNftId, componentInfo);
100
+
101
+ bytes4[][] memory selectors = new bytes4[][](2);
102
+ selectors[0] = new bytes4[](1);
103
+ selectors[1] = new bytes4[](1);
104
+
105
+ selectors[0][0] = IPoolComponent.setFees.selector;
106
+ selectors[1][0] = IPoolComponent.verifyApplication.selector;
107
+
108
+ RoleId[] memory roles = new RoleId[](2);
109
+ roles[0] = POOL_OWNER_ROLE();
110
+ roles[1] = POLICY_SERVICE_ROLE();
111
+
112
+ getInstanceService().createGifTarget(
113
+ instanceNftId,
114
+ poolAddress,
115
+ pool.getName(),
116
+ selectors,
117
+ roles);
88
118
  }
89
119
 
120
+
121
+ function setMaxCapitalAmount(uint256 maxCapitalAmount)
122
+ external
123
+ virtual
124
+ {
125
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
126
+ InstanceReader instanceReader = instance.getInstanceReader();
127
+
128
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
129
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
130
+ uint256 previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
131
+
132
+ poolInfo.maxCapitalAmount = maxCapitalAmount;
133
+ componentInfo.data = abi.encode(poolInfo);
134
+ instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
135
+
136
+ emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
137
+ }
138
+
139
+ function setBundleOwnerRole(RoleId bundleOwnerRole)
140
+ external
141
+ virtual
142
+ {
143
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
144
+ InstanceReader instanceReader = instance.getInstanceReader();
145
+
146
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
147
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
148
+
149
+ // bundle owner role may only be set once per pool
150
+ if(poolInfo.bundleOwnerRole != PUBLIC_ROLE()) {
151
+ revert ErrorPoolServiceBundleOwnerRoleAlreadySet(poolNftId);
152
+ }
153
+
154
+ poolInfo.bundleOwnerRole = bundleOwnerRole;
155
+ componentInfo.data = abi.encode(poolInfo);
156
+ instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
157
+
158
+ emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
159
+ }
160
+
161
+
90
162
  function setFees(
91
163
  Fee memory poolFee,
92
164
  Fee memory stakingFee,
93
165
  Fee memory performanceFee
94
166
  )
95
167
  external
96
- override
168
+ virtual
169
+ {
170
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
171
+ InstanceReader instanceReader = instance.getInstanceReader();
172
+
173
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
174
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
175
+
176
+ poolInfo.poolFee = poolFee;
177
+ poolInfo.stakingFee = stakingFee;
178
+ poolInfo.performanceFee = performanceFee;
179
+ componentInfo.data = abi.encode(poolInfo);
180
+ instance.getInstanceStore().updatePoolSetup(poolNftId, componentInfo, KEEP_STATE());
181
+
182
+ // TODO add logging
183
+ }
184
+
185
+
186
+ function createBundle(
187
+ address owner, // initial bundle owner
188
+ Fee memory fee, // fees deducted from premium that go to bundle owner
189
+ Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
190
+ Seconds lifetime, // initial duration for which new policies are covered
191
+ bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
192
+ )
193
+ external
194
+ virtual
195
+ returns(NftId bundleNftId)
97
196
  {
98
- (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
197
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
99
198
  InstanceReader instanceReader = instance.getInstanceReader();
100
- NftId poolNftId = poolInfo.nftId;
101
199
 
102
- ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
103
- poolSetupInfo.poolFee = poolFee;
104
- poolSetupInfo.stakingFee = stakingFee;
105
- poolSetupInfo.performanceFee = performanceFee;
200
+ // TODO add implementation that takes care of staking fees
201
+ Amount stakingAfterFeesAmount = stakingAmount;
202
+
203
+ bundleNftId = _bundleService.create(
204
+ instance,
205
+ poolNftId,
206
+ owner,
207
+ fee,
208
+ stakingAfterFeesAmount,
209
+ lifetime,
210
+ filter);
211
+
212
+ emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
213
+ }
214
+
215
+
216
+ function closeBundle(NftId bundleNftId)
217
+ external
218
+ virtual
219
+ {
220
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
221
+
222
+ // TODO book keeping for pool collateral released outside of retention level
223
+
224
+ // releasing collateral in bundle
225
+ _bundleService.close(instance, bundleNftId);
226
+
227
+ // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
228
+
229
+ emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
230
+ }
231
+
232
+ function processSale(
233
+ NftId bundleNftId,
234
+ IPolicy.Premium memory premium,
235
+ uint256 actualAmountTransferred
236
+ )
237
+ external
238
+ virtual
239
+ {
240
+ IRegistry registry = getRegistry();
241
+ IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
242
+ IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
243
+ IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
244
+ IInstance instance = IInstance(instanceObjectInfo.objectAddress);
245
+
246
+ Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
247
+ Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
248
+ Amount expectedTransferAmount = AmountLib.toAmount(premium.netPremiumAmount).add(poolFeeAmount).add(bundleFeeAmount);
249
+ if (! AmountLib.toAmount(actualAmountTransferred).eq(expectedTransferAmount)) {
250
+ revert ErrorPoolServiceInvalidTransferAmount(expectedTransferAmount, AmountLib.toAmount(actualAmountTransferred));
251
+ }
106
252
 
107
- instance.updatePoolSetup(poolNftId, poolSetupInfo, KEEP_STATE());
253
+ // update pool fee balance
254
+ if (poolFeeAmount.gtz()) {
255
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolObjectInfo.nftId);
256
+ poolComponentInfo.feeAmount = poolComponentInfo.feeAmount.add(poolFeeAmount);
257
+ instance.getInstanceStore().updatePoolSetup(poolObjectInfo.nftId, poolComponentInfo, KEEP_STATE());
258
+ }
259
+
260
+ if (bundleFeeAmount.gtz()) {
261
+ _bundleService.updateBundleFees(instance, bundleNftId, bundleFeeAmount);
262
+ }
263
+ }
264
+
265
+ function lockCollateral(
266
+ IInstance instance,
267
+ NftId productNftId,
268
+ NftId applicationNftId,
269
+ IPolicy.PolicyInfo memory applicationInfo,
270
+ uint256 premiumAmount // premium amount after product and distribution fees
271
+ )
272
+ external
273
+ virtual
274
+ // TODO add restricted and granting for policy service
275
+ {
276
+ InstanceReader instanceReader = instance.getInstanceReader();
277
+ NftId poolNftId = instanceReader.getProductSetupInfo(productNftId).poolNftId;
278
+ NftId bundleNftId = applicationInfo.bundleNftId;
279
+
280
+ // TODO move this check to application creation and don't repeat this here
281
+ // ensure that pool for bundle from application matches with pool for product of application
282
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
283
+ if(bundleInfo.poolNftId != poolNftId) {
284
+ revert ErrorPoolServiceBundlePoolMismatch(bundleInfo.poolNftId, poolNftId);
285
+ }
286
+
287
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
288
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
289
+
290
+ // TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
291
+ uint256 collateralAmount = applicationInfo.sumInsuredAmount;
292
+
293
+ // TODO add correct net premium calculation (pool fee might be > 0)
294
+ uint256 premiumAfterPoolFeeAmount = premiumAmount;
295
+
296
+ // lock collateral amount from involvedd bundle
297
+ _bundleService.lockCollateral(
298
+ instance,
299
+ applicationNftId,
300
+ bundleNftId,
301
+ collateralAmount,
302
+ premiumAfterPoolFeeAmount);
303
+
304
+ // also verify/confirm application by pool if necessary
305
+ if(poolInfo.isVerifyingApplications) {
306
+ address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
307
+ IPoolComponent(poolAddress).verifyApplication(
308
+ applicationNftId,
309
+ applicationInfo.applicationData,
310
+ bundleNftId,
311
+ bundleInfo.filter,
312
+ collateralAmount);
313
+ }
108
314
  }
109
- }
315
+
316
+
317
+ /// @dev releases the remaining collateral linked to the specified policy
318
+ /// may only be called by the policy service for unlocked pool components
319
+ function releaseCollateral(
320
+ IInstance instance,
321
+ NftId policyNftId,
322
+ IPolicy.PolicyInfo memory policyInfo
323
+ )
324
+ external
325
+ virtual
326
+ // TODO add restricted and granting for policy service
327
+ {
328
+ // release collateral from involved bundle
329
+ _bundleService.releaseCollateral(
330
+ instance,
331
+ policyNftId,
332
+ policyInfo.bundleNftId,
333
+ policyInfo.sumInsuredAmount);
334
+ }
335
+
336
+ }
@@ -16,7 +16,7 @@ contract PoolServiceManager is ProxyManager {
16
16
  constructor(
17
17
  address registryAddress
18
18
  )
19
- ProxyManager()
19
+ ProxyManager(registryAddress)
20
20
  {
21
21
  PoolService poolSrv = new PoolService();
22
22
  bytes memory data = abi.encode(registryAddress, address(this));
@@ -0,0 +1,275 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {Seconds} from "../../types/Seconds.sol";
5
+ import {UFixed, UFixedLib} from "../../types/UFixed.sol";
6
+ import {ObjectType} from "../../types/ObjectType.sol";
7
+ import {NftId} from "../../types/NftId.sol";
8
+ import {Fee} from "../../types/Fee.sol";
9
+ import {ReferralId} from "../../types/Referral.sol";
10
+ import {RiskId} from "../../types/RiskId.sol";
11
+ import {PRODUCT, DISTRIBUTION, PRICE} from "../../types/ObjectType.sol";
12
+
13
+ import {IRegistry} from "../../registry/IRegistry.sol";
14
+
15
+ import {IProductComponent} from "../../components/IProductComponent.sol";
16
+
17
+ import {IInstance} from "../IInstance.sol";
18
+ import {InstanceReader} from "../InstanceReader.sol";
19
+ import {IComponents} from "../module/IComponents.sol";
20
+ import {IPolicy} from "../module/IPolicy.sol";
21
+ import {IBundle} from "../module/IBundle.sol";
22
+ import {ISetup} from "../module/ISetup.sol";
23
+ import {IDistribution} from "../module/IDistribution.sol";
24
+
25
+ import {ComponentService} from "../base/ComponentService.sol";
26
+
27
+ import {IPricingService} from "./IPricingService.sol";
28
+ import {IDistributionService} from "./IDistributionService.sol";
29
+
30
+
31
+ contract PricingService is
32
+ ComponentService,
33
+ IPricingService
34
+ {
35
+ using UFixedLib for UFixed;
36
+
37
+ IDistributionService internal _distributionService;
38
+
39
+
40
+ function _initialize(
41
+ address owner,
42
+ bytes memory data
43
+ )
44
+ internal
45
+ virtual override
46
+ initializer()
47
+ {
48
+ // TODO check this, might no longer be the way, refactor if necessary
49
+ address registryAddress;
50
+ address initialOwner;
51
+ (registryAddress, initialOwner) = abi.decode(data, (address, address));
52
+
53
+ initializeService(registryAddress, address(0), owner);
54
+ registerInterface(type(IPricingService).interfaceId);
55
+
56
+ _distributionService = IDistributionService(_getServiceAddress(DISTRIBUTION()));
57
+ }
58
+
59
+
60
+ function getDomain() public pure override returns(ObjectType) {
61
+ return PRICE();
62
+ }
63
+
64
+ /// @dev calculates the premium amount for the specified attributes
65
+ /// also returns the various fee components involved with creating a policy
66
+ function calculatePremium(
67
+ NftId productNftId,
68
+ RiskId riskId,
69
+ uint256 sumInsuredAmount,
70
+ Seconds lifetime,
71
+ bytes memory applicationData,
72
+ NftId bundleNftId,
73
+ ReferralId referralId
74
+ )
75
+ external
76
+ view
77
+ virtual override
78
+ returns (
79
+ IPolicy.Premium memory premium
80
+ )
81
+ {
82
+ InstanceReader reader;
83
+ uint256 netPremiumAmount;
84
+
85
+ {
86
+ // verify product
87
+ (
88
+ IRegistry.ObjectInfo memory productInfo,
89
+ IInstance instance
90
+ ) = _getAndVerifyComponentInfoAndInstance(productNftId, PRODUCT());
91
+
92
+ reader = instance.getInstanceReader();
93
+
94
+ // calculate net premium
95
+ netPremiumAmount = IProductComponent(productInfo.objectAddress).calculateNetPremium(
96
+ sumInsuredAmount,
97
+ riskId,
98
+ lifetime,
99
+ applicationData
100
+ );
101
+ }
102
+
103
+ {
104
+ // get configurations for all involed objects
105
+ ISetup.ProductSetupInfo memory productSetup = reader.getProductSetupInfo(productNftId);
106
+
107
+ bytes memory componentData = reader.getComponentInfo(productSetup.poolNftId).data;
108
+ IComponents.PoolInfo memory poolInfo = abi.decode(componentData, (IComponents.PoolInfo));
109
+
110
+ IBundle.BundleInfo memory bundleInfo = reader.getBundleInfo(bundleNftId);
111
+ if(bundleInfo.poolNftId != productSetup.poolNftId) {
112
+ revert ErrorIPricingServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, productSetup.poolNftId);
113
+ }
114
+
115
+ NftId distributionNftId = productSetup.distributionNftId;
116
+ ISetup.DistributionSetupInfo memory distSetup = reader.getDistributionSetupInfo(distributionNftId);
117
+
118
+ // calculate premium, order is important
119
+ premium = _getFixedFeeAmounts(
120
+ netPremiumAmount,
121
+ productSetup,
122
+ poolInfo,
123
+ distSetup,
124
+ bundleInfo
125
+ );
126
+
127
+ premium = _calculateVariableFeeAmounts(
128
+ premium,
129
+ productSetup,
130
+ poolInfo,
131
+ distSetup,
132
+ bundleInfo
133
+ );
134
+
135
+ premium = _calculateDistributionOwnerFeeAmount(
136
+ premium,
137
+ distSetup,
138
+ referralId,
139
+ distributionNftId,
140
+ reader
141
+ );
142
+
143
+ // sanity check to validate the fee calculation
144
+ if (premium.distributionOwnerFeeFixAmount < distSetup.minDistributionOwnerFee.fixedFee) {
145
+ revert ErrorIPricingServiceFeeCalculationMismatch(
146
+ premium.distributionFeeFixAmount,
147
+ premium.distributionFeeVarAmount,
148
+ premium.distributionOwnerFeeFixAmount,
149
+ premium.distributionOwnerFeeVarAmount,
150
+ premium.commissionAmount,
151
+ premium.discountAmount
152
+ );
153
+ }
154
+
155
+ if ((premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)) {
156
+ revert ErrorIPricingServiceFeeCalculationMismatch(
157
+ premium.distributionFeeFixAmount,
158
+ premium.distributionFeeVarAmount,
159
+ premium.distributionOwnerFeeFixAmount,
160
+ premium.distributionOwnerFeeVarAmount,
161
+ premium.commissionAmount,
162
+ premium.discountAmount
163
+ );
164
+ }
165
+ }
166
+ }
167
+
168
+ // internal functions
169
+ function _getFixedFeeAmounts(
170
+ uint256 netPremiumAmount,
171
+ ISetup.ProductSetupInfo memory productInfo,
172
+ IComponents.PoolInfo memory poolInfo,
173
+ ISetup.DistributionSetupInfo memory distInfo,
174
+ IBundle.BundleInfo memory bundleInfo
175
+ )
176
+ internal
177
+ view
178
+ returns (
179
+ IPolicy.Premium memory premium
180
+ )
181
+ {
182
+ // initial premium amount is the net premium
183
+ premium.netPremiumAmount = netPremiumAmount;
184
+ premium.fullPremiumAmount = netPremiumAmount;
185
+
186
+ uint256 t = productInfo.productFee.fixedFee;
187
+ premium.productFeeFixAmount = t;
188
+ premium.fullPremiumAmount += t;
189
+
190
+ t = poolInfo.poolFee.fixedFee;
191
+ premium.poolFeeFixAmount = t;
192
+ premium.fullPremiumAmount += t;
193
+
194
+ t = bundleInfo.fee.fixedFee;
195
+ premium.bundleFeeFixAmount = t;
196
+ premium.fullPremiumAmount += t;
197
+
198
+ t = distInfo.distributionFee.fixedFee;
199
+ premium.distributionFeeFixAmount = t;
200
+ premium.fullPremiumAmount += t;
201
+ }
202
+
203
+ function _calculateVariableFeeAmounts(
204
+ IPolicy.Premium memory premium,
205
+ ISetup.ProductSetupInfo memory productInfo,
206
+ IComponents.PoolInfo memory poolInfo,
207
+ ISetup.DistributionSetupInfo memory distInfo,
208
+ IBundle.BundleInfo memory bundleInfo
209
+ )
210
+ internal
211
+ view
212
+ returns (
213
+ IPolicy.Premium memory intermadiatePremium
214
+ )
215
+ {
216
+ UFixed netPremiumAmount = UFixedLib.toUFixed(premium.netPremiumAmount);
217
+
218
+ uint256 t = (netPremiumAmount * productInfo.productFee.fractionalFee).toInt();
219
+ premium.productFeeVarAmount = t;
220
+ premium.fullPremiumAmount += t;
221
+
222
+ t = (netPremiumAmount * poolInfo.poolFee.fractionalFee).toInt();
223
+ premium.poolFeeVarAmount = t;
224
+ premium.fullPremiumAmount += t;
225
+
226
+ t = (netPremiumAmount * bundleInfo.fee.fractionalFee).toInt();
227
+ premium.bundleFeeVarAmount = t;
228
+ premium.fullPremiumAmount += t;
229
+
230
+ t = (netPremiumAmount * distInfo.distributionFee.fractionalFee).toInt();
231
+ premium.distributionFeeVarAmount = t;
232
+ premium.fullPremiumAmount += t;
233
+
234
+ return premium;
235
+ }
236
+
237
+ function _calculateDistributionOwnerFeeAmount(
238
+ IPolicy.Premium memory premium,
239
+ ISetup.DistributionSetupInfo memory distInfo,
240
+ ReferralId referralId,
241
+ NftId distributionNftId,
242
+ InstanceReader reader
243
+ )
244
+ internal
245
+ view
246
+ returns (IPolicy.Premium memory finalPremium)
247
+ {
248
+ // if the referral is not valid, then the distribution owner gets everything
249
+ if (! _distributionService.referralIsValid(distributionNftId, referralId)) {
250
+ premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
251
+ premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
252
+ premium.premiumAmount = premium.fullPremiumAmount;
253
+ return premium;
254
+ }
255
+
256
+ Fee memory minDistributionOwnerFee = distInfo.minDistributionOwnerFee;
257
+
258
+ // if the referral is valid, the the commission and discount are calculated based in the full premium
259
+ // the remaing amount goes to the distribution owner
260
+ {
261
+ IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
262
+ IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
263
+ IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(distributorInfo.distributorType);
264
+
265
+ uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
266
+ premium.commissionAmount = commissionAmount;
267
+ premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
268
+ premium.distributionOwnerFeeFixAmount = distInfo.minDistributionOwnerFee.fixedFee;
269
+ premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount - commissionAmount - premium.discountAmount;
270
+ premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
271
+ }
272
+
273
+ return premium;
274
+ }
275
+ }
@@ -0,0 +1,51 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {IVersionable} from "../../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../../shared/ProxyManager.sol";
6
+ import {PricingService} from "./PricingService.sol";
7
+ import {Registry} from "../../registry/Registry.sol";
8
+ import {RegistryService} from "../../registry/RegistryService.sol";
9
+ import {REGISTRY} from "../../types/ObjectType.sol";
10
+
11
+ contract PricingServiceManager is ProxyManager {
12
+
13
+ PricingService private _pricingService;
14
+
15
+ /// @dev initializes proxy manager with distribution service implementation and deploys instance
16
+ constructor(
17
+ address registryAddress
18
+ )
19
+ ProxyManager(registryAddress)
20
+ {
21
+ PricingService pricingSrv = new PricingService();
22
+ bytes memory data = abi.encode(registryAddress, address(this));
23
+ IVersionable versionable = deploy(
24
+ address(pricingSrv),
25
+ data);
26
+
27
+ _pricingService = PricingService(address(versionable));
28
+
29
+ // TODO `thi` must have a role or own nft to register service
30
+ //Registry registry = Registry(registryAddress);
31
+ //address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _distributionService.getMajorVersion());
32
+ //RegistryService registryService = RegistryService(registryServiceAddress);
33
+ //registryService.registerService(_distributionService);
34
+
35
+ // TODO no nft to link yet
36
+ // link ownership of instance service manager ot nft owner of instance service
37
+ //_linkToNftOwnable(
38
+ // address(registryAddress),
39
+ // address(_distributionService));
40
+ }
41
+
42
+ //--- view functions ----------------------------------------------------//
43
+ function getPricingService()
44
+ external
45
+ view
46
+ returns (PricingService)
47
+ {
48
+ return _pricingService;
49
+ }
50
+
51
+ }