@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
@@ -0,0 +1,210 @@
|
|
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(
|
84
|
+
ReleaseManager(releaseManager).authority() == address(_accessManager),
|
85
|
+
"RegistryAccessManager: release manager authority is invalid");
|
86
|
+
require(tokenRegistry > address(0), "RegistryAccessManager: token registry is 0");
|
87
|
+
//require(tokenRegistry.authority() == address(_accessManager));
|
88
|
+
|
89
|
+
_releaseManager = releaseManager;
|
90
|
+
_tokenRegistry = tokenRegistry;
|
91
|
+
|
92
|
+
_configureAdminRole();
|
93
|
+
_configureManagerRole();
|
94
|
+
_configureReleaseManagerRole();
|
95
|
+
|
96
|
+
_grantRole(RELEASE_MANAGER_ROLE(), releaseManager, 0);
|
97
|
+
}
|
98
|
+
|
99
|
+
// set unique role for target, role forever have 1 member and never revoked
|
100
|
+
function setAndGrantUniqueRole(
|
101
|
+
address account,
|
102
|
+
address target,
|
103
|
+
bytes4[] memory selector
|
104
|
+
)
|
105
|
+
external
|
106
|
+
restricted // RELEASE_MANAGER_ROLE
|
107
|
+
onlyInitialized
|
108
|
+
returns(RoleId)
|
109
|
+
{
|
110
|
+
// TODO questionable check...
|
111
|
+
// target is not part of `runtime`
|
112
|
+
//if(
|
113
|
+
// target == address(this) ||
|
114
|
+
// target == address(_accessManager) ||
|
115
|
+
// target == _releaseManager ||
|
116
|
+
// target == _tokenRegistry)
|
117
|
+
//{ return TargetInvalid(); }
|
118
|
+
|
119
|
+
RoleId roleId = _getNextRoleId();
|
120
|
+
|
121
|
+
_setTargetFunctionRole(target, selector, roleId);
|
122
|
+
_grantRole(roleId, account, 0);
|
123
|
+
}
|
124
|
+
|
125
|
+
/*function transferAdmin(address to)
|
126
|
+
external
|
127
|
+
restricted // only with REGISTRY_SERVICE_ADMIN_ROLE or nft owner
|
128
|
+
{
|
129
|
+
_accessManager.revoke(REGISTRY_SERVICE_ADMIN_ROLE, );
|
130
|
+
_accesssManager.grant(REGISTRY_SERVICE_ADMIN_ROLE, to, 0);
|
131
|
+
}*/
|
132
|
+
|
133
|
+
//--- view functions ----------------------------------------------------//
|
134
|
+
|
135
|
+
function getAccessManager()
|
136
|
+
external
|
137
|
+
view
|
138
|
+
returns (AccessManager)
|
139
|
+
{
|
140
|
+
return _accessManager;
|
141
|
+
}
|
142
|
+
|
143
|
+
//--- private functions -------------------------------------------------//
|
144
|
+
|
145
|
+
function _configureAdminRoleInitial() private
|
146
|
+
{
|
147
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
148
|
+
|
149
|
+
functionSelector[0] = RegistryAccessManager.initialize.selector;
|
150
|
+
_setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
151
|
+
}
|
152
|
+
|
153
|
+
function _configureAdminRole() private
|
154
|
+
{
|
155
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
156
|
+
|
157
|
+
// for RegistryServiceProxyManager
|
158
|
+
// TODO upgrading with releaseManager.upgrade()->proxy.upgrade()???
|
159
|
+
//functionSelector[0] = RegistryServiceManager.upgrade.selector;
|
160
|
+
//_setTargetFunctionRole(address(this), functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
161
|
+
|
162
|
+
// for TokenRegistry
|
163
|
+
|
164
|
+
// for ReleaseManager
|
165
|
+
functionSelector[0] = ReleaseManager.createNextRelease.selector;
|
166
|
+
_setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
167
|
+
//functionSelector[0] = ReleaseManager.activateNextRelease.selector;
|
168
|
+
//_setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_ADMIN_ROLE());
|
169
|
+
}
|
170
|
+
|
171
|
+
function _configureManagerRole() private
|
172
|
+
{
|
173
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
174
|
+
|
175
|
+
// for TokenRegistry
|
176
|
+
functionSelector[0] = TokenRegistry.setActive.selector;
|
177
|
+
_setTargetFunctionRole(address(_tokenRegistry), functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
|
178
|
+
|
179
|
+
// for ReleaseManager
|
180
|
+
functionSelector[0] = ReleaseManager.registerService.selector;
|
181
|
+
_setTargetFunctionRole(_releaseManager, functionSelector, REGISTRY_SERVICE_MANAGER_ROLE());
|
182
|
+
|
183
|
+
// set admin
|
184
|
+
_setRoleAdmin(REGISTRY_SERVICE_MANAGER_ROLE(), REGISTRY_SERVICE_ADMIN_ROLE());
|
185
|
+
}
|
186
|
+
|
187
|
+
function _configureReleaseManagerRole() private
|
188
|
+
{
|
189
|
+
bytes4[] memory functionSelector = new bytes4[](1);
|
190
|
+
|
191
|
+
functionSelector[0] = RegistryAccessManager.setAndGrantUniqueRole.selector;
|
192
|
+
_setTargetFunctionRole(address(this), functionSelector, RELEASE_MANAGER_ROLE());
|
193
|
+
}
|
194
|
+
|
195
|
+
function _setTargetFunctionRole(address target, bytes4[] memory selectors, RoleId roleId) private {
|
196
|
+
_accessManager.setTargetFunctionRole(target, selectors, roleId.toInt());
|
197
|
+
}
|
198
|
+
|
199
|
+
function _setRoleAdmin(RoleId roleId, RoleId adminRoleId) private {
|
200
|
+
_accessManager.setRoleAdmin(roleId.toInt(), adminRoleId.toInt());
|
201
|
+
}
|
202
|
+
|
203
|
+
function _grantRole(RoleId roleId, address account, uint32 executionDelay) private {
|
204
|
+
_accessManager.grantRole(roleId.toInt(), account, executionDelay);
|
205
|
+
}
|
206
|
+
|
207
|
+
function _getNextRoleId() private returns(RoleId roleId) {
|
208
|
+
roleId = RoleIdLib.toRoleId(_idNext++);
|
209
|
+
}
|
210
|
+
}
|
@@ -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
45
|
|
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
|
-
|
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,11 @@ 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
|
-
// TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
|
201
|
-
product.linkToRegisteredNftId();
|
202
81
|
|
203
|
-
return (
|
204
|
-
info,
|
205
|
-
data
|
206
|
-
);
|
82
|
+
return (info, data);
|
207
83
|
}
|
208
84
|
|
209
85
|
function registerPool(IBaseComponent pool, address owner)
|
@@ -218,20 +94,11 @@ contract RegistryService is
|
|
218
94
|
revert NotPool();
|
219
95
|
}
|
220
96
|
|
221
|
-
(
|
222
|
-
info,
|
223
|
-
data
|
224
|
-
) = _getAndVerifyContractInfo(pool, POOL(), owner);
|
225
|
-
|
226
|
-
NftId serviceNftId = _registry.getNftId(msg.sender);
|
97
|
+
(info, data) = _getAndVerifyContractInfo(pool, POOL(), owner);
|
227
98
|
|
228
99
|
info.nftId = _registry.register(info);
|
229
|
-
pool.linkToRegisteredNftId();
|
230
100
|
|
231
|
-
return (
|
232
|
-
info,
|
233
|
-
data
|
234
|
-
);
|
101
|
+
return (info, data);
|
235
102
|
}
|
236
103
|
|
237
104
|
function registerDistribution(IBaseComponent distribution, address owner)
|
@@ -246,20 +113,11 @@ contract RegistryService is
|
|
246
113
|
revert NotDistribution();
|
247
114
|
}
|
248
115
|
|
249
|
-
(
|
250
|
-
info,
|
251
|
-
data
|
252
|
-
) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
|
253
|
-
|
254
|
-
NftId serviceNftId = _registry.getNftId(msg.sender);
|
116
|
+
(info, data) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
|
255
117
|
|
256
|
-
info.nftId = _registry.register(info);
|
257
|
-
distribution.linkToRegisteredNftId();
|
118
|
+
info.nftId = _registry.register(info);
|
258
119
|
|
259
|
-
return (
|
260
|
-
info,
|
261
|
-
data
|
262
|
-
);
|
120
|
+
return (info, data);
|
263
121
|
}
|
264
122
|
|
265
123
|
function registerPolicy(IRegistry.ObjectInfo memory info)
|
@@ -267,8 +125,6 @@ contract RegistryService is
|
|
267
125
|
restricted
|
268
126
|
returns(NftId nftId)
|
269
127
|
{
|
270
|
-
NftId senderNftId = _registry.getNftId(msg.sender);
|
271
|
-
|
272
128
|
_verifyObjectInfo(info, POLICY());
|
273
129
|
|
274
130
|
nftId = _registry.register(info);
|
@@ -279,31 +135,29 @@ contract RegistryService is
|
|
279
135
|
restricted
|
280
136
|
returns(NftId nftId)
|
281
137
|
{
|
282
|
-
|
283
|
-
NftId senderNftId = _registry.getNftId(msg.sender);
|
284
|
-
|
285
138
|
_verifyObjectInfo(info, BUNDLE());
|
286
139
|
|
287
140
|
nftId = _registry.register(info);
|
288
141
|
}
|
289
142
|
|
143
|
+
function registerStake(IRegistry.ObjectInfo memory info)
|
144
|
+
external
|
145
|
+
restricted
|
146
|
+
returns(NftId nftId)
|
147
|
+
{
|
148
|
+
_verifyObjectInfo(info, STAKE());
|
290
149
|
|
291
|
-
|
292
|
-
function getName() public pure override(IService, Service) returns(string memory) {
|
293
|
-
return NAME;
|
150
|
+
nftId = _registry.register(info);
|
294
151
|
}
|
295
|
-
//function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
|
296
|
-
// return SERVICE_TYPE;
|
297
|
-
//}
|
298
152
|
|
153
|
+
// From IService
|
154
|
+
function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
|
155
|
+
return REGISTRY();
|
156
|
+
}
|
299
157
|
|
300
158
|
// from Versionable
|
301
159
|
|
302
160
|
/// @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
161
|
function _initialize(
|
308
162
|
address owner,
|
309
163
|
bytes memory data
|
@@ -314,38 +168,60 @@ contract RegistryService is
|
|
314
168
|
{
|
315
169
|
(
|
316
170
|
address initialAuthority,
|
317
|
-
|
318
|
-
) = abi.decode(data, (address,
|
171
|
+
address registry
|
172
|
+
) = abi.decode(data, (address, address));
|
319
173
|
|
320
174
|
__AccessManaged_init(initialAuthority);
|
321
175
|
|
322
|
-
|
323
|
-
|
324
|
-
|
176
|
+
_initializeService(address(registry), owner);
|
177
|
+
|
178
|
+
_registerInterface(type(IRegistryService).interfaceId);
|
179
|
+
}
|
180
|
+
|
181
|
+
// from IRegisterable
|
182
|
+
|
183
|
+
function getInitialInfo()
|
184
|
+
public
|
185
|
+
view
|
186
|
+
override(IRegisterable, Registerable)
|
187
|
+
returns (IRegistry.ObjectInfo memory info, bytes memory data)
|
188
|
+
{
|
189
|
+
(info , data) = super.getInitialInfo();
|
325
190
|
|
326
|
-
|
327
|
-
registryByteCodeWithInitCode,
|
328
|
-
encodedConstructorArguments);
|
191
|
+
FunctionConfig[] memory config = new FunctionConfig[](6);
|
329
192
|
|
330
|
-
|
331
|
-
|
332
|
-
|
193
|
+
// order of service registrations MUST be reverse to this array
|
194
|
+
/*config[-1].serviceDomain = STAKE();
|
195
|
+
config[-1].selector = RegistryService.registerStake.selector;*/
|
333
196
|
|
334
|
-
|
197
|
+
config[0].serviceDomain = POLICY();
|
198
|
+
config[0].selector = RegistryService.registerPolicy.selector;
|
335
199
|
|
336
|
-
|
200
|
+
config[1].serviceDomain = BUNDLE();
|
201
|
+
config[1].selector = RegistryService.registerBundle.selector;
|
337
202
|
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
203
|
+
config[2].serviceDomain = PRODUCT();
|
204
|
+
config[2].selector = RegistryService.registerProduct.selector;
|
205
|
+
|
206
|
+
config[3].serviceDomain = POOL();
|
207
|
+
config[3].selector = RegistryService.registerPool.selector;
|
208
|
+
|
209
|
+
config[4].serviceDomain = DISTRIBUTION();
|
210
|
+
config[4].selector = RegistryService.registerDistribution.selector;
|
211
|
+
|
212
|
+
// registerInstance() have no restriction
|
213
|
+
config[5].serviceDomain = INSTANCE();
|
214
|
+
config[5].selector = RegistryService.registerInstance.selector;
|
215
|
+
|
216
|
+
data = abi.encode(config);
|
342
217
|
}
|
343
218
|
|
344
|
-
//
|
219
|
+
// Internal
|
220
|
+
|
345
221
|
function _getAndVerifyContractInfo(
|
346
222
|
IRegisterable registerable,
|
347
223
|
ObjectType expectedType, // assume can be valid only
|
348
|
-
address expectedOwner // assume can be 0
|
224
|
+
address expectedOwner // assume can be 0 when given by other service
|
349
225
|
)
|
350
226
|
internal
|
351
227
|
view
|
@@ -394,31 +270,31 @@ contract RegistryService is
|
|
394
270
|
revert InvalidParent(parentNftId);
|
395
271
|
}*/
|
396
272
|
|
397
|
-
return(
|
398
|
-
info,
|
399
|
-
data
|
400
|
-
);
|
273
|
+
return(info, data);
|
401
274
|
}
|
402
275
|
|
403
|
-
// parent checks done in registry because of approve()
|
404
276
|
function _verifyObjectInfo(
|
405
277
|
IRegistry.ObjectInfo memory info,
|
406
|
-
ObjectType
|
278
|
+
ObjectType expectedType
|
407
279
|
)
|
408
280
|
internal
|
409
281
|
view
|
410
282
|
{
|
411
|
-
|
412
|
-
|
283
|
+
// enforce instead of check
|
284
|
+
info.objectAddress = address(0);
|
285
|
+
|
286
|
+
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
287
|
+
revert UnexpectedRegisterableType(expectedType, info.objectType);
|
413
288
|
}
|
414
289
|
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
290
|
+
address owner = info.initialOwner;
|
291
|
+
|
292
|
+
if(owner == address(0)) {
|
293
|
+
revert RegisterableOwnerIsZero();
|
294
|
+
}
|
295
|
+
|
296
|
+
if(getRegistry().isRegistered(owner)) {
|
297
|
+
revert RegisterableOwnerIsRegistered();
|
422
298
|
}
|
423
299
|
|
424
300
|
// can catch all 3 if check that initialOwner is not registered
|