@etherisc/gif-next 0.0.2-790d44b-698 → 0.0.2-7acbd99-227

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 (222) 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 +196 -72
  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 +281 -155
  40. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +61 -32
  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 +43 -40
  48. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +64 -48
  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 +57 -41
  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 +164 -69
  89. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +86 -44
  91. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +43 -59
  93. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +43 -40
  95. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +43 -40
  97. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +43 -40
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +88 -46
  101. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +110 -68
  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/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  110. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  111. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +668 -0
  112. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  113. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  114. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  115. package/artifacts/contracts/registry/Registry.sol/Registry.json +390 -292
  116. package/artifacts/contracts/registry/Registry.sol/RegistryCreationCode.dbg.json +4 -0
  117. package/artifacts/contracts/registry/Registry.sol/RegistryCreationCode.json +150 -0
  118. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryInstaller.sol/RegistryInstaller.json +344 -0
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +861 -0
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  123. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  124. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  126. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +43 -40
  127. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  129. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +310 -0
  130. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  131. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +76 -37
  132. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  133. package/artifacts/contracts/shared/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
  134. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  135. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +1 -1
  136. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +101 -61
  137. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  138. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
  139. package/artifacts/contracts/test/TestPool.sol/TestPool.json +150 -126
  140. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
  141. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +115 -58
  142. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  143. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +93 -39
  144. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  145. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestService.sol/TestService.json +80 -51
  147. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  150. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
  152. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  153. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  154. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  155. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  158. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  160. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
  169. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  171. package/contracts/components/BaseComponent.sol +12 -27
  172. package/contracts/components/Distribution.sol +29 -6
  173. package/contracts/components/IBaseComponent.sol +2 -2
  174. package/contracts/components/IPoolComponent.sol +2 -8
  175. package/contracts/components/IProductComponent.sol +2 -1
  176. package/contracts/components/Pool.sol +84 -73
  177. package/contracts/components/Product.sol +85 -13
  178. package/contracts/instance/IInstance.sol +4 -3
  179. package/contracts/instance/Instance.sol +14 -3
  180. package/contracts/instance/base/ComponentServiceBase.sol +13 -6
  181. package/contracts/instance/base/IInstanceBase.sol +3 -2
  182. package/contracts/instance/base/InstanceBase.sol +6 -8
  183. package/contracts/instance/base/ServiceBase.sol +19 -13
  184. package/contracts/instance/module/component/ComponentModule.sol +5 -4
  185. package/contracts/instance/module/component/IComponent.sol +2 -2
  186. package/contracts/instance/module/pool/IPoolModule.sol +4 -3
  187. package/contracts/instance/module/pool/PoolModule.sol +12 -7
  188. package/contracts/instance/module/treasury/ITreasury.sol +7 -5
  189. package/contracts/instance/module/treasury/TokenHandler.sol +2 -2
  190. package/contracts/instance/module/treasury/TreasuryModule.sol +21 -28
  191. package/contracts/instance/service/ComponentOwnerService.sol +181 -66
  192. package/contracts/instance/service/DistributionService.sol +6 -11
  193. package/contracts/instance/service/IComponentOwnerService.sol +0 -2
  194. package/contracts/instance/service/PoolService.sol +19 -19
  195. package/contracts/instance/service/ProductService.sol +20 -20
  196. package/contracts/registry/ChainNft.sol +43 -15
  197. package/contracts/registry/IChainNft.sol +3 -2
  198. package/contracts/registry/IRegistry.sol +44 -28
  199. package/contracts/registry/IRegistryService.sol +29 -0
  200. package/contracts/registry/ITransferInterceptor.sol +6 -0
  201. package/contracts/registry/Registry.sol +368 -328
  202. package/contracts/registry/RegistryInstaller.sol +100 -0
  203. package/contracts/registry/RegistryService.sol +383 -0
  204. package/contracts/shared/ERC165.sol +1 -1
  205. package/contracts/shared/IRegisterable.sol +7 -9
  206. package/contracts/shared/IVersionable.sol +15 -13
  207. package/contracts/shared/ProxyManager.sol +115 -0
  208. package/contracts/shared/Registerable.sol +74 -43
  209. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  210. package/contracts/shared/Versionable.sol +46 -40
  211. package/contracts/test/TestDistribution.sol +3 -2
  212. package/contracts/test/TestPool.sol +4 -2
  213. package/contracts/test/TestProduct.sol +4 -2
  214. package/contracts/test/TestRegisterable.sol +5 -6
  215. package/contracts/test/TestService.sol +5 -11
  216. package/contracts/types/Version.sol +1 -0
  217. package/package.json +1 -1
  218. package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.dbg.json +0 -4
  219. package/artifacts/contracts/shared/Proxy.sol/ProxyDeployer.json +0 -248
  220. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
  221. package/contracts/experiment/statemachine/README.md +0 -112
  222. package/contracts/shared/Proxy.sol +0 -94
