@etherisc/gif-next 0.0.2-9d3eab3-323 → 0.0.2-9dd1984-554

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
  2. package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → Component.sol/Component.json} +51 -6
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +51 -104
  5. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  6. package/artifacts/contracts/components/{IBaseComponent.sol/IBaseComponent.json → IComponent.sol/IComponent.json} +51 -6
  7. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  8. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  10. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +5 -5
  11. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  12. package/artifacts/contracts/components/Pool.sol/Pool.json +51 -132
  13. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  14. package/artifacts/contracts/components/Product.sol/Product.json +56 -120
  15. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
  16. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  35. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  36. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  38. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  39. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  40. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +90 -13
  41. package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  42. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  43. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +75 -1
  44. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  45. package/artifacts/contracts/instance/Instance.sol/Instance.json +56 -616
  46. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  47. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +221 -114
  48. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  49. package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +2 -2
  50. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  51. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
  52. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  53. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +126 -229
  54. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -126
  56. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  57. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  58. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  59. package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +98 -24
  60. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  61. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -13
  62. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  63. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  64. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  65. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
  68. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  74. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +219 -48
  76. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +20 -24
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  79. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +131 -38
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  81. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +17 -21
  82. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  83. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +51 -0
  84. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  85. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +107 -0
  87. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  89. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +308 -60
  91. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +48 -20
  93. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +131 -38
  95. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +17 -21
  97. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +131 -38
  99. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +13 -9
  101. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  102. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +72 -1
  104. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  105. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +3 -3
  106. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  107. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/Registry.sol/Registry.json +85 -59
  109. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  110. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +33 -23
  111. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  112. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +17 -17
  113. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  114. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +13 -13
  115. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  116. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +84 -101
  117. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  118. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  119. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  120. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  121. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  122. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  126. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  127. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  128. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  129. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  131. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  132. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  133. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  134. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  135. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  136. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  137. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  138. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  139. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  140. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  141. package/artifacts/contracts/test/TestService.sol/TestService.json +2 -2
  142. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  143. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  145. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  146. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  147. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  148. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  149. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  150. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  151. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  152. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  153. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  154. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  155. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  157. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  160. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  166. package/contracts/components/Component.sol +177 -0
  167. package/contracts/components/Distribution.sol +5 -14
  168. package/contracts/components/{IBaseComponent.sol → IComponent.sol} +12 -6
  169. package/contracts/components/IProductComponent.sol +2 -2
  170. package/contracts/components/Pool.sol +7 -20
  171. package/contracts/components/Product.sol +21 -18
  172. package/contracts/instance/IInstance.sol +3 -3
  173. package/contracts/instance/IInstanceBase.sol +0 -1
  174. package/contracts/instance/IInstanceService.sol +10 -4
  175. package/contracts/instance/Instance.sol +6 -208
  176. package/contracts/instance/InstanceAccessManager.sol +92 -77
  177. package/contracts/instance/InstanceBase.sol +0 -2
  178. package/contracts/instance/InstanceService.sol +117 -71
  179. package/contracts/instance/InstanceServiceManager.sol +5 -9
  180. package/contracts/instance/base/ComponentService.sol +133 -0
  181. package/contracts/instance/base/IInstanceBase.sol +0 -2
  182. package/contracts/instance/module/IAccess.sol +27 -17
  183. package/contracts/instance/service/BundleService.sol +38 -5
  184. package/contracts/instance/service/BundleServiceManager.sol +5 -9
  185. package/contracts/instance/service/DistributionService.sol +33 -32
  186. package/contracts/instance/service/DistributionServiceManager.sol +6 -10
  187. package/contracts/instance/service/IBundleService.sol +5 -6
  188. package/contracts/instance/service/IPolicyService.sol +7 -0
  189. package/contracts/instance/service/PolicyService.sol +62 -27
  190. package/contracts/instance/service/PoolService.sol +46 -26
  191. package/contracts/instance/service/PoolServiceManager.sol +5 -9
  192. package/contracts/instance/service/ProductService.sol +104 -31
  193. package/contracts/registry/IRegistry.sol +17 -3
  194. package/contracts/registry/IRegistryService.sol +5 -5
  195. package/contracts/registry/Registry.sol +30 -19
  196. package/contracts/registry/RegistryAccessManager.sol +27 -27
  197. package/contracts/registry/RegistryService.sol +22 -32
  198. package/contracts/registry/RegistryServiceManager.sol +4 -2
  199. package/contracts/registry/ReleaseManager.sol +87 -123
  200. package/contracts/registry/TokenRegistry.sol +4 -4
  201. package/contracts/shared/IRegisterable.sol +0 -2
  202. package/contracts/shared/NftOwnable.sol +2 -0
  203. package/contracts/shared/Service.sol +4 -2
  204. package/contracts/types/RoleId.sol +6 -7
  205. package/package.json +1 -1
  206. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
  207. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
  208. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
  209. package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
  210. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
  211. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
  212. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
  213. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
  214. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +0 -466
  215. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
  216. package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
  217. package/contracts/components/BaseComponent.sol +0 -132
  218. package/contracts/instance/IAccessManagerSimple.sol +0 -391
  219. package/contracts/instance/base/ComponentServiceBase.sol +0 -72
  220. package/contracts/instance/service/ComponentOwnerService.sol +0 -315
  221. package/contracts/instance/service/IComponentOwnerService.sol +0 -20
  222. package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -2,27 +2,23 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
 
