@etherisc/gif-next 0.0.2-c96f882-016 → 0.0.2-c9b0563-536

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 (261) hide show
  1. package/README.md +63 -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 +522 -58
  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 +317 -177
  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} +74 -3
  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 +125 -19
  49. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  50. package/artifacts/contracts/instance/Instance.sol/Instance.json +203 -660
  51. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  52. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +219 -115
  53. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  54. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +164 -66
  55. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  56. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +360 -76
  57. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  58. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +67 -26
  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 +215 -218
  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 +227 -312
  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 -95
  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/Versionable.sol/Versionable.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +19 -11
  149. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  150. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  151. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestService.sol/TestService.json +44 -36
  153. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  155. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  156. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  157. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  158. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  163. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  165. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
  166. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  172. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  174. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  176. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  178. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  179. package/contracts/components/Component.sol +216 -0
  180. package/contracts/components/Distribution.sol +44 -57
  181. package/contracts/components/IComponent.sol +43 -0
  182. package/contracts/components/IDistributionComponent.sol +5 -1
  183. package/contracts/components/IPoolComponent.sol +7 -18
  184. package/contracts/components/IProductComponent.sol +7 -3
  185. package/contracts/components/Pool.sol +59 -110
  186. package/contracts/components/Product.sol +77 -108
  187. package/contracts/instance/BundleManager.sol +125 -0
  188. package/contracts/instance/Cloneable.sol +46 -0
  189. package/contracts/instance/IInstance.sol +54 -10
  190. package/contracts/instance/IInstanceService.sol +15 -4
  191. package/contracts/instance/Instance.sol +73 -246
  192. package/contracts/instance/InstanceAccessManager.sol +88 -78
  193. package/contracts/instance/InstanceReader.sol +29 -26
  194. package/contracts/instance/InstanceService.sol +373 -76
  195. package/contracts/instance/InstanceServiceManager.sol +10 -12
  196. package/contracts/instance/ObjectManager.sol +84 -0
  197. package/contracts/instance/base/ComponentService.sol +134 -0
  198. package/contracts/instance/module/IAccess.sol +27 -17
  199. package/contracts/instance/module/IBundle.sol +1 -0
  200. package/contracts/instance/module/ISetup.sol +3 -0
  201. package/contracts/instance/service/BundleService.sol +293 -0
  202. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  203. package/contracts/instance/service/DistributionService.sol +106 -0
  204. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  205. package/contracts/instance/service/IBundleService.sol +44 -0
  206. package/contracts/instance/service/IPolicyService.sol +94 -0
  207. package/contracts/instance/service/IPoolService.sol +6 -23
  208. package/contracts/instance/service/IProductService.sol +6 -73
  209. package/contracts/instance/service/PolicyService.sol +538 -0
  210. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  211. package/contracts/instance/service/PoolService.sol +110 -0
  212. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  213. package/contracts/instance/service/ProductService.sol +233 -0
  214. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  215. package/contracts/registry/ChainNft.sol +1 -1
  216. package/contracts/registry/IRegistry.sol +37 -29
  217. package/contracts/registry/IRegistryService.sol +44 -14
  218. package/contracts/registry/Registry.sol +218 -238
  219. package/contracts/registry/RegistryAccessManager.sol +216 -0
  220. package/contracts/registry/RegistryService.sol +83 -265
  221. package/contracts/registry/RegistryServiceManager.sol +20 -22
  222. package/contracts/registry/ReleaseManager.sol +332 -0
  223. package/contracts/registry/TokenRegistry.sol +112 -0
  224. package/contracts/shared/ERC165.sol +6 -2
  225. package/contracts/shared/IRegisterable.sol +1 -3
  226. package/contracts/shared/IService.sol +2 -1
  227. package/contracts/shared/NftOwnable.sol +7 -4
  228. package/contracts/shared/ProxyManager.sol +1 -1
  229. package/contracts/shared/Registerable.sol +11 -14
  230. package/contracts/shared/Service.sol +14 -8
  231. package/contracts/test/TestService.sol +3 -2
  232. package/contracts/types/NftIdSet.sol +26 -24
  233. package/contracts/types/RoleId.sol +14 -6
  234. package/contracts/types/StateId.sol +4 -0
  235. package/package.json +3 -3
  236. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  237. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -314
  238. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  239. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -267
  240. package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
  241. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
  242. package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
  243. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  244. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  245. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  246. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
  247. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
  248. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  249. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
  250. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  251. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  252. package/contracts/components/BaseComponent.sol +0 -86
  253. package/contracts/components/IBaseComponent.sol +0 -24
  254. package/contracts/instance/AccessManagedSimple.sol +0 -122
  255. package/contracts/instance/AccessManagerSimple.sol +0 -692
  256. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  257. package/contracts/instance/base/ComponentServiceBase.sol +0 -49
  258. package/contracts/instance/base/IInstanceBase.sol +0 -23
  259. package/contracts/instance/service/ComponentOwnerService.sol +0 -317
  260. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  261. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -1,221 +1,193 @@
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
- uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
30
+ uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
34
31
  string public constant EMPTY_URI = "";
