@etherisc/gif-next 0.0.2-fbe8e04-715 → 0.0.2-fca9315-260

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 (245) hide show
  1. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  2. package/artifacts/contracts/components/{IBaseComponent.sol/IBaseComponent.json → Component.sol/Component.json} +300 -12
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +199 -94
  5. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  6. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +86 -84
  7. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +496 -0
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +522 -28
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +596 -5
  13. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  14. package/artifacts/contracts/components/Pool.sol/Pool.json +190 -159
  15. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  16. package/artifacts/contracts/components/Product.sol/Product.json +204 -110
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  37. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  38. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
  39. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  40. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  41. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +269 -13
  42. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +120 -19
  44. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  45. package/artifacts/contracts/instance/Instance.sol/Instance.json +105 -615
  46. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +208 -114
  48. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +41 -82
  50. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +250 -265
  52. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +41 -120
  54. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
  56. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +124 -42
  58. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  59. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  60. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  62. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  63. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  64. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  70. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  71. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +245 -66
  72. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  73. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +35 -26
  74. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +153 -65
  76. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +32 -23
  78. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +64 -18
  80. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -18
  82. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +120 -18
  84. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +13 -18
  86. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  87. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +13 -18
  88. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +334 -91
  90. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +66 -25
  92. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +153 -65
  94. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +32 -23
  96. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +159 -71
  98. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +32 -15
  100. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +212 -133
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +127 -93
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/Registry.sol/Registry.json +224 -234
  109. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +68 -161
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +51 -104
  115. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  117. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +13 -29
  119. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  120. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  121. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  122. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +0 -5
  124. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IService.sol/IService.json +13 -18
  126. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  128. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +19 -6
  129. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  130. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +19 -6
  131. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  132. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -11
  133. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  134. package/artifacts/contracts/shared/Service.sol/Service.json +26 -18
  135. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  136. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  138. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  139. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  140. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +19 -11
  141. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  143. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestService.sol/TestService.json +44 -36
  145. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  148. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  149. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  150. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  151. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  152. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  153. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  154. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  155. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  157. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  163. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  169. package/contracts/components/Component.sol +216 -0
  170. package/contracts/components/Distribution.sol +38 -51
  171. package/contracts/components/IComponent.sol +43 -0
  172. package/contracts/components/IDistributionComponent.sol +5 -2
  173. package/contracts/components/IPoolComponent.sol +6 -12
  174. package/contracts/components/IProductComponent.sol +7 -3
  175. package/contracts/components/Pool.sol +42 -86
  176. package/contracts/components/Product.sol +58 -85
  177. package/contracts/instance/BundleManager.sol +7 -11
  178. package/contracts/instance/IInstance.sol +21 -9
  179. package/contracts/instance/IInstanceService.sol +12 -3
  180. package/contracts/instance/Instance.sol +37 -233
  181. package/contracts/instance/InstanceAccessManager.sol +88 -78
  182. package/contracts/instance/InstanceReader.sol +3 -25
  183. package/contracts/instance/InstanceService.sol +291 -120
  184. package/contracts/instance/InstanceServiceManager.sol +5 -8
  185. package/contracts/instance/ObjectManager.sol +7 -24
  186. package/contracts/instance/base/ComponentService.sol +134 -0
  187. package/contracts/instance/module/IAccess.sol +27 -17
  188. package/contracts/instance/service/BundleService.sol +41 -8
  189. package/contracts/instance/service/BundleServiceManager.sol +5 -8
  190. package/contracts/instance/service/DistributionService.sol +31 -43
  191. package/contracts/instance/service/DistributionServiceManager.sol +6 -9
  192. package/contracts/instance/service/IBundleService.sol +5 -6
  193. package/contracts/instance/service/IPolicyService.sol +7 -0
  194. package/contracts/instance/service/PolicyService.sol +67 -37
  195. package/contracts/instance/service/PoolService.sol +25 -39
  196. package/contracts/instance/service/PoolServiceManager.sol +5 -8
  197. package/contracts/instance/service/ProductService.sol +99 -38
  198. package/contracts/registry/ChainNft.sol +1 -1
  199. package/contracts/registry/IRegistry.sol +34 -17
  200. package/contracts/registry/IRegistryService.sol +28 -13
  201. package/contracts/registry/Registry.sol +214 -210
  202. package/contracts/registry/RegistryAccessManager.sol +216 -0
  203. package/contracts/registry/RegistryService.sol +61 -157
  204. package/contracts/registry/RegistryServiceManager.sol +18 -36
  205. package/contracts/registry/ReleaseManager.sol +332 -0
  206. package/contracts/registry/TokenRegistry.sol +8 -7
  207. package/contracts/shared/IRegisterable.sol +1 -3
  208. package/contracts/shared/IService.sol +2 -1
  209. package/contracts/shared/NftOwnable.sol +5 -0
  210. package/contracts/shared/ProxyManager.sol +1 -1
  211. package/contracts/shared/Registerable.sol +10 -14
  212. package/contracts/shared/Service.sol +13 -8
  213. package/contracts/test/TestService.sol +3 -2
  214. package/contracts/types/RoleId.sol +10 -12
  215. package/package.json +1 -1
  216. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  217. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  218. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  219. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  220. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  221. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  222. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  223. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
  224. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
  225. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
  226. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  227. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  228. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  229. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  230. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  231. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  232. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +0 -466
  233. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  234. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  235. package/contracts/components/BaseComponent.sol +0 -132
  236. package/contracts/components/IBaseComponent.sol +0 -31
  237. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
  238. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  239. package/contracts/instance/IInstanceBase.sol +0 -26
  240. package/contracts/instance/InstanceBase.sol +0 -41
  241. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  242. package/contracts/instance/base/IInstanceBase.sol +0 -23
  243. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  244. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  245. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -1,6 +1,8 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
