@etherisc/gif-next 0.0.2-bcecc4c-647 → 0.0.2-bd8fe7c-423

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 (262) hide show
  1. package/README.md +16 -2
  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 +30 -60
  18. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
  20. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +0 -38
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +2 -2
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +2 -2
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  28. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  29. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  30. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  31. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  32. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  33. package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
  34. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +2 -2
  36. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  37. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +2 -2
  38. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  39. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +78 -115
  40. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  41. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +2 -2
  42. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  43. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +2 -2
  44. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +16 -128
  46. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  48. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  50. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  51. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  53. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  55. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  61. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  62. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  63. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  64. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +18 -48
  65. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  66. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  67. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  68. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  69. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  70. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  71. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +0 -38
  72. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  73. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
  74. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  75. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
  76. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  77. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +11 -99
  78. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  79. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  80. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  81. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +131 -93
  82. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  83. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +57 -49
  84. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  85. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +25 -3
  86. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  87. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +1 -57
  88. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  89. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +74 -66
  90. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  91. package/artifacts/contracts/pool/Pool.sol/Pool.json +1 -95
  92. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +198 -118
  94. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +63 -27
  96. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  97. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
  98. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
  100. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  101. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +0 -38
  102. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  103. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
  104. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  105. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +82 -58
  106. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  107. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +34 -30
  108. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  109. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  110. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
  111. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  112. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +184 -88
  113. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  114. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  115. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  116. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  117. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +291 -139
  118. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  119. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +54 -26
  120. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  121. package/artifacts/contracts/product/PricingService.sol/PricingService.json +2 -2
  122. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  123. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  124. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  125. package/artifacts/contracts/product/Product.sol/Product.json +0 -38
  126. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  127. package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
  128. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  129. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
  130. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  131. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  132. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  133. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  134. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  135. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  136. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  137. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +2 -2
  138. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  139. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  140. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  141. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  142. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  143. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  144. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +2 -2
  145. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  146. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +2 -2
  147. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  148. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  149. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  150. package/artifacts/contracts/shared/Component.sol/Component.json +0 -38
  151. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  152. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +74 -58
  153. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  154. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +38 -30
  155. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  156. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  157. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  158. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  159. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  160. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  161. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  162. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  163. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  164. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  165. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  166. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  167. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  168. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  169. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +0 -38
  170. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  171. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  172. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  173. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  174. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  175. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  176. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  177. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  178. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  179. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  180. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  181. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  182. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  183. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +53 -6
  184. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  185. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  186. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  187. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +2 -2
  188. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  189. package/artifacts/contracts/staking/Staking.sol/Staking.json +56 -70
  190. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  191. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  192. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +29 -17
  193. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  194. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  195. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  196. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
  197. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  198. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +12 -12
  199. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  200. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2 -2
  201. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  202. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +2 -2
  203. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  204. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  205. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  206. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  207. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  208. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  209. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  210. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  211. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  212. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  213. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  214. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  215. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  216. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  217. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  218. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  219. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  220. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  221. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  222. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  223. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  224. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  225. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  226. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  228. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  229. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  230. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  231. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  232. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +2 -2
  233. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  234. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  235. package/contracts/distribution/DistributionService.sol +1 -2
  236. package/contracts/instance/InstanceReader.sol +10 -7
  237. package/contracts/instance/base/ObjectLifecycle.sol +1 -3
  238. package/contracts/instance/module/IComponents.sol +1 -6
  239. package/contracts/instance/module/IPolicy.sol +1 -1
  240. package/contracts/mock/Dip.sol +1 -1
  241. package/contracts/pool/BasicPool.sol +7 -5
  242. package/contracts/pool/BasicPoolAuthorization.sol +5 -2
  243. package/contracts/pool/BundleService.sol +51 -25
  244. package/contracts/pool/IBundleService.sol +12 -5
  245. package/contracts/pool/IPoolService.sol +8 -14
  246. package/contracts/pool/Pool.sol +7 -11
  247. package/contracts/pool/PoolService.sol +103 -86
  248. package/contracts/product/BasicProduct.sol +3 -33
  249. package/contracts/product/ClaimService.sol +16 -9
  250. package/contracts/product/IClaimService.sol +1 -0
  251. package/contracts/product/IPolicyService.sol +19 -12
  252. package/contracts/product/PolicyService.sol +188 -108
  253. package/contracts/product/Product.sol +19 -0
  254. package/contracts/shared/Component.sol +8 -7
  255. package/contracts/shared/ComponentService.sol +1 -2
  256. package/contracts/shared/IComponent.sol +4 -3
  257. package/contracts/shared/IInstanceLinkedComponent.sol +8 -8
  258. package/contracts/shared/TokenHandler.sol +4 -0
  259. package/contracts/staking/StakingService.sol +8 -12
  260. package/contracts/type/Blocknumber.sol +7 -1
  261. package/contracts/type/Timestamp.sol +11 -1
  262. package/package.json +1 -1