35
32
 
36
- VersionPart internal _majorVersion;
33
+ mapping(NftId nftId => ObjectInfo info) private _info;
34
+ mapping(address object => NftId nftId) private _nftIdByAddress;
37
35
 
38
- mapping(NftId nftId => ObjectInfo info) internal _info;
39
- mapping(address object => NftId nftId) internal _nftIdByAddress;
36
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
40
37
 
41
- mapping(NftId registrator => mapping(
42
- ObjectType objectType => bool)) internal _isApproved;
38
+ mapping(ObjectType objectType => bool) private _coreTypes;
43
39
 
44
40
  mapping(ObjectType objectType => mapping(
45
- ObjectType parentType => bool)) internal _isValidContractCombination;
41
+ ObjectType parentType => bool)) private _coreContractCombinations;
46
42
 
47
43
  mapping(ObjectType objectType => mapping(
48
- ObjectType parentType => bool)) internal _isValidObjectCombination;
44
+ ObjectType parentType => bool)) private _coreObjectCombinations;
49
45
 
50
- mapping(address token => mapping(
51
- VersionPart majorVersion => bool isActive)) internal _tokenIsActive;
46
+ NftId private _registryNftId;
47
+ ChainNft private _chainNft;
52
48
 
53
- mapping(NftId nftId => string name) internal _string;
54
- mapping(bytes32 serviceNameHash => mapping(
55
- VersionPart majorVersion => address service)) internal _service;
49
+ ReleaseManager private _releaseManager;
56
50
 
