@etherisc/gif-next 0.0.2-cc4a5cb-898 → 0.0.2-cd89a0b-062

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 (230) hide show
  1. package/README.md +40 -25
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +80 -41
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +101 -61
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +43 -40
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +55 -52
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +100 -113
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +50 -47
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +150 -126
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +110 -52
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  35. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  36. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +256 -91
  37. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +1 -1
  38. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/Instance.sol/Instance.json +364 -170
  40. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +139 -46
  42. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +1 -1
  44. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/IService.sol/IService.json +99 -55
  48. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +139 -59
  50. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +1 -1
  53. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +135 -55
  55. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
  62. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +1 -1
  63. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +2 -2
  66. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +29 -9
  74. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +28 -8
  76. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +2 -2
  80. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +138 -11
  83. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +2 -2
  85. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +138 -11
  87. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +245 -86
  89. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +167 -61
  91. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +99 -74
  93. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +99 -55
  95. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +104 -60
  97. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +104 -60
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +169 -63
  101. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +197 -91
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +141 -12
  105. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
  107. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +293 -40
  109. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  110. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +668 -0
  111. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  112. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  113. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/Registry.sol/Registry.json +483 -120
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +885 -0
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +460 -0
  119. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  123. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +43 -40
  126. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  128. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  129. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +132 -0
  130. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  131. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +344 -0
  132. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +76 -37
  134. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  135. package/artifacts/contracts/shared/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
  136. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  138. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +1 -1
  139. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +101 -61
  140. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  141. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestPool.sol/TestPool.json +150 -126
  143. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +115 -58
  145. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +93 -39
  147. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestService.sol/TestService.json +161 -68
  150. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  153. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +89 -25
  155. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  156. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  157. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  161. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  163. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  172. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  174. package/contracts/components/BaseComponent.sol +12 -27
  175. package/contracts/components/Distribution.sol +29 -6
  176. package/contracts/components/IBaseComponent.sol +2 -2
  177. package/contracts/components/IPoolComponent.sol +2 -8
  178. package/contracts/components/IProductComponent.sol +2 -1
  179. package/contracts/components/Pool.sol +84 -73
  180. package/contracts/components/Product.sol +85 -13
  181. package/contracts/instance/IInstance.sol +4 -3
  182. package/contracts/instance/Instance.sol +14 -3
  183. package/contracts/instance/base/ComponentServiceBase.sol +13 -6
  184. package/contracts/instance/base/IInstanceBase.sol +3 -2
  185. package/contracts/instance/base/InstanceBase.sol +6 -8
  186. package/contracts/instance/base/ServiceBase.sol +19 -13
  187. package/contracts/instance/module/component/ComponentModule.sol +5 -4
  188. package/contracts/instance/module/component/IComponent.sol +2 -2
  189. package/contracts/instance/module/pool/IPoolModule.sol +4 -3
  190. package/contracts/instance/module/pool/PoolModule.sol +12 -7
  191. package/contracts/instance/module/treasury/ITreasury.sol +7 -5
  192. package/contracts/instance/module/treasury/TokenHandler.sol +2 -2
  193. package/contracts/instance/module/treasury/TreasuryModule.sol +21 -28
  194. package/contracts/instance/service/ComponentOwnerService.sol +181 -66
  195. package/contracts/instance/service/DistributionService.sol +6 -11
  196. package/contracts/instance/service/IComponentOwnerService.sol +0 -2
  197. package/contracts/instance/service/PoolService.sol +19 -19
  198. package/contracts/instance/service/ProductService.sol +20 -20
  199. package/contracts/registry/ChainNft.sol +43 -15
  200. package/contracts/registry/IChainNft.sol +3 -2
  201. package/contracts/registry/IRegistry.sol +44 -28
  202. package/contracts/registry/IRegistryService.sol +29 -0
  203. package/contracts/registry/ITransferInterceptor.sol +6 -0
  204. package/contracts/registry/Registry.sol +382 -273
  205. package/contracts/registry/RegistryService.sol +375 -0
  206. package/contracts/registry/RegistryServiceManager.sol +52 -0
  207. package/contracts/shared/ContractDeployerLib.sol +72 -0
  208. package/contracts/shared/ERC165.sol +1 -1
  209. package/contracts/shared/IRegisterable.sol +7 -9
  210. package/contracts/shared/IVersionable.sol +55 -11
  211. package/contracts/shared/NftOwnable.sol +87 -0
  212. package/contracts/shared/ProxyManager.sol +103 -0
  213. package/contracts/shared/Registerable.sol +74 -43
  214. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  215. package/contracts/shared/Versionable.sol +112 -54
  216. package/contracts/test/TestDistribution.sol +3 -2
  217. package/contracts/test/TestPool.sol +4 -2
  218. package/contracts/test/TestProduct.sol +4 -2
  219. package/contracts/test/TestRegisterable.sol +5 -6
  220. package/contracts/test/TestService.sol +5 -11
  221. package/contracts/types/Version.sol +9 -0
  222. package/package.json +1 -1
  223. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  224. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  225. package/artifacts/contracts/shared/Proxy.sol/Proxy.dbg.json +0 -4
  226. package/artifacts/contracts/shared/Proxy.sol/Proxy.json +0 -178
  227. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
  228. package/contracts/experiment/statemachine/README.md +0 -112
  229. package/contracts/registry/IRegistryLinked.sol +0 -8
  230. package/contracts/shared/Proxy.sol +0 -83
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {ObjectType, POOL} from "../types/ObjectType.sol";
5
5
  import {IProductService} from "../instance/service/IProductService.sol";
