@etherisc/gif-next 0.0.2-742eda3-807 → 0.0.2-750c7cb-311

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 (376) 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 +77 -64
  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 -38
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +237 -74
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +66 -38
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +43 -0
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +102 -0
  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 +73 -73
  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 +80 -122
  44. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  45. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +15 -15
  46. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +6 -6
  48. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +72 -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 +51 -51
  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 -0
  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 -35
  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 -99
  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 +449 -62
  87. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  88. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +102 -26
  89. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  90. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +236 -1
  91. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  92. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -57
  93. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  94. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +189 -54
  95. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  96. package/artifacts/contracts/pool/Pool.sol/Pool.json +44 -95
  97. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  98. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +337 -90
  99. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  100. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +75 -19
  101. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  102. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
  103. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  104. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
  105. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  106. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +19 -38
  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 +82 -58
  111. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  112. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +34 -30
  113. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  114. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  115. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +16 -0
  116. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  117. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +184 -88
  118. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  119. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  120. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -0
  121. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  122. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  123. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +291 -139
  124. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  125. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +54 -26
  126. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  127. package/artifacts/contracts/product/PricingService.sol/PricingService.json +7 -2
  128. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  129. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
  130. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  131. package/artifacts/contracts/product/Product.sol/Product.json +19 -38
  132. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  133. package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
  134. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  135. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
  136. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  137. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  138. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +50 -2
  139. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  140. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
  141. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  142. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  143. package/artifacts/contracts/registry/Registry.sol/Registry.json +95 -23
  144. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  145. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +88 -88
  146. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  147. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
  148. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  149. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
  150. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  151. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  152. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
  153. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1159 -0
  154. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  155. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  156. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  157. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  158. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  159. package/artifacts/contracts/shared/Component.sol/Component.json +0 -38
  160. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  161. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +287 -62
  162. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  163. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +68 -32
  164. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  165. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  166. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  167. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
  168. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  169. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -0
  170. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  171. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  172. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  173. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  174. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  175. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  176. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  177. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  178. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  179. package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
  180. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  181. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -38
  182. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  183. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  184. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
  185. package/artifacts/contracts/shared/{NftIdSetManager.sol/NftIdSetManager.json → NftIdSet.sol/NftIdSet.json} +4 -4
  186. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  187. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  188. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  189. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  190. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  191. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  192. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  193. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  194. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  195. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  196. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +53 -6
  197. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  198. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  199. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  200. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +12 -2
  201. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  202. package/artifacts/contracts/staking/Staking.sol/Staking.json +60 -74
  203. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  204. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  205. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  206. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +31 -19
  207. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  208. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
  209. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  210. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +22 -22
  211. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  212. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +12 -12
  213. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  214. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +20 -15
  215. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  216. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +7 -2
  217. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  218. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  219. package/artifacts/contracts/type/Amount.sol/AmountLib.json +37 -8
  220. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  221. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  222. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  223. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  224. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  225. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  226. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  227. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  228. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  229. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  230. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  231. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  232. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  233. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  234. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  235. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  236. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  237. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  238. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  239. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  240. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  241. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  242. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  243. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
  244. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  245. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  246. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +26 -2
  248. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  250. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  254. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  255. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  256. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  258. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  259. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  260. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
  262. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
  263. package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
  264. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  265. package/artifacts/contracts/{shared → upgradeability}/ProxyManager.sol/ProxyManager.json +3 -3
  266. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  267. package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
  268. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
  269. package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
  270. package/contracts/distribution/BasicDistribution.sol +4 -15
  271. package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
  272. package/contracts/distribution/Distribution.sol +22 -10
  273. package/contracts/distribution/DistributionService.sol +60 -26
  274. package/contracts/distribution/DistributionServiceManager.sol +2 -5
  275. package/contracts/distribution/IDistributionComponent.sol +8 -4
  276. package/contracts/distribution/IDistributionService.sol +12 -0
  277. package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
  278. package/contracts/instance/IInstance.sol +5 -5
  279. package/contracts/instance/IInstanceService.sol +5 -5
  280. package/contracts/instance/Instance.sol +4 -4
  281. package/contracts/instance/InstanceAdmin.sol +2 -2
  282. package/contracts/instance/InstanceAuthorizationV3.sol +13 -11
  283. package/contracts/instance/InstanceReader.sol +10 -7
  284. package/contracts/instance/InstanceService.sol +10 -10
  285. package/contracts/instance/InstanceServiceManager.sol +2 -6
  286. package/contracts/instance/InstanceStore.sol +2 -1
  287. package/contracts/instance/base/ObjectLifecycle.sol +1 -3
  288. package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +5 -5
  289. package/contracts/instance/module/IBundle.sol +1 -1
  290. package/contracts/instance/module/IComponents.sol +1 -7
  291. package/contracts/instance/module/IDistribution.sol +0 -1
  292. package/contracts/instance/module/IPolicy.sol +1 -1
  293. package/contracts/mock/Dip.sol +1 -1
  294. package/contracts/oracle/IOracleComponent.sol +2 -1
  295. package/contracts/oracle/Oracle.sol +15 -6
  296. package/contracts/oracle/OracleServiceManager.sol +2 -5
  297. package/contracts/pool/BasicPool.sol +7 -5
  298. package/contracts/pool/BasicPoolAuthorization.sol +11 -2
  299. package/contracts/pool/BundleService.sol +195 -41
  300. package/contracts/pool/BundleServiceManager.sol +2 -5
  301. package/contracts/pool/IBundleService.sol +34 -5
  302. package/contracts/pool/IPoolComponent.sol +6 -0
  303. package/contracts/pool/IPoolService.sol +15 -16
  304. package/contracts/pool/Pool.sol +32 -15
  305. package/contracts/pool/PoolService.sol +183 -76
  306. package/contracts/pool/PoolServiceManager.sol +2 -5
  307. package/contracts/product/ApplicationService.sol +12 -36
  308. package/contracts/product/ApplicationServiceManager.sol +2 -2
  309. package/contracts/product/BasicProduct.sol +3 -33
  310. package/contracts/product/BasicProductAuthorization.sol +3 -0
  311. package/contracts/product/ClaimService.sol +21 -39
  312. package/contracts/product/ClaimServiceManager.sol +2 -2
  313. package/contracts/product/IClaimService.sol +1 -0
  314. package/contracts/product/IPolicyService.sol +19 -12
  315. package/contracts/product/IProductComponent.sol +1 -0
  316. package/contracts/product/PolicyService.sol +189 -108
  317. package/contracts/product/PolicyServiceManager.sol +2 -5
  318. package/contracts/product/PricingServiceManager.sol +2 -5
  319. package/contracts/product/Product.sol +20 -1
  320. package/contracts/product/ProductService.sol +7 -32
  321. package/contracts/product/ProductServiceManager.sol +2 -5
  322. package/contracts/registry/IRegistry.sol +26 -13
  323. package/contracts/registry/IRegistryService.sol +6 -6
  324. package/contracts/registry/Registry.sol +80 -82
  325. package/contracts/registry/RegistryAdmin.sol +23 -23
  326. package/contracts/registry/RegistryService.sol +4 -18
  327. package/contracts/registry/RegistryServiceManager.sol +2 -2
  328. package/contracts/registry/{ReleaseManager.sol → ReleaseRegistry.sol} +48 -50
  329. package/contracts/registry/ServiceAuthorizationV3.sol +5 -5
  330. package/contracts/registry/TokenRegistry.sol +2 -2
  331. package/contracts/shared/Component.sol +21 -21
  332. package/contracts/shared/ComponentService.sol +81 -12
  333. package/contracts/shared/ComponentServiceManager.sol +2 -2
  334. package/contracts/shared/IComponent.sol +4 -3
  335. package/contracts/shared/IComponentService.sol +15 -9
  336. package/contracts/shared/IInstanceLinkedComponent.sol +9 -3
  337. package/contracts/shared/IService.sol +1 -1
  338. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
  339. package/contracts/shared/InstanceLinkedComponent.sol +21 -0
  340. package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
  341. package/contracts/shared/NftOwnable.sol +2 -2
  342. package/contracts/shared/PolicyHolder.sol +2 -5
  343. package/contracts/shared/Service.sol +3 -4
  344. package/contracts/shared/TokenHandler.sol +4 -0
  345. package/contracts/staking/IStaking.sol +1 -2
  346. package/contracts/staking/IStakingService.sol +12 -5
  347. package/contracts/staking/Staking.sol +20 -17
  348. package/contracts/staking/StakingManager.sol +2 -6
  349. package/contracts/staking/StakingReader.sol +12 -16
  350. package/contracts/staking/StakingService.sol +8 -12
  351. package/contracts/staking/StakingServiceManager.sol +2 -2
  352. package/contracts/staking/StakingStore.sol +12 -22
  353. package/contracts/type/Amount.sol +12 -5
  354. package/contracts/type/Blocknumber.sol +7 -1
  355. package/contracts/type/ObjectType.sol +3 -7
  356. package/contracts/type/Referral.sol +1 -0
  357. package/contracts/type/Seconds.sol +13 -1
  358. package/contracts/type/Timestamp.sol +11 -1
  359. package/contracts/type/UFixed.sol +29 -10
  360. package/contracts/type/Version.sol +3 -1
  361. package/contracts/{shared → upgradeability}/ProxyManager.sol +3 -4
  362. package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
  363. package/package.json +1 -1
  364. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
  365. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -703
  366. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
  367. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
  368. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1159
  369. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  370. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
  371. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
  372. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
  373. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
  374. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
  375. /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
  376. /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