5
- import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
6
- 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";
7
7
  import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
8
8
 
9
- import {IRegisterable} from "../shared/IRegisterable.sol";
10
- import {IService} from "../shared/IService.sol";
11
9
  import {ERC165} from "../shared/ERC165.sol";
12
10
 
13
11
  import {ChainNft} from "./ChainNft.sol";
14
12
  import {IRegistry} from "./IRegistry.sol";
15
- import {IRegistryService} from "./IRegistryService.sol";
16
- import {ITransferInterceptor} from "./ITransferInterceptor.sol";
17
13
  import {ReleaseManager} from "./ReleaseManager.sol";
18
14
 
19
- // IMPORTANT (OPTION 1)
15
+ // IMPORTANT
20
16
  // Each NFT minted by registry is accosiated with:
21
17
  // 1) NFT owner
22
18
  // 2) registred contract OR object stored in registered (parent) contract
23
19
  // Four registration flows:
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)
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)
26
22
  // 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
27
23
  // 4) state object by regular service (POLICY, BUNDLE, STAKE)
28
24
 
@@ -30,15 +26,15 @@ contract Registry is
30
26
  ERC165,
31
27
  IRegistry
32
28
  {
33
- uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
34
29
  address public constant NFT_LOCK_ADDRESS = address(0x1);
35
30
  uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
36
- uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
37
31
  string public constant EMPTY_URI = "";
38
32
 
39
33
  mapping(NftId nftId => ObjectInfo info) internal _info;
40
34
  mapping(address object => NftId nftId) internal _nftIdByAddress;
41
35
 
36
+ mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
37
+
42
38
  mapping(ObjectType objectType => mapping(
43
39
  ObjectType parentType => bool)) internal _isValidContractCombination;
44
40
 
@@ -64,12 +60,9 @@ contract Registry is
64
60
  _;
65
61
  }
66
62
 
67
- constructor(address releaseManager, VersionPart initialVersion)
63
+ constructor()
68
64
  {
69
- require(releaseManager > address(0), "Registry: release manager is 0");
70
- require(initialVersion.toInt() > 0, "Registry: initial version is 0");
71
-
72
- _releaseManager = ReleaseManager(releaseManager);
65
+ _releaseManager = ReleaseManager(msg.sender);
73
66
 
74
67
  // deploy NFT
75
68
  _chainNft = new ChainNft(address(this));// adds 10kb to deployment size
@@ -84,7 +77,11 @@ contract Registry is
84
77
  _registerInterface(type(IRegistry).interfaceId);
85
78
  }
86
79
 
87
- function registerService(ObjectInfo memory info)
80
+ function registerService(
81
+ ObjectInfo memory info,
82
+ VersionPart version,
83
+ ObjectType domain
84
+ )
88
85
  external
89
86
  onlyReleaseManager
90
87
  returns(NftId nftId)
@@ -95,7 +92,16 @@ contract Registry is
95
92
  }
96
93
  info.initialOwner = NFT_LOCK_ADDRESS <- if services are access managed
97
94
  */
95
+
96
+ if(_service[version][domain] > address(0)) {
97
+ revert ServiceAlreadyRegistered(info.objectAddress);
98
+ }
99
+
100
+ _service[version][domain] = info.objectAddress; // nftId;
101
+
98
102
  nftId = _register(info);
103
+
104
+ emit LogServiceRegistration(version, domain);
99
105
  }
100
106
 
101
107
  function register(ObjectInfo memory info)
