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