@@ -14,6 +14,7 @@ import {Fee, FeeLib} from "../type/Fee.sol";
14
14
  import {NftId, NftIdLib} from "../type/NftId.sol";
15
15
  import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
16
16
  import {Seconds} from "../type/Seconds.sol";
17
+ import {Timestamp} from "../type/Timestamp.sol";
17
18
  import {TokenHandler} from "../shared/TokenHandler.sol";
18
19
  import {UFixed, UFixedLib} from "../type/UFixed.sol";
19
20
 
@@ -91,6 +92,18 @@ abstract contract Pool is
91
92
  onlyOwner()
92
93
  {
93
94
  _getPoolStorage()._componentService.registerPool();
95
+ _approveTokenHandler(type(uint256).max);
96
+ }
97
+
98
+ /// @inheritdoc IPoolComponent
99
+ function withdrawBundleFees(NftId bundleNftId, Amount amount)
100
+ external
101
+ virtual
102
+ restricted()
103
+ onlyBundleOwner(bundleNftId)
104
+ returns (Amount withdrawnAmount)
105
+ {
106
+ return _withdrawBundleFees(bundleNftId, amount);
94
107
  }
95
108
 
96
109
 
@@ -101,17 +114,13 @@ abstract contract Pool is
101
114
  returns (IComponents.PoolInfo memory poolInfo)
