@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
@@ -0,0 +1,207 @@
|
|
1
|
+
// SPDX-License-Identifier: UNLICENSED
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
|
5
|
+
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
6
|
+
|
7
|
+
import {RoleId, RoleIdLib,
|
8
|
+
REGISTRY_SERVICE_MANAGER_ROLE,
|
9
|
+
REGISTRY_SERVICE_ADMIN_ROLE,
|
10
|
+
RELEASE_MANAGER_ROLE} from "../types/RoleId.sol";
|
11
|
+
|
12
|
+
import {TokenRegistry} from "./TokenRegistry.sol";
|
13
|
+
import {ReleaseManager} from "./ReleaseManager.sol";
|
14
|
+
|
15
|
+
/*
|
16
|
+
3 types of roles:
|
17
|
+
1) REGISTRAR roles
|
18
|
+
- each one is unique
|
19
|
+
- always have 1 member
|
20
|
+
- one role is set for each function of each version of registry service
|
21
|
+
2) REGISTRY_SERVICE_MANAGER_ROLE aka GIF_MANAGER_ROLE
|
22
|
+
- can have arbitrary number of members
|
23
|
+
- responsible for services registrations
|
24
|
+
- responsible for token registration and activation
|
25
|
+
3) REGISTRY_SERVICE_ADMIN_ROLE aka GIF_ADMIN_ROLE
|
26
|
+
- admin of REGISTRY_SERVICE_MANAGER_ROLE
|
27
|
+
- MUST have 1 member at any time
|
28
|
+
- granted/revoked ONLY in transferAdminRole() -> consider lock out situations!!!
|
29
|
+
- responsible for release manager initialization
|
30
|
+
- responsible for creation and activation of each release
|
31
|
+
|
32
|
+
*/
|
33
|
+
|
34
|
+
contract RegistryAccessManager is AccessManaged
|
35
|
+
{
|
36
|
+
error NotInitialized();
|
37
|
+
error AlreadyInitialized();
|
38
|
+
|
39
|
+
uint64 public constant UNIQUE_ROLE_ID_MIN = 1000000;
|
40
|
+
|
41
|
+
AccessManager private immutable _accessManager;
|
42
|
+
address private _releaseManager;
|
43
|
+
address private _tokenRegistry;
|
44
|
+
|
45
|
+
uint64 private _idNext; // role id
|
46
|
+
bool private _isInitialized;
|
47
|
+
|
48
|
+
modifier onlyOnce() {
|
49
|
+
if(_isInitialized) {
|
50
|
+
revert AlreadyInitialized();
|
51
|
+
}
|
52
|
+
_;
|
53
|
+
_isInitialized = true;
|
54
|
+
}
|
55
|
+
|
56
|
+
modifier onlyInitialized() {
|
57
|
+
if(!_isInitialized) {
|
58
|
+
revert NotInitialized();
|
59
|
+
}
|
60
|
+
_;
|
61
|
+
}
|
62
|
+
|
63
|
+
constructor(address manager)
|
64
|
+
AccessManaged(msg.sender)
|
65
|
+
{
|
66
|
+
_accessManager = new AccessManager(address(this));
|
67
|
+
setAuthority(address(_accessManager));
|
68
|
+
|
69
|
+
_idNext = UNIQUE_ROLE_ID_MIN;
|
70
|
+
|
71
|
+
_configureAdminRoleInitial();
|
72
|
+
|
73
|
+
address admin = msg.sender;
|
74
|
+
_grantRole(REGISTRY_SERVICE_ADMIN_ROLE(), admin, 0);
|
75
|
+
_grantRole(REGISTRY_SERVICE_MANAGER_ROLE(), manager, 0);
|
76
|
+
}
|
77
|
+
|
78
|
+
function initialize(address releaseManager, address tokenRegistry)
|
79
|
+
external
|
80
|
+
restricted // GIF_ADMIN_ROLE
|
81
|
+
onlyOnce
|
82
|
+
{
|
83
|
+
require(ReleaseManager(releaseManager).authority() == address(_accessManager));
|
84
|
+
//require(tokenRegistry.authority() == address(_accessManager));
|
85
|
+
|
86
|
+
_releaseManager = releaseManager;
|
87
|
+
_tokenRegistry = tokenRegistry;
|
88
|
+
|
89
|
+
_configureAdminRole();
|
90
|
+
_configureManagerRole();
|
91
|
+
_configureReleaseManagerRole();
|
92
|
+
|
93
|
+
_grantRole(RELEASE_MANAGER_ROLE(), releaseManager, 0);
|
94
|
+
}
|
95
|
+
|
96
|
+
// set unique role for target, role forever have 1 member and never revoked
|
97
|
+
function setAndGrantUniqueRole(
|
98
|
+
address account,
|
99
|
+
address target,
|
100
|
+
bytes4[] memory selector
|
101
|
+
)
|
102
|
+
external
|
103
|
+
restricted // RELEASE_MANAGER_ROLE
|
104
|
+
onlyInitialized
|
105
|
+
returns(RoleId)
|
106
|
+
{
|
107
|
+
// TODO questionable check...
|
108
|
+
// target is not part of `runtime`
|
109
|
+
//if(
|
110
|
+
// target == address(this) ||
|
111
|
+
// target == address(_accessManager) ||
|
112
|
+
// target == _releaseManager ||
|
113
|
+
// target == _tokenRegistry)
|
114
|
+
//{ return TargetInvalid(); }
|
115
|
+
|
116
|
+
RoleId roleId = _getNextRoleId();
|
117
|
+
|
118
|
+
_setTargetFunctionRole(target, selector, roleId);
|
119
|
+
_grantRole(roleId, account, 0);
|
120
|
+
}
|
121
|
+
|
122
|
+
/*function transferAdmin(address to)
|
123
|
+
external
|
124
|
+
restricted // only with REGISTRY_SERVICE_ADMIN_ROLE or nft owner
|
125
|
+
{
|
126
|
+
_accessManager.revoke(REGISTRY_SERVICE_ADMIN_ROLE, );
|
127
|
+
_accesssManager.grant(REGISTRY_SERVICE_ADMIN_ROLE, to, 0);
|
128
|
+
}*/
|
129
|
+
|
130
|
+
//--- view functions ----------------------------------------------------//
|
131
|
+
|
132
|
+
function getAccessManager()
|
133
|
+
external
|
134
|
+
view
|
135
|
+
returns (AccessManager)
|
136
|
+
{
|
137
|
+
return _accessManager;
|
138
|
+
}
|
139
|
+
|
140
|
+
//--- private functions -------------------------------------------------//
|
141
|
+
|
142
|
+
function _configureAdminRoleInitial() private
|
143
|
+
{
|
144
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
145
|
+
|
146
|
+
functionSelector[0] = RegistryAccessManager.initialize.selector;
|
147
|
+
_setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
148
|
+
}
|
149
|
+
|
150
|
+
function _configureAdminRole() private
|
151
|
+
{
|
152
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
153
|
+
|
154
|
+
// for RegistryServiceProxyManager
|
155
|
+
// TODO upgrading with releaseManager.upgrade()->proxy.upgrade()???
|
156
|
+
//functionSelector[0] = RegistryServiceManager.upgrade.selector;
|
157
|
+
//_setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
158
|
+
|
159
|
+
// for TokenRegistry
|
160
|
+
|
161
|
+
// for ReleaseManager
|
162
|
+
functionSelector[0] = ReleaseManager.createNextRelease.selector;
|
163
|
+
_setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
164
|
+
//functionSelector[0] = ReleaseManager.activateNextRelease.selector;
|
165
|
+
//_setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
166
|
+
}
|
167
|
+
|
168
|
+
function _configureManagerRole() private
|
169
|
+
{
|
170
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
171
|
+
|
172
|
+
// for TokenRegistry
|
173
|
+
functionSelector[0] = TokenRegistry.setActive.selector;
|
174
|
+
_setTargetFunctionRole(address(_tokenRegistry), functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
|
175
|
+
|
176
|
+
// for ReleaseManager
|
177
|
+
functionSelector[0] = ReleaseManager.registerService.selector;
|
178
|
+
_setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
|
179
|
+
|
180
|
+
// set admin
|
181
|
+
_setRoleAdmin(REGISTRY_SERVICE_MANAGER_ROLE(), REGISTRY_SERVICE_ADMIN_ROLE());
|
182
|
+
}
|
183
|
+
|
184
|
+
function _configureReleaseManagerRole() private
|
185
|
+
{
|
186
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
187
|
+
|
188
|
+
functionSelector[0] = RegistryAccessManager.setAndGrantUniqueRole.selector;
|
189
|
+
_setTargetFunctionRole(address(this), functionSelector, RELEASE_MANAGER_ROLE());
|
190
|
+
}
|
191
|
+
|
192
|
+
function _setTargetFunctionRole(address target, bytes4[] memory selectors, RoleId roleId) private {
|
193
|
+
_accessManager.setTargetFunctionRole(target, selectors, roleId.toInt());
|
194
|
+
}
|
195
|
+
|
196
|
+
function _setRoleAdmin(RoleId roleId, RoleId adminRoleId) private {
|
197
|
+
_accessManager.setRoleAdmin(roleId.toInt(), adminRoleId.toInt());
|
198
|
+
}
|
199
|
+
|
200
|
+
function _grantRole(RoleId roleId, address account, uint32 executionDelay) private {
|
201
|
+
_accessManager.grantRole(roleId.toInt(), account, executionDelay);
|
202
|
+
}
|
203
|
+
|
204
|
+
function _getNextRoleId() private returns(RoleId roleId) {
|
205
|
+
roleId = RoleIdLib.toRoleId(_idNext++);
|
206
|
+
}
|
207
|
+
}
|
@@ -1,17 +1,13 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
4
|
import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
|
6
|
-
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
|
7
5
|
import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
|
8
6
|
|
9
7
|
import {IRegistry} from "./IRegistry.sol";
|
10
8
|
import {IInstance} from "../instance/IInstance.sol";
|
11
9
|
|
12
10
|
import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
13
|
-
// import {IComponent, IComponentModule} from "../../contracts/instance/module/component/IComponent.sol";
|
14
|
-
// import {IPool} from "../../contracts/instance/module/pool/IPoolModule.sol";
|
15
11
|
import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
|
16
12
|
import {IPoolComponent} from "../../contracts/components/IPoolComponent.sol";
|
17
13
|
import {IProductComponent} from "../../contracts/components/IProductComponent.sol";
|
@@ -20,9 +16,10 @@ import {IDistributionComponent} from "../../contracts/components/IDistributionCo
|
|
20
16
|
import {IVersionable} from "../../contracts/shared/IVersionable.sol";
|
21
17
|
import {Versionable} from "../../contracts/shared/Versionable.sol";
|
22
18
|
import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
|
19
|
+
import {Registerable} from "../../contracts/shared/Registerable.sol";
|
23
20
|
|
24
21
|
import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
|
25
|
-
import {ObjectType, REGISTRY,
|
22
|
+
import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, POLICY, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
|
26
23
|
import {StateId, ACTIVE, PAUSED} from "../../contracts/types/StateId.sol";
|
27
24
|
import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
|
28
25
|
import {Fee, FeeLib} from "../../contracts/types/Fee.sol";
|
@@ -32,7 +29,6 @@ import {Service} from "../shared/Service.sol";
|
|
32
29
|
import {IService} from "../shared/IService.sol";
|
33
30
|
import {IRegistryService} from "./IRegistryService.sol";
|
34
31
|
import {Registry} from "./Registry.sol";
|
35
|
-
import {ChainNft} from "./ChainNft.sol";
|
36
32
|
|
37
33
|
contract RegistryService is
|
38
34
|
AccessManagedUpgradeable,
|
@@ -41,116 +37,12 @@ contract RegistryService is
|
|
41
37
|
{
|
42
38
|
using NftIdLib for NftId;
|
43
39
|
|
44
|
-
error SelfRegistration();
|
45
|
-
error NotRegistryOwner();
|
46
|
-
|
47
|
-
error NotToken();
|
48
|
-
error NotService();
|
49
|
-
error NotInstance();
|
50
|
-
error NotProduct();
|
51
|
-
error NotPool();
|
52
|
-
error NotDistribution();
|
53
|
-
|
54
|
-
error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
|
55
|
-
error NotRegisterableOwner(address expectedOwner);
|
56
|
-
error RegisterableOwnerIsZero();
|
57
|
-
error RegisterableOwnerIsRegistered();
|
58
|
-
error InvalidInitialOwner(address initialOwner);
|
59
|
-
error InvalidAddress(address registerableAddress);
|
60
|
-
|
61
|
-
|
62
|
-
// Initial value for constant variable has to be compile-time constant
|
63
|
-
// TODO define types as constants?
|
64
|
-
//ObjectType public constant SERVICE_TYPE = REGISTRY();
|
65
|
-
string public constant NAME = "RegistryService";
|
66
|
-
|
67
40
|
// TODO update to real hash when registry is stable
|
68
41
|
bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
|
69
42
|
|
70
43
|
address public constant NFT_LOCK_ADDRESS = address(0x1);
|
71
44
|
|
72
|
-
/// @dev
|
73
|
-
// msg.sender - ONLY registry owner
|
74
|
-
// CAN NOT register itself
|
75
|
-
// CAN NOT register IRegisterable address
|
76
|
-
// CAN register ONLY valid object-parent types combinations for TOKEN
|
77
|
-
// IMPORTANT: MUST NOT call untrusted contract inbetween calls to registry/instance (trusted contracts)
|
78
|
-
// motivation: registry/instance state may change during external call
|
79
|
-
// TODO it may be usefull to have transferable token nft in order to delist token, make it invalid for new beginings
|
80
|
-
// TODO: MUST prohibit registration of precompiles addresses
|
81
|
-
function registerToken(address tokenAddress)
|
82
|
-
external
|
83
|
-
returns(NftId nftId)
|
84
|
-
{
|
85
|
-
if(msg.sender == tokenAddress) {
|
86
|
-
revert SelfRegistration();
|
87
|
-
}
|
88
|
-
|
89
|
-
// MUST not revert if no ERC165 support
|
90
|
-
if(tokenAddress.code.length == 0 ||
|
91
|
-
ERC165Checker.supportsInterface(tokenAddress, type(IRegisterable).interfaceId)) {
|
92
|
-
revert NotToken();
|
93
|
-
}
|
94
|
-
|
95
|
-
NftId registryNftId = _registry.getNftId(address(_registry));
|
96
|
-
|
97
|
-
if(msg.sender != _registry.ownerOf(registryNftId)) {
|
98
|
-
revert NotRegistryOwner();
|
99
|
-
}
|
100
|
-
|
101
|
-
IRegistry.ObjectInfo memory info = IRegistry.ObjectInfo(
|
102
|
-
zeroNftId(), // any value
|
103
|
-
registryNftId, // parent nft id
|
104
|
-
TOKEN(),
|
105
|
-
false, // isInterceptor
|
106
|
-
tokenAddress,
|
107
|
-
NFT_LOCK_ADDRESS,
|
108
|
-
"" // any value
|
109
|
-
);
|
110
|
-
|
111
|
-
nftId = _registry.register(info);
|
112
|
-
}
|
113
|
-
|
114
|
-
/// @dev
|
115
|
-
// msg.sender - ONLY registry owner
|
116
|
-
// CAN NOT register itself
|
117
|
-
// CAN register ONLY valid object-parent types combinations for SERVICE
|
118
|
-
// CAN register ONLY IRegisterable address he owns
|
119
|
-
// IMPORTANT: MUST NOT check owner before calling external contract
|
120
|
-
function registerService(IService service)
|
121
|
-
external
|
122
|
-
// TODO restrict access - registryService.registerService must use accessmanager for checking permissions as
|
123
|
-
// services are not always owned by registry owner - actually only registry service is owned by registry owner
|
124
|
-
|
125
|
-
returns(
|
126
|
-
IRegistry.ObjectInfo memory info,
|
127
|
-
bytes memory data
|
128
|
-
)
|
129
|
-
{
|
130
|
-
|
131
|
-
// CAN revert if no ERC165 support -> will revert with empty message
|
132
|
-
if(!service.supportsInterface(type(IService).interfaceId)) {
|
133
|
-
revert NotService();
|
134
|
-
}
|
135
|
-
|
136
|
-
(
|
137
|
-
info,
|
138
|
-
data
|
139
|
-
) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
140
45
|
|
141
|
-
info.nftId = _registry.register(info);
|
142
|
-
service.linkToRegisteredNftId();
|
143
|
-
return (
|
144
|
-
info,
|
145
|
-
data
|
146
|
-
);
|
147
|
-
}
|
148
|
-
|
149
|
-
// If msg.sender is approved service:
|
150
|
-
// 1) add owner arg (service MUST pass it's msg.sender as owner)
|
151
|
-
// 2) check service allowance
|
152
|
-
// 3) comment self registrstion check
|
153
|
-
//function registerInstance(IRegisterable instance, address owner)
|
154
46
|
function registerInstance(IRegisterable instance)
|
155
47
|
external
|
156
48
|
returns(
|
@@ -162,18 +54,12 @@ contract RegistryService is
|
|
162
54
|
revert NotInstance();
|
163
55
|
}
|
164
56
|
|
165
|
-
(
|
166
|
-
info,
|
167
|
-
data
|
168
|
-
) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
|
57
|
+
(info, data) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
|
169
58
|
|
170
59
|
info.nftId = _registry.register(info);
|
171
60
|
instance.linkToRegisteredNftId(); // asume safe
|
172
61
|
|
173
|
-
return (
|
174
|
-
info,
|
175
|
-
data
|
176
|
-
);
|
62
|
+
return (info, data);
|
177
63
|
}
|
178
64
|
|
179
65
|
function registerProduct(IBaseComponent product, address owner)
|
@@ -189,21 +75,13 @@ contract RegistryService is
|
|
189
75
|
revert NotProduct();
|
190
76
|
}
|
191
77
|
|
192
|
-
(
|
193
|
-
info,
|
194
|
-
data
|
195
|
-
) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
|
196
|
-
|
197
|
-
NftId serviceNftId = _registry.getNftId(msg.sender);
|
78
|
+
(info, data) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
|
198
79
|
|
199
80
|
info.nftId = _registry.register(info);
|
200
81
|
// TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
|
201
82
|
product.linkToRegisteredNftId();
|
202
83
|
|
203
|
-
return (
|
204
|
-
info,
|
205
|
-
data
|
206
|
-
);
|
84
|
+
return (info, data);
|
207
85
|
}
|
208
86
|
|
209
87
|
function registerPool(IBaseComponent pool, address owner)
|
@@ -218,20 +96,12 @@ contract RegistryService is
|
|
218
96
|
revert NotPool();
|
219
97
|
}
|
220
98
|
|
221
|
-
(
|
222
|
-
info,
|
223
|
-
data
|
224
|
-
) = _getAndVerifyContractInfo(pool, POOL(), owner);
|
225
|
-
|
226
|
-
NftId serviceNftId = _registry.getNftId(msg.sender);
|
99
|
+
(info, data) = _getAndVerifyContractInfo(pool, POOL(), owner);
|
227
100
|
|
228
101
|
info.nftId = _registry.register(info);
|
229
102
|
pool.linkToRegisteredNftId();
|
230
103
|
|
231
|
-
return (
|
232
|
-
info,
|
233
|
-
data
|
234
|
-
);
|
104
|
+
return (info, data);
|
235
105
|
}
|
236
106
|
|
237
107
|
function registerDistribution(IBaseComponent distribution, address owner)
|
@@ -246,20 +116,12 @@ contract RegistryService is
|
|
246
116
|
revert NotDistribution();
|
247
117
|
}
|
248
118
|
|
249
|
-
(
|
250
|
-
info,
|
251
|
-
data
|
252
|
-
) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
|
253
|
-
|
254
|
-
NftId serviceNftId = _registry.getNftId(msg.sender);
|
119
|
+
(info, data) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
|
255
120
|
|
256
121
|
info.nftId = _registry.register(info);
|
257
122
|
distribution.linkToRegisteredNftId();
|
258
123
|
|
259
|
-
return (
|
260
|
-
info,
|
261
|
-
data
|
262
|
-
);
|
124
|
+
return (info, data);
|
263
125
|
}
|
264
126
|
|
265
127
|
function registerPolicy(IRegistry.ObjectInfo memory info)
|
@@ -267,8 +129,6 @@ contract RegistryService is
|
|
267
129
|
restricted
|
268
130
|
returns(NftId nftId)
|
269
131
|
{
|
270
|
-
NftId senderNftId = _registry.getNftId(msg.sender);
|
271
|
-
|
272
132
|
_verifyObjectInfo(info, POLICY());
|
273
133
|
|
274
134
|
nftId = _registry.register(info);
|
@@ -279,31 +139,29 @@ contract RegistryService is
|
|
279
139
|
restricted
|
280
140
|
returns(NftId nftId)
|
281
141
|
{
|
282
|
-
|
283
|
-
NftId senderNftId = _registry.getNftId(msg.sender);
|
284
|
-
|
285
142
|
_verifyObjectInfo(info, BUNDLE());
|
286
143
|
|
287
144
|
nftId = _registry.register(info);
|
288
145
|
}
|
289
146
|
|
147
|
+
function registerStake(IRegistry.ObjectInfo memory info)
|
148
|
+
external
|
149
|
+
restricted
|
150
|
+
returns(NftId nftId)
|
151
|
+
{
|
152
|
+
_verifyObjectInfo(info, STAKE());
|
290
153
|
|
291
|
-
|
292
|
-
function getName() public pure override(IService, Service) returns(string memory) {
|
293
|
-
return NAME;
|
154
|
+
nftId = _registry.register(info);
|
294
155
|
}
|
295
|
-
//function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
|
296
|
-
// return SERVICE_TYPE;
|
297
|
-
//}
|
298
156
|
|
157
|
+
// From IService
|
158
|
+
function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
|
159
|
+
return SERVICE();
|
160
|
+
}
|
299
161
|
|
300
162
|
// from Versionable
|
301
163
|
|
302
164
|
/// @dev top level initializer
|
303
|
-
// 1) registry is non upgradeable -> don't need a proxy and uses constructor !
|
304
|
-
// 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
|
305
|
-
// 3) deploy registry -> pass registry service address as constructor argument
|
306
|
-
// registry is getting instantiated and locked to registry service address forever
|
307
165
|
function _initialize(
|
308
166
|
address owner,
|
309
167
|
bytes memory data
|
@@ -314,38 +172,66 @@ contract RegistryService is
|
|
314
172
|
{
|
315
173
|
(
|
316
174
|
address initialAuthority,
|
317
|
-
|
318
|
-
) = abi.decode(data, (address,
|
175
|
+
address registry
|
176
|
+
) = abi.decode(data, (address, address));
|
319
177
|
|
320
178
|
__AccessManaged_init(initialAuthority);
|
321
179
|
|
322
|
-
|
323
|
-
|
324
|
-
|
180
|
+
_initializeService(address(registry), owner);
|
181
|
+
|
182
|
+
_registerInterface(type(IRegistryService).interfaceId);
|
183
|
+
}
|
184
|
+
|
185
|
+
// from IRegisterable
|
186
|
+
|
187
|
+
function getInitialInfo()
|
188
|
+
public
|
189
|
+
view
|
190
|
+
override(IRegisterable, Registerable)
|
191
|
+
returns (IRegistry.ObjectInfo memory info, bytes memory data)
|
192
|
+
{
|
193
|
+
(info , data) = super.getInitialInfo();
|
325
194
|
|
326
|
-
|
327
|
-
registryByteCodeWithInitCode,
|
328
|
-
encodedConstructorArguments);
|
195
|
+
FunctionConfig[] memory config = new FunctionConfig[](6);
|
329
196
|
|
330
|
-
|
331
|
-
|
332
|
-
|
197
|
+
// registerInstance() have no restriction
|
198
|
+
config[0].serviceDomain = INSTANCE();
|
199
|
+
config[0].selector = new bytes4[](1);
|
200
|
+
config[0].selector[0] = RegistryService.registerInstance.selector;
|
333
201
|
|
334
|
-
|
202
|
+
config[1].serviceDomain = POOL();
|
203
|
+
config[1].selector = new bytes4[](1);
|
204
|
+
config[1].selector[0] = RegistryService.registerPool.selector;
|
335
205
|
|
336
|
-
|
206
|
+
config[2].serviceDomain = DISTRIBUTION();
|
207
|
+
config[2].selector = new bytes4[](1);
|
208
|
+
config[2].selector[0] = RegistryService.registerDistribution.selector;
|
337
209
|
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
210
|
+
config[3].serviceDomain = PRODUCT();
|
211
|
+
config[3].selector = new bytes4[](1);
|
212
|
+
config[3].selector[0] = RegistryService.registerProduct.selector;
|
213
|
+
|
214
|
+
config[4].serviceDomain = POLICY();
|
215
|
+
config[4].selector = new bytes4[](1);
|
216
|
+
config[4].selector[0] = RegistryService.registerPolicy.selector;
|
217
|
+
|
218
|
+
config[5].serviceDomain = BUNDLE();
|
219
|
+
config[5].selector = new bytes4[](1);
|
220
|
+
config[5].selector[0] = RegistryService.registerBundle.selector;
|
221
|
+
|
222
|
+
/*config[6].serviceDomain = STAKE();
|
223
|
+
config[6].selector = new bytes4[](1);
|
224
|
+
config[6].selector[0] = RegistryService.registerStake.selector;*/
|
225
|
+
|
226
|
+
data = abi.encode(config);
|
342
227
|
}
|
343
228
|
|
344
|
-
//
|
229
|
+
// Internal
|
230
|
+
|
345
231
|
function _getAndVerifyContractInfo(
|
346
232
|
IRegisterable registerable,
|
347
233
|
ObjectType expectedType, // assume can be valid only
|
348
|
-
address expectedOwner // assume can be 0
|
234
|
+
address expectedOwner // assume can be 0 when given by other service
|
349
235
|
)
|
350
236
|
internal
|
351
237
|
view
|
@@ -394,31 +280,31 @@ contract RegistryService is
|
|
394
280
|
revert InvalidParent(parentNftId);
|
395
281
|
}*/
|
396
282
|
|
397
|
-
return(
|
398
|
-
info,
|
399
|
-
data
|
400
|
-
);
|
283
|
+
return(info, data);
|
401
284
|
}
|
402
285
|
|
403
|
-
// parent checks done in registry because of approve()
|
404
286
|
function _verifyObjectInfo(
|
405
287
|
IRegistry.ObjectInfo memory info,
|
406
|
-
ObjectType
|
288
|
+
ObjectType expectedType
|
407
289
|
)
|
408
290
|
internal
|
409
291
|
view
|
410
292
|
{
|
411
|
-
|
412
|
-
|
293
|
+
// enforce instead of check
|
294
|
+
info.objectAddress = address(0);
|
295
|
+
|
296
|
+
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
297
|
+
revert UnexpectedRegisterableType(expectedType, info.objectType);
|
413
298
|
}
|
414
299
|
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
300
|
+
address owner = info.initialOwner;
|
301
|
+
|
302
|
+
if(owner == address(0)) {
|
303
|
+
revert RegisterableOwnerIsZero();
|
304
|
+
}
|
305
|
+
|
306
|
+
if(getRegistry().isRegistered(owner)) {
|
307
|
+
revert RegisterableOwnerIsRegistered();
|
422
308
|
}
|
423
309
|
|
424
310
|
// can catch all 3 if check that initialOwner is not registered
|