+
4
6
  import {NftId} from "../types/NftId.sol";
5
7
  import {ObjectType} from "../types/ObjectType.sol";
6
8
  import {RoleId} from "../types/RoleId.sol";
@@ -8,10 +10,12 @@ import {IService} from "../shared/IService.sol";
8
10
  import {IRegistry} from "./IRegistry.sol";
9
11
 
10
12
  import {IRegisterable} from "../shared/IRegisterable.sol";
11
- import {IBaseComponent} from "../components/IBaseComponent.sol";
12
-
13
- interface IRegistryService is IService {
13
+ import {IComponent} from "../components/IComponent.sol";
14
14
 
15
+ interface IRegistryService is
16
+ IService,
17
+ IAccessManaged
18
+ {
15
19
  error SelfRegistration();
16
20
  error NotRegistryOwner();
17
21
 
@@ -28,22 +32,33 @@ interface IRegistryService is IService {
28
32
  error InvalidInitialOwner(address initialOwner);
29
33
  error InvalidAddress(address registerableAddress);
30
34
 
35
+ struct FunctionConfig
36
+ {
37
+ ObjectType serviceDomain;
38
+ bytes4 selector;
39
+ }
31
40
 
32
- function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
41
+ function getFunctionConfigs()
42
+ external
43
+ pure
44
+ returns(
45
+ FunctionConfig[] memory config
46
+ );
33
47
 
34
- function registerInstance(IRegisterable instance)
35
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
48
+ // TODO used by service -> add owner arg
49
+ function registerInstance(IRegisterable instance, address owner)
50
+ external returns(IRegistry.ObjectInfo memory info);
36
51
 
37
- function registerProduct(IBaseComponent product, address owner)
38
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
52
+ function registerProduct(IComponent product, address owner)
53
+ external returns(IRegistry.ObjectInfo memory info);
39
54
 
40
- function registerPool(IBaseComponent pool, address owner)
41
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
55
+ function registerPool(IComponent pool, address owner)
56
+ external returns(IRegistry.ObjectInfo memory info);
42
57
 
43
- function registerDistribution(IBaseComponent distribution, address owner)
44
- external returns(IRegistry.ObjectInfo memory info, bytes memory data);
58
+ function registerDistribution(IComponent distribution, address owner)
59
+ external returns(IRegistry.ObjectInfo memory info);
45
60
 
46
- function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId); // -> easy to upgrade
61
+ function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
47
62
 
48
63
  function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
49
64
  }
@@ -1,183 +1,173 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IRegisterable} from "../shared/IRegisterable.sol";
5
- import {IService} from "../shared/IService.sol";
6
4
 
7
- import {ChainNft} from "./ChainNft.sol";
8
- import {IRegistry} from "./IRegistry.sol";
9
- import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
10
- import {Version, VersionPart, VersionLib, VersionPartLib} from "../types/Version.sol";
5
+ import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
6
+ import {VersionPart} from "../types/Version.sol";
11
7
  import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
