@etherisc/gif-next 0.0.2-b4fc06b-491 → 0.0.2-b5e5146-738
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 +329 -90
- 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 +496 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +568 -2
- 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 +360 -118
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +342 -147
- 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/Dummy.sol/LifeCycleModule.json +2 -2
- 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/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- 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} +74 -3
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1657 -28
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +104 -19
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +203 -660
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +219 -115
- 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 +270 -76
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +67 -26
- 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/KeyValueStore.sol/KeyValueStore.json +2 -2
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
- 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 +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 +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +772 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +437 -0
- 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 +215 -218
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +220 -111
- 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 -312
- 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 +69 -130
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +51 -95
- 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 +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +394 -0
- 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/ERC165.sol/ERC165.json +2 -2
- 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 +2 -2
- 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/StateId.sol/StateIdLib.json +2 -2
- 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 +237 -0
- package/contracts/components/Distribution.sol +38 -54
- package/contracts/components/IComponent.sol +43 -0
- package/contracts/components/IDistributionComponent.sol +5 -1
- package/contracts/components/IPoolComponent.sol +11 -3
- package/contracts/components/IProductComponent.sol +7 -3
- package/contracts/components/Pool.sol +69 -80
- package/contracts/components/Product.sol +76 -108
- package/contracts/instance/BundleManager.sol +125 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +54 -10
- package/contracts/instance/IInstanceService.sol +14 -4
- package/contracts/instance/Instance.sol +73 -246
- package/contracts/instance/InstanceAccessManager.sol +88 -78
- package/contracts/instance/InstanceReader.sol +29 -26
- package/contracts/instance/InstanceService.sol +311 -77
- 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 +27 -17
- 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 +105 -0
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- 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 +109 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +232 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +37 -29
- package/contracts/registry/IRegistryService.sol +44 -14
- package/contracts/registry/Registry.sol +218 -234
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +83 -265
- package/contracts/registry/RegistryServiceManager.sol +20 -22
- package/contracts/registry/ReleaseManager.sol +332 -0
- package/contracts/registry/TokenRegistry.sol +112 -0
- package/contracts/shared/ERC165.sol +6 -2
- 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 +11 -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 +14 -6
- package/contracts/types/StateId.sol +4 -0
- package/package.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +0 -314
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +0 -267
- 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 -86
- package/contracts/components/IBaseComponent.sol +0 -24
- package/contracts/instance/AccessManagedSimple.sol +0 -122
- package/contracts/instance/AccessManagerSimple.sol +0 -692
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/base/ComponentServiceBase.sol +0 -49
- 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,217 +1,193 @@
|
|
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; // at registry deploymnet time
|
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
|
-
|
82
|
+
function registerService(
|
83
|
+
ObjectInfo memory info,
|
84
|
+
VersionPart version,
|
85
|
+
ObjectType domain
|
86
|
+
)
|
102
87
|
external
|
103
|
-
|
88
|
+
onlyReleaseManager
|
89
|
+
returns(NftId nftId)
|
104
90
|
{
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
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);
|
110
103
|
}
|
111
104
|
|
112
|
-
|
113
|
-
|
105
|
+
_service[version][domain] = info.objectAddress; // nftId;
|
106
|
+
|
107
|
+
nftId = _register(info);
|
108
|
+
|
109
|
+
emit LogServiceRegistration(version, domain);
|
114
110
|
}
|
115
111
|
|
116
|
-
/// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
|
117
|
-
// TODO service registration means its approval for some type?
|
118
|
-
// TODO registration of precompile addresses
|
119
112
|
function register(ObjectInfo memory info)
|
120
113
|
external
|
121
114
|
onlyRegistryService
|
122
115
|
returns(NftId nftId)
|
123
116
|
{
|
124
117
|
ObjectType objectType = info.objectType;
|
125
|
-
|
126
|
-
ObjectInfo memory parentInfo = _info[parentNftId];
|
127
|
-
ObjectType parentType = parentInfo.objectType; // see function header
|
128
|
-
address parentAddress = parentInfo.objectAddress;
|
118
|
+
ObjectType parentType = _info[info.parentNftId].objectType;
|
129
119
|
|
130
|
-
//
|
131
|
-
//
|
132
|
-
|
133
|
-
|
134
|
-
if(parentAddress == address(0)) {
|
135
|
-
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();
|
136
124
|
}
|
137
125
|
|
138
|
-
|
139
|
-
|
140
|
-
// TODO does external call
|
141
|
-
uint256 mintedTokenId = _chainNft.mint(
|
142
|
-
info.initialOwner,
|
143
|
-
interceptor,
|
144
|
-
EMPTY_URI);
|
145
|
-
nftId = toNftId(mintedTokenId);
|
146
|
-
|
147
|
-
// TODO move nftId out of info struct
|
148
|
-
// getters by nftId -> return struct without nftId
|
149
|
-
// getters by address -> return nftId AND struct
|
150
|
-
info.nftId = nftId;
|
151
|
-
_info[nftId] = info;
|
152
|
-
|
153
|
-
if(info.objectAddress > address(0))
|
126
|
+
// only valid core types combinations
|
127
|
+
if(info.objectAddress == address(0))
|
154
128
|
{
|
155
|
-
|
156
|
-
// parent is registered + object-parent types are valid
|
157
|
-
if(_isValidContractCombination[objectType][parentType] == false) {
|
129
|
+
if(_coreObjectCombinations[objectType][parentType] == false) {
|
158
130
|
revert InvalidTypesCombination(objectType, parentType);
|
159
131
|
}
|
160
|
-
|
161
|
-
address contractAddress = info.objectAddress;
|
162
|
-
|
163
|
-
if(_nftIdByAddress[contractAddress].gtz()) {
|
164
|
-
revert ContractAlreadyRegistered(contractAddress);
|
165
|
-
}
|
166
|
-
|
167
|
-
_nftIdByAddress[contractAddress] = nftId;
|
168
|
-
|
169
|
-
// special case
|
170
|
-
if(objectType == SERVICE()) {
|
171
|
-
_registerService(info);
|
172
|
-
}
|
173
132
|
}
|
174
133
|
else
|
175
134
|
{
|
176
|
-
if(
|
135
|
+
if(_coreContractCombinations[objectType][parentType] == false) {
|
177
136
|
revert InvalidTypesCombination(objectType, parentType);
|
178
137
|
}
|
179
138
|
}
|
180
139
|
|
181
|
-
|
140
|
+
nftId = _register(info);
|
182
141
|
}
|
183
142
|
|
184
|
-
function
|
143
|
+
function registerWithCustomType(ObjectInfo memory info)
|
185
144
|
external
|
186
|
-
|
145
|
+
onlyRegistryService
|
146
|
+
returns(NftId nftId)
|
187
147
|
{
|
188
|
-
|
189
|
-
|
190
|
-
if (info.nftId.eqz()) {
|
191
|
-
revert TokenNotRegistered(token);
|
192
|
-
}
|
148
|
+
ObjectType objectType = info.objectType;
|
149
|
+
ObjectType parentType = _info[info.parentNftId].objectType;
|
193
150
|
|
194
|
-
|
195
|
-
|
196
|
-
revert NotToken(token);
|
151
|
+
if(_coreTypes[objectType]) {
|
152
|
+
revert CoreTypeRegistration();
|
197
153
|
}
|
198
154
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
155
|
+
if(
|
156
|
+
|
157
|
+
parentType == PROTOCOL() ||
|
158
|
+
parentType == REGISTRY() ||
|
159
|
+
parentType == SERVICE()
|
160
|
+
) {
|
161
|
+
revert InvalidTypesCombination(objectType, parentType);
|
205
162
|
}
|
206
163
|
|
207
|
-
|
164
|
+
_register(info);
|
165
|
+
}
|
166
|
+
|
167
|
+
|
168
|
+
/// @dev earliest GIF major version
|
169
|
+
function getInitialVersion() external view returns (VersionPart) {
|
170
|
+
return _releaseManager.getInitialVersion();
|
171
|
+
}
|
208
172
|
|
209
|
-
|
173
|
+
// TODO make distinction between active an not yet active version
|
174
|
+
// need to be thought trough, not yet clear if necessary
|
175
|
+
// need to answer question: what is the latest version during the upgrade process?
|
176
|
+
// likely setting up a new gif version does not fit into a single tx
|
177
|
+
// in this case we might want to have a period where the latest version is
|
178
|
+
// in the process of being set up while the latest active version is 1 major release smaller
|
179
|
+
/// @dev latest GIF major version (might not yet be active)
|
180
|
+
function getNextVersion() external view returns (VersionPart) {
|
181
|
+
return _releaseManager.getNextVersion();
|
210
182
|
}
|
211
183
|
|
212
|
-
/// @dev latest GIF release version
|
213
|
-
function
|
214
|
-
return
|
184
|
+
/// @dev latest active GIF release version
|
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);
|
215
191
|
}
|
216
192
|
|
217
193
|
function getObjectCount() external view override returns (uint256) {
|
@@ -231,7 +207,6 @@ contract Registry is
|
|
231
207
|
}
|
232
208
|
|
233
209
|
function ownerOf(address contractAddress) public view returns (address) {
|
234
|
-
|
235
210
|
return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
|
236
211
|
}
|
237
212
|
|
@@ -240,7 +215,6 @@ contract Registry is
|
|
240
215
|
}
|
241
216
|
|
242
217
|
function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
|
243
|
-
|
244
218
|
return _info[_nftIdByAddress[object]];
|
245
219
|
}
|
246
220
|
|
@@ -252,22 +226,24 @@ contract Registry is
|
|
252
226
|
return _nftIdByAddress[object].gtz();
|
253
227
|
}
|
254
228
|
|
255
|
-
function
|
256
|
-
return
|
229
|
+
function isRegisteredService(address object) external view override returns (bool) {
|
230
|
+
return _info[_nftIdByAddress[object]].objectType == SERVICE();
|
257
231
|
}
|
258
232
|
|
259
|
-
function
|
260
|
-
|
233
|
+
function isValidRelease(VersionPart version) external view returns (bool)
|
234
|
+
{
|
235
|
+
return _releaseManager.isValidRelease(version);
|
261
236
|
}
|
262
237
|
|
263
|
-
// special case to retrive a gif service
|
264
238
|
function getServiceAddress(
|
265
|
-
|
266
|
-
VersionPart
|
267
|
-
) external view returns (address)
|
239
|
+
ObjectType serviceDomain,
|
240
|
+
VersionPart releaseVersion
|
241
|
+
) external view returns (address service)
|
268
242
|
{
|
269
|
-
|
270
|
-
|
243
|
+
// TODO how can I get service address while release is not validated/activated ?!! -> user will check validity of release on its own
|
244
|
+
//if(_releaseManager.isValidRelease(releaseVersion)) {
|
245
|
+
service = _service[releaseVersion][serviceDomain];
|
246
|
+
//}
|
271
247
|
}
|
272
248
|
|
273
249
|
function getChainNft() external view override returns (ChainNft) {
|
@@ -280,28 +256,54 @@ contract Registry is
|
|
280
256
|
|
281
257
|
// Internals
|
282
258
|
|
283
|
-
|
259
|
+
/// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
|
260
|
+
// TODO registration of precompile addresses
|
261
|
+
function _register(ObjectInfo memory info)
|
284
262
|
internal
|
263
|
+
returns(NftId nftId)
|
285
264
|
{
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
//
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
revert ServiceNameAlreadyRegistered(serviceName, majorVersion);
|
265
|
+
ObjectType objectType = info.objectType;
|
266
|
+
NftId parentNftId = info.parentNftId;
|
267
|
+
ObjectInfo memory parentInfo = _info[parentNftId];
|
268
|
+
ObjectType parentType = parentInfo.objectType; // see function header
|
269
|
+
address parentAddress = parentInfo.objectAddress;
|
270
|
+
|
271
|
+
// parent is contract -> need to check? -> check before minting
|
272
|
+
// special case: global registry nft as parent when not on mainnet -> global registry address is 0
|
273
|
+
// special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
|
274
|
+
// special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
|
275
|
+
if(parentAddress == address(0)) {
|
276
|
+
revert ZeroParentAddress();
|
299
277
|
}
|
300
278
|
|
301
|
-
|
302
|
-
|
279
|
+
address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
|
280
|
+
|
281
|
+
// TODO does external call
|
282
|
+
// compute next nftId, do all checks and stores, mint() at most end...
|
283
|
+
uint256 mintedTokenId = _chainNft.mint(
|
284
|
+
info.initialOwner,
|
285
|
+
interceptor,
|
286
|
+
EMPTY_URI);
|
287
|
+
nftId = toNftId(mintedTokenId);
|
303
288
|
|
304
|
-
|
289
|
+
// TODO move nftId out of info struct
|
290
|
+
// getters by nftId -> return struct without nftId
|
291
|
+
// getters by address -> return nftId AND struct
|
292
|
+
info.nftId = nftId;
|
293
|
+
_info[nftId] = info;
|
294
|
+
|
295
|
+
if(info.objectAddress > address(0))
|
296
|
+
{
|
297
|
+
address contractAddress = info.objectAddress;
|
298
|
+
|
299
|
+
if(_nftIdByAddress[contractAddress].gtz()) {
|
300
|
+
revert ContractAlreadyRegistered(contractAddress);
|
301
|
+
}
|
302
|
+
|
303
|
+
_nftIdByAddress[contractAddress] = nftId;
|
304
|
+
}
|
305
|
+
|
306
|
+
emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
|
305
307
|
}
|
306
308
|
|
307
309
|
/// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
|
@@ -334,32 +336,31 @@ contract Registry is
|
|
334
336
|
|
335
337
|
/// @dev protocol registration used to anchor the dip ecosystem relations
|
336
338
|
function _registerProtocol()
|
337
|
-
|
339
|
+
private
|
338
340
|
{
|
339
341
|
uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
|
340
342
|
NftId protocolNftId = toNftId(protocolId);
|
341
343
|
|
342
|
-
|
344
|
+
_info[protocolNftId] = ObjectInfo({
|
345
|
+
nftId: protocolNftId,
|
346
|
+
parentNftId: zeroNftId(),
|
347
|
+
objectType: PROTOCOL(),
|
348
|
+
isInterceptor: false,
|
349
|
+
objectAddress: address(0),
|
350
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
351
|
+
data: ""
|
352
|
+
});
|
343
353
|
|
344
|
-
|
345
|
-
protocolNftId,
|
346
|
-
zeroNftId(), // parent
|
347
|
-
PROTOCOL(),
|
348
|
-
false, // isInterceptor
|
349
|
-
address(0), // objectAddress
|
350
|
-
NFT_LOCK_ADDRESS,// initialOwner
|
351
|
-
""
|
352
|
-
);
|
354
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
|
353
355
|
}
|
354
356
|
|
355
357
|
/// @dev registry registration
|
356
358
|
/// might also register the global registry when not on mainnet
|
357
|
-
function _registerRegistry(
|
358
|
-
|
359
|
+
function _registerRegistry()
|
360
|
+
private
|
359
361
|
{
|
360
|
-
uint256 registryId = _chainNft.calculateTokenId(
|
362
|
+
uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
|
361
363
|
NftId registryNftId = toNftId(registryId);
|
362
|
-
|
363
364
|
NftId parentNftId;
|
364
365
|
|
365
366
|
if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
|
@@ -372,68 +373,39 @@ contract Registry is
|
|
372
373
|
parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
|
373
374
|
}
|
374
375
|
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
""
|
385
|
-
);
|
376
|
+
_info[registryNftId] = ObjectInfo({
|
377
|
+
nftId: registryNftId,
|
378
|
+
parentNftId: parentNftId,
|
379
|
+
objectType: REGISTRY(),
|
380
|
+
isInterceptor: false,
|
381
|
+
objectAddress: address(this),
|
382
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
383
|
+
data: ""
|
384
|
+
});
|
386
385
|
_nftIdByAddress[address(this)] = registryNftId;
|
387
386
|
_registryNftId = registryNftId;
|
388
|
-
}
|
389
387
|
|
388
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, registryId);
|
389
|
+
}
|
390
390
|
|
391
391
|
/// @dev global registry registration for non mainnet registries
|
392
392
|
function _registerGlobalRegistry()
|
393
|
-
|
393
|
+
private
|
394
394
|
{
|
395
395
|
uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
|
396
|
-
|
397
|
-
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
398
|
-
|
399
396
|
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
400
397
|
|
401
|
-
_info[globalRegistryNftId] = ObjectInfo(
|
402
|
-
globalRegistryNftId,
|
403
|
-
toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
404
|
-
REGISTRY(),
|
405
|
-
false,
|
406
|
-
address(0),
|
407
|
-
NFT_LOCK_ADDRESS,
|
408
|
-
""
|
409
|
-
);
|
410
|
-
}
|
398
|
+
_info[globalRegistryNftId] = ObjectInfo({
|
399
|
+
nftId: globalRegistryNftId,
|
400
|
+
parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
401
|
+
objectType: REGISTRY(),
|
402
|
+
isInterceptor: false,
|
403
|
+
objectAddress: address(0),
|
404
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
405
|
+
data: ""
|
406
|
+
});
|
411
407
|
|
412
|
-
|
413
|
-
internal
|
414
|
-
{
|
415
|
-
uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
|
416
|
-
NftId serviceNftId = toNftId(serviceId);
|
417
|
-
|
418
|
-
_chainNft.mint(registryOwner, serviceId);
|
419
|
-
|
420
|
-
_info[serviceNftId] = ObjectInfo(
|
421
|
-
serviceNftId,
|
422
|
-
_registryNftId,
|
423
|
-
SERVICE(),
|
424
|
-
false, // isInterceptor
|
425
|
-
msg.sender, // service deploys registry
|
426
|
-
registryOwner, // initialOwner,
|
427
|
-
""
|
428
|
-
);
|
429
|
-
|
430
|
-
_nftIdByAddress[msg.sender] = serviceNftId;
|
431
|
-
|
432
|
-
string memory serviceName = "RegistryService";
|
433
|
-
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
434
|
-
_service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
|
435
|
-
_string[serviceNftId] = serviceName;
|
436
|
-
_serviceNftId = serviceNftId;
|
408
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
437
409
|
}
|
438
410
|
|
439
411
|
/// @dev defines which object - parent types relations are allowed to register
|
@@ -442,27 +414,39 @@ contract Registry is
|
|
442
414
|
// 2) DO NOT use object type (e.g. POLCY, BUNDLE, STAKE) as parent type
|
443
415
|
// 3) DO NOT use REGISTRY as object type
|
444
416
|
// 2) DO NOT use PROTOCOL and "zeroObjectType"
|
445
|
-
function
|
446
|
-
|
417
|
+
function _setupValidCoreTypesAndCombinations()
|
418
|
+
private
|
447
419
|
{
|
420
|
+
_coreTypes[REGISTRY()] = true;
|
421
|
+
_coreTypes[SERVICE()] = true;
|
422
|
+
_coreTypes[TOKEN()] = true;
|
423
|
+
_coreTypes[INSTANCE()] = true;
|
424
|
+
_coreTypes[PRODUCT()] = true;
|
425
|
+
_coreTypes[POOL()] = true;
|
426
|
+
_coreTypes[DISTRIBUTION()] = true;
|
427
|
+
_coreTypes[POLICY()] = true;
|
428
|
+
_coreTypes[BUNDLE()] = true;
|
429
|
+
_coreTypes[STAKE()] = true;
|
430
|
+
|
448
431
|
// registry as parent, ONLY registry owner
|
449
|
-
|
450
|
-
|
432
|
+
//_coreContractCombinations[REGISTRY()][REGISTRY()] = true; // only for global regstry
|
433
|
+
_coreContractCombinations[TOKEN()][REGISTRY()] = true;
|
434
|
+
//_coreContractCombinations[SERVICE()][REGISTRY()] = true;// do not need it here -> registerService() registers exactly this combination
|
451
435
|
|
452
436
|
// registry as parent, ONLY approved
|
453
|
-
|
437
|
+
_coreContractCombinations[INSTANCE()][REGISTRY()] = true;
|
454
438
|
|
455
439
|
// instance as parent, ONLY approved
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
440
|
+
_coreContractCombinations[PRODUCT()][INSTANCE()] = true;
|
441
|
+
_coreContractCombinations[DISTRIBUTION()][INSTANCE()] = true;
|
442
|
+
_coreContractCombinations[ORACLE()][INSTANCE()] = true;
|
443
|
+
_coreContractCombinations[POOL()][INSTANCE()] = true;
|
460
444
|
|
461
445
|
// product as parent, ONLY approved
|
462
|
-
|
446
|
+
_coreObjectCombinations[POLICY()][PRODUCT()] = true;
|
463
447
|
|
464
448
|
// pool as parent, ONLY approved
|
465
|
-
|
466
|
-
|
449
|
+
_coreObjectCombinations[BUNDLE()][POOL()] = true;
|
450
|
+
_coreObjectCombinations[STAKE()][POOL()] = true;
|
467
451
|
}
|
468
452
|
}
|