@etherisc/gif-next 0.0.2-b61b9f6-206 → 0.0.2-b62165c-823

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 (390) hide show
  1. package/README.md +31 -3
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +2 -2
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  14. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  16. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +85 -90
  18. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
  20. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +43 -64
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +223 -105
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +50 -38
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +43 -26
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +120 -31
  30. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
  31. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
  32. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  33. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +6 -6
  34. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  35. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +5 -5
  36. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  37. package/artifacts/contracts/instance/Instance.sol/Instance.json +9 -9
  38. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +75 -75
  40. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  41. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +31 -31
  42. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +213 -117
  44. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +21 -21
  46. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +9 -9
  48. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +315 -194
  50. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  52. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  53. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  55. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  56. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  57. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
  58. package/artifacts/contracts/instance/base/{ObjectManager.sol/ObjectManager.json → ObjectSet.sol/ObjectSet.json} +6 -6
  59. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  62. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  63. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  65. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  66. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  67. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  68. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +59 -77
  69. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  70. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  71. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  72. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  73. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +30 -26
  74. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  75. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  76. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +27 -61
  77. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  78. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  79. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  80. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  81. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  82. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +54 -125
  83. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  84. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  85. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  86. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +402 -62
  87. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  88. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +94 -26
  89. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  90. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +205 -1
  91. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  92. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -83
  93. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  94. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +220 -90
  95. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  96. package/artifacts/contracts/pool/Pool.sol/Pool.json +44 -121
  97. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  98. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +264 -126
  99. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  100. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +23 -19
  101. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  102. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +21 -32
  103. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  104. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +9 -17
  105. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  106. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +22 -67
  107. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  108. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
  109. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  110. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +74 -58
  111. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  112. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +30 -30
  113. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  114. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  115. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  116. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
  117. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  118. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +183 -108
  119. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  120. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
  121. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  122. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -26
  123. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  124. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  125. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +235 -179
  126. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  127. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +32 -32
  128. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  129. package/artifacts/contracts/product/PricingService.sol/PricingService.json +107 -147
  130. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  131. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +40 -60
  132. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  133. package/artifacts/contracts/product/Product.sol/Product.json +22 -67
  134. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  135. package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
  136. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  137. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
  138. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  139. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  140. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  141. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +50 -2
  142. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  143. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
  144. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  145. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  146. package/artifacts/contracts/registry/Registry.sol/Registry.json +95 -23
  147. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  148. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +88 -88
  149. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  150. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  151. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  152. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  153. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  154. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  155. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  156. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1159 -0
  157. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  158. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  159. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  160. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  161. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  162. package/artifacts/contracts/shared/Component.sol/Component.json +0 -64
  163. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  164. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +255 -62
  165. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  166. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +52 -32
  167. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  168. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  169. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  170. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  171. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
  172. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  173. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -26
  174. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  175. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  176. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  177. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  178. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  179. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  180. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  181. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  182. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  183. package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
  184. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  185. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -64
  186. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  187. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  188. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  189. package/artifacts/contracts/shared/{NftIdSetManager.sol/NftIdSetManager.json → NftIdSet.sol/NftIdSet.json} +4 -4
  190. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  191. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  192. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  193. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  194. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  195. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  196. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  197. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  198. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  199. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  200. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  201. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  202. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  203. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  204. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +0 -26
  205. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  206. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  207. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +40 -113
  208. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  209. package/artifacts/contracts/staking/Staking.sol/Staking.json +48 -112
  210. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  211. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  212. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  213. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +25 -25
  214. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  215. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
  216. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  217. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
  218. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  219. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +12 -12
  220. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  221. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +92 -87
  222. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  223. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +25 -20
  224. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  225. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  226. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  227. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  228. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  229. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  230. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  231. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  232. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  233. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  234. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  235. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  236. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  237. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  238. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  239. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  240. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  241. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  242. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  243. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  244. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  245. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  246. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  247. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  248. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  249. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  250. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  251. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  253. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  254. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  255. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  256. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  260. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  261. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  262. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  263. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  264. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  265. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  267. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  268. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  269. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  270. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  271. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  272. package/artifacts/contracts/{shared → upgradeability}/ProxyManager.sol/ProxyManager.json +3 -3
  273. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  274. package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
  275. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  276. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  277. package/contracts/authorization/Authorization.sol +0 -1
  278. package/contracts/distribution/BasicDistribution.sol +4 -15
  279. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  280. package/contracts/distribution/Distribution.sol +22 -10
  281. package/contracts/distribution/DistributionService.sol +67 -33
  282. package/contracts/distribution/DistributionServiceManager.sol +2 -5
  283. package/contracts/distribution/IDistributionComponent.sol +8 -4
  284. package/contracts/distribution/IDistributionService.sol +18 -2
  285. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  286. package/contracts/instance/IInstance.sol +5 -5
  287. package/contracts/instance/IInstanceService.sol +5 -5
  288. package/contracts/instance/Instance.sol +4 -4
  289. package/contracts/instance/InstanceAdmin.sol +25 -6
  290. package/contracts/instance/InstanceAuthorizationV3.sol +15 -14
  291. package/contracts/instance/InstanceReader.sol +24 -7
  292. package/contracts/instance/InstanceService.sol +60 -36
  293. package/contracts/instance/InstanceServiceManager.sol +2 -6
  294. package/contracts/instance/InstanceStore.sol +16 -1
  295. package/contracts/instance/base/ObjectLifecycle.sol +8 -4
  296. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +5 -5
  297. package/contracts/instance/module/IBundle.sol +1 -1
  298. package/contracts/instance/module/IComponents.sol +1 -7
  299. package/contracts/instance/module/IDistribution.sol +0 -1
  300. package/contracts/instance/module/IPolicy.sol +17 -17
  301. package/contracts/mock/Dip.sol +1 -1
  302. package/contracts/oracle/IOracleComponent.sol +2 -1
  303. package/contracts/oracle/Oracle.sol +15 -6
  304. package/contracts/oracle/OracleServiceManager.sol +2 -5
  305. package/contracts/pool/BasicPool.sol +7 -5
  306. package/contracts/pool/BasicPoolAuthorization.sol +11 -2
  307. package/contracts/pool/BundleService.sol +189 -47
  308. package/contracts/pool/BundleServiceManager.sol +2 -5
  309. package/contracts/pool/IBundleService.sol +33 -5
  310. package/contracts/pool/IPoolComponent.sol +6 -0
  311. package/contracts/pool/IPoolService.sol +36 -26
  312. package/contracts/pool/Pool.sol +31 -16
  313. package/contracts/pool/PoolService.sol +161 -104
  314. package/contracts/pool/PoolServiceManager.sol +2 -5
  315. package/contracts/product/ApplicationService.sol +51 -56
  316. package/contracts/product/ApplicationServiceManager.sol +2 -2
  317. package/contracts/product/BasicProduct.sol +3 -33
  318. package/contracts/product/BasicProductAuthorization.sol +3 -0
  319. package/contracts/product/ClaimService.sol +13 -39
  320. package/contracts/product/ClaimServiceManager.sol +2 -2
  321. package/contracts/product/IApplicationService.sol +1 -0
  322. package/contracts/product/IClaimService.sol +1 -0
  323. package/contracts/product/IPolicyService.sol +25 -30
  324. package/contracts/product/IPricingService.sol +7 -7
  325. package/contracts/product/IProductComponent.sol +1 -1
  326. package/contracts/product/IProductService.sol +1 -0
  327. package/contracts/product/PolicyService.sol +272 -171
  328. package/contracts/product/PolicyServiceManager.sol +2 -5
  329. package/contracts/product/PricingService.sol +42 -41
  330. package/contracts/product/PricingServiceManager.sol +2 -5
  331. package/contracts/product/Product.sol +33 -19
  332. package/contracts/product/ProductService.sol +7 -32
  333. package/contracts/product/ProductServiceManager.sol +2 -5
  334. package/contracts/registry/IRegistry.sol +26 -13
  335. package/contracts/registry/IRegistryService.sol +6 -6
  336. package/contracts/registry/Registry.sol +80 -82
  337. package/contracts/registry/RegistryAdmin.sol +33 -24
  338. package/contracts/registry/RegistryService.sol +4 -18
  339. package/contracts/registry/RegistryServiceManager.sol +2 -2
  340. package/contracts/registry/{ReleaseManager.sol → ReleaseRegistry.sol} +48 -50
  341. package/contracts/registry/ServiceAuthorizationV3.sol +7 -8
  342. package/contracts/registry/TokenRegistry.sol +2 -2
  343. package/contracts/shared/Component.sol +24 -37
  344. package/contracts/shared/ComponentService.sol +81 -21
  345. package/contracts/shared/ComponentServiceManager.sol +2 -2
  346. package/contracts/shared/IComponent.sol +4 -4
  347. package/contracts/shared/IComponentService.sol +15 -9
  348. package/contracts/shared/IInstanceLinkedComponent.sol +9 -3
  349. package/contracts/shared/IService.sol +1 -1
  350. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  351. package/contracts/shared/InstanceLinkedComponent.sol +21 -0
  352. package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
  353. package/contracts/shared/NftOwnable.sol +2 -2
  354. package/contracts/shared/PolicyHolder.sol +2 -5
  355. package/contracts/shared/Service.sol +3 -4
  356. package/contracts/shared/TokenHandler.sol +100 -19
  357. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  358. package/contracts/staking/IStaking.sol +1 -2
  359. package/contracts/staking/IStakingService.sol +12 -5
  360. package/contracts/staking/StakeManagerLib.sol +0 -25
  361. package/contracts/staking/Staking.sol +21 -37
  362. package/contracts/staking/StakingManager.sol +2 -6
  363. package/contracts/staking/StakingReader.sol +12 -16
  364. package/contracts/staking/StakingService.sol +8 -12
  365. package/contracts/staking/StakingServiceManager.sol +2 -2
  366. package/contracts/staking/StakingStore.sol +12 -22
  367. package/contracts/type/Amount.sol +12 -5
  368. package/contracts/type/Blocknumber.sol +7 -1
  369. package/contracts/type/ObjectType.sol +18 -18
  370. package/contracts/type/Referral.sol +1 -0
  371. package/contracts/type/Seconds.sol +13 -1
  372. package/contracts/type/Timestamp.sol +11 -1
  373. package/contracts/type/UFixed.sol +29 -10
  374. package/contracts/type/Version.sol +3 -1
  375. package/contracts/{shared → upgradeability}/ProxyManager.sol +3 -4
  376. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  377. package/package.json +3 -3
  378. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  379. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -703
  380. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  381. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  382. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1159
  383. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  384. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  385. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
  386. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  387. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  388. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  389. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  390. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -1,46 +1,30 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Pool} from "./Pool.sol";