12
- import {ITransferInterceptor} from "./ITransferInterceptor.sol";
13
8
 
14
9
  import {ERC165} from "../shared/ERC165.sol";
15
10
 
11
+ import {ChainNft} from "./ChainNft.sol";
12
+ import {IRegistry} from "./IRegistry.sol";
13
+ import {ReleaseManager} from "./ReleaseManager.sol";
16
14
 
17
15
  // IMPORTANT
18
16
  // Each NFT minted by registry is accosiated with:
19
17
  // 1) NFT owner
20
18
  // 2) registred contract OR object stored in registered (parent) contract
21
19
  // Four registration flows:
22
- // 1) non IRegisterable address by registryOwner (TOKEN)
23
- // 2) IRegisterable address by registryOwner (SERVICE)
24
- // 3) IRegisterable address by approved service (INSTANCE, COMPONENT)
25
- // 4) state object by approved service (POLICY, BUNDLE, STAKE)
20
+ // 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
21
+ // 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
22
+ // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
23
+ // 4) state object by regular service (POLICY, BUNDLE, STAKE)
26
24
 
27
25
  contract Registry is
28
26
  ERC165,
29
27
  IRegistry
30
28
  {
31
- uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
32
29
  address public constant NFT_LOCK_ADDRESS = address(0x1);
33
30
  uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
34
- uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
35
31
  string public constant EMPTY_URI = "";
36
32
 
37
- VersionPart internal _majorVersion;
33
+ mapping(NftId nftId => ObjectInfo info) private _info;
34
+ mapping(address object => NftId nftId) private _nftIdByAddress;
38
35
 
39
- mapping(NftId nftId => ObjectInfo info) internal _info;
40
- mapping(address object => NftId nftId) internal _nftIdByAddress;
36
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
41
37
 
42
- mapping(ObjectType objectType => mapping(
43
- ObjectType parentType => bool)) internal _isValidContractCombination;
38
+ mapping(ObjectType objectType => bool) private _coreTypes;
44
39
 
45
40
  mapping(ObjectType objectType => mapping(
46
- ObjectType parentType => bool)) internal _isValidObjectCombination;
41
+ ObjectType parentType => bool)) private _coreContractCombinations;
47
42
 
48
- mapping(NftId nftId => string name) internal _string;
49
- mapping(bytes32 serviceNameHash => mapping(
50
- VersionPart majorVersion => address service)) internal _service;
43
+ mapping(ObjectType objectType => mapping(
44
+ ObjectType parentType => bool)) private _coreObjectCombinations;
51
45
 
52
- NftId internal _registryNftId;
53
- NftId internal _serviceNftId; // set in stone upon registry creation
54
- ChainNft internal _chainNft;
46
+ NftId private _registryNftId;
47
+ ChainNft private _chainNft;
55
48
 
49
+ ReleaseManager private _releaseManager;
56
50
 
