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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/README.md +6 -12
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +4 -0
  3. package/artifacts/contracts/{components → distribution}/Distribution.sol/Distribution.json +61 -14
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +4 -0
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +1556 -0
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +780 -0
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/{components → distribution}/IDistributionComponent.sol/IDistributionComponent.json +45 -14
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  11. package/artifacts/contracts/{instance/service → distribution}/IDistributionService.sol/IDistributionService.json +24 -274
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +6 -6
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +93 -13
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +5 -43
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +109 -29
  20. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  21. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +6 -6
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +4 -0
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +124 -0
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +349 -64
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +49 -278
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +39 -128
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +427 -257
  32. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +4 -0
  33. package/artifacts/contracts/instance/{Cloneable.sol → base/Cloneable.sol}/Cloneable.json +1 -1
  34. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  36. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  37. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  38. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +61 -12
  39. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +8 -8
  41. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  42. package/artifacts/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol}/ObjectManager.json +3 -3
  43. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  48. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  51. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +4 -0
  52. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +1288 -0
  53. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  54. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +696 -0
  55. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +4 -0
  56. package/artifacts/contracts/{instance/service → pool}/IBundleService.sol/IBundleService.json +105 -29
  57. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  58. package/artifacts/contracts/{components → pool}/IPoolComponent.sol/IPoolComponent.json +56 -25
  59. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +4 -0
  60. package/artifacts/contracts/{instance/service → pool}/IPoolService.sol/IPoolService.json +272 -39
  61. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +4 -0
  62. package/artifacts/contracts/{components → pool}/Pool.sol/Pool.json +56 -25
  63. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +4 -0
  64. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +1622 -0
  65. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  66. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +708 -0
  67. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  68. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +918 -0
  69. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  70. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +648 -0
  71. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +4 -0
  72. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +1386 -0
  73. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  74. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +748 -0
  75. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  76. package/artifacts/contracts/{instance/service/IClaimService.sol/IClaimService.json → product/IApplicationService.sol/IApplicationService.json} +119 -101
  77. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +4 -0
  78. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +753 -0
  79. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  80. package/artifacts/contracts/{instance/service → product}/IPolicyService.sol/IPolicyService.json +129 -84
  81. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +4 -0
  82. package/artifacts/contracts/{instance/service/IApplicationService.sol/IApplicationService.json → product/IPricingService.sol/IPricingService.json} +63 -175
  83. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  84. package/artifacts/contracts/{components → product}/IProductComponent.sol/IProductComponent.json +53 -22
  85. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +4 -0
  86. package/artifacts/contracts/{instance/service → product}/IProductService.sol/IProductService.json +6 -14
  87. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +4 -0
  88. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +1281 -0
  89. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  90. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
  91. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +4 -0
  92. package/artifacts/contracts/product/PricingService.sol/PricingService.json +1004 -0
  93. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +4 -0
  94. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +688 -0
  95. package/artifacts/contracts/product/Product.sol/Product.dbg.json +4 -0
  96. package/artifacts/contracts/{components → product}/Product.sol/Product.json +53 -22
  97. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +4 -0
  98. package/artifacts/contracts/product/ProductService.sol/ProductService.json +864 -0
  99. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  100. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +640 -0
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +5 -13
  105. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  106. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  107. package/artifacts/contracts/registry/Registry.sol/Registry.json +6 -6
  108. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  109. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +4 -4
  110. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +21 -29
  112. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -40
  114. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  115. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +9 -9
  116. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
  118. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  119. package/artifacts/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +3 -3
  120. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +4 -0
  121. package/artifacts/contracts/{components → shared}/Component.sol/Component.json +38 -7
  122. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +4 -0
  123. package/artifacts/contracts/{instance/base → shared}/ComponentService.sol/ComponentService.json +38 -14
  124. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +4 -0
  126. package/artifacts/contracts/{components → shared}/IComponent.sol/IComponent.json +38 -7
  127. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +0 -13
  129. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  130. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +69 -9
  131. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -13
  133. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  134. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +0 -13
  135. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  136. package/artifacts/contracts/shared/IService.sol/IService.json +5 -13
  137. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  138. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  139. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +8 -21
  140. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  141. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +80 -26
  142. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  143. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +20 -33
  144. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  145. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -21
  146. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  147. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  148. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  149. package/artifacts/contracts/shared/Service.sol/Service.json +5 -13
  150. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  151. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +24 -6
  152. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  153. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  154. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  155. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +4 -0
  156. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +523 -0
  157. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
  158. package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +628 -0
  159. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +4 -0
  160. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +767 -0
  161. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  162. package/artifacts/contracts/{types → type}/AddressSet.sol/LibAddressSet.json +3 -3
  163. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +4 -0
  164. package/artifacts/contracts/type/Amount.sol/AmountLib.json +281 -0
  165. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  166. package/artifacts/contracts/{types → type}/Blocknumber.sol/BlocknumberLib.json +3 -3
  167. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  168. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +179 -0
  169. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  170. package/artifacts/contracts/{types → type}/DistributorType.sol/DistributorTypeLib.json +5 -5
  171. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +4 -0
  172. package/artifacts/contracts/type/Fee.sol/FeeLib.json +312 -0
  173. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +4 -0
  174. package/artifacts/contracts/{types → type}/Key32.sol/Key32Lib.json +3 -3
  175. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +4 -0
  176. package/artifacts/contracts/{types → type}/NftId.sol/NftIdLib.json +5 -5
  177. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  178. package/artifacts/contracts/{types → type}/NftIdSet.sol/LibNftIdSet.json +3 -3
  179. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  180. package/artifacts/contracts/{types → type}/ObjectType.sol/ObjectTypeLib.json +3 -3
  181. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  182. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +209 -0
  183. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +4 -0
  184. package/artifacts/contracts/{types → type}/Referral.sol/ReferralLib.json +5 -5
  185. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +4 -0
  186. package/artifacts/contracts/{types → type}/RiskId.sol/RiskIdLib.json +5 -5
  187. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +4 -0
  188. package/artifacts/contracts/{types → type}/RoleId.sol/RoleIdLib.json +5 -5
  189. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +4 -0
  190. package/artifacts/contracts/{types → type}/Seconds.sol/SecondsLib.json +3 -3
  191. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +4 -0
  192. package/artifacts/contracts/{types → type}/StateId.sol/StateIdLib.json +3 -3
  193. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +4 -0
  194. package/artifacts/contracts/{types → type}/Timestamp.sol/TimestampLib.json +20 -7
  195. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +4 -0
  196. package/artifacts/contracts/{types → type}/UFixed.sol/MathLib.json +3 -3
  197. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +4 -0
  198. package/artifacts/contracts/{types → type}/UFixed.sol/UFixedLib.json +3 -3
  199. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +4 -0
  200. package/artifacts/contracts/{types → type}/Version.sol/VersionLib.json +3 -3
  201. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +4 -0
  202. package/artifacts/contracts/{types → type}/Version.sol/VersionPartLib.json +3 -3
  203. package/contracts/{components → distribution}/Distribution.sol +21 -16
  204. package/contracts/{instance/service → distribution}/DistributionService.sol +85 -173
  205. package/contracts/{instance/service → distribution}/DistributionServiceManager.sol +5 -5
  206. package/contracts/{components → distribution}/IDistributionComponent.sol +7 -7
  207. package/contracts/{instance/service → distribution}/IDistributionService.sol +18 -30
  208. package/contracts/instance/BundleManager.sol +8 -9
  209. package/contracts/instance/IInstance.sol +30 -13
  210. package/contracts/instance/IInstanceService.sol +6 -17
  211. package/contracts/instance/Instance.sol +76 -46
  212. package/contracts/instance/InstanceAccessManager.sol +8 -5
  213. package/contracts/instance/InstanceAuthorizationsLib.sol +308 -0
  214. package/contracts/instance/InstanceReader.sol +91 -16
  215. package/contracts/instance/InstanceService.sol +75 -297
  216. package/contracts/instance/InstanceServiceManager.sol +1 -1
  217. package/contracts/instance/InstanceStore.sol +57 -65
  218. package/contracts/instance/{Cloneable.sol → base/Cloneable.sol} +1 -1
  219. package/contracts/instance/base/IKeyValueStore.sol +14 -10
  220. package/contracts/instance/base/ILifecycle.sol +3 -3
  221. package/contracts/instance/base/KeyValueStore.sol +32 -43
  222. package/contracts/instance/base/Lifecycle.sol +17 -5
  223. package/contracts/instance/{ObjectManager.sol → base/ObjectManager.sol} +7 -7
  224. package/contracts/instance/module/IAccess.sol +2 -2
  225. package/contracts/instance/module/IBundle.sol +5 -5
  226. package/contracts/instance/module/IComponents.sol +8 -8
  227. package/contracts/instance/module/IDistribution.sol +7 -6
  228. package/contracts/instance/module/IPolicy.sol +22 -16
  229. package/contracts/instance/module/IRisk.sol +1 -1
  230. package/contracts/instance/module/ISetup.sol +4 -4
  231. package/contracts/instance/module/ITreasury.sol +2 -2
  232. package/contracts/{instance/service → pool}/BundleService.sol +95 -144
  233. package/contracts/{instance/service → pool}/BundleServiceManager.sol +5 -5
  234. package/contracts/{instance/service → pool}/IBundleService.sol +43 -18
  235. package/contracts/{components → pool}/IPoolComponent.sol +14 -13
  236. package/contracts/{instance/service → pool}/IPoolService.sol +28 -13
  237. package/contracts/{components → pool}/Pool.sol +20 -21
  238. package/contracts/{instance/service → pool}/PoolService.sol +149 -49
  239. package/contracts/{instance/service → pool}/PoolServiceManager.sol +5 -5
  240. package/contracts/product/ApplicationService.sol +186 -0
  241. package/contracts/{instance/service → product}/ApplicationServiceManager.sol +2 -2
  242. package/contracts/product/ClaimService.sol +442 -0
  243. package/contracts/{instance/service → product}/ClaimServiceManager.sol +2 -2
  244. package/contracts/{instance/service → product}/IApplicationService.sol +14 -34
  245. package/contracts/product/IClaimService.sol +93 -0
  246. package/contracts/{instance/service → product}/IPolicyService.sol +34 -26
  247. package/contracts/product/IPricingService.sol +37 -0
  248. package/contracts/{components → product}/IProductComponent.sol +11 -10
  249. package/contracts/{instance/service → product}/IProductService.sol +10 -10
  250. package/contracts/{instance/service → product}/PolicyService.sol +148 -134
  251. package/contracts/{instance/service → product}/PolicyServiceManager.sol +5 -5
  252. package/contracts/product/PricingService.sol +275 -0
  253. package/contracts/product/PricingServiceManager.sol +51 -0
  254. package/contracts/{components → product}/Product.sol +160 -74
  255. package/contracts/{instance/service → product}/ProductService.sol +44 -43
  256. package/contracts/{instance/service → product}/ProductServiceManager.sol +5 -5
  257. package/contracts/registry/IRegistry.sol +4 -4
  258. package/contracts/registry/IRegistryService.sol +4 -6
  259. package/contracts/registry/Registry.sol +3 -3
  260. package/contracts/registry/RegistryAccessManager.sol +2 -2
  261. package/contracts/registry/RegistryService.sol +23 -20
  262. package/contracts/registry/RegistryServiceManager.sol +0 -2
  263. package/contracts/registry/ReleaseManager.sol +12 -8
  264. package/contracts/registry/TokenRegistry.sol +2 -2
  265. package/contracts/{components → shared}/Component.sol +26 -8
  266. package/contracts/{instance/base → shared}/ComponentService.sol +63 -34
  267. package/contracts/{components → shared}/IComponent.sol +19 -5
  268. package/contracts/shared/INftOwnable.sol +1 -1
  269. package/contracts/shared/IPolicyHolder.sol +24 -10
  270. package/contracts/shared/IRegistryLinked.sol +0 -1
  271. package/contracts/shared/IService.sol +3 -1
  272. package/contracts/shared/IVersionable.sol +1 -1
  273. package/contracts/shared/NftOwnable.sol +1 -3
  274. package/contracts/shared/PolicyHolder.sol +31 -18
  275. package/contracts/shared/ProxyManager.sol +3 -3
  276. package/contracts/shared/Registerable.sol +12 -11
  277. package/contracts/shared/RegistryLinked.sol +0 -5
  278. package/contracts/shared/Service.sol +3 -3
  279. package/contracts/shared/TokenHandler.sol +4 -2
  280. package/contracts/shared/Versionable.sol +1 -1
  281. package/contracts/staking/IStakingService.sol +102 -0
  282. package/contracts/staking/StakeingServiceManager.sol +37 -0
  283. package/contracts/staking/StakingService.sol +166 -0
  284. package/contracts/{types → type}/Amount.sol +49 -0
  285. package/contracts/{types → type}/ClaimId.sol +25 -2
  286. package/contracts/{types → type}/Fee.sol +7 -6
  287. package/contracts/{types → type}/NftIdSet.sol +1 -1
  288. package/contracts/{types → type}/ObjectType.sol +10 -5
  289. package/contracts/{types → type}/PayoutId.sol +33 -5
  290. package/contracts/{types → type}/RoleId.sol +44 -9
  291. package/contracts/{types → type}/StateId.sol +6 -2
  292. package/contracts/{types → type}/Timestamp.sol +5 -0
  293. package/package.json +1 -1
  294. package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
  295. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +0 -4
  296. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +0 -4
  297. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +0 -4
  298. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +0 -4
  299. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +0 -4
  300. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +0 -4
  301. package/artifacts/contracts/components/Product.sol/Product.dbg.json +0 -4
  302. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  303. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +0 -4
  304. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  305. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +0 -4
  306. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +0 -4
  307. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +0 -1039
  308. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +0 -4
  309. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +0 -673
  310. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +0 -4
  311. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +0 -1231
  312. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +0 -4
  313. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +0 -721
  314. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +0 -4
  315. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +0 -817
  316. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +0 -4
  317. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +0 -641
  318. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +0 -4
  319. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +0 -1798
  320. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +0 -4
  321. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +0 -805
  322. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +0 -4
  323. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +0 -4
  324. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +0 -4
  325. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +0 -4
  326. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +0 -4
  327. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +0 -4
  328. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +0 -4
  329. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +0 -4
  330. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +0 -1092
  331. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +0 -4
  332. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +0 -697
  333. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +0 -4
  334. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +0 -1237
  335. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +0 -4
  336. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +0 -661
  337. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +0 -4
  338. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +0 -840
  339. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  340. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +0 -653
  341. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +0 -4
  342. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +0 -107
  343. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +0 -4
  344. package/artifacts/contracts/test/TestFee.sol/TestFee.json +0 -119
  345. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +0 -4
  346. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +0 -383
  347. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +0 -4
  348. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +0 -116
  349. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +0 -4
  350. package/artifacts/contracts/test/TestService.sol/TestService.json +0 -596
  351. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +0 -4
  352. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +0 -376
  353. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +0 -4
  354. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +0 -218
  355. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +0 -4
  356. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +0 -104
  357. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +0 -4
  358. package/artifacts/contracts/test/Usdc.sol/USDC.json +0 -376
  359. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +0 -4
  360. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +0 -4
  361. package/artifacts/contracts/types/Amount.sol/AmountLib.json +0 -161
  362. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +0 -4
  363. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +0 -4
  364. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +0 -10
  365. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +0 -4
  366. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +0 -100
  367. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +0 -4
  368. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +0 -4
  369. package/artifacts/contracts/types/Fee.sol/FeeLib.json +0 -288
  370. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +0 -4
  371. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +0 -4
  372. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +0 -4
  373. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +0 -4
  374. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +0 -100
  375. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +0 -4
  376. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +0 -4
  377. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +0 -100
  378. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +0 -4
  379. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +0 -4
  380. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +0 -4
  381. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +0 -4
  382. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +0 -4
  383. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +0 -4
  384. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +0 -4
  385. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +0 -4
  386. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +0 -4
  387. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +0 -4
  388. package/contracts/instance/service/ApplicationService.sol +0 -351
  389. package/contracts/instance/service/ClaimService.sol +0 -151
  390. package/contracts/instance/service/IClaimService.sol +0 -61
  391. package/contracts/shared/ContractDeployerLib.sol +0 -72
  392. package/contracts/test/TestFee.sol +0 -25
  393. package/contracts/test/TestRegisterable.sol +0 -18
  394. package/contracts/test/TestRoleId.sol +0 -14
  395. package/contracts/test/TestService.sol +0 -25
  396. package/contracts/test/TestToken.sol +0 -26
  397. package/contracts/test/TestVersion.sol +0 -44
  398. package/contracts/test/TestVersionable.sol +0 -17
  399. package/contracts/test/Usdc.sol +0 -26
  400. package/contracts/types/ChainId.sol +0 -38
  401. package/contracts/types/NumberId.sol +0 -52
  402. /package/contracts/{instance → shared}/AccessManagerUpgradeableInitializeable.sol +0 -0
  403. /package/contracts/{types → type}/AddressSet.sol +0 -0
  404. /package/contracts/{types → type}/Blocknumber.sol +0 -0
  405. /package/contracts/{types → type}/DistributorType.sol +0 -0
  406. /package/contracts/{types → type}/Key32.sol +0 -0
  407. /package/contracts/{types → type}/NftId.sol +0 -0
  408. /package/contracts/{types → type}/Referral.sol +0 -0
  409. /package/contracts/{types → type}/RiskId.sol +0 -0
  410. /package/contracts/{types → type}/Seconds.sol +0 -0
  411. /package/contracts/{types → type}/UFixed.sol +0 -0
  412. /package/contracts/{types → type}/Version.sol +0 -0
