@etherisc/gif-next 0.0.2-9c44ae6-473 → 0.0.2-9d3eab3-323

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