@@ -132,6 +138,11 @@ contract Registry is
132
138
  return _releaseManager.getLatestVersion();
133
139
  }
134
140
 
141
+ function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory)
142
+ {
143
+ return _releaseManager.getReleaseInfo(version);
144
+ }
145
+
135
146
  function getObjectCount() external view override returns (uint256) {
136
147
  return _chainNft.totalSupply();
137
148
  }
@@ -173,11 +184,11 @@ contract Registry is
173
184
  }
174
185
 
175
186
  function getServiceAddress(
176
- ObjectType serviceType,
187
+ ObjectType serviceDomain,
177
188
  VersionPart releaseVersion
178
189
  ) external view returns (address)
179
190
  {
180
- return _releaseManager.getService(releaseVersion, serviceType);
191
+ return _service[releaseVersion][serviceDomain];
181
192
  }
182
193
 
183
194
  function getChainNft() external view override returns (ChainNft) {
@@ -4,15 +4,11 @@ pragma solidity ^0.8.20;
4
4
  import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
5
5
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
6
6
 
7
- import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
8
7
  import {RoleId, RoleIdLib,
9
8
  REGISTRY_SERVICE_MANAGER_ROLE,
10
9
  REGISTRY_SERVICE_ADMIN_ROLE,
11
10
  RELEASE_MANAGER_ROLE} from "../types/RoleId.sol";
12
11
 
13
- import {Registry} from "./Registry.sol";
14
- import {IVersionable} from "../shared/IVersionable.sol";
15
- import {IRegistryService} from "./IRegistryService.sol";
16
12
  import {TokenRegistry} from "./TokenRegistry.sol";
17
13
  import {ReleaseManager} from "./ReleaseManager.sol";
18
14
 
@@ -37,9 +33,12 @@ import {ReleaseManager} from "./ReleaseManager.sol";
37
33
 
38
34
  contract RegistryAccessManager is AccessManaged
39
35
  {
40
- uint64 public constant CUSTOM_ROLE_ID_MIN = 1000000;
36
+ error NotInitialized();
37
+ error AlreadyInitialized();
38
+
39
+ uint64 public constant UNIQUE_ROLE_ID_MIN = 1000000;
41
40
 
42
- AccessManager private _accessManager;
41
+ AccessManager private immutable _accessManager;
43
42
  address private _releaseManager;
44
43
  address private _tokenRegistry;
45
44
 
@@ -48,15 +47,15 @@ contract RegistryAccessManager is AccessManaged
48
47
 
49
48
  modifier onlyOnce() {
50
49
  if(_isInitialized) {
51
- revert();
52
- }
50
+ revert AlreadyInitialized();
51
+ }
53
52
  _;
54
53
  _isInitialized = true;
55
54
  }
56
55
 
57
56
  modifier onlyInitialized() {
58
57
  if(!_isInitialized) {
59
- revert();
58
+ revert NotInitialized();
60
59
  }
61
60
  _;
62
61
  }
@@ -67,7 +66,7 @@ contract RegistryAccessManager is AccessManaged
67
66
  _accessManager = new AccessManager(address(this));
68
67
  setAuthority(address(_accessManager));
69
68
 
70
- _idNext = CUSTOM_ROLE_ID_MIN;
69
+ _idNext = UNIQUE_ROLE_ID_MIN;
71
70
 
72
71
  _configureAdminRoleInitial();
73
72
 
@@ -76,16 +75,16 @@ contract RegistryAccessManager is AccessManaged
76
75
  _grantRole(REGISTRY_SERVICE_MANAGER_ROLE(), manager, 0);
77
76
  }
78
77
 
79
- // TODO need release manager authorization to configure roles for service functions and to grant those roles
80
78
  function initialize(address releaseManager, address tokenRegistry)
81
79
  external
82
80
  restricted // GIF_ADMIN_ROLE
83
81
  onlyOnce