@@ -10,6 +10,13 @@ import {UFixed} from "../types/UFixed.sol";
10
10
  import {IPoolComponent} from "./IPoolComponent.sol";
11
11
  import {BaseComponent} from "./BaseComponent.sol";
12
12
 
13
+ import {IRegistry} from "../registry/IRegistry.sol";
14
+ import {IPool} from "../instance/module/pool/IPoolModule.sol";
15
+ import {ITreasury} from "../instance/module/treasury/ITreasury.sol";
16
+
17
+ import {IRegisterable} from "../shared/IRegisterable.sol";
18
+ import {Registerable} from "../shared/Registerable.sol";
19
+
13
20
  contract Pool is BaseComponent, IPoolComponent {
14
21
 
15
22
  bool internal _isVerifying;
@@ -44,13 +51,15 @@ contract Pool is BaseComponent, IPoolComponent {
44
51
  NftId instanceNftId,
45
52
  // TODO refactor into tokenNftId
46
53
  address token,
54
+ bool isInterceptor,
47
55
  bool verifying,
48
56
  UFixed collateralizationLevel,
49
57
  Fee memory poolFee,
50
58
  Fee memory stakingFee,
51
- Fee memory performanceFee
59
+ Fee memory performanceFee,
60
+ address initialOwner
52
61
  )
53
- BaseComponent(registry, instanceNftId, token)
62
+ BaseComponent(registry, instanceNftId, token, POOL(), isInterceptor, initialOwner)
54
63
  {
55
64
  _isVerifying = verifying;
56
65
  // TODO add validation
@@ -61,18 +70,8 @@ contract Pool is BaseComponent, IPoolComponent {
61
70
 
62
71
  _poolService = _instance.getPoolService();
63
72
  _productService = _instance.getProductService();
64
- }
65
73
 
66
- function setFees(
67
- Fee memory poolFee,
68
- Fee memory stakingFee,
69
- Fee memory performanceFee
70
- )
71
- external
72
- onlyOwner
73
- override
74
- {
75
- _poolService.setFees(poolFee, stakingFee, performanceFee);
74
+ _registerInterface(type(IPoolComponent).interfaceId);
76
75
  }
77
76
 
78
77
  function createBundle(
@@ -97,17 +96,6 @@ contract Pool is BaseComponent, IPoolComponent {
97
96
  // TODO add logging
98
97
  }
99
98
 
100
- function setBundleFee(
101
- NftId bundleNftId,
102
- Fee memory fee
103
- )
104
- external
105
- override
106
- // TODO add onlyBundleOwner
107
- {
108
- _poolService.setBundleFee(bundleNftId, fee);
109
- }
110
-
111
99
  /**
112
100
  * @dev see {IPool.underwrite}.
113
101
  * Default implementation that only writes a {LogUnderwrittenByPool} entry.
@@ -150,6 +138,77 @@ contract Pool is BaseComponent, IPoolComponent {
150
138
  return _collateralizationLevel;
151
139
  }
152
140
 
141
+ function setFees(
142
+ Fee memory poolFee,
143
+ Fee memory stakingFee,
144
+ Fee memory performanceFee
145
+ )
146
+ external
147
+ onlyOwner
148
+ override
149
+ {
150
+ _poolService.setFees(poolFee, stakingFee, performanceFee);
151
+ }
152
+
153
+ function setBundleFee(
154
+ NftId bundleNftId,
155
+ Fee memory fee
156
+ )
157
+ external
158
+ override
159
+ // TODO add onlyBundleOwner
160
+ {
161
+ _poolService.setBundleFee(bundleNftId, fee);
162
+ }
163
+ // TODO delete, call instance instead
164
+ function getFees()
165
+ external
166
+ view
167
+ override
168
+ returns (Fee memory, Fee memory, Fee memory)
169
+ {
170
+ NftId productNftId = _instance.getProductNftId(getNftId());
171
+ //if (_instance.hasTreasuryInfo(productNftId)) {
172
+ ITreasury.TreasuryInfo memory info = _instance.getTreasuryInfo(productNftId);
173
+ return (info.poolFee, info.stakingFee, info.performanceFee);
174
+ //} else {
175
+ // return (_initialPoolFee, _initialStakingFee, _initialPerformanceFee);
176
+ //}
177
+ }
178
+
179
+ // from IRegisterable
180
+
181
+ // TODO used only once, occupies space
182
+ // TODO do not use super
183
+ function getInitialInfo()
184
+ public
185
+ view
186
+ override (IRegisterable, Registerable)
187
+ returns (IRegistry.ObjectInfo memory, bytes memory)
188
+ {
189
+ (
190
+ IRegistry.ObjectInfo memory info,
191
+ bytes memory data
192
+ ) = super.getInitialInfo();
193
+
194
+ return (
195
+ info,
196
+ abi.encode(
197
+ IPool.PoolInfo(
198
+ _isVerifying,
199
+ _collateralizationLevel
200
+ ),
201
+ _wallet,
202
+ _token,
203
+ _initialPoolFee,
204
+ _initialStakingFee,
205
+ _initialPerformanceFee
206
+ )
207
+ );
208
+ }
209
+
210
+ // Internals
211
+
153
212
  function _underwrite(
154
213
  NftId policyNftId,
155
214
  bytes memory policyData,
@@ -184,52 +243,4 @@ contract Pool is BaseComponent, IPoolComponent {
184
243
  filter
185
244
  );
186
245
  }
187
-
188
- // from pool component
189
- function getPoolFee()
190
- external
191
- view
192
- override
193
- returns (Fee memory poolFee)
194
- {
195
- NftId productNftId = _instance.getProductNftId(getNftId());
196
- if (_instance.hasTreasuryInfo(productNftId)) {
197
- return _instance.getTreasuryInfo(productNftId).poolFee;
198
- } else {
199
- return _initialPoolFee;
200
- }
201
- }
202
-
203
- function getStakingFee()
204
- external
205
- view
206
- override
207
- returns (Fee memory stakingFee)
208
- {
209
- NftId productNftId = _instance.getProductNftId(getNftId());
210
- if (_instance.hasTreasuryInfo(productNftId)) {
211
- return _instance.getTreasuryInfo(productNftId).stakingFee;
212
- } else {
213
- return _initialStakingFee;
214
- }
215
- }
216
-
217
- function getPerformanceFee()
218
- external
219
- view
220
- override
221
- returns (Fee memory performanceFee)
222
- {
223
- NftId productNftId = _instance.getProductNftId(getNftId());
224
- if (_instance.hasTreasuryInfo(productNftId)) {
225
- return _instance.getTreasuryInfo(productNftId).performanceFee;
226
- } else {
227
- return _initialPerformanceFee;
228
- }
229
- }
230
-
231
- // from registerable
232
- function getType() public pure override returns (ObjectType) {
233
- return POOL();
234
- }
235
246
  }
@@ -1,41 +1,60 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
+
4
6
  import {IRisk} from "../instance/module/risk/IRisk.sol";
5
7
  import {ITreasury} from "../instance/module/treasury/ITreasury.sol";
6
8
  import {IProductService} from "../instance/service/IProductService.sol";
7
9
  import {IProductComponent} from "./IProductComponent.sol";
8
- import {NftId} from "../types/NftId.sol";
10
+ import {NftId, zeroNftId} from "../types/NftId.sol";
9
11
  import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
10
12
  import {ReferralId} from "../types/ReferralId.sol";
11
13
  import {RiskId, RiskIdLib} from "../types/RiskId.sol";
12
14
  import {StateId} from "../types/StateId.sol";
13
15
  import {Timestamp} from "../types/Timestamp.sol";
14
- import {Fee} from "../types/Fee.sol";
16
+ import {Fee, FeeLib} from "../types/Fee.sol";
15
17
  import {BaseComponent} from "./BaseComponent.sol";
16
18
 
19
+ import {IRegistry} from "../registry/IRegistry.sol";
20
+ import {IRegisterable} from "../shared/IRegisterable.sol";
21
+ import {Registerable} from "../shared/Registerable.sol";
22
+
23
+ import {IPool} from "../instance/module/pool/IPoolModule.sol";
24
+ import {IPoolComponent} from "../components/IPoolComponent.sol";
25
+
17
26
  contract Product is BaseComponent, IProductComponent {
18
27
  IProductService internal _productService;
19
- address internal _pool;
28
+ IPoolComponent internal _pool;
20
29
  address internal _distribution;
21
30
  Fee internal _initialProductFee;
22
31
  Fee internal _initialProcessingFee;
23
32
 
33
+ NftId internal _poolNftId;
34
+ NftId internal _distributionNftId;
35
+
24
36
  constructor(
25
37
  address registry,
26
38
  NftId instanceNftid,
27
39
  address token,
40
+ bool isInterceptor,
28
41
  address pool,
29
42
  address distribution,
30
43
  Fee memory productFee,
31
- Fee memory processingFee
32
- ) BaseComponent(registry, instanceNftid, token) {
44
+ Fee memory processingFee,
45
+ address initialOwner
46
+ ) BaseComponent(registry, instanceNftid, token, PRODUCT(), isInterceptor, initialOwner) {
33
47
  // TODO add validation
34
48
  _productService = _instance.getProductService();
35
- _pool = pool;
49
+ _pool = IPoolComponent(pool);
36
50
  _distribution = distribution;
37
51
  _initialProductFee = productFee;
38
- _initialProcessingFee = processingFee;
52
+ _initialProcessingFee = processingFee;
53
+
54
+ _poolNftId = getRegistry().getNftId(address(_pool));
55
+ _distributionNftId = getRegistry().getNftId(_distribution);
56
+
57
+ _registerInterface(type(IProductComponent).interfaceId);
39
58
  }
40
59
 
41
60
 
@@ -172,11 +191,11 @@ contract Product is BaseComponent, IProductComponent {
172
191
  }
173
192
 
174
193
  function getPoolNftId() external view override returns (NftId poolNftId) {
175
- return _registry.getNftId(_pool);
194
+ return getRegistry().getNftId(address(_pool));
176
195
  }
177
196
 
178
197
  function getDistributionNftId() external view override returns (NftId distributionNftId) {
179
- return _registry.getNftId(_distribution);
198
+ return getRegistry().getNftId(_distribution);
180
199
  }
181
200
 
182
201
  // from product component
@@ -191,7 +210,7 @@ contract Product is BaseComponent, IProductComponent {
191
210
  _productService.setFees(productFee, processingFee);
192
211
  }
193
212
 
194
-
213
+ // TODO delete, call instance intead
195
214
  function getProductFee()
196
215
  external
197
216
  view
@@ -220,8 +239,61 @@ contract Product is BaseComponent, IProductComponent {
220
239
  }
221
240
  }
222
241
 
223
- // from registerable
224
- function getType() public pure override returns (ObjectType) {
225
- return PRODUCT();
242
+ // from IRegisterable
243
+
244
+ // TODO used only once, occupies space
245
+ function getInitialInfo()
246
+ public
247
+ view
248
+ override (IRegisterable, Registerable)
249
+ returns (IRegistry.ObjectInfo memory, bytes memory)
250
+ {
251
+ // from Registerable
252
+ (
253
+ IRegistry.ObjectInfo memory productInfo,
254
+ bytes memory data
255
+ ) = super.getInitialInfo();
256
+
257
+ // TODO read pool & distribution fees
258
+ // 1) from pool -> the only option -> pool must be registered first?
259
+ // 2) from instance -> all fees are set into instance at product registration which is ongoing here
260
+ // checks are done in registryProduct() where THIS function is called
261
+ //require(getRegistry().getObjectInfo(_poolNftId).objectType == POOL(), "POOL_NOT_REGISTERED");
262
+ //require(getRegistry().getObjectInfo(_distributionNftId).objectType == DISTRIBUTION(), "DISTRIBUTION_NOT_REGISTERED");
263
+
264
+ // from PoolComponent
265
+ (
266
+ IRegistry.ObjectInfo memory poolInfo,
267
+ bytes memory poolData
268
+ ) = _pool.getInitialInfo();
269
+
270
+ (
271
+ /*IPool.PoolInfo memory info*/,
272
+ /*address wallet*/,
273
+ /*IERC20Metadata token*/,
274
+ Fee memory initialPoolFee,
275
+ Fee memory initialStakingFee,
276
+ Fee memory initialPerformanceFee
277
+ ) = abi.decode(poolData, (IPool.PoolInfo, address, IERC20Metadata, Fee, Fee, Fee));
278
+
279
+ // TODO from DistributionComponent
280
+
281
+ return (
282
+ productInfo,
283
+ abi.encode(
284
+ ITreasury.TreasuryInfo(
285
+ _poolNftId,
286
+ _distributionNftId,
287
+ _token,
288
+ _initialProductFee,
289
+ _initialProcessingFee,
290
+ initialPoolFee,
291
+ initialStakingFee,
292
+ initialPerformanceFee,
293
+ FeeLib.zeroFee()//_instance.getDistributionFee(_distributionNftId)
294
+ ),
295
+ _wallet
296
+ )
297
+ );
226
298
  }
227
299
  }
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
4
+ import {IERC165} from "@openzeppelin5/contracts/utils/introspection/IERC165.sol";
5
5
 