5
- import {IRegistry} from "../registry/IRegistry.sol";
6
- import {IInstance} from "../instance/IInstance.sol";
7
4
  import {IBundle} from "../instance/module/IBundle.sol";
5
+ import {IBundleService} from "./IBundleService.sol";
8
6
  import {IComponents} from "../instance/module/IComponents.sol";
7
+ import {IComponentService} from "../shared/IComponentService.sol";
8
+ import {IInstance} from "../instance/IInstance.sol";
9
+ import {IInstanceService} from "../instance/IInstanceService.sol";
9
10
  import {IPolicy} from "../instance/module/IPolicy.sol";
10
-
11
- import {IVersionable} from "../shared/IVersionable.sol";
12
- import {Versionable} from "../shared/Versionable.sol";
13
- import {INftOwnable} from "../shared/INftOwnable.sol";
11
+ import {IPoolService} from "./IPoolService.sol";
12
+ import {IRegistry} from "../registry/IRegistry.sol";
13
+ import {IRegistryService} from "../registry/IRegistryService.sol";
14
+ import {IStaking} from "../staking/IStaking.sol";
14
15
 
15
16
  import {Amount, AmountLib} from "../type/Amount.sol";
16
17
  import {Fee, FeeLib} from "../type/Fee.sol";
17
- import {NftId, NftIdLib} from "../type/NftId.sol";
18
- import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY, STAKING} from "../type/ObjectType.sol";
18
+ import {NftId} from "../type/NftId.sol";
19
+ import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
19
20
  import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