102
115
  {
103
116
  return IComponents.PoolInfo(
104
- NftIdLib.zero(), // will be set when GIF registers the related product
105
117
  PUBLIC_ROLE(), // bundleOwnerRole
106
118
  AmountLib.max(), // maxCapitalAmount,
107
119
  isNftInterceptor(), // isInterceptingBundleTransfers
108
120
  false, // isExternallyManaged,
109
121
  false, // isVerifyingApplications,
110
122
  UFixedLib.toUFixed(1), // collateralizationLevel,
111
- UFixedLib.toUFixed(1), // retentionLevel,
112
- FeeLib.zero(), // initialPoolFee,
113
- FeeLib.zero(), // initialStakingFee,
114
- FeeLib.zero() // initialPerformanceFee,
123
+ UFixedLib.toUFixed(1) // retentionLevel,
115
124
  );
116
125
  }
117
126
 
@@ -160,8 +169,9 @@ abstract contract Pool is
160
169
  )
161
170
  internal
162
171
  virtual
172
+ returns(Amount netAmount)
163
173
  {
164
- // TODO add implementation
174
+ _getPoolStorage()._poolService.stake(bundleNftId, amount);
165
175
  }
166
176
 
167
177
 
@@ -173,8 +183,9 @@ abstract contract Pool is
173
183
  )
174
184
  internal
175
185
  virtual
186
+ returns(Amount netAmount)
176
187
  {
177
- // TODO add implementation
188
+ return _getPoolStorage()._poolService.unstake(bundleNftId, amount);
178
189
  }
179
190
 
180
191
 
@@ -186,8 +197,9 @@ abstract contract Pool is
186
197
  )
187
198
  internal
188
199
  virtual
200
+ returns (Timestamp extendedExpiredAt)
189
201
  {
190
- // TODO add implementation
202
+ return _getPoolStorage()._bundleService.extend(bundleNftId, lifetimeExtension);
191
203
  }
192
204
 
193
205
 
@@ -217,7 +229,7 @@ abstract contract Pool is
217
229
  /// To close a bundle all all linked policies MUST be in closed state as well.
218
230
  /// Closing a bundle finalizes the bundle bookkeeping including overall profit calculation.
219
231
  /// Once a bundle is closed this action cannot be reversed.