57
- NftId internal _registryNftId;
58
- NftId internal _serviceNftId; // set in stone upon registry creation
59
- ChainNft internal _chainNft;
60
-
61
-
62
- modifier onlyOwner() {
63
- if(msg.sender != getOwner()) {
64
- revert NotOwner(msg.sender);
51
+ modifier onlyRegistryService() {
52
+ if(!_releaseManager.isActiveRegistryService(msg.sender)) {
53
+ revert CallerNotRegistryService();
65
54
  }
66
55
  _;
67
56
  }
68
57
 
69
- modifier onlyRegistryService() {
70
-
71
- if(msg.sender != _info[_serviceNftId].objectAddress) {
72
- revert NotRegistryService();
58
+ modifier onlyReleaseManager() {
59
+ if(msg.sender != address(_releaseManager)) {
60
+ revert CallerNotReleaseManager();
73
61
  }
74
62
  _;
75
63
  }
76
64
 
77
- constructor(address registryOwner, VersionPart majorVersion)
65
+ constructor()
78
66
  {
79
- require(registryOwner > address(0), "Registry: registry owner is 0");
80
-
81
- // major version at constructor time
82
- _majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
83
- emit LogInitialMajorVersionSet(_majorVersion);
67
+ _releaseManager = ReleaseManager(msg.sender);
84
68
 
85
69
  // deploy NFT
86
- _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
70
+ _chainNft = new ChainNft(address(this));
87
71
 
88
72
  // initial registry setup
89
73
  _registerProtocol();
90
- _registerRegistry(registryOwner);
91
- _registerRegistryService(registryOwner);
74
+ _registerRegistry();
92
75
 
93
- // set object parent relations
94
- _setupValidObjectParentCombinations();
76
+ // set object types and object parent relations
77
+ _setupValidCoreTypesAndCombinations();
95
78
 
96
79
  _registerInterface(type(IRegistry).interfaceId);
97
80
  }
98
81
 
99
- // from IRegistry
100
-
101
- /// @dev latest GIF release version
102
- function setMajorVersion(VersionPart newMajorVersion)
82
+ function registerService(
83
+ ObjectInfo memory info,
84
+ VersionPart version,
85
+ ObjectType domain
86
+ )
103
87
  external
104
- onlyOwner
88
+ onlyReleaseManager
89
+ returns(NftId nftId)
105
90
  {
106
- // ensure major version increments is one
107
- uint256 oldMax = _majorVersion.toInt();
108
- uint256 newMax = newMajorVersion.toInt();
109
- if (newMax <= oldMax || newMax - oldMax != 1) {
110
- 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);
111
103
  }
112
104
 
113
- _majorVersion = newMajorVersion;
114
- emit LogMajorVersionSet(_majorVersion);
105
+ _service[version][domain] = info.objectAddress; // nftId;
106
+
107
+ nftId = _register(info);
108
+
109
+ emit LogServiceRegistration(version, domain);
115
110
  }
116
111
 
117
- /// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
118
- // TODO service registration means its approval for some type?
119
- // TODO registration of precompile addresses
120
112
  function register(ObjectInfo memory info)
121
113
  external
122
114
  onlyRegistryService
123
115
  returns(NftId nftId)
124
116
  {
125
117
  ObjectType objectType = info.objectType;
126
- NftId parentNftId = info.parentNftId;
127
- ObjectInfo memory parentInfo = _info[parentNftId];
128
- ObjectType parentType = parentInfo.objectType; // see function header
129
- address parentAddress = parentInfo.objectAddress;
118
+ ObjectType parentType = _info[info.parentNftId].objectType;
130
119
 
131
- // parent is contract -> need to check? -> check before minting
132
- // special case: global registry nft as parent when not on mainnet -> global registry address is 0
133
- // special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
134
- // special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
135
- if(parentAddress == address(0)) {
136
- 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();
137
124
  }
138
125
 
139
- address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
140
-
141
- // TODO does external call
142
- uint256 mintedTokenId = _chainNft.mint(
143
- info.initialOwner,
144
- interceptor,
145
- EMPTY_URI);
146
- nftId = toNftId(mintedTokenId);
147
-
148
- // TODO move nftId out of info struct
149
- // getters by nftId -> return struct without nftId
150
- // getters by address -> return nftId AND struct
151
- info.nftId = nftId;
152
- _info[nftId] = info;
153
-
154
- if(info.objectAddress > address(0))
126
+ // only valid core types combinations
127
+ if(info.objectAddress == address(0))
155
128
  {
156
- // TODO if need to add types latter -> at least call this check from registry service
157
- // parent is registered + object-parent types are valid
158
- if(_isValidContractCombination[objectType][parentType] == false) {
129
+ if(_coreObjectCombinations[objectType][parentType] == false) {
159
130
  revert InvalidTypesCombination(objectType, parentType);
160
131
  }
161
-
162
- address contractAddress = info.objectAddress;
163
-
164
- if(_nftIdByAddress[contractAddress].gtz()) {
165
- revert ContractAlreadyRegistered(contractAddress);
166
- }
167
-
168
- _nftIdByAddress[contractAddress] = nftId;
169
-
170
- // special case
171
- if(objectType == SERVICE()) {
172
- _registerService(info);
173
- }
174
132
  }
175
133
  else
176
134
  {
177
- if(_isValidObjectCombination[objectType][parentType] == false) {
135
+ if(_coreContractCombinations[objectType][parentType] == false) {
178
136
  revert InvalidTypesCombination(objectType, parentType);
179
137
  }
180
138
  }
181
139
 
182
- emit LogRegistration(info);
140
+ nftId = _register(info);
183
141
  }
184
142
 
185
- /// @dev token state is informative, registry have no clue about used tokens
186
- // component owner is responsible for token selection and operations
187
- // service MUST deny registration of component with inactive token
188
- function setTokenActive(address token, VersionPart majorVersion, bool active)
143
+ function registerWithCustomType(ObjectInfo memory info)
189
144
  external
190
- onlyOwner
145
+ onlyRegistryService
146
+ returns(NftId nftId)
191
147
  {
192
- // verify that token is registered
193
- ObjectInfo memory info = _info[_nftIdByAddress[token]];
194
- if (info.nftId.eqz()) {
195
- revert TokenNotRegistered(token);
196
- }
148
+ ObjectType objectType = info.objectType;
149
+ ObjectType parentType = _info[info.parentNftId].objectType;
197
150
 
198
- // verify provided address is a registered token
199
- if (info.objectType != TOKEN()) {
200
- revert NotToken(token);
151
+ if(_coreTypes[objectType]) {
152
+ revert CoreTypeRegistration();
201
153
  }
202
154
 
203
- // verify valid major version
204
- // ensure major version increments is one
205
- uint256 version = majorVersion.toInt();
206
- uint256 versionNow = _majorVersion.toInt();
207
- if (version < GIF_MAJOR_VERSION_AT_DEPLOYMENT || version > versionNow) {
208
- revert TokenMajorVersionInvalid(majorVersion);
155
+ if(
156
+
157
+ parentType == PROTOCOL() ||
158
+ parentType == REGISTRY() ||
159
+ parentType == SERVICE()
160
+ ) {
161
+ revert InvalidTypesCombination(objectType, parentType);
209
162
  }
210
163
 
211
- _tokenIsActive[token][majorVersion] = active;
164
+ _register(info);
165
+ }
166
+
167
+
168
+ /// @dev earliest GIF major version
169
+ function getInitialVersion() external view returns (VersionPart) {
170
+ return _releaseManager.getInitialVersion();
171
+ }
212
172
 
213
- emit LogTokenStateSet(token, majorVersion, active);
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();
214
182
  }
215
183
 
216
- /// @dev latest GIF release version
217
- function getMajorVersion() external view returns (VersionPart) {
218
- return _majorVersion;
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);
219
191
  }
220
192
 
221
193
  function getObjectCount() external view override returns (uint256) {
@@ -235,7 +207,6 @@ contract Registry is
235
207
  }
236
208
 
237
209
  function ownerOf(address contractAddress) public view returns (address) {
238
-
239
210
  return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
240
211
  }
241
212
 
@@ -244,7 +215,6 @@ contract Registry is
244
215
  }
245
216
 
246
217
  function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
247
-
248
218
  return _info[_nftIdByAddress[object]];
249
219
  }
250
220
 
@@ -256,22 +226,24 @@ contract Registry is
256
226
  return _nftIdByAddress[object].gtz();
257
227
  }
258
228
 
259
- function isTokenActive(address token, VersionPart majorVersion) external view returns (bool) {
260
- return _tokenIsActive[token][majorVersion];
229
+ function isRegisteredService(address object) external view override returns (bool) {
230
+ return _info[_nftIdByAddress[object]].objectType == SERVICE();
261
231
  }
262
232
 
263
- function getServiceName(NftId nftId) external view returns (string memory) {
264
- return _string[nftId];
233
+ function isValidRelease(VersionPart version) external view returns (bool)
234
+ {
235
+ return _releaseManager.isValidRelease(version);
265
236
  }
266
237
 
267
- // special case to retrive a gif service
268
238
  function getServiceAddress(
269
- string memory serviceName,
270
- VersionPart majorVersion
271
- ) external view returns (address)
239
+ ObjectType serviceDomain,
240
+ VersionPart releaseVersion
241
+ ) external view returns (address service)
272
242
  {
273
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
274
- 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
+ //}
275
247
  }
276
248
 
277
249
  function getChainNft() external view override returns (ChainNft) {
@@ -284,28 +256,54 @@ contract Registry is
284
256
 
285
257
  // Internals
286
258
 
287
- 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)
288
262
  internal
263
+ returns(NftId nftId)
289
264
  {
290
- (
291
- string memory serviceName,
292
- VersionPart majorVersion
293
- ) = abi.decode(info.data, (string, VersionPart));
294
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
295
-
296
- // ensures consistency of service.getVersion() and majorVersion here
297
- if(majorVersion != _majorVersion) {
298
- revert InvalidServiceVersion(majorVersion);
299
- }
300
-
301
- if(_service[serviceNameHash][majorVersion] != address(0)) {
302
- 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();
303
277
  }
304
278
 
305
- _string[info.nftId] = serviceName;
306
- _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);
307
288
 
308
- 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);
309
307
  }
310
308
 
311
309
  /// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
@@ -338,32 +336,31 @@ contract Registry is
338
336
 
339
337
  /// @dev protocol registration used to anchor the dip ecosystem relations
340
338
  function _registerProtocol()
341
- internal
339
+ private
342
340
  {
343
341
  uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
344
342
  NftId protocolNftId = toNftId(protocolId);
345
343
 
346
- _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
+ });
347
353
 