20
21
  import {Fee, FeeLib} from "../type/Fee.sol";
21
- import {Version, VersionLib} from "../type/Version.sol";
22
- import {KEEP_STATE, StateId} from "../type/StateId.sol";
22
+ import {KEEP_STATE} from "../type/StateId.sol";
23
23
  import {Seconds} from "../type/Seconds.sol";
24
- import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
25
- import {TokenHandler} from "../shared/TokenHandler.sol";
26
24
  import {UFixed} from "../type/UFixed.sol";
27
- import {Version, VersionLib} from "../type/Version.sol";
28
-
29
- import {IService} from "../shared/IService.sol";
30
- import {Service} from "../shared/Service.sol";
31
- import {BundleManager} from "../instance/BundleManager.sol";
32
25
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
33
- import {IBundleService} from "./IBundleService.sol";
34
- import {IComponentService} from "../shared/IComponentService.sol";
35
- import {IInstanceService} from "../instance/IInstanceService.sol";
36
- import {IPoolService} from "./IPoolService.sol";
37
- import {IRegistryService} from "../registry/IRegistryService.sol";
38
- import {IStaking} from "../staking/IStaking.sol";
39
- import {InstanceService} from "../instance/InstanceService.sol";
40
26
  import {InstanceReader} from "../instance/InstanceReader.sol";
41
27
  import {InstanceStore} from "../instance/InstanceStore.sol";
