@etherisc/gif-next 0.0.2-aad7ee0-660 → 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 +67 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +139 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +149 -15
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +101 -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 +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 +181 -16
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +157 -56
- 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} +74 -3
- 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 +1373 -93
- 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 +195 -155
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +57 -47
- 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 +177 -38
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +378 -67
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +145 -17
- 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 +49 -9
- 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 +90 -36
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +20 -20
- 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 +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +705 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +428 -0
- 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 +197 -68
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +187 -83
- 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 +197 -182
- 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 +31 -97
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -91
- 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 +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +397 -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/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 +4 -4
- 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/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- 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/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
- 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/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/BaseComponent.sol +57 -11
- package/contracts/components/Distribution.sol +15 -18
- package/contracts/components/IBaseComponent.sol +7 -0
- package/contracts/components/IDistributionComponent.sol +1 -0
- package/contracts/components/IPoolComponent.sol +5 -1
- package/contracts/components/Pool.sol +43 -31
- package/contracts/components/Product.sol +42 -47
- 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 +34 -7
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +7 -3
- package/contracts/instance/Instance.sol +54 -32
- package/contracts/instance/InstanceAccessManager.sol +6 -6
- package/contracts/instance/InstanceBase.sol +41 -0
- package/contracts/instance/InstanceReader.sol +26 -1
- package/contracts/instance/InstanceService.sol +229 -68
- package/contracts/instance/InstanceServiceManager.sol +8 -6
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +45 -12
- package/contracts/instance/module/IBundle.sol +1 -0
- package/contracts/instance/module/ISetup.sol +3 -0
- 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 +53 -12
- 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 +122 -0
- package/contracts/instance/service/PoolServiceManager.sol +55 -0
- 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 +25 -6
- package/contracts/registry/IRegistryService.sol +36 -13
- package/contracts/registry/Registry.sol +165 -203
- package/contracts/registry/RegistryAccessManager.sol +207 -0
- package/contracts/registry/RegistryService.sol +83 -197
- package/contracts/registry/RegistryServiceManager.sol +20 -22
- package/contracts/registry/ReleaseManager.sol +382 -0
- package/contracts/registry/TokenRegistry.sol +110 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/shared/IService.sol +2 -1
- package/contracts/shared/NftOwnable.sol +2 -4
- package/contracts/shared/ProxyManager.sol +1 -1
- package/contracts/shared/Registerable.sol +1 -0
- 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 +14 -5
- package/contracts/types/Version.sol +4 -1
- 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 -122
- package/contracts/instance/AccessManagerSimple.sol +0 -692
@@ -1,99 +1,82 @@
|
|
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
|
-
import {Version, VersionPart, VersionLib} from "../types/Version.sol";
|
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,
|
29
31
|
IRegistry
|
30
32
|
{
|
31
|
-
|
32
|
-
error NotRegistryService();
|
33
|
-
error ZeroParentAddress();
|
34
|
-
error ContractAlreadyRegistered(address objectAddress);
|
35
|
-
error InvalidServiceVersion(VersionPart majorVersion);
|
36
|
-
error ServiceNameAlreadyRegistered(string name, VersionPart majorVersion);
|
37
|
-
|
38
|
-
// approve
|
39
|
-
error NotOwner();
|
40
|
-
error NotRegisteredContract(NftId registrarNftId);
|
41
|
-
error NotService(NftId registrarNftId);
|
42
|
-
error InvalidTypesCombination(ObjectType objectType, ObjectType parentType);
|
43
|
-
|
44
|
-
uint256 public constant MAJOR_VERSION_MIN = 3;
|
33
|
+
uint256 public constant GIF_MAJOR_VERSION_AT_DEPLOYMENT = 3;
|
45
34
|
address public constant NFT_LOCK_ADDRESS = address(0x1);
|
35
|
+
uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
|
46
36
|
uint256 public constant REGISTRY_SERVICE_TOKEN_SEQUENCE_ID = 3;
|
47
37
|
string public constant EMPTY_URI = "";
|
48
38
|
|
49
39
|
mapping(NftId nftId => ObjectInfo info) internal _info;
|
50
40
|
mapping(address object => NftId nftId) internal _nftIdByAddress;
|
51
41
|
|
52
|
-
mapping(NftId registrator => mapping(
|
53
|
-
ObjectType objectType => bool)) internal _isApproved;
|
54
|
-
|
55
42
|
mapping(ObjectType objectType => mapping(
|
56
43
|
ObjectType parentType => bool)) internal _isValidContractCombination;
|
57
44
|
|
58
45
|
mapping(ObjectType objectType => mapping(
|
59
46
|
ObjectType parentType => bool)) internal _isValidObjectCombination;
|
60
47
|
|
61
|
-
mapping(NftId nftId => string name) internal _string;
|
62
|
-
mapping(bytes32 serviceNameHash => mapping(
|
63
|
-
VersionPart majorVersion => address service)) internal _service;
|
64
|
-
|
65
48
|
NftId internal _registryNftId;
|
66
|
-
NftId internal _serviceNftId; // set in stone upon registry creation
|
67
49
|
ChainNft internal _chainNft;
|
68
50
|
|
51
|
+
ReleaseManager internal _releaseManager;
|
69
52
|
|
70
|
-
modifier
|
71
|
-
if(msg.sender
|
72
|
-
revert
|
53
|
+
modifier onlyRegistryService() {
|
54
|
+
if(!_releaseManager.isActiveRegistryService(msg.sender)) {
|
55
|
+
revert CallerNotRegistryService();
|
73
56
|
}
|
74
57
|
_;
|
75
58
|
}
|
76
59
|
|
77
|
-
modifier
|
78
|
-
|
79
|
-
|
80
|
-
revert NotRegistryService();
|
60
|
+
modifier onlyReleaseManager() {
|
61
|
+
if(msg.sender != address(_releaseManager)) {
|
62
|
+
revert CallerNotReleaseManager();
|
81
63
|
}
|
82
64
|
_;
|
83
65
|
}
|
84
66
|
|
85
|
-
constructor(address
|
67
|
+
constructor(address releaseManager, VersionPart initialVersion)
|
86
68
|
{
|
87
|
-
require(
|
88
|
-
require(
|
69
|
+
require(releaseManager > address(0), "Registry: release manager is 0");
|
70
|
+
require(initialVersion.toInt() > 0, "Registry: initial version is 0");
|
71
|
+
|
72
|
+
_releaseManager = ReleaseManager(releaseManager);
|
89
73
|
|
90
74
|
// deploy NFT
|
91
75
|
_chainNft = new ChainNft(address(this));// adds 10kb to deployment size
|
92
76
|
|
93
77
|
// initial registry setup
|
94
78
|
_registerProtocol();
|
95
|
-
_registerRegistry(
|
96
|
-
_registerRegistryService(registryOwner);
|
79
|
+
_registerRegistry();
|
97
80
|
|
98
81
|
// set object parent relations
|
99
82
|
_setupValidObjectParentCombinations();
|
@@ -101,80 +84,62 @@ contract Registry is
|
|
101
84
|
_registerInterface(type(IRegistry).interfaceId);
|
102
85
|
}
|
103
86
|
|
104
|
-
|
105
|
-
|
106
|
-
|
87
|
+
function registerService(ObjectInfo memory info)
|
88
|
+
external
|
89
|
+
onlyReleaseManager
|
90
|
+
returns(NftId nftId)
|
91
|
+
{
|
92
|
+
/* must be guaranteed by release manager
|
93
|
+
if(info.objectType != SERVICE()) {
|
94
|
+
revert();
|
95
|
+
}
|
96
|
+
info.initialOwner = NFT_LOCK_ADDRESS <- if services are access managed
|
97
|
+
*/
|
98
|
+
nftId = _register(info);
|
99
|
+
}
|
100
|
+
|
107
101
|
function register(ObjectInfo memory info)
|
108
102
|
external
|
109
103
|
onlyRegistryService
|
110
104
|
returns(NftId nftId)
|
111
105
|
{
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
ObjectType parentType = parentInfo.objectType; // see function header
|
116
|
-
address parentAddress = parentInfo.objectAddress;
|
117
|
-
|
118
|
-
// parent is contract -> need to check? -> check before minting
|
119
|
-
// special case: global registry nft as parent when not on mainnet -> global registry address is 0
|
120
|
-
// special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
|
121
|
-
// special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
|
122
|
-
if(parentAddress == address(0)) {
|
123
|
-
revert ZeroParentAddress();
|
106
|
+
// no service registrations
|
107
|
+
if(info.objectType == SERVICE()) {
|
108
|
+
revert ServiceRegistration();
|
124
109
|
}
|
125
110
|
|
126
|
-
|
127
|
-
|
128
|
-
// TODO does external call
|
129
|
-
uint256 mintedTokenId = _chainNft.mint(
|
130
|
-
info.initialOwner,
|
131
|
-
interceptor,
|
132
|
-
EMPTY_URI);
|
133
|
-
nftId = toNftId(mintedTokenId);
|
134
|
-
|
135
|
-
// TODO move nftId out of info struct
|
136
|
-
// getters by nftId -> return struct without nftId
|
137
|
-
// getters by address -> return nftId AND struct
|
138
|
-
info.nftId = nftId;
|
139
|
-
_info[nftId] = info;
|
140
|
-
|
141
|
-
if(info.objectAddress > address(0))
|
142
|
-
{
|
143
|
-
// TODO if need to add types latter -> at least call this check from registry service
|
144
|
-
// parent is registered + object-parent types are valid
|
145
|
-
if(_isValidContractCombination[objectType][parentType] == false) {
|
146
|
-
revert InvalidTypesCombination(objectType, parentType);
|
147
|
-
}
|
148
|
-
|
149
|
-
address contractAddress = info.objectAddress;
|
150
|
-
|
151
|
-
if(_nftIdByAddress[contractAddress].gtz()) {
|
152
|
-
revert ContractAlreadyRegistered(contractAddress);
|
153
|
-
}
|
111
|
+
nftId = _register(info);
|
112
|
+
}
|
154
113
|
|
155
|
-
|
114
|
+
/// @dev earliest GIF major version
|
115
|
+
function getMajorVersionMin() external view returns (VersionPart) {
|
116
|
+
return _releaseManager.getInitialVersion();
|
117
|
+
}
|
156
118
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
}
|
119
|
+
// TODO make distinction between active an not yet active version
|
120
|
+
// need to be thought trough, not yet clear if necessary
|
121
|
+
// need to answer question: what is the latest version during the upgrade process?
|
122
|
+
// likely setting up a new gif version does not fit into a single tx
|
123
|
+
// in this case we might want to have a period where the latest version is
|
124
|
+
// in the process of being set up while the latest active version is 1 major release smaller
|
125
|
+
/// @dev latest GIF major version (might not yet be active)
|
126
|
+
function getMajorVersionMax() external view returns (VersionPart) {
|
127
|
+
return _releaseManager.getNextVersion();
|
128
|
+
}
|
168
129
|
|
169
|
-
|
130
|
+
/// @dev latest active GIF release version
|
131
|
+
function getMajorVersion() external view returns (VersionPart) {
|
132
|
+
return _releaseManager.getLatestVersion();
|
170
133
|
}
|
171
134
|
|
172
|
-
// from IRegistry
|
173
135
|
function getObjectCount() external view override returns (uint256) {
|
174
|
-
|
175
136
|
return _chainNft.totalSupply();
|
176
137
|
}
|
177
138
|
|
139
|
+
function getNftId() external view returns (NftId nftId) {
|
140
|
+
return _registryNftId;
|
141
|
+
}
|
142
|
+
|
178
143
|
function getNftId(address object) external view override returns (NftId id) {
|
179
144
|
return _nftIdByAddress[object];
|
180
145
|
}
|
@@ -184,7 +149,6 @@ contract Registry is
|
|
184
149
|
}
|
185
150
|
|
186
151
|
function ownerOf(address contractAddress) public view returns (address) {
|
187
|
-
|
188
152
|
return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
|
189
153
|
}
|
190
154
|
|
@@ -193,7 +157,6 @@ contract Registry is
|
|
193
157
|
}
|
194
158
|
|
195
159
|
function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
|
196
|
-
|
197
160
|
return _info[_nftIdByAddress[object]];
|
198
161
|
}
|
199
162
|
|
@@ -205,18 +168,16 @@ contract Registry is
|
|
205
168
|
return _nftIdByAddress[object].gtz();
|
206
169
|
}
|
207
170
|
|
208
|
-
function
|
209
|
-
return
|
171
|
+
function isRegisteredService(address object) external view override returns (bool) {
|
172
|
+
return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
|
210
173
|
}
|
211
174
|
|
212
|
-
// special case to retrive a gif service
|
213
175
|
function getServiceAddress(
|
214
|
-
|
215
|
-
VersionPart
|
176
|
+
ObjectType serviceType,
|
177
|
+
VersionPart releaseVersion
|
216
178
|
) external view returns (address)
|
217
179
|
{
|
218
|
-
|
219
|
-
return _service[serviceNameHash][majorVersion];
|
180
|
+
return _releaseManager.getService(releaseVersion, serviceType);
|
220
181
|
}
|
221
182
|
|
222
183
|
function getChainNft() external view override returns (ChainNft) {
|
@@ -229,34 +190,65 @@ contract Registry is
|
|
229
190
|
|
230
191
|
// Internals
|
231
192
|
|
232
|
-
|
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)
|
233
196
|
internal
|
197
|
+
returns(NftId nftId)
|
234
198
|
{
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
//
|
242
|
-
//
|
243
|
-
//
|
244
|
-
|
245
|
-
|
246
|
-
(
|
247
|
-
_service[serviceNameHash][VersionLib.toVersionPart(majorVersion.toInt() - 1)] == address(0) )
|
248
|
-
) {
|
249
|
-
revert InvalidServiceVersion(majorVersion);
|
250
|
-
}
|
251
|
-
|
252
|
-
if(_service[serviceNameHash][majorVersion] != address(0)) {
|
253
|
-
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();
|
254
211
|
}
|
255
212
|
|
256
|
-
|
257
|
-
|
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
|
+
}
|
258
250
|
|
259
|
-
emit
|
251
|
+
emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
|
260
252
|
}
|
261
253
|
|
262
254
|
/// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
|
@@ -289,32 +281,31 @@ contract Registry is
|
|
289
281
|
|
290
282
|
/// @dev protocol registration used to anchor the dip ecosystem relations
|
291
283
|
function _registerProtocol()
|
292
|
-
|
284
|
+
private
|
293
285
|
{
|
294
286
|
uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
|
295
287
|
NftId protocolNftId = toNftId(protocolId);
|
296
288
|
|
297
|
-
|
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
|
+
});
|
298
298
|
|
299
|
-
|
300
|
-
protocolNftId,
|
301
|
-
zeroNftId(), // parent
|
302
|
-
PROTOCOL(),
|
303
|
-
false, // isInterceptor
|
304
|
-
address(0), // objectAddress
|
305
|
-
NFT_LOCK_ADDRESS,// initialOwner
|
306
|
-
""
|
307
|
-
);
|
299
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
|
308
300
|
}
|
309
301
|
|
310
302
|
/// @dev registry registration
|
311
303
|
/// might also register the global registry when not on mainnet
|
312
|
-
function _registerRegistry(
|
313
|
-
|
304
|
+
function _registerRegistry()
|
305
|
+
private
|
314
306
|
{
|
315
|
-
uint256 registryId = _chainNft.calculateTokenId(
|
307
|
+
uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
|
316
308
|
NftId registryNftId = toNftId(registryId);
|
317
|
-
|
318
309
|
NftId parentNftId;
|
319
310
|
|
320
311
|
if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
|
@@ -327,68 +318,39 @@ contract Registry is
|
|
327
318
|
parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
|
328
319
|
}
|
329
320
|
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
""
|
340
|
-
);
|
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
|
+
});
|
341
330
|
_nftIdByAddress[address(this)] = registryNftId;
|
342
331
|
_registryNftId = registryNftId;
|
343
|
-
}
|
344
332
|
|
333
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, registryId);
|
334
|
+
}
|
345
335
|
|
346
336
|
/// @dev global registry registration for non mainnet registries
|
347
337
|
function _registerGlobalRegistry()
|
348
|
-
|
338
|
+
private
|
349
339
|
{
|
350
340
|
uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
|
351
|
-
|
352
|
-
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
353
|
-
|
354
341
|
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
355
342
|
|
356
|
-
_info[globalRegistryNftId] = ObjectInfo(
|
357
|
-
globalRegistryNftId,
|
358
|
-
toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
359
|
-
REGISTRY(),
|
360
|
-
false,
|
361
|
-
address(0),
|
362
|
-
NFT_LOCK_ADDRESS,
|
363
|
-
""
|
364
|
-
);
|
365
|
-
}
|
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
|
+
});
|
366
352
|
|
367
|
-
|
368
|
-
internal
|
369
|
-
{
|
370
|
-
uint256 serviceId = _chainNft.calculateTokenId(REGISTRY_SERVICE_TOKEN_SEQUENCE_ID);
|
371
|
-
NftId serviceNftId = toNftId(serviceId);
|
372
|
-
|
373
|
-
_chainNft.mint(registryOwner, serviceId);
|
374
|
-
|
375
|
-
_info[serviceNftId] = ObjectInfo(
|
376
|
-
serviceNftId,
|
377
|
-
_registryNftId,
|
378
|
-
SERVICE(),
|
379
|
-
false, // isInterceptor
|
380
|
-
msg.sender, // service deploys registry
|
381
|
-
registryOwner, // initialOwner,
|
382
|
-
""
|
383
|
-
);
|
384
|
-
|
385
|
-
_nftIdByAddress[msg.sender] = serviceNftId;
|
386
|
-
|
387
|
-
string memory serviceName = "RegistryService";
|
388
|
-
bytes32 serviceNameHash = keccak256(abi.encode(serviceName));
|
389
|
-
_service[serviceNameHash][VersionLib.toVersionPart(MAJOR_VERSION_MIN)] = msg.sender;
|
390
|
-
_string[serviceNftId] = serviceName;
|
391
|
-
_serviceNftId = serviceNftId;
|
353
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
392
354
|
}
|
393
355
|
|
394
356
|
/// @dev defines which object - parent types relations are allowed to register
|
@@ -398,7 +360,7 @@ contract Registry is
|
|
398
360
|
// 3) DO NOT use REGISTRY as object type
|
399
361
|
// 2) DO NOT use PROTOCOL and "zeroObjectType"
|
400
362
|
function _setupValidObjectParentCombinations()
|
401
|
-
|
363
|
+
private
|
402
364
|
{
|
403
365
|
// registry as parent, ONLY registry owner
|
404
366
|
_isValidContractCombination[TOKEN()][REGISTRY()] = true;
|
@@ -420,4 +382,4 @@ contract Registry is
|
|
420
382
|
_isValidObjectCombination[BUNDLE()][POOL()] = true;
|
421
383
|
_isValidObjectCombination[STAKE()][POOL()] = true;
|
422
384
|
}
|
423
|
-
}
|
385
|
+
}
|