@@ -1,20 +1,21 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {Amount} from "../../types/Amount.sol";
5
- import {Fee} from "../../types/Fee.sol";
6
- import {NftId} from "../../types/NftId.sol";
7
- import {IBundle} from "../module/IBundle.sol";
8
- import {IInstance} from "../../instance/IInstance.sol";
9
- import {IPolicy} from "../module/IPolicy.sol";
10
- import {IService} from "../../shared/IService.sol";
11
- import {RoleId} from "../../types/RoleId.sol";
12
- import {Seconds} from "../../types/Seconds.sol";
13
- import {StateId} from "../../types/StateId.sol";
4
+ import {Amount} from "../type/Amount.sol";
5
+ import {Fee} from "../type/Fee.sol";
6
+ import {NftId} from "../type/NftId.sol";
7
+ import {PayoutId} from "../type/PayoutId.sol";
8
+ import {IBundle} from "../instance/module/IBundle.sol";
9
+ import {IInstance} from "../instance/IInstance.sol";
10
+ import {IPolicy} from "../instance/module/IPolicy.sol";
11
+ import {IService} from "../shared/IService.sol";
12
+ import {RoleId} from "../type/RoleId.sol";
13
+ import {Seconds} from "../type/Seconds.sol";
14
+ import {StateId} from "../type/StateId.sol";
14
15
 