42
- import {IComponent} from "../shared/IComponent.sol";
43
- import {IPoolComponent} from "./IPoolComponent.sol";
44
28
 
45
29
  string constant POOL_SERVICE_NAME = "PoolService";
46
30
 
@@ -48,9 +32,6 @@ contract PoolService is
48
32
  ComponentVerifyingService,
49
33
  IPoolService
50
34
  {
51
- using NftIdLib for NftId;
52
- using AmountLib for Amount;
53
-
54
35
  IBundleService internal _bundleService;
55
36
  IComponentService internal _componentService;
56
37
  IInstanceService private _instanceService;
@@ -84,24 +65,20 @@ contract PoolService is
84
65
  registerInterface(type(IPoolService).interfaceId);
85
66
  }
86
67
 
87
-
88
- function setMaxCapitalAmount(Amount maxCapitalAmount)
68
+ /// @inheritdoc IPoolService
69
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
89
70
  external
90
71
  virtual
91
72
  {
92
- /*
93
73
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
94
74
  InstanceReader instanceReader = instance.getInstanceReader();
75
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
95
76
 
96
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
97
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
98
- Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
99
-
100
- poolInfo.maxCapitalAmount = maxCapitalAmount;
77
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
78
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
101
79
  instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
102
80
 
103
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
104
- */
81
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
105
82
  }
106
83
 
107
84
  function setBundleOwnerRole(RoleId bundleOwnerRole)
@@ -125,31 +102,10 @@ contract PoolService is
125
102
  emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
126
103
  }
127
104
 
128
-
129
- function setFees(
130
- Fee memory poolFee,
131
- Fee memory stakingFee,
132
- Fee memory performanceFee
133
- )
134
- external
135
- virtual
136
- {
137
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
138
-
139
- IComponents.PoolInfo memory poolInfo = instance.getInstanceReader().getPoolInfo(poolNftId);
140
- poolInfo.poolFee = poolFee;
141
- poolInfo.stakingFee = stakingFee;
142
- poolInfo.performanceFee = performanceFee;
143
-
144
- instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
145
-
146
- // TODO add logging
147
- }
148
-
105
+ /// @inheritdoc IPoolService
149
106
  function createBundle(
150
107
  address bundleOwner, // initial bundle owner
151
108
  Fee memory fee, // fees deducted from premium that go to bundle owner
152
- Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
153
109
  Seconds lifetime, // initial duration for which new policies are covered
154
110
  bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
155
111
  )
@@ -158,38 +114,17 @@ contract PoolService is
158
114
  returns(NftId bundleNftId)
159
115
  {
160
116
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
161
- InstanceReader instanceReader = instance.getInstanceReader();
162
-
163
- (
164
- Amount stakingFeeAmount,
165
- Amount stakingNetAmount
166
- ) = FeeLib.calculateFee(
167
- _getStakingFee(instanceReader, poolNftId),
168
- stakingAmount);
169
117
 
118
+ // create the empty bundle
170
119
  bundleNftId = _bundleService.create(
171
120
  instance,
172
121
  poolNftId,
173
122
  bundleOwner,
174
123
  fee,
175
- stakingNetAmount,
124
+ AmountLib.zero(),
176
125
  lifetime,
177
126
  filter);
178
127
 
179
- // pool book keeping
180
- _componentService.increasePoolBalance(
181
- instance.getInstanceStore(),
182
- poolNftId,
183
- stakingAmount,
184
- stakingFeeAmount);
185
-
186
- // pool bookkeeping and collect tokens from bundle owner
187
- _collectStakingAmount(
188
- instanceReader,
189
- poolNftId,
190
- bundleOwner,
191
- stakingAmount);
192
-
193
128
  emit LogPoolServiceBundleCreated(instance.getNftId(), poolNftId, bundleNftId);
194
129
  }
195
130
 
@@ -199,8 +134,8 @@ contract PoolService is
199
134
  view
200
135
  returns (Fee memory stakingFee)
201
136
  {
202
- NftId productNftId = instanceReader.getPoolInfo(poolNftId).productNftId;
203
- return instanceReader.getPoolInfo(productNftId).stakingFee;
137
+ NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
138
+ return instanceReader.getProductInfo(productNftId).stakingFee;
204
139
  }
205
140
 
206
141
  function closeBundle(NftId bundleNftId)