6
6
  import {IVersionable} from "../shared/IVersionable.sol";
7
7
  import {IRegisterable} from "../shared/IRegisterable.sol";
@@ -18,7 +18,7 @@ import {IRiskModule} from "./module/risk/IRisk.sol";
18
18
  import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
19
19
 
20
20
  import {IKeyValueStore} from "./base/IKeyValueStore.sol";
21
- import {IRegistry, IRegistryLinked} from "../registry/IRegistryLinked.sol";
21
+ import {IRegistry} from "../registry/IRegistry.sol";
22
22
 
23
23
  import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
24
24
  import {IDistributionService} from "./service/IDistributionService.sol";
@@ -45,7 +45,8 @@ interface IInstance is
45
45
  function getOwner() external view override (IOwnable, IAccessModule) returns(address owner);
46
46
 
47
47
  function getKeyValueStore() external view override (IInstanceBase) returns (IKeyValueStore keyValueStore);
48
- function getComponentOwnerService() external view override (IInstanceBase, IComponentModule) returns(IComponentOwnerService);
48
+
49
+ function getComponentOwnerService() external view override (IInstanceBase, IComponentModule, IPoolModule, ITreasuryModule) returns(IComponentOwnerService);
49
50
  function getDistributionService() external view override returns(IDistributionService);
