@etherisc/gif-next 0.0.2-f2b0fa2-473 → 0.0.2-f4f92b3-338

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