@@ -209,20 +144,147 @@ contract PoolService is
209
144
  {
210
145
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
211
146
 
212
- // TODO book keeping for pool collateral released outside of retention level
147
+ // TODO get performance fee for pool (#477)
213
148
 
214
149
  // releasing collateral in bundle
215
- _bundleService.close(instance, bundleNftId);
216
-
217
- // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
150
+ (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
218
151
 
152
+ _componentService.decreasePoolBalance(
153
+ instance.getInstanceStore(),
154
+ poolNftId,
155
+ unstakedAmount + feeAmount,
156
+ AmountLib.zero());
157
+
219
158
  emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
159
+
160
+ if ((unstakedAmount + feeAmount).gtz()){
161
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
162
+ poolComponentInfo.tokenHandler.distributeTokens(
163
+ poolComponentInfo.wallet,
164
+ getRegistry().ownerOf(bundleNftId),
165
+ unstakedAmount + feeAmount);
166
+ }
167
+ }
168
+
169
+ /// @inheritdoc IPoolService
170
+ function stake(NftId bundleNftId, Amount amount)
171
+ external
172
+ virtual
173
+ // TODO: restricted() (once #462 is done)
174
+ returns(Amount netAmount)
175
+ {
176
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
177
+ InstanceReader instanceReader = instance.getInstanceReader();
178
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
179
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
180
+
181
+ if (bundleInfo.poolNftId != poolNftId) {
182
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
183
+ }
184
+
185
+ {
186
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
187
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
188
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
189
+ }
190
+ }
191
+
192
+ // calculate fees
193
+ Amount feeAmount;
194
+ (
195
+ feeAmount,
196
+ netAmount
197
+ ) = FeeLib.calculateFee(
198
+ _getStakingFee(instanceReader, poolNftId),
199
+ amount);
200
+
201
+ // do all the bookkeeping
202
+ _componentService.increasePoolBalance(
203
+ instance.getInstanceStore(),
204
+ poolNftId,
205
+ netAmount,
206
+ feeAmount);
207
+
208
+ _bundleService.stake(instance, bundleNftId, netAmount);
209
+
210
+ // collect tokens from bundle owner
211
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
212
+ emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
213
+
214
+ // TODO only collect staking token when pool is not externally managed
215
+ _collectStakingAmount(
216
+ instanceReader,
217
+ poolNftId,
218
+ bundleOwner,
219
+ amount);
220
+ }
221
+
222
+ /// @inheritdoc IPoolService
223
+ function unstake(NftId bundleNftId, Amount amount)
224
+ external
225
+ virtual
226
+ // TODO: restricted() (once #462 is done)
227
+ returns(Amount netAmount)
228
+ {
229
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
230
+ InstanceReader instanceReader = instance.getInstanceReader();
231
+ InstanceStore instanceStore = instance.getInstanceStore();
232
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
233
+
234
+ if (bundleInfo.poolNftId != poolNftId) {
235
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
236
+ }
237
+
238
+ // call bundle service for bookkeeping and additional checks
239
+ Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
240
+
241
+ // Important: from now on work only with unstakedAmount as it is the only reliable amount.
242
+ // if amount was max, this was set to the available amount
243
+
244
+ // TODO: handle performance fees (issue #477)
245
+
246
+ // update pool bookkeeping - performance fees stay in the pool, but as fees
247
+ _componentService.decreasePoolBalance(
248
+ instanceStore,
249
+ poolNftId,
250
+ unstakedAmount,
251
+ AmountLib.zero());
252
+
253
+ IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
254
+ address poolWallet = poolComponentInfo.wallet;
255
+ // transfer amount to bundle owner
256
+ address owner = getRegistry().ownerOf(bundleNftId);
257
+ emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
258
+ poolComponentInfo.tokenHandler.distributeTokens(
259
+ poolWallet,
260
+ owner,
261
+ unstakedAmount);
262
+ return unstakedAmount;
263
+ }
264
+
265
+
266
+ function fundPoolWallet(NftId poolNftId, Amount amount)
267
+ external
268
+ virtual
269
+ restricted()
270
+ {
271
+ // TODO check that poolNftId is externally managed
272
+ // TODO implement
220
273
  }
221
274
 
222
275
 
276
+ function defundPoolWallet(NftId poolNftId, Amount amount)
277
+ external
278
+ virtual
279
+ restricted()
280
+ {
281
+ // TODO check that poolNftId is externally managed
282
+ // TODO implement
283
+ }
284
+
223
285
  function processSale(
224
286
  NftId bundleNftId,
225
- IPolicy.Premium memory premium
287
+ IPolicy.PremiumInfo memory premium
226
288
  )
227
289
  external
228
290
  virtual
@@ -234,9 +296,9 @@ contract PoolService is
234
296
  IRegistry.ObjectInfo memory instanceObjectInfo = registry.getObjectInfo(poolObjectInfo.parentNftId);