50
51
  function getProductService() external view override (IInstanceBase, IBundleModule, IPolicyModule) returns(IProductService);
51
52
  function getPoolService() external view override (IInstanceBase, IBundleModule, IPoolModule) returns(IPoolService);
@@ -22,6 +22,7 @@ import {IComponentModule} from "./module/component/IComponent.sol";
22
22
  import {IPoolModule} from "./module/pool/IPoolModule.sol";
23
23
  import {IPolicyModule} from "./module/policy/IPolicy.sol";
24
24
  import {IInstanceBase} from "./base/IInstanceBase.sol";
25
+ import {ITreasuryModule} from "./module/treasury/ITreasury.sol";
25
26
 
26
27
  import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
27
28
  import {IDistributionService} from "./service/IDistributionService.sol";
@@ -43,9 +44,10 @@ contract Instance is
43
44
  {
44
45
  constructor(
45
46
  address registry,
46
- NftId registryNftId
47
+ NftId registryNftId,
48
+ address initialOwner
47
49
  )
48
- InstanceBase(registry, registryNftId)
50
+ InstanceBase(registry, registryNftId, initialOwner)
49
51
  AccessModule()
50
52
  BundleModule()
51
53
  DistributionModule()
@@ -62,10 +64,19 @@ contract Instance is
62
64
  initializeRiskModule(_keyValueStore);
63
65
  }
