@etherisc/gif-next 0.0.2-c15bb6f-257 → 0.0.2-c2a8d66-341
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/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +656 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +311 -132
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → components/IComponent.sol/IComponent.json} +171 -158
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +445 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +522 -58
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +596 -5
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +306 -182
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +329 -155
- 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/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -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 +1629 -93
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +131 -19
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +185 -642
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +439 -186
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +164 -66
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +325 -102
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +49 -44
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +138 -16
- 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 +65 -44
- 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 +1102 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +449 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +176 -40
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +34 -25
- 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 -46
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +13 -18
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +766 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +15 -82
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +25 -245
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1227 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +505 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +806 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +437 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +856 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +437 -0
- 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 +214 -224
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +221 -93
- 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 +227 -329
- 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 +75 -112
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +51 -112
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +13 -29
- 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/IRegisterable.sol/IRegisterable.json +0 -5
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +13 -18
- 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 +19 -6
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +19 -6
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +19 -11
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +26 -18
- 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 +19 -11
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +44 -36
- 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/Component.sol +216 -0
- package/contracts/components/Distribution.sol +39 -52
- package/contracts/components/IComponent.sol +43 -0
- package/contracts/components/IDistributionComponent.sol +4 -3
- package/contracts/components/IPoolComponent.sol +7 -18
- package/contracts/components/IProductComponent.sol +7 -3
- package/contracts/components/Pool.sol +59 -109
- package/contracts/components/Product.sol +77 -108
- package/contracts/instance/BundleManager.sol +125 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +49 -10
- package/contracts/instance/IInstanceService.sol +16 -4
- package/contracts/instance/Instance.sol +71 -245
- package/contracts/instance/InstanceAccessManager.sol +333 -166
- package/contracts/instance/InstanceReader.sol +29 -26
- package/contracts/instance/InstanceService.sol +402 -90
- package/contracts/instance/InstanceServiceManager.sol +10 -12
- package/contracts/instance/ObjectManager.sol +84 -0
- package/contracts/instance/base/ComponentService.sol +134 -0
- package/contracts/instance/module/IAccess.sol +36 -20
- package/contracts/instance/module/IBundle.sol +1 -0
- package/contracts/instance/module/ISetup.sol +3 -0
- package/contracts/instance/service/BundleService.sol +293 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/DistributionService.sol +44 -34
- package/contracts/instance/service/DistributionServiceManager.sol +10 -12
- package/contracts/instance/service/IBundleService.sol +44 -0
- package/contracts/instance/service/IPolicyService.sol +94 -0
- package/contracts/instance/service/IPoolService.sol +6 -23
- package/contracts/instance/service/IProductService.sol +6 -73
- package/contracts/instance/service/PolicyService.sol +538 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +110 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +233 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +37 -31
- package/contracts/registry/IRegistryService.sol +45 -13
- package/contracts/registry/Registry.sol +218 -250
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +83 -220
- package/contracts/registry/RegistryServiceManager.sol +18 -36
- package/contracts/registry/ReleaseManager.sol +332 -0
- package/contracts/registry/TokenRegistry.sol +8 -7
- package/contracts/shared/IRegisterable.sol +1 -3
- package/contracts/shared/IService.sol +2 -1
- package/contracts/shared/NftOwnable.sol +7 -4
- package/contracts/shared/ProxyManager.sol +1 -1
- package/contracts/shared/Registerable.sol +10 -14
- package/contracts/shared/Service.sol +14 -8
- package/contracts/test/TestService.sol +3 -2
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/RoleId.sol +18 -13
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -327
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -280
- 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/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -113
- 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/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/contracts/components/BaseComponent.sol +0 -91
- package/contracts/components/IBaseComponent.sol +0 -25
- package/contracts/instance/AccessManagedSimple.sol +0 -115
- package/contracts/instance/AccessManagerSimple.sol +0 -692
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/base/ComponentServiceBase.sol +0 -39
- package/contracts/instance/base/IInstanceBase.sol +0 -23
- package/contracts/instance/service/ComponentOwnerService.sol +0 -317
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -1,221 +1,173 @@
|
|
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
|
-
uint256 public constant
|
30
|
+
uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
|
34
31
|
string public constant EMPTY_URI = "";
|
35
32
|
|
36
|
-
|
33
|
+
mapping(NftId nftId => ObjectInfo info) private _info;
|
34
|
+
mapping(address object => NftId nftId) private _nftIdByAddress;
|
37
35
|
|
38
|
-
mapping(
|
39
|
-
mapping(address object => NftId nftId) internal _nftIdByAddress;
|
36
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
|
40
37
|
|
41
|
-
mapping(
|
42
|
-
ObjectType objectType => bool)) internal _isApproved;
|
38
|
+
mapping(ObjectType objectType => bool) private _coreTypes;
|
43
39
|
|
44
40
|
mapping(ObjectType objectType => mapping(
|
45
|
-
ObjectType parentType => bool))
|
41
|
+
ObjectType parentType => bool)) private _coreContractCombinations;
|
46
42
|
|
47
43
|
mapping(ObjectType objectType => mapping(
|
48
|
-
ObjectType parentType => bool))
|
44
|
+
ObjectType parentType => bool)) private _coreObjectCombinations;
|
49
45
|
|
50
|
-
|
51
|
-
|
46
|
+
NftId private _registryNftId;
|
47
|
+
ChainNft private _chainNft;
|
52
48
|
|
53
|
-
|
54
|
-
mapping(bytes32 serviceNameHash => mapping(
|
55
|
-
VersionPart majorVersion => address service)) internal _service;
|
49
|
+
ReleaseManager private _releaseManager;
|
56
50
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
modifier onlyOwner() {
|
63
|
-
if(msg.sender != getOwner()) {
|
64
|
-
revert NotOwner(msg.sender);
|
51
|
+
modifier onlyRegistryService() {
|
52
|
+
if(!_releaseManager.isActiveRegistryService(msg.sender)) {
|
53
|
+
revert CallerNotRegistryService();
|
65
54
|
}
|
66
55
|
_;
|
67
56
|
}
|
68
57
|
|
69
|
-
modifier
|
70
|
-
|
71
|
-
|
72
|
-
revert NotRegistryService();
|
58
|
+
modifier onlyReleaseManager() {
|
59
|
+
if(msg.sender != address(_releaseManager)) {
|
60
|
+
revert CallerNotReleaseManager();
|
73
61
|
}
|
74
62
|
_;
|
75
63
|
}
|
76
64
|
|
77
|
-
constructor(
|
65
|
+
constructor()
|
78
66
|
{
|
79
|
-
|
80
|
-
|
81
|
-
// major version at constructor time
|
82
|
-
_majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
|
83
|
-
emit LogInitialMajorVersionSet(_majorVersion);
|
67
|
+
_releaseManager = ReleaseManager(msg.sender);
|
84
68
|
|
85
69
|
// deploy NFT
|
86
|
-
_chainNft = new ChainNft(address(this))
|
70
|
+
_chainNft = new ChainNft(address(this));
|
87
71
|
|
88
72
|
// initial registry setup
|
89
73
|
_registerProtocol();
|
90
|
-
_registerRegistry(
|
91
|
-
_registerRegistryService(registryOwner);
|
74
|
+
_registerRegistry();
|
92
75
|
|
93
|
-
// set object parent relations
|
94
|
-
|
76
|
+
// set object types and object parent relations
|
77
|
+
_setupValidCoreTypesAndCombinations();
|
95
78
|
|
96
79
|
_registerInterface(type(IRegistry).interfaceId);
|
97
80
|
}
|
98
81
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
82
|
+
function registerService(
|
83
|
+
ObjectInfo memory info,
|
84
|
+
VersionPart version,
|
85
|
+
ObjectType domain
|
86
|
+
)
|
103
87
|
external
|
104
|
-
|
88
|
+
onlyReleaseManager
|
89
|
+
returns(NftId nftId)
|
105
90
|
{
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
91
|
+
/* must be guaranteed by release manager
|
92
|
+
if(info.objectType != SERVICE()) {
|
93
|
+
revert();
|
94
|
+
}
|
95
|
+
if(info.parentType != REGISTRY()) {
|
96
|
+
revert();
|
97
|
+
}
|
98
|
+
info.initialOwner == NFT_LOCK_ADDRESS <- if services are access managed
|
99
|
+
*/
|
100
|
+
|
101
|
+
if(_service[version][domain] > address(0)) {
|
102
|
+
revert ServiceAlreadyRegistered(info.objectAddress);
|
111
103
|
}
|
112
104
|
|
113
|
-
|
114
|
-
|
105
|
+
_service[version][domain] = info.objectAddress; // nftId;
|
106
|
+
|
107
|
+
nftId = _register(info);
|
108
|
+
|
109
|
+
emit LogServiceRegistration(version, domain);
|
115
110
|
}
|
116
111
|
|
117
|
-
/// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
|
118
|
-
// TODO service registration means its approval for some type?
|
119
|
-
// TODO registration of precompile addresses
|
120
112
|
function register(ObjectInfo memory info)
|
121
113
|
external
|
122
114
|
onlyRegistryService
|
123
115
|
returns(NftId nftId)
|
124
116
|
{
|
125
117
|
ObjectType objectType = info.objectType;
|
126
|
-
|
127
|
-
ObjectInfo memory parentInfo = _info[parentNftId];
|
128
|
-
ObjectType parentType = parentInfo.objectType; // see function header
|
129
|
-
address parentAddress = parentInfo.objectAddress;
|
118
|
+
ObjectType parentType = _info[info.parentNftId].objectType;
|
130
119
|
|
131
|
-
//
|
132
|
-
//
|
133
|
-
|
134
|
-
|
135
|
-
if(parentAddress == address(0)) {
|
136
|
-
revert ZeroParentAddress();
|
120
|
+
// TODO do not need it here -> SERVICE is no longer part of _coreContractCombinations
|
121
|
+
// no service registrations
|
122
|
+
if(objectType == SERVICE()) {
|
123
|
+
revert ServiceRegistration();
|
137
124
|
}
|
138
125
|
|
139
|
-
|
140
|
-
|
141
|
-
// TODO does external call
|
142
|
-
uint256 mintedTokenId = _chainNft.mint(
|
143
|
-
info.initialOwner,
|
144
|
-
interceptor,
|
145
|
-
EMPTY_URI);
|
146
|
-
nftId = toNftId(mintedTokenId);
|
147
|
-
|
148
|
-
// TODO move nftId out of info struct
|
149
|
-
// getters by nftId -> return struct without nftId
|
150
|
-
// getters by address -> return nftId AND struct
|
151
|
-
info.nftId = nftId;
|
152
|
-
_info[nftId] = info;
|
153
|
-
|
154
|
-
if(info.objectAddress > address(0))
|
126
|
+
// only valid core types combinations
|
127
|
+
if(info.objectAddress == address(0))
|
155
128
|
{
|
156
|
-
|
157
|
-
// parent is registered + object-parent types are valid
|
158
|
-
if(_isValidContractCombination[objectType][parentType] == false) {
|
129
|
+
if(_coreObjectCombinations[objectType][parentType] == false) {
|
159
130
|
revert InvalidTypesCombination(objectType, parentType);
|
160
131
|
}
|
161
|
-
|
162
|
-
address contractAddress = info.objectAddress;
|
163
|
-
|
164
|
-
if(_nftIdByAddress[contractAddress].gtz()) {
|
165
|
-
revert ContractAlreadyRegistered(contractAddress);
|
166
|
-
}
|
167
|
-
|
168
|
-
_nftIdByAddress[contractAddress] = nftId;
|
169
|
-
|
170
|
-
// special case
|
171
|
-
if(objectType == SERVICE()) {
|
172
|
-
_registerService(info);
|
173
|
-
}
|
174
132
|
}
|
175
133
|
else
|
176
134
|
{
|
177
|
-
if(
|
135
|
+
if(_coreContractCombinations[objectType][parentType] == false) {
|
178
136
|
revert InvalidTypesCombination(objectType, parentType);
|
179
137
|
}
|
180
138
|
}
|
181
139
|
|
182
|
-
|
140
|
+
nftId = _register(info);
|
183
141
|
}
|
184
142
|
|
185
|
-
|
186
|
-
// component owner is responsible for token selection and operations
|
187
|
-
// service MUST deny registration of component with inactive token
|
188
|
-
function setTokenActive(address token, VersionPart majorVersion, bool active)
|
143
|
+
function registerWithCustomType(ObjectInfo memory info)
|
189
144
|
external
|
190
|
-
|
145
|
+
onlyRegistryService
|
146
|
+
returns(NftId nftId)
|
191
147
|
{
|
192
|
-
|
193
|
-
|
194
|
-
if (info.nftId.eqz()) {
|
195
|
-
revert TokenNotRegistered(token);
|
196
|
-
}
|
148
|
+
ObjectType objectType = info.objectType;
|
149
|
+
ObjectType parentType = _info[info.parentNftId].objectType;
|
197
150
|
|
198
|
-
|
199
|
-
|
200
|
-
revert NotToken(token);
|
151
|
+
if(_coreTypes[objectType]) {
|
152
|
+
revert CoreTypeRegistration();
|
201
153
|
}
|
202
154
|
|
203
|
-
|
204
|
-
// ensure major version increments is one
|
205
|
-
uint256 version = majorVersion.toInt();
|
206
|
-
uint256 versionNow = _majorVersion.toInt();
|
207
|
-
if (version < GIF_MAJOR_VERSION_AT_DEPLOYMENT || version > versionNow) {
|
208
|
-
revert TokenMajorVersionInvalid(majorVersion);
|
209
|
-
}
|
155
|
+
if(
|
210
156
|
|
211
|
-
|
157
|
+
parentType == PROTOCOL() ||
|
158
|
+
parentType == REGISTRY() ||
|
159
|
+
parentType == SERVICE()
|
160
|
+
) {
|
161
|
+
revert InvalidTypesCombination(objectType, parentType);
|
162
|
+
}
|
212
163
|
|
213
|
-
|
164
|
+
_register(info);
|
214
165
|
}
|
215
166
|
|
167
|
+
|
216
168
|
/// @dev earliest GIF major version
|
217
|
-
function
|
218
|
-
return
|
169
|
+
function getInitialVersion() external view returns (VersionPart) {
|
170
|
+
return _releaseManager.getInitialVersion();
|
219
171
|
}
|
220
172
|
|
221
173
|
// TODO make distinction between active an not yet active version
|
@@ -225,17 +177,20 @@ contract Registry is
|
|
225
177
|
// in this case we might want to have a period where the latest version is
|
226
178
|
// in the process of being set up while the latest active version is 1 major release smaller
|
227
179
|
/// @dev latest GIF major version (might not yet be active)
|
228
|
-
function
|
229
|
-
return
|
180
|
+
function getNextVersion() external view returns (VersionPart) {
|
181
|
+
return _releaseManager.getNextVersion();
|
230
182
|
}
|
231
183
|
|
232
184
|
/// @dev latest active GIF release version
|
233
|
-
function
|
234
|
-
return
|
185
|
+
function getLatestVersion() external view returns (VersionPart) {
|
186
|
+
return _releaseManager.getLatestVersion();
|
187
|
+
}
|
188
|
+
|
189
|
+
function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
|
190
|
+
return _releaseManager.getReleaseInfo(version);
|
235
191
|
}
|
236
|
-
|
237
192
|
|
238
|
-
function getObjectCount() external view
|
193
|
+
function getObjectCount() external view returns (uint256) {
|
239
194
|
return _chainNft.totalSupply();
|
240
195
|
}
|
241
196
|
|
@@ -243,52 +198,57 @@ contract Registry is
|
|
243
198
|
return _registryNftId;
|
244
199
|
}
|
245
200
|
|
246
|
-
function getNftId(address object) external view
|
201
|
+
function getNftId(address object) external view returns (NftId id) {
|
247
202
|
return _nftIdByAddress[object];
|
248
203
|
}
|
249
204
|
|
250
|
-
function ownerOf(NftId nftId) public view
|
205
|
+
function ownerOf(NftId nftId) public view returns (address) {
|
251
206
|
return _chainNft.ownerOf(nftId.toInt());
|
252
207
|
}
|
253
208
|
|
254
209
|
function ownerOf(address contractAddress) public view returns (address) {
|
255
|
-
|
256
210
|
return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
|
257
211
|
}
|
258
212
|
|
259
|
-
function getObjectInfo(NftId nftId) external view
|
213
|
+
function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
|
260
214
|
return _info[nftId];
|
261
215
|
}
|
262
216
|
|
263
|
-
function getObjectInfo(address object) external view
|
264
|
-
|
217
|
+
function getObjectInfo(address object) external view returns (ObjectInfo memory) {
|
265
218
|
return _info[_nftIdByAddress[object]];
|
266
219
|
}
|
267
220
|
|
268
|
-
function isRegistered(NftId nftId) public view
|
221
|
+
function isRegistered(NftId nftId) public view returns (bool) {
|
269
222
|
return _info[nftId].objectType.gtz();
|
270
223
|
}
|
271
224
|
|
272
|
-
function isRegistered(address object) external view
|
225
|
+
function isRegistered(address object) external view returns (bool) {
|
273
226
|
return _nftIdByAddress[object].gtz();
|
274
227
|
}
|
275
228
|
|
276
|
-
function
|
277
|
-
return
|
229
|
+
function isRegisteredService(address object) external view returns (bool) {
|
230
|
+
return _info[_nftIdByAddress[object]].objectType == SERVICE();
|
231
|
+
}
|
232
|
+
|
233
|
+
function isRegisteredComponent(address object) external view returns (bool) {
|
234
|
+
NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
|
235
|
+
return _info[objectParentNftId].objectType == INSTANCE();
|
278
236
|
}
|
279
237
|
|
280
|
-
function
|
281
|
-
|
238
|
+
function isValidRelease(VersionPart version) external view returns (bool)
|
239
|
+
{
|
240
|
+
return _releaseManager.isValidRelease(version);
|
282
241
|
}
|
283
242
|
|
284
|
-
// special case to retrive a gif service
|
285
243
|
function getServiceAddress(
|
286
|
-
|
287
|
-
VersionPart
|
288
|
-
) external view returns (address)
|
244
|
+
ObjectType serviceDomain,
|
245
|
+
VersionPart releaseVersion
|
246
|
+
) external view returns (address service)
|
289
247
|
{
|
290
|
-
|
291
|
-
|
248
|
+
// TODO how can I get service address while release is not validated/activated ?!! -> user will check validity of release on its own
|
249
|
+
//if(_releaseManager.isValidRelease(releaseVersion)) {
|
250
|
+
service = _service[releaseVersion][serviceDomain];
|
251
|
+
//}
|
292
252
|
}
|
293
253
|
|
294
254
|
function getChainNft() external view override returns (ChainNft) {
|
@@ -301,28 +261,54 @@ contract Registry is
|
|
301
261
|
|
302
262
|
// Internals
|
303
263
|
|
304
|
-
|
264
|
+
/// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
|
265
|
+
// TODO registration of precompile addresses
|
266
|
+
function _register(ObjectInfo memory info)
|
305
267
|
internal
|
268
|
+
returns(NftId nftId)
|
306
269
|
{
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
//
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
|
270
|
+
ObjectType objectType = info.objectType;
|
271
|
+
NftId parentNftId = info.parentNftId;
|
272
|
+
ObjectInfo memory parentInfo = _info[parentNftId];
|
273
|
+
ObjectType parentType = parentInfo.objectType; // see function header
|
274
|
+
address parentAddress = parentInfo.objectAddress;
|
275
|
+
|
276
|
+
// parent is contract -> need to check? -> check before minting
|
277
|
+
// special case: global registry nft as parent when not on mainnet -> global registry address is 0
|
278
|
+
// special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
|
279
|
+
// special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
|
280
|
+
if(parentAddress == address(0)) {
|
281
|
+
revert ZeroParentAddress();
|
320
282
|
}
|
321
283
|
|
322
|
-
|
323
|
-
|
284
|
+
address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
|
285
|
+
|
286
|
+
// TODO does external call
|
287
|
+
// compute next nftId, do all checks and stores, mint() at most end...
|
288
|
+
uint256 mintedTokenId = _chainNft.mint(
|
289
|
+
info.initialOwner,
|
290
|
+
interceptor,
|
291
|
+
EMPTY_URI);
|
292
|
+
nftId = toNftId(mintedTokenId);
|
324
293
|
|
325
|
-
|
294
|
+
// TODO move nftId out of info struct
|
295
|
+
// getters by nftId -> return struct without nftId
|
296
|
+
// getters by address -> return nftId AND struct
|
297
|
+
info.nftId = nftId;
|
298
|
+
_info[nftId] = info;
|
299
|
+
|
300
|
+
if(info.objectAddress > address(0))
|
301
|
+
{
|
302
|
+
address contractAddress = info.objectAddress;
|
303
|
+
|
304
|
+
if(_nftIdByAddress[contractAddress].gtz()) {
|
305
|
+
revert ContractAlreadyRegistered(contractAddress);
|
306
|
+
}
|
307
|
+
|
308
|
+
_nftIdByAddress[contractAddress] = nftId;
|
309
|
+
}
|
310
|
+
|
311
|
+
emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
|
326
312
|
}
|
327
313
|
|
328
314
|
/// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
|
@@ -355,32 +341,31 @@ contract Registry is
|
|
355
341
|
|
356
342
|
/// @dev protocol registration used to anchor the dip ecosystem relations
|
357
343
|
function _registerProtocol()
|
358
|
-
|
344
|
+
private
|
359
345
|
{
|
360
346
|
uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
|
361
347
|
NftId protocolNftId = toNftId(protocolId);
|
362
348
|
|
363
|
-
|
349
|
+
_info[protocolNftId] = ObjectInfo({
|
350
|
+
nftId: protocolNftId,
|
351
|
+
parentNftId: zeroNftId(),
|
352
|
+
objectType: PROTOCOL(),
|
353
|
+
isInterceptor: false,
|
354
|
+
objectAddress: address(0),
|
355
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
356
|
+
data: ""
|
357
|
+
});
|
364
358
|
|
365
|
-
|
366
|
-
protocolNftId,
|
367
|
-
zeroNftId(), // parent
|
368
|
-
PROTOCOL(),
|
369
|
-
false, // isInterceptor
|
370
|
-
address(0), // objectAddress
|
371
|
-
NFT_LOCK_ADDRESS,// initialOwner
|
372
|
-
""
|
373
|
-
);
|
359
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
|
374
360
|
}
|
375
361
|
|
376
362
|
/// @dev registry registration
|
377
363
|
/// might also register the global registry when not on mainnet
|
378
|
-
function _registerRegistry(
|
379
|
-
|
364
|
+
function _registerRegistry()
|
365
|
+
private
|
380
366
|
{
|
381
|
-
uint256 registryId = _chainNft.calculateTokenId(
|
367
|
+
uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
|
382
368
|
NftId registryNftId = toNftId(registryId);
|
383
|
-
|
384
369
|
NftId parentNftId;
|
385
370
|
|
386
371
|
if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
|
@@ -393,68 +378,39 @@ contract Registry is
|
|
393
378
|
parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
|
394
379
|
}
|
395
380
|
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
""
|
406
|
-
);
|
381
|
+
_info[registryNftId] = ObjectInfo({
|
382
|
+
nftId: registryNftId,
|
383
|
+
parentNftId: parentNftId,
|
384
|
+
objectType: REGISTRY(),
|
385
|
+
isInterceptor: false,
|
386
|
+
objectAddress: address(this),
|
387
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
388
|
+
data: ""
|
389
|
+
});
|
407
390
|
_nftIdByAddress[address(this)] = registryNftId;
|
408
391
|
_registryNftId = registryNftId;
|
409
|
-
}
|
410
392
|
|
393
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, registryId);
|
394
|
+
}
|
411
395
|
|
412
396
|
/// @dev global registry registration for non mainnet registries
|
413
397
|
function _registerGlobalRegistry()
|
414
|
-
|
398
|
+
private
|
415
399
|
{
|
416
400
|
uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
|
417
|
-
|
418
|
-
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
419
|
-
|
420
401
|
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
421
402
|
|
422
|
-
_info[globalRegistryNftId] = ObjectInfo(
|
423
|
-
globalRegistryNftId,
|
424
|
-
toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
425
|
-
REGISTRY(),
|
426
|
-
false,
|
427
|
-
address(0),
|
428
|
-
NFT_LOCK_ADDRESS,
|
429
|
-
""
|
430
|
-
);
|
431
|
-
}
|
403
|
+
_info[globalRegistryNftId] = ObjectInfo({
|
404
|
+
nftId: globalRegistryNftId,
|
405
|
+
parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
406
|
+
objectType: REGISTRY(),
|
407
|
+
isInterceptor: false,
|
408
|
+
objectAddress: address(0),
|
409
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
410
|
+
data: ""
|
411
|
+
});
|
432
412
|
|
433
|
-
|
434
|
-
internal
|
435
|
-
{
|
436
|
-
uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
|
437
|
-
NftId serviceNftId = toNftId(serviceId);
|
438
|
-
|
439
|
-
_chainNft.mint(registryOwner, serviceId);
|
440
|
-
|
441
|
-
_info[serviceNftId] = ObjectInfo(
|
442
|
-
serviceNftId,
|
443
|
-
_registryNftId,
|
444
|
-
SERVICE(),
|
445
|
-
false, // isInterceptor
|
446
|
-
msg.sender, // service deploys registry
|
447
|
-
registryOwner, // initialOwner,
|
448
|
-
""
|
449
|
-
);
|
450
|
-
|
451
|
-
_nftIdByAddress[msg.sender] = serviceNftId;
|
452
|
-
|
453
|
-
string memory serviceName = "RegistryService";
|
454
|
-
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
455
|
-
_service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
|
456
|
-
_string[serviceNftId] = serviceName;
|
457
|
-
_serviceNftId = serviceNftId;
|
413
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
458
414
|
}
|
459
415
|
|
460
416
|
/// @dev defines which object - parent types relations are allowed to register
|
@@ -463,27 +419,39 @@ contract Registry is
|
|
463
419
|
// 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
|
464
420
|
// 3) DO NOT use REGISTRY as object type
|
465
421
|
// 2) DO NOT use PROTOCOL and "zeroObjectType"
|
466
|
-
function
|
467
|
-
|
422
|
+
function _setupValidCoreTypesAndCombinations()
|
423
|
+
private
|
468
424
|
{
|
425
|
+
_coreTypes[REGISTRY()] = true;
|
426
|
+
_coreTypes[SERVICE()] = true;
|
427
|
+
_coreTypes[TOKEN()] = true;
|
428
|
+
_coreTypes[INSTANCE()] = true;
|
429
|
+
_coreTypes[PRODUCT()] = true;
|
430
|
+
_coreTypes[POOL()] = true;
|
431
|
+
_coreTypes[DISTRIBUTION()] = true;
|
432
|
+
_coreTypes[POLICY()] = true;
|
433
|
+
_coreTypes[BUNDLE()] = true;
|
434
|
+
_coreTypes[STAKE()] = true;
|
435
|
+
|
469
436
|
// registry as parent, ONLY registry owner
|
470
|
-
|
471
|
-
|
437
|
+
//_coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
|
438
|
+
_coreContractCombinations[TOKEN()][REGISTRY()] = true;
|
439
|
+
//_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
|
472
440
|
|
473
441
|
// registry as parent, ONLY approved
|
474
|
-
|
442
|
+
_coreContractCombinations[INSTANCE()][REGISTRY()] = true;
|
475
443
|
|
476
444
|
// instance as parent, ONLY approved
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
445
|
+
_coreContractCombinations[PRODUCT()][INSTANCE()] = true;
|
446
|
+
_coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
|
447
|
+
_coreContractCombinations[ORACLE()][INSTANCE()] = true;
|
448
|
+
_coreContractCombinations[POOL()][INSTANCE()] = true;
|
481
449
|
|
482
450
|
// product as parent, ONLY approved
|
483
|
-
|
451
|
+
_coreObjectCombinations[POLICY()][PRODUCT()] = true;
|
484
452
|
|
485
453
|
// pool as parent, ONLY approved
|
486
|
-
|
487
|
-
|
454
|
+
_coreObjectCombinations[BUNDLE()][POOL()] = true;
|
455
|
+
_coreObjectCombinations[STAKE()][POOL()] = true;
|
488
456
|
}
|
489
457
|
}
|