235
297
  IInstance instance = IInstance(instanceObjectInfo.objectAddress);
236
298
 
237
- Amount poolFeeAmount = AmountLib.toAmount(premium.poolFeeFixAmount + premium.poolFeeVarAmount);
238
- Amount bundleFeeAmount = AmountLib.toAmount(premium.bundleFeeFixAmount + premium.bundleFeeVarAmount);
239
- Amount bundleNetAmount = AmountLib.toAmount(premium.netPremiumAmount);
299
+ Amount poolFeeAmount = premium.poolFeeFixAmount + premium.poolFeeVarAmount;
300
+ Amount bundleFeeAmount = premium.bundleFeeFixAmount + premium.bundleFeeVarAmount;
301
+ Amount bundleNetAmount = premium.netPremiumAmount;
240
302
 
241
303
  InstanceStore instanceStore = instance.getInstanceStore();
242
304
  _componentService.increasePoolBalance(
@@ -422,7 +484,6 @@ contract PoolService is
422
484
  }
423
485
 
424
486
 
425
- // TODO create (I)TreasuryService that deals with all gif related token transfers
426
487
  /// @dev transfers the specified amount from the bundle owner to the pool's wallet
427
488
  function _collectStakingAmount(
428
489
  InstanceReader instanceReader,
@@ -435,15 +496,11 @@ contract PoolService is
435
496
 
436
497
  // collecting investor token
437
498
  IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
438
- TokenHandler tokenHandler = componentInfo.tokenHandler;
439
499
  address poolWallet = componentInfo.wallet;
440
-
441
- if(amount.gtz()) {
442
- tokenHandler.transfer(
443
- bundleOwner,
444
- poolWallet,
445
- amount);
446
- }
500
+ componentInfo.tokenHandler.collectTokens(
501
+ bundleOwner,
502
+ poolWallet,
503
+ amount);
447
504
  }
448
505
 