64
66
 
67
+ modifier onlyComponentOwnerService() override (ComponentModule, PoolModule, TreasuryModule) {
68
+ require(
69
+ msg.sender == address(this.getComponentOwnerService()),
70
+ "ERROR:CMP-001:NOT_REGISTRY_SERVICE"
71
+ );
72
+ _;
73
+ }
74
+
65
75
  function getRegistry() public view override (Registerable, IPolicyModule) returns (IRegistry registry) { return super.getRegistry(); }
76
+
66
77
  function getKeyValueStore() public view override (InstanceBase) returns (IKeyValueStore keyValueStore) { return super.getKeyValueStore(); }
67
78
 
68
- function getComponentOwnerService() external view override (IComponentModule, IInstanceBase) returns(IComponentOwnerService service) { return _componentOwnerService; }
79
+ function getComponentOwnerService() external view override (IInstanceBase, IComponentModule, ITreasuryModule, IPoolModule) returns(IComponentOwnerService service) { return _componentOwnerService; }
69
80
  function getDistributionService() external view override (IInstanceBase) returns(IDistributionService service) { return _distributionService; }
70
81
  function getProductService() external view override (IBundleModule, IPolicyModule, IInstanceBase) returns(IProductService service) { return _productService; }
71
82
  function getPoolService() external view override (IBundleModule, IPoolModule, IInstanceBase) returns(IPoolService service) { return _poolService; }