220
- function _close(NftId bundleNftId)
232
+ function _closeBundle(NftId bundleNftId)
221
233
  internal
222
234
  virtual
223
235
  {
@@ -239,13 +251,13 @@ abstract contract Pool is
239
251
  }
240
252
 
241
253
 
242
- /// @dev Sets the maximum overall capital amound held by this pool.
254
+ /// @dev Sets the maximum balance amound held by this pool.
243
255
  /// Function may only be called by pool owner.
244
- function _setMaxCapitalAmount(Amount maxCapitalAmount)
256
+ function _setMaxBalanceAmount(Amount maxBalanceAmount)
245
257
  internal
246
258
  virtual
247
259
  {
248
- _getPoolStorage()._poolService.setMaxCapitalAmount(maxCapitalAmount);
260
+ _getPoolStorage()._poolService.setMaxBalanceAmount(maxBalanceAmount);
249
261
  }
250
262
 
251
263
  /// @dev Sets the required role to create/own bundles.
@@ -284,9 +296,9 @@ abstract contract Pool is
284
296
  bytes memory filter
285
297
  )
286
298
  internal
287
- returns(NftId bundleNftId)
299
+ returns(NftId bundleNftId, Amount netStakedAmount)
288
300
  {
289
- bundleNftId = _getPoolStorage()._poolService.createBundle(
301
+ (bundleNftId, netStakedAmount) = _getPoolStorage()._poolService.createBundle(
290
302
  bundleOwner,
291
303
  fee,
292
304
  amount,
@@ -296,12 +308,17 @@ abstract contract Pool is
296
308
  // TODO add logging
297
309
  }
298
310
 
299
-
300
311
  // TODO remove function once this is no longer used to produce contract locations on the fly ...
301
312
  function getContractLocation(bytes memory name) external pure returns (bytes32 hash) {
302
313
  return keccak256(abi.encode(uint256(keccak256(name)) - 1)) & ~bytes32(uint256(0xff));
303
314
  }
304
315
 
316
+ function _withdrawBundleFees(NftId bundleNftId, Amount amount)
317
+ internal
318
+ returns (Amount withdrawnAmount)
319
+ {
320
+ return _getPoolStorage()._bundleService.withdrawBundleFees(bundleNftId, amount);
321
+ }
305
322
 
306
323
  function _getPoolStorage() private pure returns (PoolStorage storage $) {
307
324
  assembly {
@@ -1,46 +1,33 @@
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";
4
+ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
7
6
  import {IBundle} from "../instance/module/IBundle.sol";
7
+ import {IBundleService} from "./IBundleService.sol";
8
8
  import {IComponents} from "../instance/module/IComponents.sol";
9
+ import {IComponentService} from "../shared/IComponentService.sol";
10
+ import {IInstance} from "../instance/IInstance.sol";
11
+ import {IInstanceService} from "../instance/IInstanceService.sol";
9
12
  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";
13
+ import {IPoolService} from "./IPoolService.sol";
14
+ import {IRegistry} from "../registry/IRegistry.sol";
15
+ import {IRegistryService} from "../registry/IRegistryService.sol";
16
+ import {IStaking} from "../staking/IStaking.sol";
14
17
 
15
18
  import {Amount, AmountLib} from "../type/Amount.sol";
16
19
  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";
20
+ import {NftId} from "../type/NftId.sol";
21
+ import {ObjectType, POOL, BUNDLE, COMPONENT, INSTANCE, REGISTRY} from "../type/ObjectType.sol";
19
22
  import {RoleId, PUBLIC_ROLE} from "../type/RoleId.sol";
20
23
  import {Fee, FeeLib} from "../type/Fee.sol";
21
- import {Version, VersionLib} from "../type/Version.sol";
22
- import {KEEP_STATE, StateId} from "../type/StateId.sol";
24
+ import {KEEP_STATE} from "../type/StateId.sol";
23
25
  import {Seconds} from "../type/Seconds.sol";
24
- import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
25
26
  import {TokenHandler} from "../shared/TokenHandler.sol";
26
27
  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
28
  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
29
  import {InstanceReader} from "../instance/InstanceReader.sol";
41
30
  import {InstanceStore} from "../instance/InstanceStore.sol";
42
- import {IComponent} from "../shared/IComponent.sol";
43
- import {IPoolComponent} from "./IPoolComponent.sol";
44
31
 
45
32
  string constant POOL_SERVICE_NAME = "PoolService";
46
33
 
@@ -48,9 +35,6 @@ contract PoolService is
48
35
  ComponentVerifyingService,
49
36
  IPoolService
50
37
  {
51
- using NftIdLib for NftId;
52
- using AmountLib for Amount;
53
-
54
38
  IBundleService internal _bundleService;
55
39
  IComponentService internal _componentService;
56
40
  IInstanceService private _instanceService;
@@ -84,24 +68,20 @@ contract PoolService is
84
68
  registerInterface(type(IPoolService).interfaceId);
85
69
  }
86
70
 
87
-
88
- function setMaxCapitalAmount(Amount maxCapitalAmount)
71
+ /// @inheritdoc IPoolService
72
+ function setMaxBalanceAmount(Amount maxBalanceAmount)
89
73
  external
90
74
  virtual
91
75
  {
92
- /*
93
76
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
94
77
  InstanceReader instanceReader = instance.getInstanceReader();
78
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
95
79
 
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;
80
+ Amount previousMaxBalanceAmount = poolInfo.maxBalanceAmount;
81
+ poolInfo.maxBalanceAmount = maxBalanceAmount;
101
82
  instance.getInstanceStore().updatePool(poolNftId, poolInfo, KEEP_STATE());
102
83
 
103
- emit LogPoolServiceMaxCapitalAmountUpdated(poolNftId, previousMaxCapitalAmount, maxCapitalAmount);
104
- */
84
+ emit LogPoolServiceMaxBalanceAmountUpdated(poolNftId, previousMaxBalanceAmount, maxBalanceAmount);
105
85
  }
106
86
 
107
87
  function setBundleOwnerRole(RoleId bundleOwnerRole)
@@ -125,27 +105,7 @@ contract PoolService is
125
105
  emit LogPoolServiceBundleOwnerRoleSet(poolNftId, bundleOwnerRole);
126
106
  }
127
107
 
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
-
108
+ /// @inheritdoc IPoolService
149
109
  function createBundle(
150
110
  address bundleOwner, // initial bundle owner
151
111
  Fee memory fee, // fees deducted from premium that go to bundle owner
@@ -155,24 +115,32 @@ contract PoolService is
155
115
  )
156
116
  external
157
117
  virtual
158
- returns(NftId bundleNftId)
118
+ returns(NftId bundleNftId, Amount netStakedAmount)
159
119
  {
160
120
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
161
- InstanceReader instanceReader = instance.getInstanceReader();
162
121
 
163
- (
164
- Amount stakingFeeAmount,
165
- Amount stakingNetAmount
166
- ) = FeeLib.calculateFee(
167
- _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),
168
135
  stakingAmount);
169
136
 
137
+
170
138
  bundleNftId = _bundleService.create(
171
139
  instance,
172
140
  poolNftId,
173
141
  bundleOwner,
174
142
  fee,
175
- stakingNetAmount,
143
+ netStakedAmount,
176
144
  lifetime,
177
145
  filter);
178
146
 
@@ -180,12 +148,12 @@ contract PoolService is
180
148
  _componentService.increasePoolBalance(
181
149
  instance.getInstanceStore(),
182
150
  poolNftId,
183
- stakingAmount,
151
+ netStakedAmount,
184
152
  stakingFeeAmount);
185
153
 
186
154
  // pool bookkeeping and collect tokens from bundle owner
187
155
  _collectStakingAmount(
188
- instanceReader,
156
+ instance.getInstanceReader(),
189
157
  poolNftId,
190
158
  bundleOwner,
191
159
  stakingAmount);
@@ -199,8 +167,8 @@ contract PoolService is
199
167
  view
200
168
  returns (Fee memory stakingFee)
201
169
  {
202
- NftId productNftId = instanceReader.getPoolInfo(poolNftId).productNftId;
203
- return instanceReader.getPoolInfo(productNftId).stakingFee;
170
+ NftId productNftId = instanceReader.getComponentInfo(poolNftId).productNftId;
171
+ return instanceReader.getProductInfo(productNftId).stakingFee;
204
172
  }
205
173
 
206
174
  function closeBundle(NftId bundleNftId)
@@ -209,16 +177,147 @@ contract PoolService is
209
177
  {
210
178
  (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
211
179
 
212
- // TODO book keeping for pool collateral released outside of retention level
180
+ // TODO get performance fee for pool (#477)
213
181
 
214
182
  // 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
183
+ (Amount unstakedAmount, Amount feeAmount) = _bundleService.close(instance, bundleNftId);
218
184
 
185
+ _componentService.decreasePoolBalance(
186
+ instance.getInstanceStore(),
187
+ poolNftId,
188
+ unstakedAmount + feeAmount,
189
+ AmountLib.zero());
190
+
219
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
+ }
220
214
  }
221
215
 
216
+ /// @inheritdoc IPoolService
217
+ function stake(NftId bundleNftId, Amount amount)
218
+ external
219
+ virtual
220
+ // TODO: restricted() (once #462 is done)
221
+ returns(Amount netAmount)
222
+ {
223
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
224
+ InstanceReader instanceReader = instance.getInstanceReader();
225
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
226
+ IComponents.PoolInfo memory poolInfo = instanceReader.getPoolInfo(poolNftId);
227
+
228
+ if (bundleInfo.poolNftId != poolNftId) {
229
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
230
+ }
231
+
232
+ {
233
+ Amount currentPoolBalance = instanceReader.getBalanceAmount(poolNftId);
234
+ if (currentPoolBalance + amount > poolInfo.maxBalanceAmount) {
235
+ revert ErrorPoolServiceMaxBalanceAmountExceeded(poolNftId, poolInfo.maxBalanceAmount, currentPoolBalance, amount);
236
+ }
237
+ }
238
+
239
+ // calculate fees
240
+ Amount feeAmount;
241
+ (
242
+ feeAmount,
243
+ netAmount
244
+ ) = FeeLib.calculateFee(
245
+ _getStakingFee(instanceReader, poolNftId),
246
+ amount);
247
+
248
+ // do all the bookkeeping
249
+ _componentService.increasePoolBalance(
250
+ instance.getInstanceStore(),
251
+ poolNftId,
252
+ netAmount,
253
+ feeAmount);
254
+
255
+ _bundleService.stake(instance, bundleNftId, netAmount);
256
+
257
+ // collect tokens from bundle owner
258
+ address bundleOwner = getRegistry().ownerOf(bundleNftId);
259
+ emit LogPoolServiceBundleStaked(instance.getNftId(), poolNftId, bundleNftId, amount, netAmount);
260
+ _collectStakingAmount(
261
+ instanceReader,
262
+ poolNftId,
263
+ bundleOwner,
264
+ amount);
265
+ }
266
+
267
+ /// @inheritdoc IPoolService
268
+ function unstake(NftId bundleNftId, Amount amount)
269
+ external
270
+ virtual
271
+ // TODO: restricted() (once #462 is done)
272
+ returns(Amount netAmount)
273
+ {
274
+ (NftId poolNftId,, IInstance instance) = _getAndVerifyActiveComponent(POOL());
275
+ InstanceReader instanceReader = instance.getInstanceReader();
276
+ InstanceStore instanceStore = instance.getInstanceStore();
277
+ IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
278
+
279
+ if (bundleInfo.poolNftId != poolNftId) {
280
+ revert ErrorPoolServiceBundlePoolMismatch(bundleNftId, poolNftId);
281
+ }
282
+
283
+ if (amount.eqz()) {
284
+ revert ErrorPoolServiceAmountIsZero();
285
+ }
286
+
287
+ // call bundle service for bookkeeping and additional checks
288
+ Amount unstakedAmount = _bundleService.unstake(instance, bundleNftId, amount);
289
+
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)
294
+
295
+ // update pool bookkeeping - performance fees stay in the pool, but as fees
296
+ _componentService.decreasePoolBalance(
297
+ instanceStore,
298
+ poolNftId,
299
+ unstakedAmount,
300
+ AmountLib.zero());
301
+
302
+ IComponents.ComponentInfo memory poolComponentInfo = instanceReader.getComponentInfo(poolNftId);
303
+ address poolWallet = poolComponentInfo.wallet;
304
+
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
+ }
313
+
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;
320
+ }
222
321
 
223
322
  function processSale(
224
323
  NftId bundleNftId,
@@ -439,10 +538,18 @@ contract PoolService is
439
538
  address poolWallet = componentInfo.wallet;
440
539
 
441
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
+
546
+ // TODO: centralize token handling (issue #471)
442
547
  tokenHandler.transfer(
443
548
  bundleOwner,
444
549
  poolWallet,
445
550
  amount);
551
+ } else {
552
+ revert ErrorPoolServiceAmountIsZero();
446
553
  }
447
554
  }
448
555
 
@@ -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
@@ -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