@etherisc/gif-next 0.0.2-bf75dbb-287 → 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/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/{IBaseComponent.sol/IBaseComponent.json → Component.sol/Component.json} +300 -12
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +199 -94
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → IComponent.sol/IComponent.json} +86 -84
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +496 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +512 -74
- 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 +180 -205
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +204 -110
- 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 +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +38 -62
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +284 -2
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +115 -19
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +117 -601
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +416 -186
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +41 -82
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +253 -226
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +38 -97
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -32
- 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} +124 -61
- 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 +149 -93
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +29 -36
- 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/{shared/RegisterableUpgradable.sol/RegisterableUpgradable.json → instance/service/IPolicyService.sol/IPolicyService.json} +372 -48
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +12 -246
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -246
- 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 +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +126 -369
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +29 -56
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +137 -428
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +29 -80
- 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 +231 -133
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +127 -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 +243 -234
- 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 +68 -161
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +51 -104
- 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/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 +41 -51
- package/contracts/components/IComponent.sol +43 -0
- package/contracts/components/IDistributionComponent.sol +5 -2
- package/contracts/components/IPoolComponent.sol +6 -21
- package/contracts/components/IProductComponent.sol +7 -3
- package/contracts/components/Pool.sol +50 -109
- package/contracts/components/Product.sol +66 -89
- package/contracts/instance/BundleManager.sol +7 -11
- package/contracts/instance/IInstance.sol +25 -9
- package/contracts/instance/IInstanceService.sol +12 -4
- package/contracts/instance/Instance.sol +45 -230
- package/contracts/instance/InstanceAccessManager.sol +333 -166
- package/contracts/instance/InstanceReader.sol +3 -25
- package/contracts/instance/InstanceService.sol +352 -143
- package/contracts/instance/InstanceServiceManager.sol +5 -8
- package/contracts/instance/ObjectManager.sol +7 -24
- package/contracts/instance/base/ComponentService.sol +134 -0
- package/contracts/instance/module/IAccess.sol +36 -20
- package/contracts/instance/service/BundleService.sol +293 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/DistributionService.sol +43 -25
- 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 +2 -33
- package/contracts/instance/service/IProductService.sol +2 -72
- package/contracts/instance/service/PolicyService.sol +538 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +33 -210
- package/contracts/instance/service/PoolServiceManager.sol +5 -8
- package/contracts/instance/service/ProductService.sol +122 -459
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +36 -17
- package/contracts/registry/IRegistryService.sol +28 -13
- package/contracts/registry/Registry.sol +227 -218
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +61 -157
- 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 +5 -0
- package/contracts/shared/ProxyManager.sol +1 -1
- package/contracts/shared/Registerable.sol +10 -14
- package/contracts/shared/Service.sol +13 -8
- package/contracts/test/TestService.sol +3 -2
- package/contracts/types/RoleId.sol +18 -15
- package/package.json +3 -3
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
- 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/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +0 -448
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +0 -763
- 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 -132
- package/contracts/components/IBaseComponent.sol +0 -31
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +0 -23
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/IInstanceBase.sol +0 -26
- package/contracts/instance/InstanceBase.sol +0 -41
- package/contracts/instance/base/ComponentServiceBase.sol +0 -134
- 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,183 +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
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
|
-
|
33
|
+
mapping(NftId nftId => ObjectInfo info) private _info;
|
34
|
+
mapping(address object => NftId nftId) private _nftIdByAddress;
|
38
35
|
|
39
|
-
mapping(
|
40
|
-
mapping(address object => NftId nftId) internal _nftIdByAddress;
|
36
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) private _service;
|
41
37
|
|
42
|
-
mapping(ObjectType objectType =>
|
43
|
-
ObjectType parentType => bool)) internal _isValidContractCombination;
|
38
|
+
mapping(ObjectType objectType => bool) private _coreTypes;
|
44
39
|
|
45
40
|
mapping(ObjectType objectType => mapping(
|
46
|
-
ObjectType parentType => bool))
|
41
|
+
ObjectType parentType => bool)) private _coreContractCombinations;
|
47
42
|
|
48
|
-
mapping(
|
49
|
-
|
50
|
-
VersionPart majorVersion => address service)) internal _service;
|
43
|
+
mapping(ObjectType objectType => mapping(
|
44
|
+
ObjectType parentType => bool)) private _coreObjectCombinations;
|
51
45
|
|
52
|
-
NftId
|
53
|
-
|
54
|
-
ChainNft internal _chainNft;
|
46
|
+
NftId private _registryNftId;
|
47
|
+
ChainNft private _chainNft;
|
55
48
|
|
49
|
+
ReleaseManager private _releaseManager;
|
56
50
|
|
57
|
-
modifier
|
58
|
-
if(msg.sender
|
59
|
-
revert
|
51
|
+
modifier onlyRegistryService() {
|
52
|
+
if(!_releaseManager.isActiveRegistryService(msg.sender)) {
|
53
|
+
revert CallerNotRegistryService();
|
60
54
|
}
|
61
55
|
_;
|
62
56
|
}
|
63
57
|
|
64
|
-
modifier
|
65
|
-
if(msg.sender !=
|
66
|
-
revert
|
58
|
+
modifier onlyReleaseManager() {
|
59
|
+
if(msg.sender != address(_releaseManager)) {
|
60
|
+
revert CallerNotReleaseManager();
|
67
61
|
}
|
68
62
|
_;
|
69
63
|
}
|
70
64
|
|
71
|
-
constructor(
|
65
|
+
constructor()
|
72
66
|
{
|
73
|
-
|
74
|
-
|
75
|
-
// major version at constructor time
|
76
|
-
_majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
|
77
|
-
emit LogInitialMajorVersionSet(_majorVersion);
|
67
|
+
_releaseManager = ReleaseManager(msg.sender);
|
78
68
|
|
79
69
|
// deploy NFT
|
80
|
-
_chainNft = new ChainNft(address(this))
|
70
|
+
_chainNft = new ChainNft(address(this));
|
81
71
|
|
82
72
|
// initial registry setup
|
83
73
|
_registerProtocol();
|
84
|
-
_registerRegistry(
|
85
|
-
_registerRegistryService(registryOwner);
|
74
|
+
_registerRegistry();
|
86
75
|
|
87
|
-
// set object parent relations
|
88
|
-
|
76
|
+
// set object types and object parent relations
|
77
|
+
_setupValidCoreTypesAndCombinations();
|
89
78
|
|
90
79
|
_registerInterface(type(IRegistry).interfaceId);
|
91
80
|
}
|
92
81
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
82
|
+
function registerService(
|
83
|
+
ObjectInfo memory info,
|
84
|
+
VersionPart version,
|
85
|
+
ObjectType domain
|
86
|
+
)
|
97
87
|
external
|
98
|
-
|
88
|
+
onlyReleaseManager
|
89
|
+
returns(NftId nftId)
|
99
90
|
{
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
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);
|
105
103
|
}
|
106
104
|
|
107
|
-
|
108
|
-
|
105
|
+
_service[version][domain] = info.objectAddress; // nftId;
|
106
|
+
|
107
|
+
nftId = _register(info);
|
108
|
+
|
109
|
+
emit LogServiceRegistration(version, domain);
|
109
110
|
}
|
110
111
|
|
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
112
|
function register(ObjectInfo memory info)
|
115
113
|
external
|
116
114
|
onlyRegistryService
|
117
115
|
returns(NftId nftId)
|
118
116
|
{
|
119
117
|
ObjectType objectType = info.objectType;
|
120
|
-
|
121
|
-
ObjectInfo memory parentInfo = _info[parentNftId];
|
122
|
-
ObjectType parentType = parentInfo.objectType; // see function header
|
123
|
-
address parentAddress = parentInfo.objectAddress;
|
118
|
+
ObjectType parentType = _info[info.parentNftId].objectType;
|
124
119
|
|
125
|
-
//
|
126
|
-
//
|
127
|
-
|
128
|
-
|
129
|
-
if(parentAddress == address(0)) {
|
130
|
-
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();
|
131
124
|
}
|
132
125
|
|
133
|
-
|
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))
|
126
|
+
// only valid core types combinations
|
127
|
+
if(info.objectAddress == address(0))
|
149
128
|
{
|
150
|
-
|
151
|
-
// parent is registered + object-parent types are valid
|
152
|
-
if(_isValidContractCombination[objectType][parentType] == false) {
|
129
|
+
if(_coreObjectCombinations[objectType][parentType] == false) {
|
153
130
|
revert InvalidTypesCombination(objectType, parentType);
|
154
131
|
}
|
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
132
|
}
|
169
133
|
else
|
170
134
|
{
|
171
|
-
if(
|
135
|
+
if(_coreContractCombinations[objectType][parentType] == false) {
|
172
136
|
revert InvalidTypesCombination(objectType, parentType);
|
173
137
|
}
|
174
138
|
}
|
175
139
|
|
176
|
-
|
140
|
+
nftId = _register(info);
|
141
|
+
}
|
142
|
+
|
143
|
+
function registerWithCustomType(ObjectInfo memory info)
|
144
|
+
external
|
145
|
+
onlyRegistryService
|
146
|
+
returns(NftId nftId)
|
147
|
+
{
|
148
|
+
ObjectType objectType = info.objectType;
|
149
|
+
ObjectType parentType = _info[info.parentNftId].objectType;
|
150
|
+
|
151
|
+
if(_coreTypes[objectType]) {
|
152
|
+
revert CoreTypeRegistration();
|
153
|
+
}
|
154
|
+
|
155
|
+
if(
|
156
|
+
|
157
|
+
parentType == PROTOCOL() ||
|
158
|
+
parentType == REGISTRY() ||
|
159
|
+
parentType == SERVICE()
|
160
|
+
) {
|
161
|
+
revert InvalidTypesCombination(objectType, parentType);
|
162
|
+
}
|
163
|
+
|
164
|
+
_register(info);
|
177
165
|
}
|
166
|
+
|
167
|
+
|
178
168
|
/// @dev earliest GIF major version
|
179
|
-
function
|
180
|
-
return
|
169
|
+
function getInitialVersion() external view returns (VersionPart) {
|
170
|
+
return _releaseManager.getInitialVersion();
|
181
171
|
}
|
182
172
|
|
183
173
|
// TODO make distinction between active an not yet active version
|
@@ -187,16 +177,20 @@ contract Registry is
|
|
187
177
|
// in this case we might want to have a period where the latest version is
|
188
178
|
// in the process of being set up while the latest active version is 1 major release smaller
|
189
179
|
/// @dev latest GIF major version (might not yet be active)
|
190
|
-
function
|
191
|
-
return
|
180
|
+
function getNextVersion() external view returns (VersionPart) {
|
181
|
+
return _releaseManager.getNextVersion();
|
192
182
|
}
|
193
183
|
|
194
184
|
/// @dev latest active GIF release version
|
195
|
-
function
|
196
|
-
return
|
185
|
+
function getLatestVersion() external view returns (VersionPart) {
|
186
|
+
return _releaseManager.getLatestVersion();
|
197
187
|
}
|
198
188
|
|
199
|
-
function
|
189
|
+
function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory) {
|
190
|
+
return _releaseManager.getReleaseInfo(version);
|
191
|
+
}
|
192
|
+
|
193
|
+
function getObjectCount() external view returns (uint256) {
|
200
194
|
return _chainNft.totalSupply();
|
201
195
|
}
|
202
196
|
|
@@ -204,11 +198,11 @@ contract Registry is
|
|
204
198
|
return _registryNftId;
|
205
199
|
}
|
206
200
|
|
207
|
-
function getNftId(address object) external view
|
201
|
+
function getNftId(address object) external view returns (NftId id) {
|
208
202
|
return _nftIdByAddress[object];
|
209
203
|
}
|
210
204
|
|
211
|
-
function ownerOf(NftId nftId) public view
|
205
|
+
function ownerOf(NftId nftId) public view returns (address) {
|
212
206
|
return _chainNft.ownerOf(nftId.toInt());
|
213
207
|
}
|
214
208
|
|
@@ -216,38 +210,45 @@ contract Registry is
|
|
216
210
|
return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
|
217
211
|
}
|
218
212
|
|
219
|
-
function getObjectInfo(NftId nftId) external view
|
213
|
+
function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory) {
|
220
214
|
return _info[nftId];
|
221
215
|
}
|
222
216
|
|
223
|
-
function getObjectInfo(address object) external view
|
217
|
+
function getObjectInfo(address object) external view returns (ObjectInfo memory) {
|
224
218
|
return _info[_nftIdByAddress[object]];
|
225
219
|
}
|
226
220
|
|
227
|
-
function isRegistered(NftId nftId) public view
|
221
|
+
function isRegistered(NftId nftId) public view returns (bool) {
|
228
222
|
return _info[nftId].objectType.gtz();
|
229
223
|
}
|
230
224
|
|
231
|
-
function isRegistered(address object) external view
|
225
|
+
function isRegistered(address object) external view returns (bool) {
|
232
226
|
return _nftIdByAddress[object].gtz();
|
233
227
|
}
|
234
228
|
|
235
|
-
function isRegisteredService(address object) external view
|
236
|
-
return
|
229
|
+
function isRegisteredService(address object) external view returns (bool) {
|
230
|
+
return _info[_nftIdByAddress[object]].objectType == SERVICE();
|
237
231
|
}
|
238
232
|
|
239
|
-
function
|
240
|
-
|
233
|
+
function isRegisteredComponent(address object) external view returns (bool) {
|
234
|
+
NftId objectParentNftId = _info[_nftIdByAddress[object]].parentNftId;
|
235
|
+
return _info[objectParentNftId].objectType == INSTANCE();
|
236
|
+
}
|
237
|
+
|
238
|
+
function isValidRelease(VersionPart version) external view returns (bool)
|
239
|
+
{
|
240
|
+
return _releaseManager.isValidRelease(version);
|
241
241
|
}
|
242
242
|
|
243
|
-
// special case to retrive a gif service
|
244
243
|
function getServiceAddress(
|
245
|
-
|
246
|
-
VersionPart
|
247
|
-
) external view returns (address)
|
244
|
+
ObjectType serviceDomain,
|
245
|
+
VersionPart releaseVersion
|
246
|
+
) external view returns (address service)
|
248
247
|
{
|
249
|
-
|
250
|
-
|
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
|
+
//}
|
251
252
|
}
|
252
253
|
|
253
254
|
function getChainNft() external view override returns (ChainNft) {
|
@@ -260,28 +261,54 @@ contract Registry is
|
|
260
261
|
|
261
262
|
// Internals
|
262
263
|
|
263
|
-
|
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)
|
264
267
|
internal
|
268
|
+
returns(NftId nftId)
|
265
269
|
{
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
//
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
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();
|
279
282
|
}
|
280
283
|
|
281
|
-
|
282
|
-
|
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);
|
293
|
+
|
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;
|
283
303
|
|
284
|
-
|
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);
|
285
312
|
}
|
286
313
|
|
287
314
|
/// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
|
@@ -314,32 +341,31 @@ contract Registry is
|
|
314
341
|
|
315
342
|
/// @dev protocol registration used to anchor the dip ecosystem relations
|
316
343
|
function _registerProtocol()
|
317
|
-
|
344
|
+
private
|
318
345
|
{
|
319
346
|
uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
|
320
347
|
NftId protocolNftId = toNftId(protocolId);
|
321
348
|
|
322
|
-
|
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
|
+
});
|
323
358
|
|
324
|
-
|
325
|
-
protocolNftId,
|
326
|
-
zeroNftId(), // parent
|
327
|
-
PROTOCOL(),
|
328
|
-
false, // isInterceptor
|
329
|
-
address(0), // objectAddress
|
330
|
-
NFT_LOCK_ADDRESS,// initialOwner
|
331
|
-
""
|
332
|
-
);
|
359
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
|
333
360
|
}
|
334
361
|
|
335
362
|
/// @dev registry registration
|
336
363
|
/// might also register the global registry when not on mainnet
|
337
|
-
function _registerRegistry(
|
338
|
-
|
364
|
+
function _registerRegistry()
|
365
|
+
private
|
339
366
|
{
|
340
367
|
uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
|
341
368
|
NftId registryNftId = toNftId(registryId);
|
342
|
-
|
343
369
|
NftId parentNftId;
|
344
370
|
|
345
371
|
if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
|
@@ -352,68 +378,39 @@ contract Registry is
|
|
352
378
|
parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
|
353
379
|
}
|
354
380
|
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
""
|
365
|
-
);
|
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
|
+
});
|
366
390
|
_nftIdByAddress[address(this)] = registryNftId;
|
367
391
|
_registryNftId = registryNftId;
|
368
|
-
}
|
369
392
|
|
393
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, registryId);
|
394
|
+
}
|
370
395
|
|
371
396
|
/// @dev global registry registration for non mainnet registries
|
372
397
|
function _registerGlobalRegistry()
|
373
|
-
|
398
|
+
private
|
374
399
|
{
|
375
400
|
uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
|
376
|
-
|
377
|
-
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
378
|
-
|
379
401
|
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
380
402
|
|
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
|
-
}
|
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
|
+
});
|
391
412
|
|
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;
|
413
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
417
414
|
}
|
418
415
|
|
419
416
|
/// @dev defines which object - parent types relations are allowed to register
|
@@ -422,27 +419,39 @@ contract Registry is
|
|
422
419
|
// 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
|
423
420
|
// 3) DO NOT use REGISTRY as object type
|
424
421
|
// 2) DO NOT use PROTOCOL and "zeroObjectType"
|
425
|
-
function
|
426
|
-
|
422
|
+
function _setupValidCoreTypesAndCombinations()
|
423
|
+
private
|
427
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
|
+
|
428
436
|
// registry as parent, ONLY registry owner
|
429
|
-
|
430
|
-
|
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
|
431
440
|
|
432
441
|
// registry as parent, ONLY approved
|
433
|
-
|
442
|
+
_coreContractCombinations[INSTANCE()][REGISTRY()] = true;
|
434
443
|
|
435
444
|
// instance as parent, ONLY approved
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
445
|
+
_coreContractCombinations[PRODUCT()][INSTANCE()] = true;
|
446
|
+
_coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
|
447
|
+
_coreContractCombinations[ORACLE()][INSTANCE()] = true;
|
448
|
+
_coreContractCombinations[POOL()][INSTANCE()] = true;
|
440
449
|
|
441
450
|
// product as parent, ONLY approved
|
442
|
-
|
451
|
+
_coreObjectCombinations[POLICY()][PRODUCT()] = true;
|
443
452
|
|
444
453
|
// pool as parent, ONLY approved
|
445
|
-
|
446
|
-
|
454
|
+
_coreObjectCombinations[BUNDLE()][POOL()] = true;
|
455
|
+
_coreObjectCombinations[STAKE()][POOL()] = true;
|
447
456
|
}
|
448
457
|
}
|