@etherisc/gif-next 0.0.2-e59218b-293 → 0.0.2-e5a2253-213
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +166 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +153 -85
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +128 -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/IProductComponent.sol/IProductComponent.json +5 -5
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +185 -114
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +160 -98
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +788 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +138 -2
- 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 +107 -660
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +244 -114
- 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 +38 -28
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +183 -151
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -74
- 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 +114 -32
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -13
- 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 +1121 -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/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +141 -66
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +14 -34
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{IComponentOwnerService.sol/IComponentOwnerService.json → IBundleService.sol/IBundleService.json} +295 -41
- 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 -164
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +17 -241
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1246 -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 +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +140 -241
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +14 -38
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +129 -401
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +14 -78
- 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 +132 -133
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +94 -65
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +145 -227
- 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 +30 -128
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +38 -104
- 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 +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +14 -27
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +13 -13
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +13 -13
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +31 -31
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/components/BaseComponent.sol +91 -14
- package/contracts/components/Distribution.sol +2 -11
- package/contracts/components/IBaseComponent.sol +11 -1
- package/contracts/components/IPoolComponent.sol +5 -1
- package/contracts/components/IProductComponent.sol +2 -2
- package/contracts/components/Pool.sol +38 -26
- package/contracts/components/Product.sol +28 -21
- 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 +9 -3
- package/contracts/instance/IInstanceBase.sol +25 -0
- package/contracts/instance/IInstanceService.sol +13 -3
- package/contracts/instance/Instance.sol +43 -224
- package/contracts/instance/InstanceAccessManager.sol +93 -78
- package/contracts/instance/InstanceBase.sol +39 -0
- package/contracts/instance/InstanceService.sol +247 -100
- package/contracts/instance/InstanceServiceManager.sol +5 -8
- package/contracts/instance/ObjectManager.sol +101 -0
- package/contracts/instance/base/ComponentServiceBase.sol +85 -81
- package/contracts/instance/base/IInstanceBase.sol +0 -2
- package/contracts/instance/module/IAccess.sol +27 -17
- package/contracts/instance/module/ISetup.sol +2 -1
- package/contracts/instance/service/BundleService.sol +294 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/DistributionService.sol +48 -21
- package/contracts/instance/service/DistributionServiceManager.sol +6 -9
- package/contracts/instance/service/IBundleService.sol +44 -0
- package/contracts/instance/service/IPolicyService.sol +94 -0
- package/contracts/instance/service/IPoolService.sol +4 -25
- package/contracts/instance/service/IProductService.sol +2 -72
- package/contracts/instance/service/PolicyService.sol +539 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +65 -124
- package/contracts/instance/service/PoolServiceManager.sol +5 -8
- package/contracts/instance/service/ProductService.sol +96 -454
- package/contracts/registry/ChainNft.sol +1 -1
- package/contracts/registry/IRegistry.sol +26 -16
- package/contracts/registry/IRegistryService.sol +13 -5
- package/contracts/registry/Registry.sol +149 -201
- package/contracts/registry/RegistryAccessManager.sol +210 -0
- package/contracts/registry/RegistryService.sol +50 -88
- package/contracts/registry/RegistryServiceManager.sol +18 -36
- package/contracts/registry/ReleaseManager.sol +342 -0
- package/contracts/registry/TokenRegistry.sol +5 -6
- package/contracts/shared/IRegisterable.sol +0 -2
- package/contracts/shared/IService.sol +2 -1
- package/contracts/shared/ProxyManager.sol +1 -1
- package/contracts/shared/Service.sol +10 -7
- package/contracts/test/TestService.sol +3 -2
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/RoleId.sol +10 -10
- 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/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -827
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/contracts/instance/AccessManagedSimple.sol +0 -115
- package/contracts/instance/AccessManagerSimple.sol +0 -692
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/service/ComponentOwnerService.sol +0 -317
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
@@ -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
|
+
}
|
@@ -16,6 +16,7 @@ import {IDistributionComponent} from "../../contracts/components/IDistributionCo
|
|
16
16
|
import {IVersionable} from "../../contracts/shared/IVersionable.sol";
|
17
17
|
import {Versionable} from "../../contracts/shared/Versionable.sol";
|
18
18
|
import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
|
19
|
+
import {Registerable} from "../../contracts/shared/Registerable.sol";
|
19
20
|
|
20
21
|
import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../contracts/types/RoleId.sol";
|
21
22
|
import {ObjectType, REGISTRY, SERVICE, PRODUCT, ORACLE, POOL, INSTANCE, DISTRIBUTION, POLICY, BUNDLE, STAKE} from "../../contracts/types/ObjectType.sol";
|
@@ -36,46 +37,11 @@ contract RegistryService is
|
|
36
37
|
{
|
37
38
|
using NftIdLib for NftId;
|
38
39
|
|
39
|
-
|
40
|
-
// Initial value for constant variable has to be compile-time constant
|
41
|
-
// TODO define types as constants?
|
42
|
-
//ObjectType public constant SERVICE_TYPE = REGISTRY();
|
43
|
-
string public constant NAME = "RegistryService";
|
44
|
-
|
45
40
|
// TODO update to real hash when registry is stable
|
46
41
|
bytes32 public constant REGISTRY_CREATION_CODE_HASH = bytes32(0);
|
47
42
|
|
48
43
|
address public constant NFT_LOCK_ADDRESS = address(0x1);
|
49
44
|
|
50
|
-
/// @dev
|
51
|
-
// msg.sender - ONLY registry owner
|
52
|
-
// CAN NOT register itself
|
53
|
-
// CAN register ONLY valid object-parent types combinations for SERVICE
|
54
|
-
// CAN register ONLY IRegisterable address he owns
|
55
|
-
// IMPORTANT: MUST NOT check owner before calling external contract
|
56
|
-
function registerService(IService service)
|
57
|
-
external
|
58
|
-
restricted
|
59
|
-
returns(
|
60
|
-
IRegistry.ObjectInfo memory info,
|
61
|
-
bytes memory data
|
62
|
-
)
|
63
|
-
{
|
64
|
-
|
65
|
-
// CAN revert if no ERC165 support -> will revert with empty message
|
66
|
-
if(!service.supportsInterface(type(IService).interfaceId)) {
|
67
|
-
revert NotService();
|
68
|
-
}
|
69
|
-
|
70
|
-
(
|
71
|
-
info,
|
72
|
-
data
|
73
|
-
) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
74
|
-
|
75
|
-
info.nftId = _registry.register(info);
|
76
|
-
service.linkToRegisteredNftId();
|
77
|
-
return (info, data);
|
78
|
-
}
|
79
45
|
|
80
46
|
function registerInstance(IRegisterable instance)
|
81
47
|
external
|
@@ -88,10 +54,7 @@ contract RegistryService is
|
|
88
54
|
revert NotInstance();
|
89
55
|
}
|
90
56
|
|
91
|
-
(
|
92
|
-
info,
|
93
|
-
data
|
94
|
-
) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
|
57
|
+
(info, data) = _getAndVerifyContractInfo(instance, INSTANCE(), msg.sender);
|
95
58
|
|
96
59
|
info.nftId = _registry.register(info);
|
97
60
|
instance.linkToRegisteredNftId(); // asume safe
|
@@ -112,14 +75,9 @@ contract RegistryService is
|
|
112
75
|
revert NotProduct();
|
113
76
|
}
|
114
77
|
|
115
|
-
(
|
116
|
-
info,
|
117
|
-
data
|
118
|
-
) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
|
78
|
+
(info, data) = _getAndVerifyContractInfo(product, PRODUCT(), owner);
|
119
79
|
|
120
80
|
info.nftId = _registry.register(info);
|
121
|
-
// TODO unsafe, let component or its owner derive nftId latter, when state assumptions and modifications of GIF contracts are finished
|
122
|
-
product.linkToRegisteredNftId();
|
123
81
|
|
124
82
|
return (info, data);
|
125
83
|
}
|
@@ -136,13 +94,9 @@ contract RegistryService is
|
|
136
94
|
revert NotPool();
|
137
95
|
}
|
138
96
|
|
139
|
-
(
|
140
|
-
info,
|
141
|
-
data
|
142
|
-
) = _getAndVerifyContractInfo(pool, POOL(), owner);
|
97
|
+
(info, data) = _getAndVerifyContractInfo(pool, POOL(), owner);
|
143
98
|
|
144
99
|
info.nftId = _registry.register(info);
|
145
|
-
pool.linkToRegisteredNftId();
|
146
100
|
|
147
101
|
return (info, data);
|
148
102
|
}
|
@@ -159,13 +113,9 @@ contract RegistryService is
|
|
159
113
|
revert NotDistribution();
|
160
114
|
}
|
161
115
|
|
162
|
-
(
|
163
|
-
info,
|
164
|
-
data
|
165
|
-
) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
|
116
|
+
(info, data) = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
|
166
117
|
|
167
|
-
info.nftId = _registry.register(info);
|
168
|
-
distribution.linkToRegisteredNftId();
|
118
|
+
info.nftId = _registry.register(info);
|
169
119
|
|
170
120
|
return (info, data);
|
171
121
|
}
|
@@ -201,21 +151,13 @@ contract RegistryService is
|
|
201
151
|
}
|
202
152
|
|
203
153
|
// From IService
|
204
|
-
function
|
205
|
-
return
|
154
|
+
function getDomain() public pure override(IService, Service) returns(ObjectType serviceDomain) {
|
155
|
+
return REGISTRY();
|
206
156
|
}
|
207
|
-
//function getType() public pure override(IService, ServiceBase) returns(ObjectType serviceType) {
|
208
|
-
// return SERVICE_TYPE;
|
209
|
-
//}
|
210
|
-
|
211
157
|
|
212
158
|
// from Versionable
|
213
159
|
|
214
160
|
/// @dev top level initializer
|
215
|
-
// 1) registry is non upgradeable -> don't need a proxy and uses constructor !
|
216
|
-
// 2) deploy registry service first -> from its initialization func it is easier to deploy registry then vice versa
|
217
|
-
// 3) deploy registry -> pass registry service address as constructor argument
|
218
|
-
// registry is getting instantiated and locked to registry service address forever
|
219
161
|
function _initialize(
|
220
162
|
address owner,
|
221
163
|
bytes memory data
|
@@ -226,37 +168,60 @@ contract RegistryService is
|
|
226
168
|
{
|
227
169
|
(
|
228
170
|
address initialAuthority,
|
229
|
-
|
230
|
-
) = abi.decode(data, (address,
|
171
|
+
address registry
|
172
|
+
) = abi.decode(data, (address, address));
|
231
173
|
|
232
174
|
__AccessManaged_init(initialAuthority);
|
233
175
|
|
234
|
-
|
235
|
-
owner,
|
236
|
-
getMajorVersion());
|
176
|
+
_initializeService(address(registry), owner);
|
237
177
|
|
238
|
-
|
239
|
-
|
240
|
-
encodedConstructorArguments);
|
178
|
+
_registerInterface(type(IRegistryService).interfaceId);
|
179
|
+
}
|
241
180
|
|
242
|
-
|
243
|
-
registryCreationCode,
|
244
|
-
REGISTRY_CREATION_CODE_HASH));
|
181
|
+
// from IRegisterable
|
245
182
|
|
246
|
-
|
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();
|
247
190
|
|
248
|
-
|
191
|
+
FunctionConfig[] memory config = new FunctionConfig[](6);
|
249
192
|
|
250
|
-
//
|
251
|
-
|
252
|
-
|
253
|
-
|
193
|
+
// order of service registrations MUST be reverse to this array
|
194
|
+
/*config[-1].serviceDomain = STAKE();
|
195
|
+
config[-1].selector = RegistryService.registerStake.selector;*/
|
196
|
+
|
197
|
+
config[0].serviceDomain = POLICY();
|
198
|
+
config[0].selector = RegistryService.registerPolicy.selector;
|
199
|
+
|
200
|
+
config[1].serviceDomain = BUNDLE();
|
201
|
+
config[1].selector = RegistryService.registerBundle.selector;
|
202
|
+
|
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);
|
254
217
|
}
|
255
218
|
|
219
|
+
// Internal
|
220
|
+
|
256
221
|
function _getAndVerifyContractInfo(
|
257
222
|
IRegisterable registerable,
|
258
223
|
ObjectType expectedType, // assume can be valid only
|
259
|
-
address expectedOwner // assume can be 0
|
224
|
+
address expectedOwner // assume can be 0 when given by other service
|
260
225
|
)
|
261
226
|
internal
|
262
227
|
view
|
@@ -305,10 +270,7 @@ contract RegistryService is
|
|
305
270
|
revert InvalidParent(parentNftId);
|
306
271
|
}*/
|
307
272
|
|
308
|
-
return(
|
309
|
-
info,
|
310
|
-
data
|
311
|
-
);
|
273
|
+
return(info, data);
|
312
274
|
}
|
313
275
|
|
314
276
|
function _verifyObjectInfo(
|
@@ -17,51 +17,41 @@ contract RegistryServiceManager is
|
|
17
17
|
{
|
18
18
|
bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
|
19
19
|
|
20
|
-
|
21
|
-
RegistryService private _registryService;
|
22
|
-
TokenRegistry private _tokenRegistry;
|
20
|
+
RegistryService private immutable _registryService;
|
23
21
|
|
24
22
|
/// @dev initializes proxy manager with registry service implementation and deploys registry
|
25
23
|
constructor(
|
26
|
-
address
|
27
|
-
|
24
|
+
address initialAuthority, // used by implementation
|
25
|
+
address registry) // used by implementation
|
28
26
|
ProxyManager()
|
29
27
|
{
|
30
|
-
|
31
|
-
|
32
|
-
|
28
|
+
require(initialAuthority > address(0), "RegistryServiceManager: initial authority is 0");
|
29
|
+
require(registry > address(0), "RegistryServiceManager: registry is 0");
|
30
|
+
|
31
|
+
// implementation's initializer func `data` argument
|
32
|
+
bytes memory initializationData = abi.encode(
|
33
|
+
initialAuthority,
|
34
|
+
registry);
|
33
35
|
|
34
36
|
IVersionable versionable = deploy(
|
35
37
|
address(new RegistryService()),
|
36
38
|
initializationData);
|
37
39
|
|
38
40
|
_registryService = RegistryService(address(versionable));
|
39
|
-
|
40
|
-
// link ownership of registry service manager ot nft owner of registry service
|
41
|
-
_linkToNftOwnable(
|
42
|
-
address(_registryService.getRegistry()),
|
43
|
-
address(_registryService));
|
44
|
-
|
45
|
-
// deploy token registry
|
46
|
-
|
47
|
-
// _tokenRegistry = new TokenRegistry(
|
48
|
-
// address(_registryService.getRegistry()),
|
49
|
-
// address(_registryService));
|
50
|
-
|
51
|
-
// implies that after this constructor call only upgrade functionality is available
|
52
|
-
_isDeployed = true;
|
53
41
|
}
|
54
42
|
|
55
|
-
|
43
|
+
// from IRegisterable
|
56
44
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
45
|
+
// IMPORTANT: registry here and in constructor MUST be the same
|
46
|
+
function linkToNftOwnable(address registry)
|
47
|
+
public
|
48
|
+
onlyOwner
|
61
49
|
{
|
62
|
-
|
50
|
+
_linkToNftOwnable(registry, address(_registryService));
|
63
51
|
}
|
64
52
|
|
53
|
+
//--- view functions ----------------------------------------------------//
|
54
|
+
|
65
55
|
function getRegistryService()
|
66
56
|
external
|
67
57
|
view
|
@@ -69,12 +59,4 @@ contract RegistryServiceManager is
|
|
69
59
|
{
|
70
60
|
return _registryService;
|
71
61
|
}
|
72
|
-
|
73
|
-
function getTokenRegistry()
|
74
|
-
external
|
75
|
-
view
|
76
|
-
returns (TokenRegistry)
|
77
|
-
{
|
78
|
-
return _tokenRegistry;
|
79
|
-
}
|
80
62
|
}
|