@@ -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
  }
@@ -26,6 +26,16 @@ abstract contract PoolModule is
26
26
  // mapping(NftId poolNftId => PoolInfo info) private _poolInfo;
27
27
  mapping(NftId poolNftId => LibNftIdSet.Set bundles) private _bundlesForPool;
28
28
 
29
+
30
+ // TODO try to keep 1 modifier in 1 place...
31
+ modifier onlyComponentOwnerService() virtual {
32
+ require(
33
+ msg.sender == address(this.getComponentOwnerService()),
34
+ "ERROR:CMP-001:NOT_COMPONENT_OWNER_SERVICE"
35
+ );
36
+ _;
37
+ }
38
+
29
39
  modifier poolServiceCallingPool() {
30
40
  require(
31
41
  msg.sender == address(this.getPoolService()),
@@ -40,17 +50,12 @@ abstract contract PoolModule is
40
50
 
41
51
  function registerPool(
42
52
  NftId nftId,
43
- bool isVerifying,
44
- UFixed collateralizationRate
53
+ PoolInfo memory info
45
54
  )
46
55
  public
56
+ onlyComponentOwnerService
47
57
  override
48
58
  {
49
- PoolInfo memory info = PoolInfo(
50
- isVerifying,
51
- collateralizationRate
52
- );
53
-
54
59
  _create(POOL(), nftId, abi.encode(info));
55
60
  }
56
61
 
@@ -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
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
4
+ import {IERC20Metadata} from "@openzeppelin5/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
  import {IDistributionComponent} from "../../../components/IDistributionComponent.sol";
6
6
  import {IPoolComponent} from "../../../components/IPoolComponent.sol";
7
7
  import {IProductComponent} from "../../../components/IProductComponent.sol";
8
+ import {IComponentOwnerService} from "../../service/IComponentOwnerService.sol";
8
9
 
9
10
  import {NftId} from "../../../types/NftId.sol";
10
11
  import {UFixed} from "../../../types/UFixed.sol";
@@ -33,9 +34,8 @@ interface ITreasury {
33
34
  interface ITreasuryModule is ITreasury {
34
35
 
35
36
  function registerProductSetup(
36
- IProductComponent product,
37
- IPoolComponent pool,
38
- IDistributionComponent distribution
37
+ NftId productNftId,
38
+ TreasuryInfo memory info
39
39
  ) external;
40
40
 
41
41
  function setTreasuryInfo(
@@ -79,4 +79,6 @@ interface ITreasuryModule is ITreasury {
79
79
  uint256 a,
80
80
  int8 exp
81
81
  ) external pure returns (UFixed);
82
+
83
+ function getComponentOwnerService() external view returns(IComponentOwnerService);
82
84
  }
@@ -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
 
6
6
  import {NftId} from "../../../types/NftId.sol";
7
7
 
@@ -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 {IDistributionComponent} from "../../../components/IDistributionComponent.sol";
6
6
  import {IPoolComponent} from "../../../components/IPoolComponent.sol";
7
7
  import {IProductComponent} from "../../../components/IProductComponent.sol";
@@ -25,48 +25,41 @@ abstract contract TreasuryModule is
25
25
  mapping(NftId componentNftId => TokenHandler tokenHandler) internal _tokenHandler;
26
26
  Fee internal _zeroFee;
27
27
 
28
+ modifier onlyComponentOwnerService() virtual {
29
+ require(
30
+ msg.sender == address(this.getComponentOwnerService()),
31
+ "ERROR:CMP-001:NOT_COPONENT_OWNER_SERVICE"
32
+ );
33
+ _;
34
+ }
28
35
 
29
- function initializeTreasuryModule(IKeyValueStore keyValueStore) internal {
36
+ function _initializeTreasuryModule(IKeyValueStore keyValueStore) internal {
37
+ //_initializeModuleBase(keyValueStore);
30
38
  _initialize(keyValueStore);
31
39
  _zeroFee = FeeLib.zeroFee();
32
40
  }
33
41
 
34
42
  function registerProductSetup(
35
- IProductComponent product,
36
- IPoolComponent pool,
37
- IDistributionComponent distribution
38
- ) external override // TODO add authz (only component module)
43
+ NftId productNftId,
44
+ TreasuryInfo memory setup
45
+ )
46
+ external
47
+ onlyComponentOwnerService
39
48
  {
40
- NftId productNftId = product.getNftId();
41
- NftId poolNftId = pool.getNftId();
42
- NftId distributionNftId = distribution.getNftId();
43
-
44
- require(productNftId.gtz(), "ERROR:TRS-010:PRODUCT_UNDEFINED");
45
- require(poolNftId.gtz(), "ERROR:TRS-011:POOL_UNDEFINED");
49
+ NftId poolNftId = setup.poolNftId;
50
+ NftId distributionNftId = setup.distributionNftId;
46
51
 
47
52
  require(address(_tokenHandler[productNftId]) == address(0), "ERROR:TRS-012:TOKEN_HANDLER_ALREADY_REGISTERED");
48
53
  require(_productNft[poolNftId].eqz(), "ERROR:TRS-013:POOL_ALREADY_LINKED");
49
54
  require(_productNft[distributionNftId].eqz(), "ERROR:TRS-014:COMPENSATION_ALREADY_LINKED");
50
55
 
56
+ // TODO deploy TokenHandler with separate contract to save space
51
57
  // deploy product specific handler contract
52
- IERC20Metadata token = product.getToken();
53
- _tokenHandler[productNftId] = new TokenHandler(productNftId, address(token));
58
+ _tokenHandler[productNftId] = new TokenHandler(productNftId, address(setup.token));
54
59
  _productNft[distributionNftId] = productNftId;
55
60
  _productNft[poolNftId] = productNftId;
56
61
 
57
- TreasuryInfo memory info = TreasuryInfo(
58
- poolNftId,
59
- distributionNftId,
60
- token,
61
- product.getProductFee(),
62
- product.getProcessingFee(),
63
- pool.getPoolFee(),
64
- pool.getStakingFee(),
65
- pool.getPerformanceFee(),
66
- distribution.getDistributionFee()
67
- );
68
-
69
- _create(TREASURY(), productNftId, abi.encode(info));
62
+ _create(TREASURY(), productNftId, abi.encode(setup));
70
63
  }
71
64
 
72
65
  function setTreasuryInfo(
@@ -1,12 +1,12 @@
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
 
6
6
  import {IRegistry} from "../../registry/IRegistry.sol";
7
7
  import {IInstance} from "../IInstance.sol";
8
8
 
9
- import {ITreasuryModule} from "../module/treasury/ITreasury.sol";
9
+ import {ITreasury, ITreasuryModule} from "../module/treasury/ITreasury.sol";
10
10
  import {TreasuryModule} from "../module/treasury/TreasuryModule.sol";
11
11
  import {IComponent, IComponentModule} from "../module/component/IComponent.sol";
12
12
  import {IBaseComponent} from "../../components/IBaseComponent.sol";
@@ -16,18 +16,23 @@ import {IVersionable} from "../../shared/IVersionable.sol";
16
16
  import {Versionable} from "../../shared/Versionable.sol";
17
17
 
18
18
  import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
19
- import {ObjectType, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
19
+ import {ObjectType, TOKEN, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
20
20
  import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
21
21
  import {Key32} from "../../types/Key32.sol";
22
22
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
23
23
  import {Fee} from "../../types/Fee.sol";
24
24
  import {Version, VersionLib} from "../../types/Version.sol";
25
+ import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
25
26
 
26
27
  import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
27
28
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
28
29
  import {IProductComponent} from "../../components/IProductComponent.sol";
29
- import {ServiceBase} from "../base/ServiceBase.sol";
30
+ import {IService} from "../base/IService.sol";
30
31
  import {IComponentOwnerService} from "./IComponentOwnerService.sol";
32
+ import {ServiceBase} from "../base/ServiceBase.sol";
33
+ import {IPool, IPoolModule} from "../module/pool/IPoolModule.sol";
34
+
35
+ import {IRegistryService} from "../../registry/IRegistryService.sol";
31
36
 
32
37
  contract ComponentOwnerService is
33
38
  ServiceBase,
@@ -35,32 +40,35 @@ contract ComponentOwnerService is
35
40
  {
36
41
  using NftIdLib for NftId;
37
42
 
43
+ error MissingTypeRole();
44
+ error WalletIsZero();
45
+ error InvalidToken();
46
+ error InvalidPool();
47
+ error InvalidDistribution();
48
+ error InvalidPoolsInstance();
49
+ error InvalidDistributionsInstance();
50
+
51
+ error CollateralizationLevelIsZero();
52
+
38
53
  string public constant NAME = "ComponentOwnerService";
39
54
 
40
55
  modifier onlyRegisteredComponent(IBaseComponent component) {
41
- NftId nftId = _registry.getNftId(address(component));
56
+ NftId nftId = getRegistry().getNftId(address(component));
42
57
  require(nftId.gtz(), "ERROR:COS-001:COMPONENT_UNKNOWN");
43
58
  _;
44
59
  }
45
60
 
46
61
  constructor(
47
62
  address registry,
48
- NftId registryNftId
49
- ) ServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
50
- {
51
-
52
- }
53
-
54
- function getVersion()
55
- public
56
- pure
57
- virtual override (IVersionable, Versionable)
58
- returns(Version)
63
+ NftId registryNftId,
64
+ address initialOwner
65
+ )
59
66
  {
60
- return VersionLib.toVersion(3,0,0);
67
+ _initializeServiceBase(registry, registryNftId, initialOwner);
68
+ _registerInterface(type(IComponentOwnerService).interfaceId);
61
69
  }
62
70
 
63
- function getName() external pure override returns(string memory name) {
71
+ function getName() public pure override(IService, ServiceBase) returns(string memory name) {
64
72
  return NAME;
65
73
  }
66
74
 
@@ -81,58 +89,49 @@ contract ComponentOwnerService is
81
89
  }
82
90
  }
83
91
 
84
- function register(
85
- IBaseComponent component
86
- ) external override returns (NftId nftId) {
87
- address initialOwner = component.getOwner();
88
- require(
89
- msg.sender == address(component),
90
- "ERROR:COS-003:NOT_COMPONENT"
91
- );
92
+ function getRegistryService() public view virtual returns (IRegistryService) {
93
+ address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
94
+ return IRegistryService(service);
95
+ }
92
96
 
93
- IInstance instance = component.getInstance();
94
- ObjectType objectType = component.getType();
95
- RoleId typeRole = getRoleForType(objectType);
96
- require(
97
- instance.hasRole(typeRole, initialOwner),
98
- "ERROR:CMP-004:TYPE_ROLE_MISSING"
99
- );
97
+ // TODO if user passes type BUNDLE??? -> registerComponent() must catch this
98
+ function register(
99
+ IBaseComponent component,
100
+ ObjectType componentType
101
+ ) external returns (NftId nftId) {
100
102
 
101
- nftId = _registry.register(address(component));
102
- IERC20Metadata token = component.getToken();
103
+ // TODO some info parameters from component and from register may differ -> getObjectInfo() after registration?
104
+ (
105
+ IRegistry.ObjectInfo memory info,
106
+ bytes memory data
107
+ ) = getRegistryService().registerComponent(component, componentType, msg.sender);
103
108
 
104
- instance.registerComponent(
105
- nftId,
106
- token,
107
- component.getWallet());
108
-
109
- // component type specific registration actions
110
- if (component.getType() == PRODUCT()) {
111
- IProductComponent product = IProductComponent(address(component));
109
+ NftId instanceNftId = info.parentNftId;
110
+ address instancAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
111
+ IInstance instance = IInstance(instancAddress);
112
112
 
113
- NftId poolNftId = product.getPoolNftId();
114
- require(poolNftId.gtz(), "ERROR:CMP-005:POOL_UNKNOWN");
115
- IPoolComponent pool = IPoolComponent(_registry.getObjectInfo(poolNftId).objectAddress);
113
+ RoleId typeRole = getRoleForType(componentType);
114
+ if(instance.hasRole(typeRole, msg.sender) == false) {
115
+ revert MissingTypeRole();
116
+ }
116
117
 
117
- NftId distributionNftId = product.getDistributionNftId();
118
- IDistributionComponent distribution = IDistributionComponent(_registry.getObjectInfo(distributionNftId).objectAddress);
119
-
120
- // register with tresury
121
- instance.registerProductSetup(
122
- product,
123
- pool,
124
- distribution
118
+ // component type specific registration actions
119
+ if (componentType == PRODUCT()) {
120
+ _registerProduct(
121
+ info.nftId,
122
+ instanceNftId,
123
+ instance,
124
+ data
125
125
  );
126
- } else if (component.getType() == POOL()) {
127
- IPoolComponent pool = IPoolComponent(address(component));
128
-
129
- // register with pool
130
- instance.registerPool(
131
- nftId,
132
- pool.isVerifying(),
133
- pool.getCollateralizationLevel());
134
- }
135
- // TODO add compensation
126
+ } else if (componentType == POOL()) {
127
+ _registerPool(
128
+ info.nftId,
129
+ instanceNftId,
130
+ instance,
131
+ data
132
+ );
133
+ }
134
+ // TODO add distribution and oracle
136
135
  }
137
136
 
138
137
  function lock(
@@ -154,4 +153,120 @@ contract ComponentOwnerService is
154
153
  Key32 key = nftId.toKey32(COMPONENT());
155
154
  instance.updateState(key, ACTIVE());
156
155
  }
157
- }
156
+
157
+ // Internals
158
+
159
+ function _registerProduct(
160
+ NftId nftId,
161
+ NftId instanceNftId,
162
+ IInstance instance,
163
+ bytes memory data
164
+ )
165
+ internal
166
+ {
167
+ (
168
+ ITreasury.TreasuryInfo memory info,
169
+ address wallet
170
+ ) = abi.decode(data, (ITreasury.TreasuryInfo, address));
171
+
172
+ IRegistry _registry = getRegistry();
173
+
174
+ if(wallet == address(0)) {
175
+ revert WalletIsZero();
176
+ }
177
+
178
+ IRegistry.ObjectInfo memory tokenInfo = _registry.getObjectInfo(address(info.token));
179
+
180
+ if(tokenInfo.objectType != TOKEN()) {
181
+ revert InvalidToken();
182
+ }
183
+
184
+ IRegistry.ObjectInfo memory poolInfo = _registry.getObjectInfo(info.poolNftId);
185
+
186
+ if(poolInfo.objectType != POOL()) {
187
+ revert InvalidPool();
188
+ }
189
+
190
+ if(poolInfo.parentNftId != instanceNftId) {
191
+ revert InvalidPoolsInstance();
192
+ }
193
+ // TODO pool have the same token
194
+ //ITreasury.PoolSetup memory poolSetup = instance.getPoolSetup(info.poolNftId);
195
+ //require(tokenInfo.objectAddress == address(poolSetup.token), "ERROR:COS-018:PRODUCT_POOL_TOKEN_MISMATCH");
196
+ // TODO pool is not linked
197
+
198
+ IRegistry.ObjectInfo memory distributionInfo = _registry.getObjectInfo(info.distributionNftId);
199
+
200
+ if(distributionInfo.objectType != DISTRIBUTION()) {
201
+ revert InvalidDistribution();
202
+ }
203
+
204
+ if(distributionInfo.parentNftId != instanceNftId) {
205
+ revert InvalidDistributionsInstance();
206
+ }
207
+ // TODO distribution have the same token
208
+ // TODO distribution is not linked
209
+
210
+ // component module
211
+ instance.registerComponent(
212
+ nftId,
213
+ info.token,
214
+ wallet // TODO move wallet into TreasuryInfo?
215
+ );
216
+
217
+ // treasury module
218
+ instance.registerProductSetup(
219
+ nftId,
220
+ info
221
+ );
222
+ }
223
+
224
+ function _registerPool(
225
+ NftId nftId,
226
+ NftId instanceNftId,
227
+ IInstance instance,
228
+ bytes memory data
229
+ )
230
+ internal
231
+ {
232
+ (
233
+ IPool.PoolInfo memory info,
234
+ address wallet,
235
+ IERC20Metadata token,
236
+ /*poolFee*/,
237
+ /*stakingFee*/,
238
+ /*performanceFee*/
239
+ ) = abi.decode(data, (IPool.PoolInfo, address, IERC20Metadata, Fee, Fee, Fee));
240
+
241
+ IRegistry _registry = getRegistry();
242
+
243
+ if(wallet == address(0)) {
244
+ revert WalletIsZero();
245
+ }
246
+
247
+ ObjectType tokenType = _registry.getObjectInfo(address(token)).objectType;
248
+
249
+ if(tokenType != TOKEN()) {
250
+ revert InvalidToken();
251
+ }
252
+
253
+ if(UFixedMathLib.eqz(info.collateralizationLevel)) {
254
+ revert CollateralizationLevelIsZero();
255
+ }
256
+
257
+ // TODO add more validations
258
+
259
+ // component module
260
+ instance.registerComponent(
261
+ nftId,
262
+ token,
263
+ wallet
264
+ );
265
+
266
+ // pool module
267
+ instance.registerPool(
268
+ nftId,
269
+ info
270
+ );
271
+ }
272
+ }