@@ -2,21 +2,23 @@
2
2
  pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
5
6
  import {IInstance} from "../../instance/IInstance.sol";
6
7
  import {ObjectType, INSTANCE, PRODUCT, POOL} from "../../types/ObjectType.sol";
7
8
  import {NftId, NftIdLib} from "../../types/NftId.sol";
8
9
 
9
10
  import {ServiceBase} from "./ServiceBase.sol";
11
+ import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
10
12
 
11
13
  abstract contract ComponentServiceBase is ServiceBase {
12
14
 
13
15
  constructor(
14
16
  address registry,
15
- NftId registryNftId
17
+ NftId registryNftId,
18
+ address initialOwner
16
19
  )
17
- ServiceBase(registry, registryNftId)
18
- // solhint-disable-next-line no-empty-blocks
19
20
  {
21
+ _initializeServiceBase(registry, registryNftId, initialOwner);
20
22
  }
21
23
 
22
24
 
@@ -30,13 +32,18 @@ abstract contract ComponentServiceBase is ServiceBase {
30
32
  IInstance instance
31
33
  )
32
34
  {
33
- NftId componentNftId = _registry.getNftId(msg.sender);
35
+ NftId componentNftId = getRegistry().getNftId(msg.sender);
34
36
  require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
35
37
 
36
- info = _registry.getObjectInfo(componentNftId);
38
+ info = getRegistry().getObjectInfo(componentNftId);
37
39
  require(info.objectType == objectType, "OBJECT_TYPE_INVALID");
38
40
 
39
- address instanceAddress = _registry.getObjectInfo(info.parentNftId).objectAddress;
41
+ address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
40
42
  instance = IInstance(instanceAddress);
41
43
  }
44
+
45
+ function getRegistryService() public view virtual returns (IRegistryService) {
46
+ address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
47
+ return IRegistryService(service);
48
+ }
42
49
  }