@@ -16,7 +16,7 @@ import {IPolicy} from "../instance/module/IPolicy.sol";
16
16
  import {Amount, AmountLib} from "../type/Amount.sol";
17
17
  import {BundleSet} from "../instance/BundleSet.sol";
18
18
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
19
- import {Fee, FeeLib} from "../type/Fee.sol";
19
+ import {Fee} from "../type/Fee.sol";
20
20
  import {InstanceReader} from "../instance/InstanceReader.sol";
21
21
  import {NftId, NftIdLib} from "../type/NftId.sol";
22
22
  import {ObjectType, COMPONENT, POOL, BUNDLE, REGISTRY} from "../type/ObjectType.sol";
@@ -113,13 +113,15 @@ contract BundleService is
113
113
  InstanceStore instanceStore = instance.getInstanceStore();
114
114
  instanceStore.createBundle(
115
115
  bundleNftId,
116
- IBundle.BundleInfo(
117
- poolNftId,
118
- bundleFee,
119
- filter,
120
- TimestampLib.blockTimestamp(),
121
- TimestampLib.blockTimestamp().addSeconds(lifetime),
122
- zeroTimestamp()));
116
+ IBundle.BundleInfo({
117
+ poolNftId: poolNftId,
118
+ fee: bundleFee,
119
+ filter: filter,
120
+ activatedAt: TimestampLib.blockTimestamp(),
121
+ expiredAt: TimestampLib.blockTimestamp().addSeconds(lifetime),
122
+ closedAt: zeroTimestamp()
123
+ })
124
+ );
123
125
 
124
126
  // bundle book keeping
125
127
  _componentService.increaseBundleBalance(
@@ -131,7 +133,6 @@ contract BundleService is
131
133
  // put bundle under bundle managemet
132
134
  BundleSet bundleManager = instance.getBundleSet();
133
135
  bundleManager.add(bundleNftId);
134
-
135
136
  // TODO add logging
136
137
  }
137
138
 
@@ -148,7 +149,7 @@ contract BundleService is
148
149
  restricted()
149
150
  {
150
151
  InstanceReader instanceReader = instance.getInstanceReader();
151
- StateId bundleState = instanceReader.getMetadata(bundleNftId.toKey32(BUNDLE())).state;
152
+ StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
152
153
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
153
154
 
154
155
  // ensure bundle is active and not yet expired
@@ -218,9 +219,9 @@ contract BundleService is
218
219
  external
219
220
  virtual
220
221
  restricted
222
+ returns (Amount unstakedAmount, Amount feeAmount)
221
223
  {
222
- // udpate bundle state
223
- instance.getInstanceStore().updateBundleState(bundleNftId, CLOSED());
224
+ InstanceReader instanceReader = instance.getInstanceReader();
224
225
 
225
226
  // ensure no open policies attached to bundle
226
227
  BundleSet bundleManager = instance.getBundleSet();
@@ -229,8 +230,18 @@ contract BundleService is
229
230
  revert ErrorBundleServiceBundleWithOpenPolicies(bundleNftId, openPolicies);
230
231
  }
231
232
 
232
- // update set of active bundles
233
- bundleManager.lock(bundleNftId);
233
+ {
234
+ // update bundle state
235
+ InstanceStore instanceStore = instance.getInstanceStore();
236
+ instanceStore.updateBundleState(bundleNftId, CLOSED());
237
+ bundleManager.lock(bundleNftId);
238
+
239
+ // decrease bundle counters
240
+ Amount balanceAmountWithFees = instanceReader.getBalanceAmount(bundleNftId);
241
+ feeAmount = instanceReader.getFeeAmount(bundleNftId);
242
+ unstakedAmount = balanceAmountWithFees - feeAmount;
243
+ _componentService.decreaseBundleBalance(instanceStore, bundleNftId, unstakedAmount, feeAmount);
244
+ }
234
245
  }
235
246
 
236
247
  /// @inheritdoc IBundleService