348
- _info[protocolNftId] = ObjectInfo(
349
- protocolNftId,
350
- zeroNftId(), // parent
351
- PROTOCOL(),
352
- false, // isInterceptor
353
- address(0), // objectAddress
354
- NFT_LOCK_ADDRESS,// initialOwner
355
- ""
356
- );
354
+ _chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
357
355
  }
358
356
 
359
357
  /// @dev registry registration
360
358
  /// might also register the global registry when not on mainnet
361
- function _registerRegistry(address registryOwner)
362
- internal
359
+ function _registerRegistry()
360
+ private
363
361
  {
364
- uint256 registryId = _chainNft.calculateTokenId(2);
362
+ uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
365
363
  NftId registryNftId = toNftId(registryId);
366
-
367
364
  NftId parentNftId;
368
365
 
369
366
  if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
@@ -376,68 +373,39 @@ contract Registry is
376
373
  parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
377
374
  }
378
375
 
379
- _chainNft.mint(registryOwner, registryId);
380
-
381
- _info[registryNftId] = ObjectInfo(
382
- registryNftId,
383
- parentNftId,
384
- REGISTRY(),
385
- false, // isInterceptor
386
- address(this),
387
- registryOwner,
388
- ""
389
- );
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
+ });
390
385
  _nftIdByAddress[address(this)] = registryNftId;
