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