@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,20 +1,18 @@
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
- import {IRegisterable} from "../shared/IRegisterable.sol";
7
6
  import {Registerable} from "../shared/Registerable.sol";
8
7
 
9
8
  import {IRegistry} from "../registry/IRegistry.sol";
10
9
  import {IInstance} from "../instance/IInstance.sol";
11
10
 
12
11
  import {IInstance} from "../instance/IInstance.sol";
13
- import {IComponent, IComponentModule} from "../instance/module/component/IComponent.sol";
14
12
  import {IComponentOwnerService} from "../instance/service/IComponentOwnerService.sol";
15
13
  import {IBaseComponent} from "./IBaseComponent.sol";
16
- import {Fee, FeeLib} from "../types/Fee.sol";
17
14
  import {NftId} from "../types/NftId.sol";
15
+ import {ObjectType} from "../types/ObjectType.sol";
18
16
 
19
17
  abstract contract BaseComponent is
20
18
  Registerable,
@@ -26,17 +24,20 @@ abstract contract BaseComponent is
26
24
  address internal _wallet;
27
25
  IERC20Metadata internal _token;
28
26
  IInstance internal _instance;
29
- bool internal _isRegistered;
30
- Fee internal _zeroFee;
31
27
 
32
28
  constructor(
33
29
  address registry,
34
30
  NftId instanceNftId,
35
- address token
31
+ address token,
32
+ ObjectType componentType,
33
+ bool isInterceptor,
34
+ address initialOwner
36
35
  )
37
- Registerable(registry, instanceNftId)
38
36
  {
39
- IRegistry.ObjectInfo memory instanceInfo = _registry.getObjectInfo(instanceNftId);
37
+ bytes memory data = "";
38
+ _initializeRegisterable(registry, instanceNftId, componentType, isInterceptor, initialOwner, data);
39
+
40
+ IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
40
41
  _instance = IInstance(instanceInfo.objectAddress);
41
42
  require(
42
43
  _instance.supportsInterface(type(IInstance).interfaceId),
@@ -46,24 +47,8 @@ abstract contract BaseComponent is
46
47
  _componentOwnerService = _instance.getComponentOwnerService();
47
48
  _wallet = address(this);
48
49
  _token = IERC20Metadata(token);
49
- _isRegistered = false;
50
- _zeroFee = FeeLib.zeroFee();
51
- }
52
-
53
- // from registerable
54
- function register() public override(IRegisterable, Registerable) returns (NftId componentId) {
55
- require(msg.sender == getOwner(), "");
56
- require(
57
- address(_registry) != address(0),
58
- "ERROR:COB-001:REGISTRY_ZERO"
59
- );
60
- require(
61
- _registry.isRegistered(address(_instance)),
62
- "ERROR:COB:INSTANCE_NOT_REGISTERED"
63
- );
64
50
 
65
- _isRegistered = true;
66
- return _componentOwnerService.register(this);
51
+ _registerInterface(type(IBaseComponent).interfaceId);
67
52
  }
68
53
 
69
54
  // from component contract
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
- import {ObjectType, DISTRIBUTION} from "../types/ObjectType.sol";
4
+ import {DISTRIBUTION} from "../types/ObjectType.sol";
5
5
  import {IDistributionService} from "../instance/service/IDistributionService.sol";
6
6
  import {IProductService} from "../instance/service/IProductService.sol";
7
7
  import {NftId} from "../types/NftId.sol";
@@ -9,6 +9,9 @@ import {ReferralId} from "../types/ReferralId.sol";
9
9
  import {Fee, FeeLib} from "../types/Fee.sol";
10
10
  import {BaseComponent} from "./BaseComponent.sol";
11
11
  import {IDistributionComponent} from "./IDistributionComponent.sol";
12
+ import {IRegistry} from "../registry/IRegistry.sol";
13
+ import {IRegisterable} from "../shared/IRegisterable.sol";
14
+ import {Registerable} from "../shared/Registerable.sol";
12
15
 
13
16
  contract Distribution is
14
17
  BaseComponent,
@@ -34,15 +37,18 @@ contract Distribution is
34
37
  // TODO refactor into tokenNftId
35
38
  address token,
36
39
  bool verifying,
37
- Fee memory distributionFee
40
+ Fee memory distributionFee,
41
+ address initialOwner
38
42
  )
39
- BaseComponent(registry, instanceNftId, token)
43
+ BaseComponent(registry, instanceNftId, token, DISTRIBUTION(), true, initialOwner)
40
44
  {
41
45
  _isVerifying = verifying;
42
46
  _initialDistributionFee = distributionFee;
43
47
 
44
48
  _distributionService = _instance.getDistributionService();
45
49
  _productService = _instance.getProductService();
50
+
51
+ _registerInterface(type(IDistributionComponent).interfaceId);
46
52
  }
47
53
 
48
54
 
@@ -125,8 +131,25 @@ contract Distribution is
125
131
  return _isVerifying;
126
132
  }
127
133
 
128
- // from registerable
129
- function getType() public pure override returns (ObjectType) {
130
- return DISTRIBUTION();
134
+ // from IRegisterable
135
+
136
+ function getInitialInfo()
137
+ public
138
+ view
139
+ override (IRegisterable, Registerable)
140
+ returns(IRegistry.ObjectInfo memory, bytes memory)
141
+ {
142
+ (
143
+ IRegistry.ObjectInfo memory info,
144
+ bytes memory data
145
+ ) = super.getInitialInfo();
146
+
147
+ return (
148
+ info,
149
+ abi.encode(
150
+ _initialDistributionFee,
151
+ _isVerifying
152
+ )
153
+ );
131
154
  }
132
155
  }
@@ -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 {IRegisterable} from "../shared/IRegisterable.sol";
7
7
  import {IInstanceLinked} from "../instance/IInstanceLinked.sol";
@@ -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 {NftId} from "../types/NftId.sol";
5
5
  import {Fee} from "../types/Fee.sol";
@@ -60,12 +60,6 @@ interface IPoolComponent is IBaseComponent {
60
60
 
61
61
  function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
62
62
 
63
- function getPoolFee() external view returns (Fee memory poolFee);
63
+ function getFees() external view returns (Fee memory poolFee, Fee memory stakingFee, Fee memory performanceFee);
64
64
 
65
- function getStakingFee() external view returns (Fee memory stakingFee);
66
-
67
- function getPerformanceFee()
68
- external
69
- view
70
- returns (Fee memory performanceFee);
71
65
  }
@@ -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 {Fee} from "../types/Fee.sol";
5
5
  import {NftId} from "../types/NftId.sol";
@@ -9,6 +9,7 @@ import {RiskId} from "../types/RiskId.sol";
9
9
  import {IBaseComponent} from "./IBaseComponent.sol";
10
10
 
11
11
  interface IProductComponent is IBaseComponent {
12
+
12
13
  function setFees(
13
14
  Fee memory productFee,
14
15
  Fee memory processingFee
@@ -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/IRegistryLinked.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
  }