391
386
  _registryNftId = registryNftId;
392
- }
393
387
 
388
+ _chainNft.mint(NFT_LOCK_ADDRESS, registryId);
389
+ }
394
390
 
395
391
  /// @dev global registry registration for non mainnet registries
396
392
  function _registerGlobalRegistry()
397
- internal
393
+ private
398
394
  {
399
395
  uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
400
-
401
- _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
402
-
403
396
  NftId globalRegistryNftId = toNftId(globalRegistryId);
404
397
 
405
- _info[globalRegistryNftId] = ObjectInfo(
406
- globalRegistryNftId,
407
- toNftId(_chainNft.PROTOCOL_NFT_ID()), // parent
408
- REGISTRY(),
409
- false, // isInterceptor
410
- address(0), // objectAddress
411
- NFT_LOCK_ADDRESS, // initialOwner
412
- "" // data
413
- );
414
- }
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
+ });
415
407
 
416
- function _registerRegistryService(address registryOwner)
417
- internal
418
- {
419
- uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
420
- NftId serviceNftId = toNftId(serviceId);
421
-
422
- _chainNft.mint(registryOwner, serviceId);
423
-
424
- _info[serviceNftId] = ObjectInfo(
425
- serviceNftId,
426
- _registryNftId,
427
- SERVICE(),
428
- false, // isInterceptor
429
- msg.sender, // service deploys registry
430
- registryOwner, // initialOwner,
431
- ""
432
- );
433
-
434
- _nftIdByAddress[msg.sender] = serviceNftId;
435
-
436
- string memory serviceName = "RegistryService";
437
- bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
438
- _service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
439
- _string[serviceNftId] = serviceName;
440
- _serviceNftId = serviceNftId;
408
+ _chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
441
409
  }
442
410
 
443
411
  /// @dev defines which object - parent types relations are allowed to register
@@ -446,27 +414,39 @@ contract Registry is
446
414
  // 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
447
415
  // 3) DO NOT use REGISTRY as object type
448
416
  // 2) DO NOT use PROTOCOL and "zeroObjectType"
449
- function _setupValidObjectParentCombinations()
450
- internal
417
+ function _setupValidCoreTypesAndCombinations()
418
+ private
451
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
+
452
431
  // registry as parent, ONLY registry owner
453
- _isValidContractCombination[TOKEN()][REGISTRY()] = true;
454
- _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
455
435
 
456
436
  // registry as parent, ONLY approved
457
- _isValidContractCombination[INSTANCE()][REGISTRY()] = true;
437
+ _coreContractCombinations[INSTANCE()][REGISTRY()] = true;
458
438
 
459
439
  // instance as parent, ONLY approved
460
- _isValidContractCombination[PRODUCT()][INSTANCE()] = true;
461
- _isValidContractCombination[DISTRIBUTION()][INSTANCE()] = true;
462
- _isValidContractCombination[ORACLE()][INSTANCE()] = true;
463
- _isValidContractCombination[POOL()][INSTANCE()] = true;
440
+ _coreContractCombinations[PRODUCT()][INSTANCE()] = true;
441
+ _coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
442
+ _coreContractCombinations[ORACLE()][INSTANCE()] = true;
443
+ _coreContractCombinations[POOL()][INSTANCE()] = true;
464
444
 
465
445
  // product as parent, ONLY approved
466
- _isValidObjectCombination[POLICY()][PRODUCT()] = true;
446
+ _coreObjectCombinations[POLICY()][PRODUCT()] = true;
467
447
 
468
448
  // pool as parent, ONLY approved
469
- _isValidObjectCombination[BUNDLE()][POOL()] = true;
470
- _isValidObjectCombination[STAKE()][POOL()] = true;
449
+ _coreObjectCombinations[BUNDLE()][POOL()] = true;
450
+ _coreObjectCombinations[STAKE()][POOL()] = true;
471
451
  }
472
452
  }