57
- modifier onlyOwner() {
58
- if(msg.sender != getOwner()) {
59
- revert NotOwner(msg.sender);
51
+ modifier onlyRegistryService() {
52
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
53
+ revert CallerNotRegistryService();
60
54
  }
61
55
  _;
62
56
  }
63
57
 
64
- modifier onlyRegistryService() {
65
- if(msg.sender != _info[_serviceNftId].objectAddress) {
66
- revert NotRegistryService();
58
+ modifier onlyReleaseManager() {
59
+ if(msg.sender != address(_releaseManager)) {
60
+ revert CallerNotReleaseManager();
67
61
  }
68
62
  _;
69
63
  }
70
64
 
71
- constructor(address registryOwner, VersionPart majorVersion)
65
+ constructor()
72
66
  {
73
- require(registryOwner > address(0), "Registry: registry owner is 0");
74
-
75
- // major version at constructor time
76
- _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
77
- emit LogInitialMajorVersionSet(_majorVersion);
67
+ _releaseManager = ReleaseManager(msg.sender);
78
68
 
79
69
  // deploy NFT
80
- _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
70
+ _chainNft = new ChainNft(address(this));
81
71
 
82
72
  // initial registry setup
83
73
  _registerProtocol();
84
- _registerRegistry(registryOwner);
85
- _registerRegistryService(registryOwner);
74
+ _registerRegistry();
86
75
 
87
- // set object parent relations
88
- _setupValidObjectParentCombinations();
76
+ // set object types and object parent relations
77
+ _setupValidCoreTypesAndCombinations();
89
78
 
90
79
  _registerInterface(type(IRegistry).interfaceId);
91
80
  }
92
81
 
93
- // from IRegistry
94
-
95
- /// @dev latest GIF release version
96
- function setMajorVersion(VersionPart newMajorVersion)
82
+ function registerService(
83
+ ObjectInfo memory info,
84
+ VersionPart version,
85
+ ObjectType domain
86
+ )
97
87
  external
98
- onlyOwner
88
+ onlyReleaseManager
89
+ returns(NftId nftId)
99
90
  {
100
- // ensure major version increments is one
101
- uint256 oldMax = _majorVersion.toInt();
102
- uint256 newMax = newMajorVersion.toInt();
103
- if (newMax <= oldMax || newMax - oldMax != 1) {
104
- revert MajorVersionMaxIncreaseInvalid(newMajorVersion, _majorVersion);
91
+ /* must be guaranteed by release manager
92
+ if(info.objectType != SERVICE()) {
93
+ revert();
94
+ }
95
+ if(info.parentType != REGISTRY()) {
96
+ revert();
97
+ }
98
+ info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
99
+ */
100
+
101
+ if(_service[version][domain] > address(0)) {
102
+ revert ServiceAlreadyRegistered(info.objectAddress);
105
103
  }
106
104
 
107
- _majorVersion = newMajorVersion;
108
- emit LogMajorVersionSet(_majorVersion);
105
+ _service[version][domain] = info.objectAddress; // nftId;
106
+
107
+ nftId = _register(info);
108
+
109
+ emit LogServiceRegistration(version, domain);
109
110
  }
110
111
 
111
- /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
112
- // TODO service registration means its approval for some type?
113
- // TODO registration of precompile addresses
114
112
  function register(ObjectInfo memory info)
115
113
  external
116
114
  onlyRegistryService
117
115
  returns(NftId nftId)
118
116
  {
119
117
  ObjectType objectType = info.objectType;
120
- NftId parentNftId = info.parentNftId;
121
- ObjectInfo memory parentInfo = _info[parentNftId];
122
- ObjectType parentType = parentInfo.objectType; // see function header
123
- address parentAddress = parentInfo.objectAddress;
118
+ ObjectType parentType = _info[info.parentNftId].objectType;
124
119
 
125
- // parent is contract -> need to check? -> check before minting
126
- // special case: global registry nft as parent when not on mainnet -> global registry address is 0
127
- // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
128
- // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
129
- if(parentAddress == address(0)) {
130
- revert ZeroParentAddress();
120
+ // TODO do not need it here -> SERVICE is no longer part of _coreContractCombinations
121
+ // no service registrations
122
+ if(objectType == SERVICE()) {
123
+ revert ServiceRegistration();
131
124
  }
132
125
 
133
- address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
134
-
135
- // TODO does external call
136
- uint256 mintedTokenId = _chainNft.mint(
137
- info.initialOwner,
138
- interceptor,
139
- EMPTY_URI);
140
- nftId = toNftId(mintedTokenId);
141
-
142
- // TODO move nftId out of info struct
143
- // getters by nftId -> return struct without nftId
144
- // getters by address -> return nftId AND struct
145
- info.nftId = nftId;
146
- _info[nftId] = info;
147
-
148
- if(info.objectAddress > address(0))
126
+ // only valid core types combinations
127
+ if(info.objectAddress == address(0))
149
128
  {
150
- // TODO if need to add types latter -> at least call this check from registry service
151
- // parent is registered + object-parent types are valid
152
- if(_isValidContractCombination[objectType][parentType] == false) {
129
+ if(_coreObjectCombinations[objectType][parentType] == false) {
153
130
  revert InvalidTypesCombination(objectType, parentType);
154
131
  }
155
-
156
- address contractAddress = info.objectAddress;
157
-
158
- if(_nftIdByAddress[contractAddress].gtz()) {
159
- revert ContractAlreadyRegistered(contractAddress);
160
- }
161
-
162
- _nftIdByAddress[contractAddress] = nftId;
163
-
164
- // special case
165
- if(objectType == SERVICE()) {
166
- _registerService(info);
167
- }
168
132
  }
169
133
  else
170
134
  {
171
- if(_isValidObjectCombination[objectType][parentType] == false) {
135
+ if(_coreContractCombinations[objectType][parentType] == false) {
172
136
  revert InvalidTypesCombination(objectType, parentType);
173
137
  }
174
138
  }
175
139
 
176
- emit LogRegistration(info);
140
+ nftId = _register(info);
141
+ }
142
+
143
+ function registerWithCustomType(ObjectInfo memory info)
144
+ external
145
+ onlyRegistryService
146
+ returns(NftId nftId)
147
+ {
148
+ ObjectType objectType = info.objectType;
149
+ ObjectType parentType = _info[info.parentNftId].objectType;
150
+
151
+ if(_coreTypes[objectType]) {
152
+ revert CoreTypeRegistration();
153
+ }
154
+
155
+ if(
156
+
157
+ parentType == PROTOCOL() ||
158
+ parentType == REGISTRY() ||
159
+ parentType == SERVICE()
160
+ ) {
161
+ revert InvalidTypesCombination(objectType, parentType);
162
+ }
163
+
164
+ _register(info);
177
165
  }
166
+
167
+
178
168
  /// @dev earliest GIF major version
179
- function getMajorVersionMin() external view returns (VersionPart) {
180
- return VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
169
+ function getInitialVersion() external view returns (VersionPart) {
170
+ return _releaseManager.getInitialVersion();
181
171
  }
182
172
 
183
173
  // TODO make distinction between active an not yet active version
@@ -187,13 +177,17 @@ contract Registry is
187
177
  // in this case we might want to have a period where the latest version is
188
178
  // in the process of being set up while the latest active version is 1 major release smaller
189
179
  /// @dev latest GIF major version (might not yet be active)
190
- function getMajorVersionMax() external view returns (VersionPart) {
191
- return _majorVersion;
180
+ function getNextVersion() external view returns (VersionPart) {
181
+ return _releaseManager.getNextVersion();
192
182
  }
193
183
 
194
184
  /// @dev latest active GIF release version
195
- function getMajorVersion() external view returns (VersionPart) {
196
- return _majorVersion;
185
+ function getLatestVersion() external view returns (VersionPart) {
186
+ return _releaseManager.getLatestVersion();
187
+ }
188
+
189
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
190
+ return _releaseManager.getReleaseInfo(version);
197
191
  }
198
192
 
199
193
  function getObjectCount() external view override returns (uint256) {
@@ -233,21 +227,23 @@ contract Registry is
233
227
  }
234
228
 
235
229
  function isRegisteredService(address object) external view override returns (bool) {
236
- return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
230
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
237
231
  }
238
232
 
239
- function getServiceName(NftId nftId) external view returns (string memory) {
240
- return _string[nftId];
233
+ function isValidRelease(VersionPart version) external view returns (bool)
234
+ {
235
+ return _releaseManager.isValidRelease(version);
241
236
  }
242
237
 
243
- // special case to retrive a gif service
244
238
  function getServiceAddress(
245
- string memory serviceName,
246
- VersionPart majorVersion
247
- ) external view returns (address)
239
+ ObjectType serviceDomain,
240
+ VersionPart releaseVersion
241
+ ) external view returns (address service)
248
242
  {
249
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
250
- return _service[serviceNameHash][majorVersion];
243
+ // TODO how can I get service address while release is not validated/activated ?!! -> user will check validity of release on its own
244
+ //if(_releaseManager.isValidRelease(releaseVersion)) {
245
+ service = _service[releaseVersion][serviceDomain];
246
+ //}
251
247
  }
252
248
 
253
249
  function getChainNft() external view override returns (ChainNft) {
@@ -260,28 +256,54 @@ contract Registry is
260
256
 
261
257
  // Internals
262
258
 
263
- function _registerService(ObjectInfo memory info)
259
+ /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
260
+ // TODO registration of precompile addresses
261
+ function _register(ObjectInfo memory info)
264
262
  internal
263
+ returns(NftId nftId)
265
264
  {
266
- (
267
- string memory serviceName,
268
- VersionPart majorVersion
269
- ) = abi.decode(info.data, (string, VersionPart));
270
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
271
-
272
- // ensures consistency of service.getVersion() and majorVersion here
273
- if(majorVersion != _majorVersion) {
274
- revert InvalidServiceVersion(majorVersion);
275
- }
276
-
277
- if(_service[serviceNameHash][majorVersion] != address(0)) {
278
- revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
265
+ ObjectType objectType = info.objectType;
266
+ NftId parentNftId = info.parentNftId;
267
+ ObjectInfo memory parentInfo = _info[parentNftId];
268
+ ObjectType parentType = parentInfo.objectType; // see function header
269
+ address parentAddress = parentInfo.objectAddress;
270
+
271
+ // parent is contract -> need to check? -> check before minting
272
+ // special case: global registry nft as parent when not on mainnet -> global registry address is 0
273
+ // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
274
+ // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
275
+ if(parentAddress == address(0)) {
276
+ revert ZeroParentAddress();
279
277
  }
280
278
 
281
- _string[info.nftId] = serviceName;
282
- _service[serviceNameHash][majorVersion] = info.objectAddress;
279
+ address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
280
+
281
+ // TODO does external call
282
+ // compute next nftId, do all checks and stores, mint() at most end...
283
+ uint256 mintedTokenId = _chainNft.mint(
284
+ info.initialOwner,
285
+ interceptor,
286
+ EMPTY_URI);
287
+ nftId = toNftId(mintedTokenId);
283
288
 
284
- emit LogServiceNameRegistration(serviceName, majorVersion);
289
+ // TODO move nftId out of info struct
290
+ // getters by nftId -> return struct without nftId
291
+ // getters by address -> return nftId AND struct
292
+ info.nftId = nftId;
293
+ _info[nftId] = info;
294
+
295
+ if(info.objectAddress > address(0))
296
+ {
297
+ address contractAddress = info.objectAddress;
298
+
299
+ if(_nftIdByAddress[contractAddress].gtz()) {
300
+ revert ContractAlreadyRegistered(contractAddress);
301
+ }
302
+
303
+ _nftIdByAddress[contractAddress] = nftId;
304
+ }
305
+
306
+ emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
285
307
  }
286
308
 
287
309
  /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
@@ -314,32 +336,31 @@ contract Registry is
314
336
 
315
337
  /// @dev protocol registration used to anchor the dip ecosystem relations
316
338
  function _registerProtocol()
317
- internal
339
+ private
318
340
  {
319
341
  uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
320
342
  NftId protocolNftId = toNftId(protocolId);
321
343
 
322
- _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
344
+ _info[protocolNftId] = ObjectInfo({
345
+ nftId: protocolNftId,
346
+ parentNftId: zeroNftId(),
347
+ objectType: PROTOCOL(),
348
+ isInterceptor: false,
349
+ objectAddress: address(0),
350
+ initialOwner: NFT_LOCK_ADDRESS,
351
+ data: ""
352
+ });
323
353
 
324
- _info[protocolNftId] = ObjectInfo(
325
- protocolNftId,
326
- zeroNftId(), // parent
327
- PROTOCOL(),
328
- false, // isInterceptor
329
- address(0), // objectAddress
330
- NFT_LOCK_ADDRESS,// initialOwner
331
- ""
332
- );
354
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
333
355
  }
334
356
 
335
357
  /// @dev registry registration
336
358
  /// might also register the global registry when not on mainnet
337
- function _registerRegistry(address registryOwner)
338
- internal
359
+ function _registerRegistry()
360
+ private
339
361
  {
340
362
  uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
341
363
  NftId registryNftId = toNftId(registryId);
342
-
343
364
  NftId parentNftId;
344
365
 
345
366
  if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
@@ -352,68 +373,39 @@ contract Registry is
352
373
  parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
353
374
  }
354
375
 
355
- _chainNft.mint(registryOwner, registryId);
356
-
357
- _info[registryNftId] = ObjectInfo(
358
- registryNftId,
359
- parentNftId,
360
- REGISTRY(),
361
- false, // isInterceptor
362
- address(this),
363
- registryOwner,
364
- ""
365
- );
376
+ _info[registryNftId] = ObjectInfo({
377
+ nftId: registryNftId,
378
+ parentNftId: parentNftId,
379
+ objectType: REGISTRY(),
380
+ isInterceptor: false,
381
+ objectAddress: address(this),
382
+ initialOwner: NFT_LOCK_ADDRESS,
383
+ data: ""
384
+ });
366
385
  _nftIdByAddress[address(this)] = registryNftId;
367
386
  _registryNftId = registryNftId;
368
- }
369
387
 
388
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
389
+ }
370
390
 
371
391
  /// @dev global registry registration for non mainnet registries
372
392
  function _registerGlobalRegistry()
373
- internal
393
+ private
374
394
  {
375
395
  uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
376
-
377
- _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
378
-
379
396
  NftId globalRegistryNftId = toNftId(globalRegistryId);
380
397
 
381
- _info[globalRegistryNftId] = ObjectInfo(
382
- globalRegistryNftId,
383
- toNftId(_chainNft.PROTOCOL_NFT_ID()), // parent
384
- REGISTRY(),
385
- false, // isInterceptor
386
- address(0), // objectAddress
387
- NFT_LOCK_ADDRESS, // initialOwner
388
- "" // data
389
- );
390
- }
398
+ _info[globalRegistryNftId] = ObjectInfo({
399
+ nftId: globalRegistryNftId,
400
+ parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
401
+ objectType: REGISTRY(),
402
+ isInterceptor: false,
403
+ objectAddress: address(0),
404
+ initialOwner: NFT_LOCK_ADDRESS,
405
+ data: ""
406
+ });
391
407
 
392
- function _registerRegistryService(address registryOwner)
393
- internal
394
- {
395
- uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
396
- NftId serviceNftId = toNftId(serviceId);
397
-
398
- _chainNft.mint(registryOwner, serviceId);
399
-
400
- _info[serviceNftId] = ObjectInfo(
401
- serviceNftId,
402
- _registryNftId,
403
- SERVICE(),
404
- false, // isInterceptor
405
- msg.sender, // service deploys registry
406
- registryOwner, // initialOwner,
407
- ""
408
- );
409
-
410
- _nftIdByAddress[msg.sender] = serviceNftId;
411
-
412
- string memory serviceName = "RegistryService";
413
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
414
- _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
415
- _string[serviceNftId] = serviceName;
416
- _serviceNftId = serviceNftId;
408
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
417
409
  }
418
410
 
419
411
  /// @dev defines which object - parent types relations are allowed to register
@@ -422,27 +414,39 @@ contract Registry is
422
414
  // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
423
415
  // 3) DO NOT use REGISTRY as object type
424
416
  // 2) DO NOT use PROTOCOL and "zeroObjectType"
425
- function _setupValidObjectParentCombinations()
426
- internal
417
+ function _setupValidCoreTypesAndCombinations()
418
+ private
427
419
  {
420
+ _coreTypes[REGISTRY()] = true;
421
+ _coreTypes[SERVICE()] = true;
422
+ _coreTypes[TOKEN()] = true;
423
+ _coreTypes[INSTANCE()] = true;
424
+ _coreTypes[PRODUCT()] = true;
425
+ _coreTypes[POOL()] = true;
426
+ _coreTypes[DISTRIBUTION()] = true;
427
+ _coreTypes[POLICY()] = true;
428
+ _coreTypes[BUNDLE()] = true;
429
+ _coreTypes[STAKE()] = true;
430
+
428
431
  // registry as parent, ONLY registry owner
429
- _isValidContractCombination[TOKEN()][REGISTRY()] = true;
430
- _isValidContractCombination[SERVICE()][REGISTRY()] = true;
432
+ //_coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
433
+ _coreContractCombinations[TOKEN()][REGISTRY()] = true;
434
+ //_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
431
435
 
432
436
  // registry as parent, ONLY approved
433
- _isValidContractCombination[INSTANCE()][REGISTRY()] = true;
437
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
434
438
 
435
439
  // instance as parent, ONLY approved
436
- _isValidContractCombination[PRODUCT()][INSTANCE()] = true;
437
- _isValidContractCombination[DISTRIBUTION()][INSTANCE()] = true;
438
- _isValidContractCombination[ORACLE()][INSTANCE()] = true;
439
- _isValidContractCombination[POOL()][INSTANCE()] = true;
440
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
441
+ _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
442
+ _coreContractCombinations[ORACLE()][INSTANCE()] = true;
443
+ _coreContractCombinations[POOL()][INSTANCE()] = true;
440
444
 
441
445
  // product as parent, ONLY approved
442
- _isValidObjectCombination[POLICY()][PRODUCT()] = true;
446
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
443
447
 
444
448
  // pool as parent, ONLY approved
445
- _isValidObjectCombination[BUNDLE()][POOL()] = true;
446
- _isValidObjectCombination[STAKE()][POOL()] = true;
449
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
450
+ _coreObjectCombinations[STAKE()][POOL()] = true;
447
451
  }
448
452
  }