@etherisc/gif-next 0.0.2-aa8d0c4-506 → 0.0.2-ab4c2da-820
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +126 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +136 -62
- 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/IDistributionComponent.sol/IDistributionComponent.json +0 -52
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +28 -2
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +168 -102
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +144 -64
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
- package/artifacts/contracts/instance/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 +981 -10
- 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 +30 -14
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +169 -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 +74 -40
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +269 -94
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +102 -34
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +285 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +30 -19
- 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 +43 -53
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +15 -23
- 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 -77
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +25 -240
- 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 +42 -157
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +15 -35
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +755 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +420 -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 +82 -262
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +188 -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 +112 -331
- 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 +37 -79
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -112
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +551 -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 +4 -4
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/components/BaseComponent.sol +49 -8
- package/contracts/components/Distribution.sol +12 -15
- package/contracts/components/IBaseComponent.sol +6 -0
- package/contracts/components/IDistributionComponent.sol +0 -2
- package/contracts/components/IPoolComponent.sol +5 -1
- package/contracts/components/Pool.sol +49 -25
- package/contracts/components/Product.sol +41 -46
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
- package/contracts/instance/BundleManager.sol +129 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +25 -4
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +7 -3
- package/contracts/instance/Instance.sol +44 -23
- package/contracts/instance/InstanceAccessManager.sol +6 -6
- package/contracts/instance/InstanceBase.sol +41 -0
- package/contracts/instance/InstanceReader.sol +9 -0
- package/contracts/instance/InstanceService.sol +190 -73
- package/contracts/instance/InstanceServiceManager.sol +8 -6
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +36 -24
- package/contracts/instance/module/ISetup.sol +3 -1
- 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 +41 -26
- package/contracts/instance/service/DistributionServiceManager.sol +8 -6
- package/contracts/instance/service/IBundleService.sol +45 -0
- package/contracts/instance/service/IPolicyService.sol +87 -0
- package/contracts/instance/service/IPoolService.sol +6 -23
- package/contracts/instance/service/IProductService.sol +6 -73
- package/contracts/instance/service/PolicyService.sol +503 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +46 -129
- package/contracts/instance/service/PoolServiceManager.sol +8 -6
- package/contracts/instance/service/ProductService.sol +168 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +16 -33
- package/contracts/registry/IRegistryService.sol +37 -12
- package/contracts/registry/Registry.sol +138 -242
- package/contracts/registry/RegistryAccessManager.sol +207 -0
- package/contracts/registry/RegistryService.sol +83 -152
- package/contracts/registry/RegistryServiceManager.sol +18 -36
- package/contracts/registry/ReleaseManager.sol +382 -0
- package/contracts/registry/TokenRegistry.sol +5 -6
- package/contracts/shared/IService.sol +2 -1
- package/contracts/shared/NftOwnable.sol +2 -4
- package/contracts/shared/ProxyManager.sol +1 -1
- package/contracts/shared/Service.sol +11 -7
- package/contracts/test/TestService.sol +3 -2
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/RoleId.sol +7 -5
- package/package.json +1 -1
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
- package/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,
|
@@ -30,65 +32,51 @@ contract Registry is
|
|
30
32
|
{
|
31
33
|
uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
|
32
34
|
address public constant NFT_LOCK_ADDRESS = address(0x1);
|
35
|
+
uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
|
33
36
|
uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
|
34
37
|
string public constant EMPTY_URI = "";
|
35
38
|
|
36
|
-
VersionPart internal _majorVersion;
|
37
|
-
|
38
39
|
mapping(NftId nftId => ObjectInfo info) internal _info;
|
39
40
|
mapping(address object => NftId nftId) internal _nftIdByAddress;
|
40
41
|
|
41
|
-
mapping(NftId registrator => mapping(
|
42
|
-
ObjectType objectType => bool)) internal _isApproved;
|
43
|
-
|
44
42
|
mapping(ObjectType objectType => mapping(
|
45
43
|
ObjectType parentType => bool)) internal _isValidContractCombination;
|
46
44
|
|
47
45
|
mapping(ObjectType objectType => mapping(
|
48
46
|
ObjectType parentType => bool)) internal _isValidObjectCombination;
|
49
47
|
|
50
|
-
mapping(address token => mapping(
|
51
|
-
VersionPart majorVersion => bool isActive)) internal _tokenIsActive;
|
52
|
-
|
53
|
-
mapping(NftId nftId => string name) internal _string;
|
54
|
-
mapping(bytes32 serviceNameHash => mapping(
|
55
|
-
VersionPart majorVersion => address service)) internal _service;
|
56
|
-
|
57
48
|
NftId internal _registryNftId;
|
58
|
-
NftId internal _serviceNftId; // set in stone upon registry creation
|
59
49
|
ChainNft internal _chainNft;
|
60
50
|
|
51
|
+
ReleaseManager internal _releaseManager;
|
61
52
|
|
62
|
-
modifier
|
63
|
-
if(msg.sender
|
64
|
-
revert
|
53
|
+
modifier onlyRegistryService() {
|
54
|
+
if(!_releaseManager.isActiveRegistryService(msg.sender)) {
|
55
|
+
revert CallerNotRegistryService();
|
65
56
|
}
|
66
57
|
_;
|
67
58
|
}
|
68
59
|
|
69
|
-
modifier
|
70
|
-
|
71
|
-
|
72
|
-
revert NotRegistryService();
|
60
|
+
modifier onlyReleaseManager() {
|
61
|
+
if(msg.sender != address(_releaseManager)) {
|
62
|
+
revert CallerNotReleaseManager();
|
73
63
|
}
|
74
64
|
_;
|
75
65
|
}
|
76
66
|
|
77
|
-
constructor(address
|
67
|
+
constructor(address releaseManager, VersionPart initialVersion)
|
78
68
|
{
|
79
|
-
require(
|
69
|
+
require(releaseManager > address(0), "Registry: release manager is 0");
|
70
|
+
require(initialVersion.toInt() > 0, "Registry: initial version is 0");
|
80
71
|
|
81
|
-
|
82
|
-
_majorVersion = VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT);
|
83
|
-
emit LogInitialMajorVersionSet(_majorVersion);
|
72
|
+
_releaseManager = ReleaseManager(releaseManager);
|
84
73
|
|
85
74
|
// deploy NFT
|
86
75
|
_chainNft = new ChainNft(address(this));// adds 10kb to deployment size
|
87
76
|
|
88
77
|
// initial registry setup
|
89
78
|
_registerProtocol();
|
90
|
-
_registerRegistry(
|
91
|
-
_registerRegistryService(registryOwner);
|
79
|
+
_registerRegistry();
|
92
80
|
|
93
81
|
// set object parent relations
|
94
82
|
_setupValidObjectParentCombinations();
|
@@ -96,126 +84,36 @@ contract Registry is
|
|
96
84
|
_registerInterface(type(IRegistry).interfaceId);
|
97
85
|
}
|
98
86
|
|
99
|
-
|
100
|
-
|
101
|
-
/// @dev latest GIF release version
|
102
|
-
function setMajorVersion(VersionPart newMajorVersion)
|
87
|
+
function registerService(ObjectInfo memory info)
|
103
88
|
external
|
104
|
-
|
89
|
+
onlyReleaseManager
|
90
|
+
returns(NftId nftId)
|
105
91
|
{
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
if (newMax <= oldMax || newMax - oldMax != 1) {
|
110
|
-
revert MajorVersionMaxIncreaseInvalid(newMajorVersion, _majorVersion);
|
92
|
+
/* must be guaranteed by release manager
|
93
|
+
if(info.objectType != SERVICE()) {
|
94
|
+
revert();
|
111
95
|
}
|
112
|
-
|
113
|
-
|
114
|
-
|
96
|
+
info.initialOwner = NFT_LOCK_ADDRESS <- if services are access managed
|
97
|
+
*/
|
98
|
+
nftId = _register(info);
|
115
99
|
}
|
116
100
|
|
117
|
-
/// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
|
118
|
-
// TODO service registration means its approval for some type?
|
119
|
-
// TODO registration of precompile addresses
|
120
101
|
function register(ObjectInfo memory info)
|
121
102
|
external
|
122
103
|
onlyRegistryService
|
123
104
|
returns(NftId nftId)
|
124
105
|
{
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
ObjectType parentType = parentInfo.objectType; // see function header
|
129
|
-
address parentAddress = parentInfo.objectAddress;
|
130
|
-
|
131
|
-
// parent is contract -> need to check? -> check before minting
|
132
|
-
// special case: global registry nft as parent when not on mainnet -> global registry address is 0
|
133
|
-
// special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
|
134
|
-
// special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
|
135
|
-
if(parentAddress == address(0)) {
|
136
|
-
revert ZeroParentAddress();
|
106
|
+
// no service registrations
|
107
|
+
if(info.objectType == SERVICE()) {
|
108
|
+
revert ServiceRegistration();
|
137
109
|
}
|
138
110
|
|
139
|
-
|
140
|
-
|
141
|
-
// TODO does external call
|
142
|
-
uint256 mintedTokenId = _chainNft.mint(
|
143
|
-
info.initialOwner,
|
144
|
-
interceptor,
|
145
|
-
EMPTY_URI);
|
146
|
-
nftId = toNftId(mintedTokenId);
|
147
|
-
|
148
|
-
// TODO move nftId out of info struct
|
149
|
-
// getters by nftId -> return struct without nftId
|
150
|
-
// getters by address -> return nftId AND struct
|
151
|
-
info.nftId = nftId;
|
152
|
-
_info[nftId] = info;
|
153
|
-
|
154
|
-
if(info.objectAddress > address(0))
|
155
|
-
{
|
156
|
-
// TODO if need to add types latter -> at least call this check from registry service
|
157
|
-
// parent is registered + object-parent types are valid
|
158
|
-
if(_isValidContractCombination[objectType][parentType] == false) {
|
159
|
-
revert InvalidTypesCombination(objectType, parentType);
|
160
|
-
}
|
161
|
-
|
162
|
-
address contractAddress = info.objectAddress;
|
163
|
-
|
164
|
-
if(_nftIdByAddress[contractAddress].gtz()) {
|
165
|
-
revert ContractAlreadyRegistered(contractAddress);
|
166
|
-
}
|
167
|
-
|
168
|
-
_nftIdByAddress[contractAddress] = nftId;
|
169
|
-
|
170
|
-
// special case
|
171
|
-
if(objectType == SERVICE()) {
|
172
|
-
_registerService(info);
|
173
|
-
}
|
174
|
-
}
|
175
|
-
else
|
176
|
-
{
|
177
|
-
if(_isValidObjectCombination[objectType][parentType] == false) {
|
178
|
-
revert InvalidTypesCombination(objectType, parentType);
|
179
|
-
}
|
180
|
-
}
|
181
|
-
|
182
|
-
emit LogRegistration(info);
|
183
|
-
}
|
184
|
-
|
185
|
-
/// @dev token state is informative, registry have no clue about used tokens
|
186
|
-
// component owner is responsible for token selection and operations
|
187
|
-
// service MUST deny registration of component with inactive token
|
188
|
-
function setTokenActive(address token, VersionPart majorVersion, bool active)
|
189
|
-
external
|
190
|
-
onlyOwner
|
191
|
-
{
|
192
|
-
// verify that token is registered
|
193
|
-
ObjectInfo memory info = _info[_nftIdByAddress[token]];
|
194
|
-
if (info.nftId.eqz()) {
|
195
|
-
revert TokenNotRegistered(token);
|
196
|
-
}
|
197
|
-
|
198
|
-
// verify provided address is a registered token
|
199
|
-
if (info.objectType != TOKEN()) {
|
200
|
-
revert NotToken(token);
|
201
|
-
}
|
202
|
-
|
203
|
-
// verify valid major version
|
204
|
-
// ensure major version increments is one
|
205
|
-
uint256 version = majorVersion.toInt();
|
206
|
-
uint256 versionNow = _majorVersion.toInt();
|
207
|
-
if (version < GIF_MAJOR_VERSION_AT_DEPLOYMENT || version > versionNow) {
|
208
|
-
revert TokenMajorVersionInvalid(majorVersion);
|
209
|
-
}
|
210
|
-
|
211
|
-
_tokenIsActive[token][majorVersion] = active;
|
212
|
-
|
213
|
-
emit LogTokenStateSet(token, majorVersion, active);
|
111
|
+
nftId = _register(info);
|
214
112
|
}
|
215
113
|
|
216
114
|
/// @dev earliest GIF major version
|
217
115
|
function getMajorVersionMin() external view returns (VersionPart) {
|
218
|
-
return
|
116
|
+
return _releaseManager.getInitialVersion();
|
219
117
|
}
|
220
118
|
|
221
119
|
// TODO make distinction between active an not yet active version
|
@@ -226,14 +124,13 @@ contract Registry is
|
|
226
124
|
// in the process of being set up while the latest active version is 1 major release smaller
|
227
125
|
/// @dev latest GIF major version (might not yet be active)
|
228
126
|
function getMajorVersionMax() external view returns (VersionPart) {
|
229
|
-
return
|
127
|
+
return _releaseManager.getNextVersion();
|
230
128
|
}
|
231
129
|
|
232
130
|
/// @dev latest active GIF release version
|
233
131
|
function getMajorVersion() external view returns (VersionPart) {
|
234
|
-
return
|
132
|
+
return _releaseManager.getLatestVersion();
|
235
133
|
}
|
236
|
-
|
237
134
|
|
238
135
|
function getObjectCount() external view override returns (uint256) {
|
239
136
|
return _chainNft.totalSupply();
|
@@ -252,7 +149,6 @@ contract Registry is
|
|
252
149
|
}
|
253
150
|
|
254
151
|
function ownerOf(address contractAddress) public view returns (address) {
|
255
|
-
|
256
152
|
return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
|
257
153
|
}
|
258
154
|
|
@@ -261,7 +157,6 @@ contract Registry is
|
|
261
157
|
}
|
262
158
|
|
263
159
|
function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
|
264
|
-
|
265
160
|
return _info[_nftIdByAddress[object]];
|
266
161
|
}
|
267
162
|
|
@@ -273,22 +168,16 @@ contract Registry is
|
|
273
168
|
return _nftIdByAddress[object].gtz();
|
274
169
|
}
|
275
170
|
|
276
|
-
function
|
277
|
-
return
|
278
|
-
}
|
279
|
-
|
280
|
-
function getServiceName(NftId nftId) external view returns (string memory) {
|
281
|
-
return _string[nftId];
|
171
|
+
function isRegisteredService(address object) external view override returns (bool) {
|
172
|
+
return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
|
282
173
|
}
|
283
174
|
|
284
|
-
// special case to retrive a gif service
|
285
175
|
function getServiceAddress(
|
286
|
-
|
287
|
-
VersionPart
|
176
|
+
ObjectType serviceType,
|
177
|
+
VersionPart releaseVersion
|
288
178
|
) external view returns (address)
|
289
179
|
{
|
290
|
-
|
291
|
-
return _service[serviceNameHash][majorVersion];
|
180
|
+
return _releaseManager.getService(releaseVersion, serviceType);
|
292
181
|
}
|
293
182
|
|
294
183
|
function getChainNft() external view override returns (ChainNft) {
|
@@ -301,28 +190,65 @@ contract Registry is
|
|
301
190
|
|
302
191
|
// Internals
|
303
192
|
|
304
|
-
|
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)
|
305
196
|
internal
|
197
|
+
returns(NftId nftId)
|
306
198
|
{
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
//
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
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();
|
320
211
|
}
|
321
212
|
|
322
|
-
|
323
|
-
|
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
|
+
}
|
241
|
+
|
242
|
+
_nftIdByAddress[contractAddress] = nftId;
|
243
|
+
}
|
244
|
+
else
|
245
|
+
{
|
246
|
+
if(_isValidObjectCombination[objectType][parentType] == false) {
|
247
|
+
revert InvalidTypesCombination(objectType, parentType);
|
248
|
+
}
|
249
|
+
}
|
324
250
|
|
325
|
-
emit
|
251
|
+
emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
|
326
252
|
}
|
327
253
|
|
328
254
|
/// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
|
@@ -355,32 +281,31 @@ contract Registry is
|
|
355
281
|
|
356
282
|
/// @dev protocol registration used to anchor the dip ecosystem relations
|
357
283
|
function _registerProtocol()
|
358
|
-
|
284
|
+
private
|
359
285
|
{
|
360
286
|
uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
|
361
287
|
NftId protocolNftId = toNftId(protocolId);
|
362
288
|
|
363
|
-
|
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
|
+
});
|
364
298
|
|
365
|
-
|
366
|
-
protocolNftId,
|
367
|
-
zeroNftId(), // parent
|
368
|
-
PROTOCOL(),
|
369
|
-
false, // isInterceptor
|
370
|
-
address(0), // objectAddress
|
371
|
-
NFT_LOCK_ADDRESS,// initialOwner
|
372
|
-
""
|
373
|
-
);
|
299
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
|
374
300
|
}
|
375
301
|
|
376
302
|
/// @dev registry registration
|
377
303
|
/// might also register the global registry when not on mainnet
|
378
|
-
function _registerRegistry(
|
379
|
-
|
304
|
+
function _registerRegistry()
|
305
|
+
private
|
380
306
|
{
|
381
|
-
uint256 registryId = _chainNft.calculateTokenId(
|
307
|
+
uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
|
382
308
|
NftId registryNftId = toNftId(registryId);
|
383
|
-
|
384
309
|
NftId parentNftId;
|
385
310
|
|
386
311
|
if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
|
@@ -393,68 +318,39 @@ contract Registry is
|
|
393
318
|
parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
|
394
319
|
}
|
395
320
|
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
""
|
406
|
-
);
|
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
|
+
});
|
407
330
|
_nftIdByAddress[address(this)] = registryNftId;
|
408
331
|
_registryNftId = registryNftId;
|
409
|
-
}
|
410
332
|
|
333
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, registryId);
|
334
|
+
}
|
411
335
|
|
412
336
|
/// @dev global registry registration for non mainnet registries
|
413
337
|
function _registerGlobalRegistry()
|
414
|
-
|
338
|
+
private
|
415
339
|
{
|
416
340
|
uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
|
417
|
-
|
418
|
-
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
419
|
-
|
420
341
|
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
421
342
|
|
422
|
-
_info[globalRegistryNftId] = ObjectInfo(
|
423
|
-
globalRegistryNftId,
|
424
|
-
toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
425
|
-
REGISTRY(),
|
426
|
-
false,
|
427
|
-
address(0),
|
428
|
-
NFT_LOCK_ADDRESS,
|
429
|
-
""
|
430
|
-
);
|
431
|
-
}
|
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
|
+
});
|
432
352
|
|
433
|
-
|
434
|
-
internal
|
435
|
-
{
|
436
|
-
uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
|
437
|
-
NftId serviceNftId = toNftId(serviceId);
|
438
|
-
|
439
|
-
_chainNft.mint(registryOwner, serviceId);
|
440
|
-
|
441
|
-
_info[serviceNftId] = ObjectInfo(
|
442
|
-
serviceNftId,
|
443
|
-
_registryNftId,
|
444
|
-
SERVICE(),
|
445
|
-
false, // isInterceptor
|
446
|
-
msg.sender, // service deploys registry
|
447
|
-
registryOwner, // initialOwner,
|
448
|
-
""
|
449
|
-
);
|
450
|
-
|
451
|
-
_nftIdByAddress[msg.sender] = serviceNftId;
|
452
|
-
|
453
|
-
string memory serviceName = "RegistryService";
|
454
|
-
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
455
|
-
_service[serviceNameHash][VersionLib.toVersionPart(GIF_MAJOR_VERSION_AT_DEPLOYMENT)] = msg.sender;
|
456
|
-
_string[serviceNftId] = serviceName;
|
457
|
-
_serviceNftId = serviceNftId;
|
353
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
458
354
|
}
|
459
355
|
|
460
356
|
/// @dev defines which object - parent types relations are allowed to register
|
@@ -464,7 +360,7 @@ contract Registry is
|
|
464
360
|
// 3) DO NOT use REGISTRY as object type
|
465
361
|
// 2) DO NOT use PROTOCOL and "zeroObjectType"
|
466
362
|
function _setupValidObjectParentCombinations()
|
467
|
-
|
363
|
+
private
|
468
364
|
{
|
469
365
|
// registry as parent, ONLY registry owner
|
470
366
|
_isValidContractCombination[TOKEN()][REGISTRY()] = true;
|
@@ -486,4 +382,4 @@ contract Registry is
|
|
486
382
|
_isValidObjectCombination[BUNDLE()][POOL()] = true;
|
487
383
|
_isValidObjectCombination[STAKE()][POOL()] = true;
|
488
384
|
}
|
489
|
-
}
|
385
|
+
}
|