@@ -1,10 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Key32} from "../../types/Key32.sol";
5
5
  import {StateId} from "../../types/StateId.sol";
6
6
 
7
7
  import {IKeyValueStore} from "./IKeyValueStore.sol";
8
+
8
9
  import {IComponentOwnerService} from "../service/IComponentOwnerService.sol";
9
10
  import {IDistributionService} from "../service/IDistributionService.sol";
10
11
  import {IProductService} from "../service/IProductService.sol";
@@ -15,7 +16,7 @@ interface IInstanceBase {
15
16
  function updateState(Key32 key, StateId state) external;
16
17
  function getState(Key32 key) external view returns (StateId state);
17
18
 
18
- function getComponentOwnerService() external view returns(IComponentOwnerService service);
19
+ function getComponentOwnerService() external view returns(IComponentOwnerService);
19
20
  function getDistributionService() external view returns(IDistributionService);
20
21
  function getProductService() external view returns(IProductService service);
21
22
  function getPoolService() external view returns(IPoolService service);
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Versionable} from "../../shared/Versionable.sol";
5
5
  import {Registerable} from "../../shared/Registerable.sol";
@@ -35,11 +35,13 @@ abstract contract InstanceBase is
35
35
 
36
36
  constructor(
37
37
  address registry,
38
- NftId registryNftId
38
+ NftId registryNftId,
39
+ address initialOwner
39
40
  )
40
- Registerable(registry, registryNftId)
41
41
  Versionable()
42
42
  {
43
+ bytes memory data = "";
44
+ _initializeRegisterable(registry, registryNftId, INSTANCE(), true, initialOwner, data);
43
45
  _keyValueStore = new KeyValueStore();
44
46
 
45
47
  _registerInterface(type(IInstance).interfaceId);
@@ -67,10 +69,6 @@ abstract contract InstanceBase is
67
69
  }
68
70
 
69
71
  // from registerable
70
- function getType() external pure override returns (ObjectType objectType) {
71
- return INSTANCE();
72
- }
73
-
74
72
 
75
73
  // internal / private functions
76
74
  function _linkToServicesInRegistry() internal {
@@ -82,7 +80,7 @@ abstract contract InstanceBase is
82
80
  }
83
81
 