449
506
  function _getDomain() internal pure override returns(ObjectType) {
@@ -1,12 +1,9 @@
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 "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/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 "../type/ObjectType.sol";
10
7
 
11
8
  contract PoolServiceManager is ProxyManager {
12
9
 
@@ -1,51 +1,27 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IApplicationService} from "./IApplicationService.sol";
5
+ import {IComponents} from "../instance/module/IComponents.sol";
6
+ import {IInstance} from "../instance/IInstance.sol";
7
+ import {IRegistry} from "../registry/IRegistry.sol";
8
+ import {IPolicy} from "../instance/module/IPolicy.sol";
9
+ import {IDistributionService} from "../distribution/IDistributionService.sol";
10
+ import {IPricingService} from "./IPricingService.sol";
11
+ import {IRegistryService} from "../registry/IRegistryService.sol";
12
+
4
13
  import {AmountLib} from "../type/Amount.sol";
5
14
  import {Seconds} from "../type/Seconds.sol";
6
- import {Timestamp, TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
7
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
8
- import {Blocknumber, blockNumber} from "../type/Blocknumber.sol";
9
- import {ObjectType, DISTRIBUTION, INSTANCE, PRODUCT, POOL, REGISTRY, APPLICATION, POLICY, BUNDLE, PRICE} from "../type/ObjectType.sol";
10
- import {APPLIED, REVOKED, ACTIVE, KEEP_STATE} from "../type/StateId.sol";
15
+ import {zeroTimestamp} from "../type/Timestamp.sol";
16
+ import {ObjectType, DISTRIBUTION, PRODUCT, REGISTRY, APPLICATION, POLICY, PRICE} from "../type/ObjectType.sol";
17
+ import {REVOKED} from "../type/StateId.sol";
11
18
  import {NftId, NftIdLib} from "../type/NftId.sol";
12
- import {Fee, FeeLib} from "../type/Fee.sol";
13
19
  import {ReferralId} from "../type/Referral.sol";
14
20
  import {RiskId} from "../type/RiskId.sol";
15
- import {StateId} from "../type/StateId.sol";
16
- import {Version, VersionLib} from "../type/Version.sol";
17
21
  import {Amount, AmountLib} from "../type/Amount.sol";
18
-
19
- import {TokenHandler} from "../shared/TokenHandler.sol";
20
- import {IVersionable} from "../shared/IVersionable.sol";
21
- import {Versionable} from "../shared/Versionable.sol";
22
- import {IService} from "../shared/IService.sol";
23
- import {Service} from "../shared/Service.sol";
24
-
25
- import {IRegistry} from "../registry/IRegistry.sol";
26
-
27
- import {IProductComponent} from "./IProductComponent.sol";
28
- import {IPoolComponent} from "../pool/IPoolComponent.sol";
29
- import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
30
- import {Product} from "./Product.sol";
31
-
32
- import {IComponents} from "../instance/module/IComponents.sol";
33
- import {IPolicy} from "../instance/module/IPolicy.sol";
34
- import {IRisk} from "../instance/module/IRisk.sol";
35
- import {IBundle} from "../instance/module/IBundle.sol";
36
- import {IProductService} from "./IProductService.sol";
37
-
38
22
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
39
-
40
- import {IInstance} from "../instance/IInstance.sol";
41
23
  import {InstanceReader} from "../instance/InstanceReader.sol";
42
24
 
43
- import {IApplicationService} from "./IApplicationService.sol";
44
- import {IBundleService} from "../pool/IBundleService.sol";
45
- import {IDistributionService} from "../distribution/IDistributionService.sol";
46
- import {IPoolService} from "../pool/IPoolService.sol";
47
- import {IPricingService} from "./IPricingService.sol";
48
- import {IRegistryService} from "../registry/IRegistryService.sol";
49
25
 
50
26
 
51
27
  contract ApplicationService is
@@ -135,8 +111,7 @@ contract ApplicationService is
135
111
  view
136
112
  returns (Amount premiumAmount)
137
113
  {
138
- return AmountLib.toAmount(
139
- _pricingService.calculatePremium(
114
+ return _pricingService.calculatePremium(
140
115
  info.productNftId,
141
116
  info.riskId,
142
117
  info.sumInsuredAmount,
@@ -144,7 +119,7 @@ contract ApplicationService is
144
119
  info.applicationData,
145
120
  info.bundleNftId,
146
121
  info.referralId
147
- ).premiumAmount);
122
+ ).premiumAmount;
148
123
  }
149
124
 
150
125
 
@@ -152,6 +127,7 @@ contract ApplicationService is
152
127
  address applicationOwner,
153
128
  RiskId riskId,
154
129
  Amount sumInsuredAmount,
130
+ Amount premiumAmount,
155
131
  Seconds lifetime,
156
132
  NftId bundleNftId,
157
133
  ReferralId referralId,
@@ -176,13 +152,45 @@ contract ApplicationService is
176
152
  applicationNftId = _registerApplication(productNftId, applicationOwner);
177
153
 
178
154
  // create policy info for application
179
- IPolicy.PolicyInfo memory applicationInfo = IPolicy.PolicyInfo({
155
+ IPolicy.PolicyInfo memory applicationInfo = _createApplicationInfo(
156
+ productNftId,
157
+ riskId,
158
+ sumInsuredAmount,
159
+ premiumAmount,
160
+ lifetime,
161
+ bundleNftId,
162
+ referralId,
163
+ applicationData);
164
+
165
+ // register application with instance
166
+ instance.getInstanceStore().createApplication(
167
+ applicationNftId,
168
+ applicationInfo);
169
+
170
+ // TODO: add logging
171
+ }
172
+
173
+ function _createApplicationInfo(
174
+ NftId productNftId,
175
+ RiskId riskId,
176
+ Amount sumInsuredAmount,
177
+ Amount premiumAmount,
178
+ Seconds lifetime,
179
+ NftId bundleNftId,
180
+ ReferralId referralId,
181
+ bytes memory applicationData
182
+ )
183
+ internal
184
+ virtual
185
+ returns (IPolicy.PolicyInfo memory applicationInfo)
186
+ {
187
+ return IPolicy.PolicyInfo({
180
188
  productNftId: productNftId,
181
189
  bundleNftId: bundleNftId,
182
190
  referralId: referralId,
183
191
  riskId: riskId,
184
192
  sumInsuredAmount: sumInsuredAmount,
185
- premiumAmount: AmountLib.zero(),
193
+ premiumAmount: premiumAmount,
186
194
  premiumPaidAmount: AmountLib.zero(),
187
195
  lifetime: lifetime,
188
196
  applicationData: applicationData,
@@ -195,21 +203,8 @@ contract ApplicationService is
195
203
  expiredAt: zeroTimestamp(),
196
204
  closedAt: zeroTimestamp()
197
205
  });
198
-
199
- // TODO consider to provide this amount externally
200
- // actual calculation is done 2nd time anyway for premium collection
201
- // calculate premium amount
202
- applicationInfo.premiumAmount = _calculatePremiumAmount(applicationInfo);
203
-
204
- // register application with instance
205
- instance.getInstanceStore().createApplication(
206
- applicationNftId,
207
- applicationInfo);
208
-
209
- // TODO: add logging
210
206
  }
211
207
 
212
-
213
208
  function renew(
214
209
  NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
215
210
  NftId bundleNftId // will likely need a newer bundle for underwriting
@@ -218,7 +213,7 @@ contract ApplicationService is
218
213
  virtual override
219
214
  returns (NftId applicationNftId)
220
215
  {
221
-
216
+ // TODO implement
222
217
  }
223
218
 
224
219
 
@@ -234,7 +229,7 @@ contract ApplicationService is
234
229
  external
235
230
  virtual override
236
231
  {
237
-
232
+ // TODO implement
238
233
  }
239
234
 
240
235
  function revoke(NftId applicationNftId)
@@ -1,8 +1,8 @@
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 "../upgradeability/IVersionable.sol";
5
+ import {ProxyManager} from "../upgradeability/ProxyManager.sol";
6
6
  import {ApplicationService} from "./ApplicationService.sol";
7
7
 
8
8
  contract ApplicationServiceManager is ProxyManager {
@@ -1,43 +1,15 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
-
6
- import {Amount, AmountLib} from "../type/Amount.sol";
7
- import {ClaimId} from "../type/ClaimId.sol";
8
- import {InstanceLinkedComponent} from "../shared/InstanceLinkedComponent.sol";
9
- import {Fee, FeeLib} from "../type/Fee.sol";
10
- import {IRisk} from "../instance/module/IRisk.sol";
11
- import {IApplicationService} from "./IApplicationService.sol";
4
+ import {Fee} from "../type/Fee.sol";
12
5
  import {IAuthorization} from "../authorization/IAuthorization.sol";
13
- import {IComponentService} from "../shared/IComponentService.sol";
14
- import {IPolicyService} from "./IPolicyService.sol";
15
- import {IProductService} from "./IProductService.sol";
16
- import {IClaimService} from "./IClaimService.sol";
17
- import {IPricingService} from "./IPricingService.sol";
18
- import {IProductComponent} from "./IProductComponent.sol";
19
- import {NftId, NftIdLib} from "../type/NftId.sol";
6
+ import {NftId} from "../type/NftId.sol";
20
7
  import {Product} from "../product/Product.sol";
21
- import {PayoutId} from "../type/PayoutId.sol";
22
- import {COMPONENT, PRODUCT, APPLICATION, POLICY, CLAIM, PRICE } from "../type/ObjectType.sol";
23
- import {ReferralId} from "../type/Referral.sol";
24
- import {RiskId, RiskIdLib} from "../type/RiskId.sol";
25
- import {Seconds} from "../type/Seconds.sol";
26
- import {StateId} from "../type/StateId.sol";
27
- import {Timestamp} from "../type/Timestamp.sol";
28
-
29
- import {TokenHandler} from "../shared/TokenHandler.sol";
30
-
31
- import {InstanceReader} from "../instance/InstanceReader.sol";
32
- import {IPolicy} from "../instance/module/IPolicy.sol";
33
- import {IComponents} from "../instance/module/IComponents.sol";
34
- import {Pool} from "../pool/Pool.sol";
35
- import {Distribution} from "../distribution/Distribution.sol";
36
8
 
37
9
  abstract contract BasicProduct is
38
10
  Product
39
11
  {
40
-
12
+
41
13
  function setFees(
42
14
  Fee memory productFee,
43
15
  Fee memory processingFee
@@ -49,8 +21,6 @@ abstract contract BasicProduct is
49
21
  {
50
22
  _setFees(productFee, processingFee);
51
23
  }
52
-
53
-
54
24
  function _initializeBasicProduct(
55
25
  address registry,
56
26
  NftId instanceNftId,
@@ -5,6 +5,7 @@ import {Authorization} from "../authorization/Authorization.sol";
5
5
  import {BasicProduct} from "./BasicProduct.sol";
6
6
  import {PRODUCT} from "../type/ObjectType.sol";
7
7
  import {IAccess} from "../authorization/IAccess.sol";
8
+ import {IInstanceLinkedComponent} from "../shared/IInstanceLinkedComponent.sol";
8
9
  import {PUBLIC_ROLE} from "../../contracts/type/RoleId.sol";
9
10
  import {RoleId} from "../type/RoleId.sol";
10
11
 
@@ -35,6 +36,8 @@ contract BasicProductAuthorization
35
36
  // authorize public role (open access to any account, only allows to lock target)
36
37
  functions = _authorizeForTarget(getTargetName(), PUBLIC_ROLE());
37
38
  _authorize(functions, BasicProduct.setFees.selector, "setFees");
39
+
40
+ _authorize(functions, IInstanceLinkedComponent.withdrawFees.selector, "withdrawFees");
38
41
  }
39
42
  }
40
43