@@ -241,12 +252,14 @@ contract BundleService is
241
252
  )
242
253
  external
243
254
  virtual
244
- restricted()
255
+ // TODO: restricted() (once #462 is done)
245
256
  {
246
257
  IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
247
- StateId bundleState = instance.getInstanceReader().getMetadata(bundleNftId.toKey32(BUNDLE())).state;
258
+ StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
248
259
 
249
- if(bundleState != ACTIVE() || bundleInfo.expiredAt < TimestampLib.blockTimestamp() || bundleInfo.closedAt.gtz()) {
260
+ if( (bundleState != ACTIVE() && bundleState != PAUSED()) // locked bundles can be staked
261
+ || bundleInfo.expiredAt < TimestampLib.blockTimestamp()
262
+ || bundleInfo.closedAt.gtz()) {
250
263
  revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
251
264
  }
252
265
 
@@ -265,7 +278,8 @@ contract BundleService is
265
278
  )
266
279
  external
267
280
  virtual
268
- restricted()
281
+ // TODO: restricted() (once #462 is done)
282
+ returns (Amount unstakedAmount)
269
283
  {
270
284
  InstanceStore instanceStore = instance.getInstanceStore();
271
285
  (
@@ -274,29 +288,38 @@ contract BundleService is
274
288
  Amount feeAmount
275
289
  ) = instanceStore.getAmounts(bundleNftId);
276
290
 
291
+ Amount unstakedAmount = amount;
277
292
  Amount availableAmount = balanceAmount - (lockedAmount + feeAmount);
293
+
294
+ // if amount is max, then unstake all available
295
+ if (amount.gte(AmountLib.max())) {
296
+ unstakedAmount = availableAmount;
297
+ }
278
298
 
279
- if (availableAmount < amount) {
280
- revert ErrorBundleServiceStakeAmountExceedsLimit(amount, availableAmount);
299
+ // ensure unstaked amount does not exceed available amount
300
+ if (unstakedAmount > availableAmount) {
301
+ revert ErrorBundleServiceUnstakeAmountExceedsLimit(amount, availableAmount);
281
302
  }
282
303
 
283
304
  _componentService.decreaseBundleBalance(
284
305
  instanceStore,
285
306
  bundleNftId,
286
- amount,
307
+ unstakedAmount,
287
308
  AmountLib.zero());
309
+
310
+ return unstakedAmount;
288
311
  }
289
312
 
290
313
  /// @inheritdoc IBundleService
291
314
  function extend(NftId bundleNftId, Seconds lifetimeExtension)
292
315
  external
293
316
  virtual
294
- restricted
317
+ // TODO: restricted() (once #462 is done)
295
318
  returns (Timestamp extendedExpiredAt)
296
319
  {
297
320
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
298
321
  IBundle.BundleInfo memory bundleInfo = instance.getInstanceReader().getBundleInfo(bundleNftId);
299
- StateId bundleState = instance.getInstanceReader().getMetadata(bundleNftId.toKey32(BUNDLE())).state;
322
+ StateId bundleState = instance.getInstanceReader().getBundleState(bundleNftId);
300
323
 
301
324
  // ensure bundle belongs to the pool
302
325
  if (bundleInfo.poolNftId != poolNftId) {
@@ -308,6 +331,10 @@ contract BundleService is
308
331
  revert ErrorBundleServiceBundleNotOpen(bundleNftId, bundleState, bundleInfo.expiredAt);
309
332
  }
310
333
 
334
+ if (lifetimeExtension.eqz()) {
335
+ revert ErrorBundleServiceExtensionLifetimeIsZero();
336
+ }
337
+
311
338
  bundleInfo.expiredAt = bundleInfo.expiredAt.addSeconds(lifetimeExtension);
312
339
  instance.getInstanceStore().updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
313
340
 
@@ -395,10 +422,9 @@ contract BundleService is
395
422
  // transfer amount to bundle owner
396
423
  {
397
424
  address owner = getRegistry().ownerOf(bundleNftId);
425
+ emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(token), withdrawnAmount);
398
426
  // TODO: centralize token handling (issue #471)
399
427
  poolInfo.tokenHandler.transfer(poolWallet, owner, withdrawnAmount);
400
-
401
- emit LogBundleServiceFeesWithdrawn(bundleNftId, owner, address(token), withdrawnAmount);
402
428
  }
403
429
  }
404
430
 
@@ -26,12 +26,13 @@ interface IBundleService is IService {
26
26
 
27
27
  error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
28
28
 
29
- // error ErrorBundleServiceBundleNotActive(NftId distributorNftId);
30
29
  error ErrorBundleServiceFeesWithdrawAmountExceedsLimit(Amount amount, Amount limit);
31
30
  error ErrorBundleServiceFeesWithdrawAmountIsZero();
32
31
  error ErrorBundleServiceWalletAllowanceTooSmall(address wallet, address tokenHandler, uint256 allowance, uint256 amount);
33
32
 
34
- error ErrorBundleServiceStakeAmountExceedsLimit(Amount amount, Amount limit);
33
+ error ErrorBundleServiceUnstakeAmountExceedsLimit(Amount amount, Amount limit);
34
+
35
+ error ErrorBundleServiceExtensionLifetimeIsZero();
35
36
 
36
37
  event LogBundleServiceFeesWithdrawn(NftId bundleNftId, address recipient, address tokenAddress, Amount amount);
37
38
  event LogBundleServiceBundleExtended(NftId bundleNftId, Seconds lifetimeExtension, Timestamp extendedExpiredAt);
@@ -51,13 +52,17 @@ interface IBundleService is IService {
51
52
  returns(NftId bundleNftId); // the nft id of the newly created bundle
52
53
 
53
54
 
54
- /// @dev increase bundle stakes by the specified amount
55
+ /// @dev increase bundle stakes by the specified amount. bundle must not be expired or closed
55
56
  /// may only be called by the pool service
56
57
  function stake(IInstance instance, NftId bundleNftId, Amount amount) external;
57
58
 
58
59
  /// @dev decrease bundle stakes by the specified amount
59
60
  /// may only be called by the pool service
60
- function unstake(IInstance instance, NftId bundleNftId, Amount amount) external;
61
+ /// @param instance the instance relevant for the bundle
62
+ /// @param bundleNftId the bundle nft id
63
+ /// @param amount the amount to unstake (set to AmountLib.max() to unstake all available stakes)
64
+ /// @return unstakedAmount the effective unstaked amount
65
+ function unstake(IInstance instance, NftId bundleNftId, Amount amount) external returns (Amount unstakedAmount);
61
66
 
62
67
  /// @dev extend the lifetime of the bundle by the specified time in seconds
63
68
  function extend(NftId bundleNftId, Seconds lifetimeExtension) external returns (Timestamp extendedExpiredAt);
@@ -76,10 +81,12 @@ interface IBundleService is IService {
76
81
  /// only open bundles (active or locked) may be closed
77
82
  /// to close a bundle it may not have any non-closed polices attached to it
78
83
  /// may only be called by registered and unlocked pool components
84
+ /// @return balanceAmount the unstaked amount that was remaining in the bundle
85
+ /// @return feeAmount the fee amount that was remaining for the bundle
79
86
  function close(
80
87
  IInstance instance,
81
88
  NftId bundleNftId
82
- ) external;
89
+ ) external returns (Amount balanceAmount, Amount feeAmount);
83
90
 
84
91
  /// @dev set bundle fee to provided value
85
92
  /// may only be called by registered and unlocked pool components
@@ -17,33 +17,28 @@ import {UFixed} from "../type/UFixed.sol";
17
17
 
18
18
  interface IPoolService is IService {
19
19
 
20
- event LogPoolServiceMaxCapitalAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
20
+ event LogPoolServiceMaxBalanceAmountUpdated(NftId poolNftId, Amount previousMaxCapitalAmount, Amount currentMaxCapitalAmount);
21
21
  event LogPoolServiceBundleOwnerRoleSet(NftId poolNftId, RoleId bundleOwnerRole);
22
22
 
23
23
  event LogPoolServiceBundleCreated(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
24
24
  event LogPoolServiceBundleClosed(NftId instanceNftId, NftId poolNftId, NftId bundleNftId);
25
25
 
26
26
  event LogPoolServiceBundleStaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount, Amount netAmount);
27
+ event LogPoolServiceBundleUnstaked(NftId instanceNftId, NftId poolNftId, NftId bundleNftId, Amount amount);
27
28
 
28
29
  error ErrorPoolServiceBundleOwnerRoleAlreadySet(NftId poolNftId);
29
30
  error ErrorPoolServiceInvalidTransferAmount(Amount expectedAmount, Amount actualAmount);
30
31
  error ErrorPoolServiceBundlePoolMismatch(NftId bundleNftId, NftId poolNftId);
31
- error ErrorPoolServiceMaxCapitalAmountExceeded(NftId poolNftId, Amount maxCapitalAmount, Amount capitalAmount, Amount amountToBeAdded);
32
+ error ErrorPoolServiceMaxBalanceAmountExceeded(NftId poolNftId, Amount maxBalanceAmount, Amount currentBalanceAmount, Amount transferAmount);
33
+ error ErrorPoolServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
34
+ error ErrorPoolServiceAmountIsZero();
32
35
 
33
36
  /// @dev defines the required role for bundle owners for the calling pool
34
37
  /// default implementation returns PUBLIC ROLE
35
38
  function setBundleOwnerRole(RoleId bundleOwnerRole) external;
36
39
 
37
- /// @dev sets the max capital amount for the calling pool
38
- function setMaxCapitalAmount(Amount maxCapitalAmount) external;
39
-
40
- /// @dev set pool sepecific fees
41
- function setFees(
42
- Fee memory poolFee,
43
- Fee memory stakingFee,
44
- Fee memory performanceFee
45
- ) external;
46
-
40
+ /// @dev sets the max balance amount for the calling pool
41
+ function setMaxBalanceAmount(Amount maxBalanceAmount) external;
47
42
 
48
43
  /// @dev locks required collateral to cover the specified application (and turn it into a policy)
49
44
  /// - retention level == 1: the full collateral amount will be locked by the specified bundle
@@ -99,8 +94,7 @@ interface IPoolService is IService {
99
94
  bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
100
95
  )
101
96
  external
102
- returns(NftId bundleNftId); // the nft id of the newly created bundle
103
- // TODO: return netAmount
97
+ returns(NftId bundleNftId, Amount netStakedAmount); // the nft id of the newly created bundle
104
98
 
105
99
 
106
100
  /// @dev closes the specified bundle
@@ -114,17 +114,13 @@ abstract contract Pool is
114
114
  returns (IComponents.PoolInfo memory poolInfo)
115
115
  {
116
116
  return IComponents.PoolInfo(
117
- NftIdLib.zero(), // will be set when GIF registers the related product
118
117
  PUBLIC_ROLE(), // bundleOwnerRole
119
118
  AmountLib.max(), // maxCapitalAmount,
120
119
  isNftInterceptor(), // isInterceptingBundleTransfers
121
120
  false, // isExternallyManaged,
122
121
  false, // isVerifyingApplications,
123
122
  UFixedLib.toUFixed(1), // collateralizationLevel,
124
- UFixedLib.toUFixed(1), // retentionLevel,
125
- FeeLib.zero(), // initialPoolFee,
126
- FeeLib.zero(), // initialStakingFee,
127
- FeeLib.zero() // initialPerformanceFee,
123
+ UFixedLib.toUFixed(1) // retentionLevel,
128
124
  );
129
125
  }
130
126
 
@@ -233,7 +229,7 @@ abstract contract Pool is
233
229
  /// To close a bundle all all linked policies MUST be in closed state as well.
234
230
  /// Closing a bundle finalizes the bundle bookkeeping including overall profit calculation.
235
231
  /// Once a bundle is closed this action cannot be reversed.
236
- function _close(NftId bundleNftId)
232
+ function _closeBundle(NftId bundleNftId)
237
233
  internal
238
234
  virtual
239
235
  {
@@ -255,13 +251,13 @@ abstract contract Pool is
255
251
  }
256
252
 
257
253
 
258
- /// @dev Sets the maximum overall capital amound held by this pool.
254
+ /// @dev Sets the maximum balance amound held by this pool.
259
255
  /// Function may only be called by pool owner.
260
- function _setMaxCapitalAmount(Amount maxCapitalAmount)
256
+ function _setMaxBalanceAmount(Amount maxBalanceAmount)
261
257
  internal
262
258
  virtual
263
259
  {
264
- _getPoolStorage()._poolService.setMaxCapitalAmount(maxCapitalAmount);
260
+ _getPoolStorage()._poolService.setMaxBalanceAmount(maxBalanceAmount);
265
261
  }
266
262
 
267
263
  /// @dev Sets the required role to create/own bundles.
@@ -300,9 +296,9 @@ abstract contract Pool is
300
296
  bytes memory filter
301
297
  )
302
298
  internal
303
- returns(NftId bundleNftId)
299
+ returns(NftId bundleNftId, Amount netStakedAmount)
304
300
  {
305
- bundleNftId = _getPoolStorage()._poolService.createBundle(
301
+ (bundleNftId, netStakedAmount) = _getPoolStorage()._poolService.createBundle(
306
302
  bundleOwner,
307
303
  fee,
308
304
  amount,
@@ -1,6 +1,8 @@
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
+
4
6
  import {IBundle} from "../instance/module/IBundle.sol";
5
7
  import {IBundleService} from "./IBundleService.sol";
6
8
  import {IComponents} from "../instance/module/IComponents.sol";
@@ -15,7 +17,7 @@ import {IStaking} from "../staking/IStaking.sol";
15
17
 
16
18
  import {Amount, AmountLib} from "../type/Amount.sol";
17
19
  import {Fee, FeeLib} from "../type/Fee.sol";
18
- import {NftId, NftIdLib} from "../type/NftId.sol";
20
+ import {NftId} from "../type/NftId.sol";
19
21
  import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
20
22
  import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
21
23
  import {Fee, FeeLib} from "../type/Fee.sol";
@@ -66,24 +68,20 @@ contract PoolService is
66
68
  registerInterface(type(IPoolService).interfaceId);
67
69
  }
68
70
 
69
-
70
- function setMaxCapitalAmount(Amount maxCapitalAmount)
71
+ /// @inheritdoc IPoolService
72
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
71
73
  external
72
74
  virtual
73
75
  {
74
- /*
75
76
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
76
77
  InstanceReader instanceReader = instance.getInstanceReader();
78
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
77
79
 
78
- IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(poolNftId);
79
- IComponents.PoolInfo memory poolInfo = abi.decode(componentInfo.data, (IComponents.PoolInfo));
80
- Amount previousMaxCapitalAmount = poolInfo.maxCapitalAmount;
81
-
82
- poolInfo.maxCapitalAmount = maxCapitalAmount;
80
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
81
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
83
82
  instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
84
83
 
85
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
86
- */
84
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
87
85
  }
88
86
 
89
87
  function setBundleOwnerRole(RoleId bundleOwnerRole)
@@ -107,27 +105,6 @@ contract PoolService is
107
105
  emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
108
106
  }
109
107
 
110
-
111
- function setFees(
112
- Fee memory poolFee,
113
- Fee memory stakingFee,
114
- Fee memory performanceFee
115
- )
116
- external
117
- virtual
118
- {
119
- (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
120
-
121
- IComponents.PoolInfo memory poolInfo = instance.getInstanceReader().getPoolInfo(poolNftId);
122
- poolInfo.poolFee = poolFee;
123
- poolInfo.stakingFee = stakingFee;
124
- poolInfo.performanceFee = performanceFee;
125
-
126
- instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
127
-
128
- // TODO add logging
129
- }
130
-
131
108
  /// @inheritdoc IPoolService
132
109
  function createBundle(
133
110
  address bundleOwner, // initial bundle owner
@@ -138,26 +115,32 @@ contract PoolService is
138
115
  )
139
116
  external
140
117
  virtual
141
- returns(NftId bundleNftId)
118
+ returns(NftId bundleNftId, Amount netStakedAmount)
142
119
  {
143
120
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
144
- InstanceReader instanceReader = instance.getInstanceReader();
145
121
 
146
- (
147
- Amount stakingFeeAmount,
148
- Amount stakingNetAmount
149
- ) = FeeLib.calculateFee(
150
- _getStakingFee(instanceReader, poolNftId),
122
+ {
123
+ InstanceReader instanceReader = instance.getInstanceReader();
124
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
125
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
126
+ if (currentPoolBalance + stakingAmount > poolInfo.maxBalanceAmount) {
127
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, stakingAmount);
128
+ }
129
+ }
130
+
131
+
132
+ Amount stakingFeeAmount;
133
+ (stakingFeeAmount, netStakedAmount) = FeeLib.calculateFee(
134
+ _getStakingFee(instance.getInstanceReader(), poolNftId),
151
135
  stakingAmount);
152
136
 
153
- // TODO: staking amount must be be > maxCapitalAmount
154
137
 
155
138
  bundleNftId = _bundleService.create(
156
139
  instance,
157
140
  poolNftId,
158
141
  bundleOwner,
159
142
  fee,
160
- stakingNetAmount,
143
+ netStakedAmount,
161
144
  lifetime,
162
145
  filter);
163
146
 
@@ -165,12 +148,12 @@ contract PoolService is
165
148
  _componentService.increasePoolBalance(
166
149
  instance.getInstanceStore(),
167
150
  poolNftId,
168
- stakingNetAmount,
151
+ netStakedAmount,
169
152
  stakingFeeAmount);
170
153
 
171
154
  // pool bookkeeping and collect tokens from bundle owner
172
155
  _collectStakingAmount(
173
- instanceReader,
156
+ instance.getInstanceReader(),
174
157
  poolNftId,
175
158
  bundleOwner,
176
159
  stakingAmount);
@@ -184,8 +167,8 @@ contract PoolService is
184
167
  view
185
168
  returns (Fee memory stakingFee)
186
169
  {
187
- NftId productNftId = instanceReader.getPoolInfo(poolNftId).productNftId;
188
- return instanceReader.getPoolInfo(productNftId).stakingFee;
170
+ NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
171
+ return instanceReader.getProductInfo(productNftId).stakingFee;
189
172
  }
190
173
 
191
174
  function closeBundle(NftId bundleNftId)
@@ -194,21 +177,47 @@ contract PoolService is
194
177
  {
195
178
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
196
179
 
197
- // TODO book keeping for pool collateral released outside of retention level
180
+ // TODO get performance fee for pool (#477)
198
181
 
199
182
  // releasing collateral in bundle
200
- _bundleService.close(instance, bundleNftId);
201
-
202
- // TODO get performance fee for pool, transfer of remaining funds + bundle fees to bundle owner
183
+ (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
203
184
 
185
+ _componentService.decreasePoolBalance(
186
+ instance.getInstanceStore(),
187
+ poolNftId,
188
+ unstakedAmount + feeAmount,
189
+ AmountLib.zero());
190
+
204
191
  emit LogPoolServiceBundleClosed(instance.getNftId(), poolNftId, bundleNftId);
192
+
193
+ if ((unstakedAmount + feeAmount).gtz()){
194
+ IComponents.ComponentInfo memory poolComponentInfo = instance.getInstanceReader().getComponentInfo(poolNftId);
195
+ TokenHandler tokenHandler = poolComponentInfo.tokenHandler;
196
+ IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
197
+
198
+ // TODO: centralize token handling (issue #471)
199
+
200
+ // check allowance
201
+ uint256 tokenAllowance = token.allowance(poolComponentInfo.wallet, address(tokenHandler));
202
+ if (tokenAllowance < (unstakedAmount.toInt() + feeAmount.toInt())) {
203
+ revert ErrorPoolServiceWalletAllowanceTooSmall(
204
+ poolComponentInfo.wallet,
205
+ address(tokenHandler),
206
+ tokenAllowance,
207
+ unstakedAmount.toInt() + feeAmount.toInt());
208
+ }
209
+
210
+ // transfer amount to bundle owner
211
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
212
+ tokenHandler.transfer(poolComponentInfo.wallet, bundleOwner, unstakedAmount + feeAmount);
213
+ }
205
214
  }
206
215
 
207
216
  /// @inheritdoc IPoolService
208
217
  function stake(NftId bundleNftId, Amount amount)
209
218
  external
210
219
  virtual
211
- restricted()
220
+ // TODO: restricted() (once #462 is done)
212
221
  returns(Amount netAmount)
213
222
  {
214
223
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
@@ -220,15 +229,18 @@ contract PoolService is
220
229
  revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
221
230
  }
222
231
 
223
- Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
224
- if (amount + currentPoolBalance > poolInfo.maxCapitalAmount) {
225
- revert ErrorPoolServiceMaxCapitalAmountExceeded(poolNftId, poolInfo.maxCapitalAmount, currentPoolBalance, amount);
232
+ {
233
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
234
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
235
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
236
+ }
226
237
  }
227
238
 
228
239
  // calculate fees
240
+ Amount feeAmount;
229
241
  (
230
- Amount feeAmount,
231
- Amount netAmount
242
+ feeAmount,
243
+ netAmount
232
244
  ) = FeeLib.calculateFee(
233
245
  _getStakingFee(instanceReader, poolNftId),
234
246
  amount);
@@ -244,69 +256,67 @@ contract PoolService is
244
256
 
245
257
  // collect tokens from bundle owner
246
258
  address bundleOwner = getRegistry().ownerOf(bundleNftId);
259
+ emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
247
260
  _collectStakingAmount(
248
261
  instanceReader,
249
262
  poolNftId,
250
263
  bundleOwner,
251
264
  amount);
252
-
253
- emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
254
265
  }
255
266
 
256
267
  /// @inheritdoc IPoolService
257
268
  function unstake(NftId bundleNftId, Amount amount)
258
269
  external
259
270
  virtual
260
- restricted()
271
+ // TODO: restricted() (once #462 is done)
261
272
  returns(Amount netAmount)
262
273
  {
263
274
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
264
275
  InstanceReader instanceReader = instance.getInstanceReader();
265
276
  InstanceStore instanceStore = instance.getInstanceStore();
266
277
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
267
-
278
+
268
279
  if (bundleInfo.poolNftId != poolNftId) {
269
280
  revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
270
281
  }
271
282
 
283
+ if (amount.eqz()) {
284
+ revert ErrorPoolServiceAmountIsZero();
285
+ }
286
+
272
287
  // call bundle service for bookkeeping and additional checks
273
- _bundleService.unstake(instance, bundleNftId, amount);
288
+ Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
274
289
 
275
- // TODO: no performance fees right now -> separate new ticket
276
- // FIXME: performance fee is only calculated on the earnings
277
- (
278
- Amount performanceFeeAmount,
279
- Amount netAmount
280
- ) = FeeLib.calculateFee(
281
- _getPerformanceFee(instanceReader, poolNftId),
282
- amount);
290
+ // Important: from now on work only with unstakedAmount as it is the only reliable amount.
291
+ // if amount was max, this was set to the available amount
292
+
293
+ // TODO: handle performance fees (issue #477)
283
294
 
284
295
  // update pool bookkeeping - performance fees stay in the pool, but as fees
285
296
  _componentService.decreasePoolBalance(
286
297
  instanceStore,
287
298
  poolNftId,
288
- amount,
299
+ unstakedAmount,
289
300
  AmountLib.zero());
290
301
 
291
- _componentService.increasePoolBalance(
292
- instanceStore,
293
- poolNftId,
294
- AmountLib.zero(),
295
- performanceFeeAmount);
296
-
297
- // TODO: transfer net amount to bundle owner (allowance)
302
+ IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
303
+ address poolWallet = poolComponentInfo.wallet;
298
304
 
299
- // TODO: log event
300
- }
305
+ // check allowance
306
+ {
307
+ IERC20Metadata token = IERC20Metadata(poolComponentInfo.token);
308
+ uint256 tokenAllowance = token.allowance(poolWallet, address(poolComponentInfo.tokenHandler));
309
+ if (tokenAllowance < unstakedAmount.toInt()) {
310
+ revert ErrorPoolServiceWalletAllowanceTooSmall(poolWallet, address(poolComponentInfo.tokenHandler), tokenAllowance, amount.toInt());
311
+ }
312
+ }
301
313
 
302
- function _getPerformanceFee(InstanceReader instanceReader, NftId poolNftId)
303
- internal
304
- virtual
305
- view
306
- returns (Fee memory performanceFee)
307
- {
308
- NftId productNftId = instanceReader.getPoolInfo(poolNftId).productNftId;
309
- return instanceReader.getPoolInfo(productNftId).performanceFee;
314
+ // transfer amount to bundle owner
315
+ address owner = getRegistry().ownerOf(bundleNftId);
316
+ emit LogPoolServiceBundleUnstaked(instance.getNftId(), poolNftId, bundleNftId, unstakedAmount);
317
+ // TODO: centralize token handling (issue #471)
318
+ poolComponentInfo.tokenHandler.transfer(poolWallet, owner, unstakedAmount);
319
+ return unstakedAmount;
310
320
  }
311
321
 
312
322
  function processSale(
@@ -528,11 +538,18 @@ contract PoolService is
528
538
  address poolWallet = componentInfo.wallet;
529
539
 
530
540
  if(amount.gtz()) {
541
+ uint256 allowance = IERC20Metadata(componentInfo.token).allowance(bundleOwner, address(tokenHandler));
542
+ if (allowance < amount.toInt()) {
543
+ revert ErrorPoolServiceWalletAllowanceTooSmall(bundleOwner, address(tokenHandler), allowance, amount.toInt());
544
+ }
545
+
531
546
  // TODO: centralize token handling (issue #471)
532
547
  tokenHandler.transfer(
533
548
  bundleOwner,
534
549
  poolWallet,
535
550
  amount);
551
+ } else {
552
+ revert ErrorPoolServiceAmountIsZero();
536
553
  }
537
554
  }
538
555