84
82
  function _getAndCheck(string memory serviceName, VersionPart majorVersion) internal view returns (address serviceAddress) {
85
- serviceAddress = _registry.getServiceAddress(serviceName, majorVersion);
83
+ serviceAddress = getRegistry().getServiceAddress(serviceName, majorVersion);
86
84
  require(
87
85
  serviceAddress != address(0),
88
86
  "ERROR:INS-001:NOT_REGISTERED"
@@ -3,7 +3,7 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {NftId, zeroNftId} from "../../types/NftId.sol";
5
5
  import {ObjectType, SERVICE} from "../../types/ObjectType.sol";
6
- import {Version, VersionPart} from "../../types/Version.sol";
6
+ import {Version, VersionPart, VersionLib} from "../../types/Version.sol";
7
7
 
8
8
  import {Registerable} from "../../shared/Registerable.sol";
9
9
  import {IVersionable} from "../../shared/IVersionable.sol";
@@ -16,22 +16,28 @@ abstract contract ServiceBase is
16
16
  Versionable,
17
17
  IService
18
18
  {
19
+ function getName() public pure virtual override returns(string memory name);
19
20
 
20
- constructor(
21
- address registry,
22
- NftId registryNftId
23
- )
24
- Registerable(registry, registryNftId)
25
- Versionable()
26
- {
27
- _registerInterface(type(IService).interfaceId);
21
+ function getMajorVersion() public view virtual override returns(VersionPart majorVersion) {
22
+ return getVersion().toMajorPart();
28
23
  }
29
24
 
30
- function getMajorVersion() external view override returns(VersionPart majorVersion) {
31
- return this.getVersion().toMajorPart();
25
+ // from Versionable
26
+ function getVersion()
27
+ public
28
+ pure
29
+ virtual override (IVersionable, Versionable)
30
+ returns(Version)
31
+ {
32
+ return VersionLib.toVersion(3,0,0);
32
33
  }
33
34
 
34
- function getType() external pure override returns (ObjectType) {
35
- return SERVICE();
35
+ function _initializeServiceBase(address registry, NftId registryNftId, address initialOwner)
36
+ internal
37
+ //onlyInitializing //TODO uncomment when "fully" upgradeable
38
+ {// service must provide its name and version upon registration
39
+ bytes memory data = abi.encode(getName(), getMajorVersion());
40
+ _initializeRegisterable(registry, registryNftId, SERVICE(), false, initialOwner, data);
41
+ _registerInterface(type(IService).interfaceId);
36
42
  }
37
43
  }
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
4
+ import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
  import {IKeyValueStore} from "../../base/IKeyValueStore.sol";
6
6
  import {IComponentModule} from "./IComponent.sol";
7
7
 
@@ -17,10 +17,11 @@ abstract contract ComponentModule is
17
17
 
18
18
  NftId[] private _nftIds;
19
19
 
20
- modifier onlyComponentOwnerService() {
20
+ // TODO try to keep 1 modifier in 1 place...
21
+ modifier onlyComponentOwnerService() virtual {
21
22
  require(
22
23
  msg.sender == address(this.getComponentOwnerService()),
23
- "ERROR:CMP-001:NOT_OWNER_SERVICE"
24
+ "ERROR:CMP-001:NOT_COMPONENT_OWNER_SERVICE"
24
25
  );
25
26
  _;
26
27
  }
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
4
+ import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
  import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
6
6
 
7
7
  import {StateId} from "../../../types/StateId.sol";
@@ -6,6 +6,7 @@ import {NftId} from "../../../types/NftId.sol";
6
6
  import {UFixed} from "../../../types/UFixed.sol";
7
7
  import {IProductService} from "../../service/IProductService.sol";
8
8
  import {IPoolService} from "../../service/IPoolService.sol";
9
+ import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
9
10
 
10
11
  interface IPool {
11
12
  struct PoolInfo {
@@ -17,9 +18,8 @@ interface IPool {
17
18
  interface IPoolModule is IPool {
18
19
 
19
20
  function registerPool(
20
- NftId poolNftId,
21
- bool isVerifying,
22
- UFixed collateralizationLevel
21
+ NftId nftId,
22
+ PoolInfo memory info
23
23
  ) external;
24
24
 
25
25
  function addBundleToPool(
@@ -36,5 +36,6 @@ interface IPoolModule is IPool {
36
36
  function getBundleNftId(NftId poolNftId, uint256 index) external view returns (NftId bundleNftId);
37
37
 
38
38
  // repeat service linked signatures to avoid linearization issues
39
+ function getComponentOwnerService() external view returns(IComponentOwnerService);
39
40
  function getPoolService() external returns(IPoolService);
40
41
  }