@etherisc/gif-next 0.0.2-e4b632c-016 → 0.0.2-e545d2c-624
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 +168 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +156 -91
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +130 -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 +188 -120
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +164 -143
- 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/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1463 -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 +104 -14
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +153 -660
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +243 -126
- 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 +268 -60
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +52 -24
- 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 +60 -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/IAccess.sol/IAccess.json +59 -16
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1031 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +436 -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 +118 -29
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +18 -26
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +720 -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 +771 -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 +1156 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +492 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +420 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -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 +263 -63
- 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 +233 -192
- 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 +530 -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 +87 -14
- package/contracts/components/Distribution.sol +17 -19
- package/contracts/components/IBaseComponent.sol +10 -0
- package/contracts/components/IDistributionComponent.sol +1 -0
- package/contracts/components/IPoolComponent.sol +5 -1
- package/contracts/components/Pool.sol +45 -32
- package/contracts/components/Product.sol +52 -48
- 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 +36 -7
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +13 -3
- package/contracts/instance/Instance.sol +56 -226
- package/contracts/instance/InstanceAccessManager.sol +93 -78
- package/contracts/instance/InstanceBase.sol +41 -0
- package/contracts/instance/InstanceReader.sol +26 -1
- package/contracts/instance/InstanceService.sol +278 -71
- package/contracts/instance/InstanceServiceManager.sol +10 -12
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +50 -13
- package/contracts/instance/module/IAccess.sol +27 -17
- package/contracts/instance/module/IBundle.sol +1 -0
- package/contracts/instance/module/ISetup.sol +3 -0
- package/contracts/instance/service/BundleService.sol +294 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ComponentOwnerService.sol +4 -6
- package/contracts/instance/service/DistributionService.sol +64 -14
- package/contracts/instance/service/DistributionServiceManager.sol +11 -13
- package/contracts/instance/service/IBundleService.sol +44 -0
- package/contracts/instance/service/IPolicyService.sol +94 -0
- package/contracts/instance/service/IPoolService.sol +6 -23
- package/contracts/instance/service/IProductService.sol +6 -73
- package/contracts/instance/service/PolicyService.sol +539 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +145 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +213 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +39 -6
- package/contracts/registry/IRegistryService.sol +36 -13
- package/contracts/registry/Registry.sol +172 -199
- package/contracts/registry/RegistryAccessManager.sol +210 -0
- package/contracts/registry/RegistryService.sol +78 -202
- package/contracts/registry/RegistryServiceManager.sol +20 -22
- package/contracts/registry/ReleaseManager.sol +342 -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 -6
- 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/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- package/contracts/instance/AccessManagedSimple.sol +0 -122
- package/contracts/instance/AccessManagerSimple.sol +0 -692
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
@@ -1,56 +1,39 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IRegisterable} from "../shared/IRegisterable.sol";
|
5
|
-
import {IService} from "../shared/IService.sol";
|
6
4
|
|
7
|
-
import {
|
8
|
-
import {
|
9
|
-
import {NftId, toNftId, zeroNftId, NftIdLib} from "../types/NftId.sol";
|
10
|
-
import {Version, VersionPart, VersionLib} from "../types/Version.sol";
|
5
|
+
import {NftId, toNftId, zeroNftId} from "../types/NftId.sol";
|
6
|
+
import {VersionPart} from "../types/Version.sol";
|
11
7
|
import {ObjectType, PROTOCOL, REGISTRY, TOKEN, SERVICE, INSTANCE, STAKE, PRODUCT, DISTRIBUTION, ORACLE, POOL, POLICY, BUNDLE} from "../types/ObjectType.sol";
|
12
|
-
import {ITransferInterceptor} from "./ITransferInterceptor.sol";
|
13
8
|
|
14
9
|
import {ERC165} from "../shared/ERC165.sol";
|
15
10
|
|
11
|
+
import {ChainNft} from "./ChainNft.sol";
|
12
|
+
import {IRegistry} from "./IRegistry.sol";
|
13
|
+
import {ReleaseManager} from "./ReleaseManager.sol";
|
16
14
|
|
17
15
|
// IMPORTANT
|
18
16
|
// Each NFT minted by registry is accosiated with:
|
19
17
|
// 1) NFT owner
|
20
18
|
// 2) registred contract OR object stored in registered (parent) contract
|
21
19
|
// Four registration flows:
|
22
|
-
// 1)
|
23
|
-
// 2)
|
24
|
-
// 3) IRegisterable address by
|
25
|
-
// 4) state object by
|
20
|
+
// 1) IService address by release manager (SERVICE of domain SERVICE aka registry service aka release creation)
|
21
|
+
// 2) IService address by release manager (SERVICE of domain !SERVICE aka regular service)
|
22
|
+
// 3) IRegisterable address by regular service (INSTANCE, PRODUCT, POOL, DISTRIBUTION, ORACLE)
|
23
|
+
// 4) state object by regular service (POLICY, BUNDLE, STAKE)
|
26
24
|
|
27
25
|
contract Registry is
|
28
26
|
ERC165,
|
29
27
|
IRegistry
|
30
28
|
{
|
31
|
-
// register
|
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;
|
45
29
|
address public constant NFT_LOCK_ADDRESS = address(0x1);
|
46
|
-
uint256 public constant
|
30
|
+
uint256 public constant REGISTRY_TOKEN_SEQUENCE_ID = 2;
|
47
31
|
string public constant EMPTY_URI = "";
|
48
32
|
|
49
33
|
mapping(NftId nftId => ObjectInfo info) internal _info;
|
50
34
|
mapping(address object => NftId nftId) internal _nftIdByAddress;
|
51
35
|
|
52
|
-
mapping(
|
53
|
-
ObjectType objectType => bool)) internal _isApproved;
|
36
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
|
54
37
|
|
55
38
|
mapping(ObjectType objectType => mapping(
|
56
39
|
ObjectType parentType => bool)) internal _isValidContractCombination;
|
@@ -58,42 +41,35 @@ contract Registry is
|
|
58
41
|
mapping(ObjectType objectType => mapping(
|
59
42
|
ObjectType parentType => bool)) internal _isValidObjectCombination;
|
60
43
|
|
61
|
-
mapping(NftId nftId => string name) internal _string;
|
62
|
-
mapping(bytes32 serviceNameHash => mapping(
|
63
|
-
VersionPart majorVersion => address service)) internal _service;
|
64
|
-
|
65
44
|
NftId internal _registryNftId;
|
66
|
-
NftId internal _serviceNftId; // set in stone upon registry creation
|
67
45
|
ChainNft internal _chainNft;
|
68
46
|
|
47
|
+
ReleaseManager internal _releaseManager;
|
69
48
|
|
70
|
-
modifier
|
71
|
-
if(msg.sender
|
72
|
-
revert
|
49
|
+
modifier onlyRegistryService() {
|
50
|
+
if(!_releaseManager.isActiveRegistryService(msg.sender)) {
|
51
|
+
revert CallerNotRegistryService();
|
73
52
|
}
|
74
53
|
_;
|
75
54
|
}
|
76
55
|
|
77
|
-
modifier
|
78
|
-
|
79
|
-
|
80
|
-
revert NotRegistryService();
|
56
|
+
modifier onlyReleaseManager() {
|
57
|
+
if(msg.sender != address(_releaseManager)) {
|
58
|
+
revert CallerNotReleaseManager();
|
81
59
|
}
|
82
60
|
_;
|
83
61
|
}
|
84
62
|
|
85
|
-
constructor(
|
63
|
+
constructor()
|
86
64
|
{
|
87
|
-
|
88
|
-
require(majorVersion.toInt() == MAJOR_VERSION_MIN, "Registry: initial major version of registry service is not MAJOR_VERSION_MIN");
|
65
|
+
_releaseManager = ReleaseManager(msg.sender);
|
89
66
|
|
90
67
|
// deploy NFT
|
91
68
|
_chainNft = new ChainNft(address(this));// adds 10kb to deployment size
|
92
69
|
|
93
70
|
// initial registry setup
|
94
71
|
_registerProtocol();
|
95
|
-
_registerRegistry(
|
96
|
-
_registerRegistryService(registryOwner);
|
72
|
+
_registerRegistry();
|
97
73
|
|
98
74
|
// set object parent relations
|
99
75
|
_setupValidObjectParentCombinations();
|
@@ -101,80 +77,80 @@ contract Registry is
|
|
101
77
|
_registerInterface(type(IRegistry).interfaceId);
|
102
78
|
}
|
103
79
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
80
|
+
function registerService(
|
81
|
+
ObjectInfo memory info,
|
82
|
+
VersionPart version,
|
83
|
+
ObjectType domain
|
84
|
+
)
|
108
85
|
external
|
109
|
-
|
86
|
+
onlyReleaseManager
|
110
87
|
returns(NftId nftId)
|
111
88
|
{
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
89
|
+
/* must be guaranteed by release manager
|
90
|
+
if(info.objectType != SERVICE()) {
|
91
|
+
revert();
|
92
|
+
}
|
93
|
+
info.initialOwner = NFT_LOCK_ADDRESS <- if services are access managed
|
94
|
+
*/
|
117
95
|
|
118
|
-
|
119
|
-
|
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();
|
96
|
+
if(_service[version][domain] > address(0)) {
|
97
|
+
revert ServiceAlreadyRegistered(info.objectAddress);
|
124
98
|
}
|
125
99
|
|
126
|
-
|
100
|
+
_service[version][domain] = info.objectAddress; // nftId;
|
127
101
|
|
128
|
-
|
129
|
-
uint256 mintedTokenId = _chainNft.mint(
|
130
|
-
info.initialOwner,
|
131
|
-
interceptor,
|
132
|
-
EMPTY_URI);
|
133
|
-
nftId = toNftId(mintedTokenId);
|
102
|
+
nftId = _register(info);
|
134
103
|
|
135
|
-
|
136
|
-
|
137
|
-
// getters by address -> return nftId AND struct
|
138
|
-
info.nftId = nftId;
|
139
|
-
_info[nftId] = info;
|
104
|
+
emit LogServiceRegistration(version, domain);
|
105
|
+
}
|
140
106
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
107
|
+
function register(ObjectInfo memory info)
|
108
|
+
external
|
109
|
+
onlyRegistryService
|
110
|
+
returns(NftId nftId)
|
111
|
+
{
|
112
|
+
// no service registrations
|
113
|
+
if(info.objectType == SERVICE()) {
|
114
|
+
revert ServiceRegistration();
|
115
|
+
}
|
148
116
|
|
149
|
-
|
117
|
+
nftId = _register(info);
|
118
|
+
}
|
150
119
|
|
151
|
-
|
152
|
-
|
153
|
-
|
120
|
+
/// @dev earliest GIF major version
|
121
|
+
function getMajorVersionMin() external view returns (VersionPart) {
|
122
|
+
return _releaseManager.getInitialVersion();
|
123
|
+
}
|
154
124
|
|
155
|
-
|
125
|
+
// TODO make distinction between active an not yet active version
|
126
|
+
// need to be thought trough, not yet clear if necessary
|
127
|
+
// need to answer question: what is the latest version during the upgrade process?
|
128
|
+
// likely setting up a new gif version does not fit into a single tx
|
129
|
+
// in this case we might want to have a period where the latest version is
|
130
|
+
// in the process of being set up while the latest active version is 1 major release smaller
|
131
|
+
/// @dev latest GIF major version (might not yet be active)
|
132
|
+
function getMajorVersionMax() external view returns (VersionPart) {
|
133
|
+
return _releaseManager.getNextVersion();
|
134
|
+
}
|
156
135
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
}
|
162
|
-
else
|
163
|
-
{
|
164
|
-
if(_isValidObjectCombination[objectType][parentType] == false) {
|
165
|
-
revert InvalidTypesCombination(objectType, parentType);
|
166
|
-
}
|
167
|
-
}
|
136
|
+
/// @dev latest active GIF release version
|
137
|
+
function getMajorVersion() external view returns (VersionPart) {
|
138
|
+
return _releaseManager.getLatestVersion();
|
139
|
+
}
|
168
140
|
|
169
|
-
|
141
|
+
function getReleaseInfo(VersionPart version) external view returns (ReleaseInfo memory)
|
142
|
+
{
|
143
|
+
return _releaseManager.getReleaseInfo(version);
|
170
144
|
}
|
171
145
|
|
172
|
-
// from IRegistry
|
173
146
|
function getObjectCount() external view override returns (uint256) {
|
174
|
-
|
175
147
|
return _chainNft.totalSupply();
|
176
148
|
}
|
177
149
|
|
150
|
+
function getNftId() external view returns (NftId nftId) {
|
151
|
+
return _registryNftId;
|
152
|
+
}
|
153
|
+
|
178
154
|
function getNftId(address object) external view override returns (NftId id) {
|
179
155
|
return _nftIdByAddress[object];
|
180
156
|
}
|
@@ -184,7 +160,6 @@ contract Registry is
|
|
184
160
|
}
|
185
161
|
|
186
162
|
function ownerOf(address contractAddress) public view returns (address) {
|
187
|
-
|
188
163
|
return _chainNft.ownerOf(_nftIdByAddress[contractAddress].toInt());
|
189
164
|
}
|
190
165
|
|
@@ -193,7 +168,6 @@ contract Registry is
|
|
193
168
|
}
|
194
169
|
|
195
170
|
function getObjectInfo(address object) external view override returns (ObjectInfo memory) {
|
196
|
-
|
197
171
|
return _info[_nftIdByAddress[object]];
|
198
172
|
}
|
199
173
|
|
@@ -205,18 +179,16 @@ contract Registry is
|
|
205
179
|
return _nftIdByAddress[object].gtz();
|
206
180
|
}
|
207
181
|
|
208
|
-
function
|
209
|
-
return
|
182
|
+
function isRegisteredService(address object) external view override returns (bool) {
|
183
|
+
return _nftIdByAddress[object].gtz() && _info[_nftIdByAddress[object]].objectType == SERVICE();
|
210
184
|
}
|
211
185
|
|
212
|
-
// special case to retrive a gif service
|
213
186
|
function getServiceAddress(
|
214
|
-
|
215
|
-
VersionPart
|
187
|
+
ObjectType serviceDomain,
|
188
|
+
VersionPart releaseVersion
|
216
189
|
) external view returns (address)
|
217
190
|
{
|
218
|
-
|
219
|
-
return _service[serviceNameHash][majorVersion];
|
191
|
+
return _service[releaseVersion][serviceDomain];
|
220
192
|
}
|
221
193
|
|
222
194
|
function getChainNft() external view override returns (ChainNft) {
|
@@ -229,34 +201,65 @@ contract Registry is
|
|
229
201
|
|
230
202
|
// Internals
|
231
203
|
|
232
|
-
|
204
|
+
/// @dev registry protects only against tampering existing records, registering with invalid types pairs and 0 parent address
|
205
|
+
// TODO registration of precompile addresses
|
206
|
+
function _register(ObjectInfo memory info)
|
233
207
|
internal
|
208
|
+
returns(NftId nftId)
|
234
209
|
{
|
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);
|
210
|
+
ObjectType objectType = info.objectType;
|
211
|
+
NftId parentNftId = info.parentNftId;
|
212
|
+
ObjectInfo memory parentInfo = _info[parentNftId];
|
213
|
+
ObjectType parentType = parentInfo.objectType; // see function header
|
214
|
+
address parentAddress = parentInfo.objectAddress;
|
215
|
+
|
216
|
+
// parent is contract -> need to check? -> check before minting
|
217
|
+
// special case: global registry nft as parent when not on mainnet -> global registry address is 0
|
218
|
+
// special case: when parentNftId == _chainNft.mint(), check for zero parent address before mint
|
219
|
+
// special case: when parentNftId == _chainNft.mint() && objectAddress == initialOwner
|
220
|
+
if(parentAddress == address(0)) {
|
221
|
+
revert ZeroParentAddress();
|
254
222
|
}
|
255
223
|
|
256
|
-
|
257
|
-
|
224
|
+
address interceptor = _getInterceptor(info.isInterceptor, info.objectAddress, parentInfo.isInterceptor, parentAddress);
|
225
|
+
|
226
|
+
// TODO does external call
|
227
|
+
// compute next nftId, do all checks and stores, mint() at most end...
|
228
|
+
uint256 mintedTokenId = _chainNft.mint(
|
229
|
+
info.initialOwner,
|
230
|
+
interceptor,
|
231
|
+
EMPTY_URI);
|
232
|
+
nftId = toNftId(mintedTokenId);
|
233
|
+
|
234
|
+
// TODO move nftId out of info struct
|
235
|
+
// getters by nftId -> return struct without nftId
|
236
|
+
// getters by address -> return nftId AND struct
|
237
|
+
info.nftId = nftId;
|
238
|
+
_info[nftId] = info;
|
239
|
+
|
240
|
+
if(info.objectAddress > address(0))
|
241
|
+
{
|
242
|
+
// parent is registered + object-parent types are valid
|
243
|
+
if(_isValidContractCombination[objectType][parentType] == false) {
|
244
|
+
revert InvalidTypesCombination(objectType, parentType);
|
245
|
+
}
|
246
|
+
|
247
|
+
address contractAddress = info.objectAddress;
|
248
|
+
|
249
|
+
if(_nftIdByAddress[contractAddress].gtz()) {
|
250
|
+
revert ContractAlreadyRegistered(contractAddress);
|
251
|
+
}
|
252
|
+
|
253
|
+
_nftIdByAddress[contractAddress] = nftId;
|
254
|
+
}
|
255
|
+
else
|
256
|
+
{
|
257
|
+
if(_isValidObjectCombination[objectType][parentType] == false) {
|
258
|
+
revert InvalidTypesCombination(objectType, parentType);
|
259
|
+
}
|
260
|
+
}
|
258
261
|
|
259
|
-
emit
|
262
|
+
emit LogRegistration(nftId, parentNftId, objectType, info.isInterceptor, info.objectAddress, info.initialOwner);
|
260
263
|
}
|
261
264
|
|
262
265
|
/// @dev obtain interceptor address for this nft if applicable, address(0) otherwise
|
@@ -289,32 +292,31 @@ contract Registry is
|
|
289
292
|
|
290
293
|
/// @dev protocol registration used to anchor the dip ecosystem relations
|
291
294
|
function _registerProtocol()
|
292
|
-
|
295
|
+
private
|
293
296
|
{
|
294
297
|
uint256 protocolId = _chainNft.PROTOCOL_NFT_ID();
|
295
298
|
NftId protocolNftId = toNftId(protocolId);
|
296
299
|
|
297
|
-
|
300
|
+
_info[protocolNftId] = ObjectInfo({
|
301
|
+
nftId: protocolNftId,
|
302
|
+
parentNftId: zeroNftId(),
|
303
|
+
objectType: PROTOCOL(),
|
304
|
+
isInterceptor: false,
|
305
|
+
objectAddress: address(0),
|
306
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
307
|
+
data: ""
|
308
|
+
});
|
298
309
|
|
299
|
-
|
300
|
-
protocolNftId,
|
301
|
-
zeroNftId(), // parent
|
302
|
-
PROTOCOL(),
|
303
|
-
false, // isInterceptor
|
304
|
-
address(0), // objectAddress
|
305
|
-
NFT_LOCK_ADDRESS,// initialOwner
|
306
|
-
""
|
307
|
-
);
|
310
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, protocolId);
|
308
311
|
}
|
309
312
|
|
310
313
|
/// @dev registry registration
|
311
314
|
/// might also register the global registry when not on mainnet
|
312
|
-
function _registerRegistry(
|
313
|
-
|
315
|
+
function _registerRegistry()
|
316
|
+
private
|
314
317
|
{
|
315
|
-
uint256 registryId = _chainNft.calculateTokenId(
|
318
|
+
uint256 registryId = _chainNft.calculateTokenId(REGISTRY_TOKEN_SEQUENCE_ID);
|
316
319
|
NftId registryNftId = toNftId(registryId);
|
317
|
-
|
318
320
|
NftId parentNftId;
|
319
321
|
|
320
322
|
if(registryId != _chainNft.GLOBAL_REGISTRY_ID())
|
@@ -327,68 +329,39 @@ contract Registry is
|
|
327
329
|
parentNftId = toNftId(_chainNft.PROTOCOL_NFT_ID());
|
328
330
|
}
|
329
331
|
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
""
|
340
|
-
);
|
332
|
+
_info[registryNftId] = ObjectInfo({
|
333
|
+
nftId: registryNftId,
|
334
|
+
parentNftId: parentNftId,
|
335
|
+
objectType: REGISTRY(),
|
336
|
+
isInterceptor: false,
|
337
|
+
objectAddress: address(this),
|
338
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
339
|
+
data: ""
|
340
|
+
});
|
341
341
|
_nftIdByAddress[address(this)] = registryNftId;
|
342
342
|
_registryNftId = registryNftId;
|
343
|
-
}
|
344
343
|
|
344
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, registryId);
|
345
|
+
}
|
345
346
|
|
346
347
|
/// @dev global registry registration for non mainnet registries
|
347
348
|
function _registerGlobalRegistry()
|
348
|
-
|
349
|
+
private
|
349
350
|
{
|
350
351
|
uint256 globalRegistryId = _chainNft.GLOBAL_REGISTRY_ID();
|
351
|
-
|
352
|
-
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
353
|
-
|
354
352
|
NftId globalRegistryNftId = toNftId(globalRegistryId);
|
355
353
|
|
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
|
-
}
|
354
|
+
_info[globalRegistryNftId] = ObjectInfo({
|
355
|
+
nftId: globalRegistryNftId,
|
356
|
+
parentNftId: toNftId(_chainNft.PROTOCOL_NFT_ID()),
|
357
|
+
objectType: REGISTRY(),
|
358
|
+
isInterceptor: false,
|
359
|
+
objectAddress: address(0),
|
360
|
+
initialOwner: NFT_LOCK_ADDRESS,
|
361
|
+
data: ""
|
362
|
+
});
|
366
363
|
|
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;
|
364
|
+
_chainNft.mint(NFT_LOCK_ADDRESS, globalRegistryId);
|
392
365
|
}
|
393
366
|
|
394
367
|
/// @dev defines which object - parent types relations are allowed to register
|
@@ -398,7 +371,7 @@ contract Registry is
|
|
398
371
|
// 3) DO NOT use REGISTRY as object type
|
399
372
|
// 2) DO NOT use PROTOCOL and "zeroObjectType"
|
400
373
|
function _setupValidObjectParentCombinations()
|
401
|
-
|
374
|
+
private
|
402
375
|
{
|
403
376
|
// registry as parent, ONLY registry owner
|
404
377
|
_isValidContractCombination[TOKEN()][REGISTRY()] = true;
|
@@ -420,4 +393,4 @@ contract Registry is
|
|
420
393
|
_isValidObjectCombination[BUNDLE()][POOL()] = true;
|
421
394
|
_isValidObjectCombination[STAKE()][POOL()] = true;
|
422
395
|
}
|
423
|
-
}
|
396
|
+
}
|