15
16
  interface IPoolService is IService {
16
17
 
17
- event LogPoolServiceMaxCapitalAmountUpdated(NftId poolNftId, uint256 previousMaxCapitalAmount, uint256 currentMaxCapitalAmount);
18
+ event LogPoolServiceMaxCapitalAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
18
19
  event LogPoolServiceBundleOwnerRoleSet(NftId poolNftId, RoleId bundleOwnerRole);
19
20
 
20
21
  event LogPoolServiceBundleCreated(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
@@ -22,6 +23,7 @@ interface IPoolService is IService {
22
23
 
23
24
  error ErrorPoolServiceBundleOwnerRoleAlreadySet(NftId poolNftId);
24
25
  error ErrorPoolServiceBundlePoolMismatch(NftId bundlePoolNftId, NftId productPoolNftId);
26
+ error ErrorPoolServiceInvalidTransferAmount(Amount expectedAmount, Amount actualAmount);
25
27
 
26
28
  /// @dev registers a new pool with the registry service
27
29
  function register(address poolAddress) external returns(NftId);
@@ -31,7 +33,7 @@ interface IPoolService is IService {
31
33
  function setBundleOwnerRole(RoleId bundleOwnerRole) external;
32
34
 
33
35
  /// @dev sets the max capital amount for the calling pool
34
- function setMaxCapitalAmount(uint256 maxCapitalAmount) external;
36
+ function setMaxCapitalAmount(Amount maxCapitalAmount) external;
35
37
 
36
38
  /// @dev set pool sepecific fees
37
39
  function setFees(
@@ -51,7 +53,7 @@ interface IPoolService is IService {
51
53
  NftId productNftId,
52
54
  NftId applicationNftId,
53
55
  IPolicy.PolicyInfo memory applicationInfo,
54
- uint256 premiumAmount
56
+ Amount premiumAmount
55
57
  ) external;
56
58
 
57
59
 
@@ -64,6 +66,17 @@ interface IPoolService is IService {
64
66
  ) external;
65
67
 
66
68
 
69
+ /// @dev reduces the locked collateral in the bundle associated with the specified policy
70
+ /// every payout of a policy reduces the collateral by the payout amount
71
+ /// may only be called by the claim service for unlocked pool components
72
+ function reduceCollateral(
73
+ IInstance instance,
74
+ NftId policyNftId,
75
+ IPolicy.PolicyInfo memory policyInfo,
76
+ Amount payoutAmount
77
+ ) external;
78
+
79
+
67
80
  /// @dev create a new bundle for the provided parameters
68
81
  /// staking fees will be deducted by the pool service from the staking amount
69
82
  /// may only be called by registered and unlocked pool components
@@ -85,6 +98,8 @@ interface IPoolService is IService {
85
98
  /// may only be called by registered and unlocked pool components
86
99
  function closeBundle(NftId bundleNftId) external;
87
100
 
101
+ /// @dev processes the sale of a bundle and track the pool fee and bundle fee amounts
102
+ function processSale(NftId bundleNftId, IPolicy.Premium memory premium, Amount actualAmountTransferred) external;
88
103
 
89
104
  /// @dev increase stakes for bundle
90
105
  /// staking fees will be deducted by the pool service from the staking amount
@@ -1,20 +1,19 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Amount, AmountLib} from "../types/Amount.sol";
5
- import {Component} from "./Component.sol";
6
- import {Fee, FeeLib} from "../types/Fee.sol";
7
- import {IBundleService} from "../instance/service/IBundleService.sol";
8
- import {InstanceReader} from "../instance/InstanceReader.sol";
4
+ import {Amount, AmountLib} from "../type/Amount.sol";
5
+ import {Component} from "../shared/Component.sol";
6
+ import {Fee, FeeLib} from "../type/Fee.sol";
7
+ import {IBundleService} from "./IBundleService.sol";
9
8
  import {IPoolComponent} from "./IPoolComponent.sol";
10
- import {IPoolService} from "../instance/service/IPoolService.sol";
9
+ import {IPoolService} from "./IPoolService.sol";
11
10
  import {IComponents} from "../instance/module/IComponents.sol";
12
- import {NftId, NftIdLib} from "../types/NftId.sol";
13
- import {POOL} from "../types/ObjectType.sol";
14
- import {RoleId, PUBLIC_ROLE} from "../types/RoleId.sol";
15
- import {Seconds} from "../types/Seconds.sol";
11
+ import {NftId, NftIdLib} from "../type/NftId.sol";
12
+ import {BUNDLE, POOL} from "../type/ObjectType.sol";
13
+ import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
14
+ import {Seconds} from "../type/Seconds.sol";
16
15
  import {TokenHandler} from "../shared/TokenHandler.sol";
17
- import {UFixed, UFixedLib} from "../types/UFixed.sol";
16
+ import {UFixed, UFixedLib} from "../type/UFixed.sol";
18
17
 
19
18
  abstract contract Pool is
20
19
  Component,
@@ -61,8 +60,8 @@ abstract contract Pool is
61
60
  initializeComponent(registry, instanceNftId, name, token, POOL(), isInterceptingNftTransfers, initialOwner, registryData);
62
61
 
63
62
  PoolStorage storage $ = _getPoolStorage();
64
- $._poolService = getInstance().getPoolService();
65
- $._bundleService = getInstance().getBundleService();
63
+ $._poolService = IPoolService(_getServiceAddress(POOL()));
64
+ $._bundleService = IBundleService(_getServiceAddress(BUNDLE()));
66
65
 
67
66
  registerInterface(type(IPoolComponent).interfaceId);
68
67
  }
@@ -70,7 +69,7 @@ abstract contract Pool is
70
69
 
71
70
  function stake(
72
71
  NftId bundleNftId,
73
- uint256 amount
72
+ Amount amount
74
73
  )
75
74
  public
76
75
  virtual
@@ -83,7 +82,7 @@ abstract contract Pool is
83
82
 
84
83
  function unstake(
85
84
  NftId bundleNftId,
86
- uint256 amount
85
+ Amount amount
87
86
  )
88
87
  public
89
88
  virtual
@@ -150,7 +149,7 @@ abstract contract Pool is
150
149
  }
151
150
 
152
151
 
153
- function setMaxCapitalAmount(uint256 maxCapitalAmount)
152
+ function setMaxCapitalAmount(Amount maxCapitalAmount)
154
153
  public
155
154
  virtual
156
155
  restricted()
@@ -190,7 +189,7 @@ abstract contract Pool is
190
189
  bytes memory applicationData,
191
190
  NftId bundleNftId,
192
191
  bytes memory bundleFilter,
193
- uint256 collateralizationAmount
192
+ Amount collateralizationAmount
194
193
  )
195
194
  public
196
195
  virtual
@@ -219,7 +218,7 @@ abstract contract Pool is
219
218
  bytes memory applicationData,
220
219
  NftId bundleNftId,
221
220
  bytes memory bundleFilter,
222
- uint256 collateralizationAmount
221
+ Amount collateralizationAmount
223
222
  )
224
223
  public
225
224
  view
@@ -280,9 +279,9 @@ abstract contract Pool is
280
279
  IComponents.PoolInfo(
281
280
  NftIdLib.zero(), // will be set when GIF registers the related product
282
281
  PUBLIC_ROLE(), // bundleOwnerRole
283
- type(uint256).max, // maxCapitalAmount,
284
- 0, // initial balance amount
285
- 0, // initial fee amount
282
+ AmountLib.max(), // maxCapitalAmount,
283
+ AmountLib.zero(), // initial balance amount
284
+ AmountLib.zero(), // initial fee amount
286
285
  isNftInterceptor(), // isInterceptingBundleTransfers
287
286
  false, // isExternallyManaged,
288
287
  false, // isVerifyingApplications,
@@ -1,41 +1,41 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {Pool} from "../../components/Pool.sol";
5
- import {IRegistry} from "../../registry/IRegistry.sol";
6
- import {IInstance} from "../../instance/IInstance.sol";
7
- import {IBundle} from "../../instance/module/IBundle.sol";
8
- import {TokenHandler} from "../../instance/module/ITreasury.sol";
9
- import {IComponents} from "../module/IComponents.sol";
10
- import {IPolicy} from "../module/IPolicy.sol";
11
-
12
- import {IVersionable} from "../../shared/IVersionable.sol";
13
- import {Versionable} from "../../shared/Versionable.sol";
14
- import {INftOwnable} from "../../shared/INftOwnable.sol";
15
-
16
- import {Amount} from "../../types/Amount.sol";
17
- import {Fee, FeeLib} from "../../types/Fee.sol";
18
- import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
19
- import {ObjectType, POOL, BUNDLE} from "../../types/ObjectType.sol";
20
- import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../../types/RoleId.sol";
21
- import {Fee, FeeLib} from "../../types/Fee.sol";
22
- import {Version, VersionLib} from "../../types/Version.sol";
23
- import {KEEP_STATE, StateId} from "../../types/StateId.sol";
24
- import {Seconds} from "../../types/Seconds.sol";
25
- import {TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
26
- import {Version, VersionLib} from "../../types/Version.sol";
27
-
28
- import {IService} from "../../shared/IService.sol";
29
- import {Service} from "../../shared/Service.sol";
30
- import {BundleManager} from "../BundleManager.sol";
31
- import {ComponentService} from "../base/ComponentService.sol";
4
+ import {Pool} from "./Pool.sol";
5
+ import {IRegistry} from "../registry/IRegistry.sol";
6
+ import {IInstance} from "../instance/IInstance.sol";
7
+ import {IBundle} from "../instance/module/IBundle.sol";
8
+ import {TokenHandler} from "../instance/module/ITreasury.sol";
9
+ import {IComponents} from "../instance/module/IComponents.sol";
10
+ import {IPolicy} from "../instance/module/IPolicy.sol";
11
+
12
+ import {IVersionable} from "../shared/IVersionable.sol";
13
+ import {Versionable} from "../shared/Versionable.sol";
14
+ import {INftOwnable} from "../shared/INftOwnable.sol";
15
+
16
+ import {Amount, AmountLib} from "../type/Amount.sol";
17
+ import {Fee, FeeLib} from "../type/Fee.sol";
18
+ import {NftId, NftIdLib, zeroNftId} from "../type/NftId.sol";
19
+ import {ObjectType, POOL, BUNDLE} from "../type/ObjectType.sol";
20
+ import {PUBLIC_ROLE, POOL_OWNER_ROLE, POLICY_SERVICE_ROLE, RoleId} from "../type/RoleId.sol";
21
+ import {Fee, FeeLib} from "../type/Fee.sol";
22
+ import {Version, VersionLib} from "../type/Version.sol";
23
+ import {KEEP_STATE, StateId} from "../type/StateId.sol";
24
+ import {Seconds} from "../type/Seconds.sol";
25
+ import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
26
+ import {Version, VersionLib} from "../type/Version.sol";
27
+
28
+ import {IService} from "../shared/IService.sol";
29
+ import {Service} from "../shared/Service.sol";
30
+ import {BundleManager} from "../instance/BundleManager.sol";
31
+ import {ComponentService} from "../shared/ComponentService.sol";
32
32
  import {IBundleService} from "./IBundleService.sol";
33
33
  import {IPoolService} from "./IPoolService.sol";
34
- import {IRegistryService} from "../../registry/IRegistryService.sol";
35
- import {InstanceService} from "../InstanceService.sol";
36
- import {InstanceReader} from "../InstanceReader.sol";
37
- import {IComponent} from "../../components/IComponent.sol";
38
- import {IPoolComponent} from "../../components/IPoolComponent.sol";
34
+ import {IRegistryService} from "../registry/IRegistryService.sol";
35
+ import {InstanceService} from "../instance/InstanceService.sol";
36
+ import {InstanceReader} from "../instance/InstanceReader.sol";
37
+ import {IComponent} from "../shared/IComponent.sol";
38
+ import {IPoolComponent} from "./IPoolComponent.sol";
39
39
 
40
40
  string constant POOL_SERVICE_NAME = "PoolService";
41
41
 
@@ -44,6 +44,7 @@ contract PoolService is
44
44
  IPoolService
45
45
  {
46
46
  using NftIdLib for NftId;
47
+ using AmountLib for Amount;
47
48
 
48
49
  IBundleService internal _bundleService;
49
50
 
@@ -117,16 +118,16 @@ contract PoolService is
117
118
  }
118
119
 
119
120
 
120
- function setMaxCapitalAmount(uint256 maxCapitalAmount)
121
+ function setMaxCapitalAmount(Amount maxCapitalAmount)
121
122
  external
122
123
  virtual
123
124
  {
124
- (NftId poolNftId, IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
125
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
125
126
  InstanceReader instanceReader = instance.getInstanceReader();
126
127
 
127
128
  IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
128
129
  IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
129
- uint256 previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
130
+ Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
130
131
 
131
132
  poolInfo.maxCapitalAmount = maxCapitalAmount;
132
133
  componentInfo.data = abi.encode(poolInfo);
@@ -139,7 +140,7 @@ contract PoolService is
139
140
  external
140
141
  virtual
141
142
  {
142
- (NftId poolNftId, IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
143
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
143
144
  InstanceReader instanceReader = instance.getInstanceReader();
144
145
 
145
146
  IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
@@ -166,7 +167,7 @@ contract PoolService is
166
167
  external
167
168
  virtual
168
169
  {
169
- (NftId poolNftId, IRegistry.ObjectInfo memory registryInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
170
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
170
171
  InstanceReader instanceReader = instance.getInstanceReader();
171
172
 
172
173
  IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
@@ -193,21 +194,25 @@ contract PoolService is
193
194
  virtual
194
195
  returns(NftId bundleNftId)
195
196
  {
196
- (NftId poolNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
197
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
197
198
  InstanceReader instanceReader = instance.getInstanceReader();
198
199
 
199
- // TODO add implementation that takes care of staking fees
200
- Amount stakingAfterFeesAmount = stakingAmount;
200
+ // pool fee book keeping
201
+ IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
202
+ Amount stakingNetAmount = _processStakingFees(componentInfo, stakingAmount);
201
203
 
202
204
  bundleNftId = _bundleService.create(
203
205
  instance,
204
206
  poolNftId,
205
207
  owner,
206
208
  fee,
207
- stakingAfterFeesAmount,
209
+ stakingNetAmount,
208
210
  lifetime,
209
211
  filter);
210
212
 
213
+ // collect tokens from bundle owner
214
+ _transferStakingAmount(componentInfo, owner, stakingAmount);
215
+
211
216
  emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
212
217
  }
213
218
 
@@ -216,7 +221,7 @@ contract PoolService is
216
221
  external
217
222
  virtual
218
223
  {
219
- (NftId poolNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
224
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyCallingComponentAndInstance(POOL());
220
225
 
221
226
  // TODO book keeping for pool collateral released outside of retention level
222
227
 
@@ -228,13 +233,45 @@ contract PoolService is
228
233
  emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
229
234
  }
230
235
 
236
+ function processSale(
237
+ NftId bundleNftId,
238
+ IPolicy.Premium memory premium,
239
+ Amount actualAmountTransferred
240
+ )
241
+ external
242
+ virtual
243
+ {
244
+ IRegistry registry = getRegistry();
245
+ IRegistry.ObjectInfo memory bundleObjectInfo = registry.getObjectInfo(bundleNftId);
246
+ IRegistry.ObjectInfo memory poolObjectInfo = registry.getObjectInfo(bundleObjectInfo.parentNftId);
247
+ IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
248
+ IInstance instance = IInstance(instanceObjectInfo.objectAddress);
249
+
250
+ Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
251
+ Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
252
+ Amount expectedTransferAmount = AmountLib.toAmount(premium.netPremiumAmount) + poolFeeAmount + bundleFeeAmount;
253
+ if (!(actualAmountTransferred == expectedTransferAmount)) {
254
+ revert ErrorPoolServiceInvalidTransferAmount(expectedTransferAmount, actualAmountTransferred);
255
+ }
256
+
257
+ // update pool fee balance
258
+ if (poolFeeAmount.gtz()) {
259
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolObjectInfo.nftId);
260
+ poolComponentInfo.feeAmount = poolComponentInfo.feeAmount.add(poolFeeAmount);
261
+ instance.getInstanceStore().updatePoolSetup(poolObjectInfo.nftId, poolComponentInfo, KEEP_STATE());
262
+ }
263
+
264
+ if (bundleFeeAmount.gtz()) {
265
+ _bundleService.updateBundleFees(instance, bundleNftId, bundleFeeAmount);
266
+ }
267
+ }
231
268
 
232
269
  function lockCollateral(
233
270
  IInstance instance,
234
271
  NftId productNftId,
235
272
  NftId applicationNftId,
236
273
  IPolicy.PolicyInfo memory applicationInfo,
237
- uint256 premiumAmount // premium amount after product and distribution fees
274
+ Amount premiumAmount // premium amount after product and distribution fees
238
275
  )
239
276
  external
240
277
  virtual
@@ -255,10 +292,10 @@ contract PoolService is
255
292
  IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
256
293
 
257
294
  // TODO add correct required collateral calculation (collateralization level mibht be != 1, retention level might be < 1)
258
- uint256 collateralAmount = applicationInfo.sumInsuredAmount;
295
+ Amount collateralAmount = applicationInfo.sumInsuredAmount;
259
296
 
260
297
  // TODO add correct net premium calculation (pool fee might be > 0)
261
- uint256 premiumAfterPoolFeeAmount = premiumAmount;
298
+ Amount premiumAfterPoolFeeAmount = premiumAmount;
262
299
 
263
300
  // lock collateral amount from involvedd bundle
264
301
  _bundleService.lockCollateral(
@@ -281,6 +318,24 @@ contract PoolService is
281
318
  }
282
319
 
283
320
 
321
+ function reduceCollateral(
322
+ IInstance instance,
323
+ NftId policyNftId,
324
+ IPolicy.PolicyInfo memory policyInfo,
325
+ Amount payoutAmount
326
+ )
327
+ external
328
+ virtual
329
+ // TODO add restricted and granting for claim service
330
+ {
331
+ _bundleService.releaseCollateral(
332
+ instance,
333
+ policyNftId,
334
+ policyInfo.bundleNftId,
335
+ payoutAmount);
336
+ }
337
+
338
+
284
339
  /// @dev releases the remaining collateral linked to the specified policy
285
340
  /// may only be called by the policy service for unlocked pool components
286
341
  function releaseCollateral(
@@ -292,12 +347,57 @@ contract PoolService is
292
347
  virtual
293
348
  // TODO add restricted and granting for policy service
294
349
  {
295
- // release collateral from involved bundle
296
350
  _bundleService.releaseCollateral(
297
351
  instance,
298
352
  policyNftId,
299
353
  policyInfo.bundleNftId,
300
- policyInfo.sumInsuredAmount);
354
+ policyInfo.sumInsuredAmount - policyInfo.claimAmount);
355
+
356
+ _bundleService.unlinkPolicy(
357
+ instance,
358
+ policyNftId);
359
+ }
360
+
361
+
362
+ function _processStakingFees(
363
+ IComponents.ComponentInfo memory componentInfo,
364
+ Amount stakingAmount
365
+ )
366
+ internal
367
+ returns (Amount stakingNetAmount)
368
+ {
369
+ stakingNetAmount = stakingAmount;
370
+
371
+ // check if any staking fees apply
372
+ Fee memory stakingFee = abi.decode(componentInfo.data, (IComponents.PoolInfo)).stakingFee;
373
+ if (FeeLib.gtz(stakingFee)) {
374
+ (Amount feeAmount, Amount netAmount) = FeeLib.calculateFee(stakingFee, stakingAmount);
375
+ stakingNetAmount = netAmount;
376
+
377
+ // TODO update fee balance for pool
378
+ }
379
+ }
380
+
381
+
382
+ // TODO create (I)TreasuryService that deals with all gif related token transfers
383
+ /// @dev transfers the specified amount from the bundle owner to the pool's wallet
384
+ function _transferStakingAmount(
385
+ IComponents.ComponentInfo memory componentInfo,
386
+ address bundleOwner,
387
+ Amount stakingAmount
388
+ )
389
+ internal
390
+ {
391
+ TokenHandler tokenHandler = componentInfo.tokenHandler;
392
+ address poolWallet = componentInfo.wallet;
393
+
394
+ if(stakingAmount.gtz()) {
395
+ tokenHandler.transfer(
396
+ bundleOwner,
397
+ poolWallet,
398
+ stakingAmount
399
+ );
400
+ }
301
401
  }
302
402
 
303
- }
403
+ }
@@ -1,12 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IVersionable} from "../../shared/IVersionable.sol";
5
- import {ProxyManager} from "../../shared/ProxyManager.sol";
4
+ import {IVersionable} from "../shared/IVersionable.sol";
5
+ import {ProxyManager} from "../shared/ProxyManager.sol";
6
6
  import {PoolService} from "./PoolService.sol";
7
- import {Registry} from "../../registry/Registry.sol";
8
- import {RegistryService} from "../../registry/RegistryService.sol";
9
- import {REGISTRY} from "../../types/ObjectType.sol";
7
+ import {Registry} from "../registry/Registry.sol";
8
+ import {RegistryService} from "../registry/RegistryService.sol";
9
+ import {REGISTRY} from "../type/ObjectType.sol";
10
10
 
11
11
  contract PoolServiceManager is ProxyManager {
12
12