84
82
  {
85
- if(
86
- _releaseManager > address(0) ||
87
- _tokenRegistry > address(0))
88
- { revert(); }
83
+ require(
84
+ ReleaseManager(releaseManager).authority() == address(_accessManager),
85
+ "RegistryAccessManager: release manager authority is invalid");
86
+ require(tokenRegistry > address(0), "RegistryAccessManager: token registry is 0");
87
+ //require(tokenRegistry.authority() == address(_accessManager));
89
88
 
90
89
  _releaseManager = releaseManager;
91
90
  _tokenRegistry = tokenRegistry;
@@ -108,13 +107,14 @@ contract RegistryAccessManager is AccessManaged
108
107
  onlyInitialized
109
108
  returns(RoleId)
110
109
  {
110
+ // TODO questionable check...
111
111
  // target is not part of `runtime`
112
- if(
113
- target == address(this) ||
114
- target == address(_accessManager) ||
115
- target == _releaseManager ||
116
- target == _tokenRegistry)
117
- { revert(); }
112
+ //if(
113
+ // target == address(this) ||
114
+ // target == address(_accessManager) ||
115
+ // target == _releaseManager ||
116
+ // target == _tokenRegistry)
117
+ //{ return TargetInvalid(); }
118
118
 
119
119
  RoleId roleId = _getNextRoleId();
120
120
 
@@ -154,14 +154,14 @@ contract RegistryAccessManager is AccessManaged
154
154
  {
155
155
  bytes4[] memory functionSelector = new bytes4[](1);
156
156
 
157
- // REGISTRY_SERVICE_ADMIN_ROLE for RegistryServiceProxyManager
157
+ // for RegistryServiceProxyManager
158
158
  // TODO upgrading with releaseManager.upgrade()->proxy.upgrade()???
159
159
  //functionSelector[0] = RegistryServiceManager.upgrade.selector;
160
160
  //_setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
161
161
 
162
- // REGISTRY_SERVICE_ADMIN_ROLE for TokenRegistry
162
+ // for TokenRegistry
163
163
 
164
- // REGISTRY_SERVICE_ADMIN_ROLE for ReleaseManager
164
+ // for ReleaseManager
165
165
  functionSelector[0] = ReleaseManager.createNextRelease.selector;
166
166
  _setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
167
167
  //functionSelector[0] = ReleaseManager.activateNextRelease.selector;
@@ -172,15 +172,15 @@ contract RegistryAccessManager is AccessManaged
172
172
  {
173
173
  bytes4[] memory functionSelector = new bytes4[](1);
174
174
 
175
- // REGISTRY_SERVICE_MANAGER_ROLE for TokenRegistry
175
+ // for TokenRegistry
176
176
  functionSelector[0] = TokenRegistry.setActive.selector;
177
177
  _setTargetFunctionRole(address(_tokenRegistry), functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
178
178
 
179
- // REGISTRY_SERVICE_MANAGER_ROLE for ReleaseManager
179
+ // for ReleaseManager
180
180
  functionSelector[0] = ReleaseManager.registerService.selector;
181
181
  _setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
182
182
 
183
- // set REGISTRY_SERVICE_ADMIN_ROLE as admin for REGISTRY_SERVICE_MANAGER_ROLE
183
+ // set admin
184
184
  _setRoleAdmin(REGISTRY_SERVICE_MANAGER_ROLE(), REGISTRY_SERVICE_ADMIN_ROLE());
185
185
  }
186
186
 
@@ -8,7 +8,7 @@ import {IRegistry} from "./IRegistry.sol";
8
8
  import {IInstance} from "../instance/IInstance.sol";
9
9
 
10
10
  import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
11
- import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
11
+ import {IComponent} from "../../contracts/components/IComponent.sol";
12
12
  import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
13
13
  import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
14
14
  import {IDistributionComponent} from "../../contracts/components/IDistributionComponent.sol";
@@ -62,7 +62,7 @@ contract RegistryService is
62
62
  return (info, data);
63
63
  }
64
64
 
65
- function registerProduct(IBaseComponent product, address owner)
65
+ function registerProduct(IComponent product, address owner)
66
66
  external
67
67
  restricted
68
68
  returns(
@@ -78,13 +78,11 @@ contract RegistryService is
78
78
  (info, data) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
79
79
 
80
80
  info.nftId = _registry.register(info);
81
- // TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
82
- product.linkToRegisteredNftId();
83
81
 
84
82
  return (info, data);
85
83
  }
86
84
 
87
- function registerPool(IBaseComponent pool, address owner)
85
+ function registerPool(IComponent pool, address owner)
88
86
  external
89
87
  restricted
90
88
  returns(
@@ -99,12 +97,11 @@ contract RegistryService is
99
97
  (info, data) = _getAndVerifyContractInfo(pool, POOL(), owner);
100
98
 
101
99
  info.nftId = _registry.register(info);
102
- pool.linkToRegisteredNftId();
103
100
 
104
101
  return (info, data);
105
102
  }
106
103
 
107
- function registerDistribution(IBaseComponent distribution, address owner)
104
+ function registerDistribution(IComponent distribution, address owner)
108
105
  external
109
106
  restricted
110
107
  returns(
@@ -118,8 +115,7 @@ contract RegistryService is
118
115
 
119
116
  (info, data) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
120
117
 
121
- info.nftId = _registry.register(info);
122
- distribution.linkToRegisteredNftId();
118
+ info.nftId = _registry.register(info);
123
119
 
124
120
  return (info, data);
125
121
  }
@@ -156,7 +152,7 @@ contract RegistryService is
156
152
 
157
153
  // From IService
158
154
  function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
159
- return SERVICE();
155
+ return REGISTRY();
160
156
  }
161
157
 
162
158
  // from Versionable
@@ -194,34 +190,28 @@ contract RegistryService is
194
190
 
195
191
  FunctionConfig[] memory config = new FunctionConfig[](6);
196
192
 
197
- // registerInstance() have no restriction
198
- config[0].serviceDomain = INSTANCE();
199
- config[0].selector = new bytes4[](1);
200
- config[0].selector[0] = RegistryService.registerInstance.selector;
193
+ // order of service registrations MUST be reverse to this array
194
+ /*config[-1].serviceDomain = STAKE();
195
+ config[-1].selector = RegistryService.registerStake.selector;*/
201
196
 
202
- config[1].serviceDomain = POOL();
203
- config[1].selector = new bytes4[](1);
204
- config[1].selector[0] = RegistryService.registerPool.selector;
197
+ config[0].serviceDomain = POLICY();
198
+ config[0].selector = RegistryService.registerPolicy.selector;
205
199
 
206
- config[2].serviceDomain = DISTRIBUTION();
207
- config[2].selector = new bytes4[](1);
208
- config[2].selector[0] = RegistryService.registerDistribution.selector;
200
+ config[1].serviceDomain = BUNDLE();
201
+ config[1].selector = RegistryService.registerBundle.selector;
209
202
 
210
- config[3].serviceDomain = PRODUCT();
211
- config[3].selector = new bytes4[](1);
212
- config[3].selector[0] = RegistryService.registerProduct.selector;
203
+ config[2].serviceDomain = PRODUCT();
204
+ config[2].selector = RegistryService.registerProduct.selector;
213
205
 
214
- config[4].serviceDomain = POLICY();
215
- config[4].selector = new bytes4[](1);
216
- config[4].selector[0] = RegistryService.registerPolicy.selector;
206
+ config[3].serviceDomain = POOL();
207
+ config[3].selector = RegistryService.registerPool.selector;
217
208
 
218
- config[5].serviceDomain = BUNDLE();
219
- config[5].selector = new bytes4[](1);
220
- config[5].selector[0] = RegistryService.registerBundle.selector;
209
+ config[4].serviceDomain = DISTRIBUTION();
210
+ config[4].selector = RegistryService.registerDistribution.selector;
221
211
 
222
- /*config[6].serviceDomain = STAKE();
223
- config[6].selector = new bytes4[](1);
224
- config[6].selector[0] = RegistryService.registerStake.selector;*/
212
+ // registerInstance() have no restriction
213
+ config[5].serviceDomain = INSTANCE();
214
+ config[5].selector = RegistryService.registerInstance.selector;
225
215
 
226
216
  data = abi.encode(config);
227
217
  }
@@ -17,7 +17,7 @@ contract RegistryServiceManager is
17
17
  {
18
18
  bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
19
19
 
20
- RegistryService private immutable _registryService;
20
+ RegistryService private immutable _registryService;
21
21
 
22
22
  /// @dev initializes proxy manager with registry service implementation and deploys registry
23
23
  constructor(
@@ -25,6 +25,9 @@ contract RegistryServiceManager is
25
25
  address registry) // used by implementation
26
26
  ProxyManager()
27
27
  {
28
+ require(initialAuthority > address(0), "RegistryServiceManager: initial authority is 0");
29
+ require(registry > address(0), "RegistryServiceManager: registry is 0");
30
+
28
31
  // implementation's initializer func `data` argument
29
32
  bytes memory initializationData = abi.encode(
30
33
  initialAuthority,
@@ -35,7 +38,6 @@ contract RegistryServiceManager is
35
38
  initializationData);
36
39
 
37
40
  _registryService = RegistryService(address(versionable));
38
-
39
41
  }
40
42
 
41
43
  // from IRegisterable