@etherisc/gif-next 0.0.2-ead1eb0-841 → 0.0.2-eadf4ad-932
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/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +80 -80
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +97 -58
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2 -2
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +2 -2
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +2 -2
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +24 -24
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +69 -30
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.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/base/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +2 -2
- 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/IComponents.sol/IComponents.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/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +44 -44
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +79 -40
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +48 -48
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +81 -42
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +4 -4
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +68 -29
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +10 -10
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +90 -51
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +8 -8
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +90 -51
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +30 -30
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +77 -38
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +6 -6
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +66 -27
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +73 -13
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +153 -51
- 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 +93 -25
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +48 -95
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +170 -68
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +72 -28
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +363 -76
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- 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/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +43 -14
- 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/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- 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/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +4 -4
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +667 -0
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/distribution/DistributionService.sol +8 -6
- package/contracts/distribution/DistributionServiceManager.sol +9 -6
- package/contracts/instance/InstanceService.sol +9 -16
- package/contracts/instance/InstanceServiceManager.sol +10 -20
- package/contracts/pool/BundleService.sol +13 -11
- package/contracts/pool/BundleServiceManager.sol +9 -18
- package/contracts/pool/PoolService.sol +12 -11
- package/contracts/pool/PoolServiceManager.sol +9 -18
- package/contracts/product/ApplicationService.sol +6 -5
- package/contracts/product/ApplicationServiceManager.sol +9 -6
- package/contracts/product/ClaimService.sol +6 -5
- package/contracts/product/ClaimServiceManager.sol +9 -6
- package/contracts/product/PolicyService.sol +6 -4
- package/contracts/product/PolicyServiceManager.sol +9 -21
- package/contracts/product/PricingService.sol +6 -5
- package/contracts/product/PricingServiceManager.sol +9 -18
- package/contracts/product/ProductService.sol +6 -4
- package/contracts/product/ProductServiceManager.sol +9 -21
- package/contracts/registry/IRegistry.sol +19 -12
- package/contracts/registry/IRegistryService.sol +22 -30
- package/contracts/registry/Registry.sol +40 -36
- package/contracts/registry/RegistryAccessManager.sol +39 -123
- package/contracts/registry/RegistryService.sol +22 -76
- package/contracts/registry/RegistryServiceManager.sol +21 -9
- package/contracts/registry/ReleaseManager.sol +243 -189
- package/contracts/shared/ComponentService.sol +0 -9
- package/contracts/shared/ProxyManager.sol +26 -0
- package/contracts/staking/StakingService.sol +7 -4
- package/contracts/staking/{StakeingServiceManager.sol → StakingServiceManager.sol} +8 -5
- package/contracts/type/RoleId.sol +10 -3
- package/package.json +1 -1
- package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.dbg.json +0 -4
- package/artifacts/contracts/staking/StakeingServiceManager.sol/StakingServiceManager.json +0 -628
@@ -1,31 +1,24 @@
|
|
1
1
|
// SPDX-License-Identifier: UNLICENSED
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
4
|
+
import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
|
5
5
|
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
6
|
+
import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
|
7
|
+
import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
|
8
|
+
|
9
|
+
import {RoleId, RoleIdLib, GIF_MANAGER_ROLE, GIF_ADMIN_ROLE} from "../type/RoleId.sol";
|
6
10
|
|
7
|
-
import {
|
8
|
-
GIF_MANAGER_ROLE,
|
9
|
-
GIF_ADMIN_ROLE,
|
10
|
-
RELEASE_MANAGER_ROLE} from "../type/RoleId.sol";
|
11
|
+
import {AccessManagerUpgradeableInitializeable} from "../shared/AccessManagerUpgradeableInitializeable.sol";
|
11
12
|
|
12
13
|
import {TokenRegistry} from "./TokenRegistry.sol";
|
13
14
|
import {ReleaseManager} from "./ReleaseManager.sol";
|
14
15
|
|
15
16
|
/*
|
16
|
-
|
17
|
-
1) RELEASE_MANAGER_ROLE
|
18
|
-
- has only ReleaseManager as member
|
19
|
-
- responsible for setting and granting of REGISTRAR roles
|
20
|
-
1) REGISTRAR roles
|
21
|
-
- set and granted by RELEASE_MANAGER_ROLE
|
22
|
-
- for each service and major version X there is 1 unique member (the service with version X itself) (subject to change)
|
23
|
-
- each set to 1 target (registry service ver.X) and 1 selector (function of registry service ver.X) (subject to change)
|
24
|
-
2) GIF_MANAGER_ROLE
|
17
|
+
1) GIF_MANAGER_ROLE
|
25
18
|
- can have arbitrary number of members
|
26
19
|
- responsible for services registrations
|
27
20
|
- responsible for token registration and activation
|
28
|
-
|
21
|
+
2) GIF_ADMIN_ROLE
|
29
22
|
- admin of GIF_MANAGER_ROLE
|
30
23
|
- MUST have 1 member at any time
|
31
24
|
- granted/revoked ONLY in transferAdminRole() -> consider lock out situations!!!
|
@@ -33,95 +26,52 @@ import {ReleaseManager} from "./ReleaseManager.sol";
|
|
33
26
|
|
34
27
|
*/
|
35
28
|
|
36
|
-
contract RegistryAccessManager is AccessManaged
|
29
|
+
contract RegistryAccessManager is AccessManaged, Initializable
|
37
30
|
{
|
38
|
-
error
|
39
|
-
error
|
31
|
+
error ErrorRegistryAccessManagerReleaseManagerAuthorityMismatch();
|
32
|
+
error ErrorRegistryAccessManagerTokenRegistryZero();
|
40
33
|
|
41
34
|
uint64 public constant UNIQUE_ROLE_ID_MIN = 1000000;
|
42
35
|
|
43
|
-
AccessManager private immutable _accessManager;
|
44
36
|
address private _releaseManager;
|
45
37
|
address private _tokenRegistry;
|
46
38
|
|
47
39
|
uint64 private _idNext; // role id
|
48
|
-
bool private _isInitialized;
|
49
|
-
|
50
|
-
modifier onlyOnce() {
|
51
|
-
if(_isInitialized) {
|
52
|
-
revert AlreadyInitialized();
|
53
|
-
}
|
54
|
-
_;
|
55
|
-
_isInitialized = true;
|
56
|
-
}
|
57
40
|
|
58
|
-
modifier onlyInitialized() {
|
59
|
-
if(!_isInitialized) {
|
60
|
-
revert NotInitialized();
|
61
|
-
}
|
62
|
-
_;
|
63
|
-
}
|
64
41
|
|
65
|
-
|
42
|
+
// IMPORTNAT: this.authority() must be valid before initialize() function....
|
43
|
+
// -> have constructor and initializer function
|
44
|
+
constructor()
|
66
45
|
AccessManaged(msg.sender)
|
67
46
|
{
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
_idNext = UNIQUE_ROLE_ID_MIN;
|
72
|
-
|
73
|
-
_configureAdminRoleInitial();
|
74
|
-
|
75
|
-
address admin = msg.sender;
|
76
|
-
_grantRole(GIF_ADMIN_ROLE(), admin, 0);
|
77
|
-
_grantRole(GIF_MANAGER_ROLE(), manager, 0);
|
47
|
+
AccessManagerUpgradeableInitializeable accessManager = new AccessManagerUpgradeableInitializeable();
|
48
|
+
accessManager.initialize(address(this));
|
49
|
+
setAuthority(address(accessManager));
|
78
50
|
}
|
79
51
|
|
80
|
-
function initialize(address releaseManager, address tokenRegistry)
|
81
|
-
external
|
82
|
-
|
83
|
-
onlyOnce
|
52
|
+
function initialize(address admin, address manager, address releaseManager, address tokenRegistry)
|
53
|
+
external
|
54
|
+
initializer
|
84
55
|
{
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
56
|
+
// validate input
|
57
|
+
if(IAccessManaged(releaseManager).authority() != authority()) {
|
58
|
+
revert ErrorRegistryAccessManagerReleaseManagerAuthorityMismatch();
|
59
|
+
}
|
60
|
+
if(tokenRegistry == address(0)) {
|
61
|
+
revert ErrorRegistryAccessManagerTokenRegistryZero();
|
62
|
+
}
|
90
63
|
|
91
64
|
_releaseManager = releaseManager;
|
92
65
|
_tokenRegistry = tokenRegistry;
|
66
|
+
_idNext = UNIQUE_ROLE_ID_MIN;
|
93
67
|
|
94
|
-
|
95
|
-
|
96
|
-
_configureReleaseManagerRole();
|
68
|
+
_setAdminRole();
|
69
|
+
_setManagerRole();
|
97
70
|
|
98
|
-
_grantRole(
|
99
|
-
|
71
|
+
_grantRole(GIF_ADMIN_ROLE(), admin, 0);
|
72
|
+
_grantRole(GIF_MANAGER_ROLE(), manager, 0);
|
100
73
|
|
101
|
-
|
102
|
-
function setAndGrantUniqueRole(
|
103
|
-
address account,
|
104
|
-
address target,
|
105
|
-
bytes4[] memory selector
|
106
|
-
)
|
107
|
-
external
|
108
|
-
restricted // RELEASE_MANAGER_ROLE
|
109
|
-
onlyInitialized
|
110
|
-
returns(RoleId)
|
111
|
-
{
|
112
|
-
// TODO questionable check...
|
113
|
-
// target is not part of `runtime`
|
114
|
-
//if(
|
115
|
-
// target == address(this) ||
|
116
|
-
// target == address(_accessManager) ||
|
117
|
-
// target == _releaseManager ||
|
118
|
-
// target == _tokenRegistry)
|
119
|
-
//{ return TargetInvalid(); }
|
120
|
-
|
121
|
-
RoleId roleId = _getNextRoleId();
|
122
|
-
|
123
|
-
_setTargetFunctionRole(target, selector, roleId);
|
124
|
-
_grantRole(roleId, account, 0);
|
74
|
+
_setRoleAdmin(GIF_MANAGER_ROLE(), GIF_ADMIN_ROLE());
|
125
75
|
}
|
126
76
|
|
127
77
|
/*function transferAdmin(address to)
|
@@ -134,35 +84,12 @@ contract RegistryAccessManager is AccessManaged
|
|
134
84
|
|
135
85
|
//--- view functions ----------------------------------------------------//
|
136
86
|
|
137
|
-
function getAccessManager()
|
138
|
-
external
|
139
|
-
view
|
140
|
-
returns (AccessManager)
|
141
|
-
{
|
142
|
-
return _accessManager;
|
143
|
-
}
|
144
|
-
|
145
87
|
//--- private functions -------------------------------------------------//
|
146
88
|
|
147
|
-
function
|
148
|
-
{
|
149
|
-
bytes4[] memory functionSelector = new bytes4[](1);
|
150
|
-
|
151
|
-
functionSelector[0] = RegistryAccessManager.initialize.selector;
|
152
|
-
_setTargetFunctionRole(address(this), functionSelector, GIF_ADMIN_ROLE());
|
153
|
-
}
|
154
|
-
|
155
|
-
function _configureAdminRole() private
|
89
|
+
function _setAdminRole() private
|
156
90
|
{
|
157
91
|
bytes4[] memory functionSelector = new bytes4[](1);
|
158
92
|
|
159
|
-
// for RegistryServiceProxyManager
|
160
|
-
// TODO upgrading with releaseManager.upgrade()->proxy.upgrade()???
|
161
|
-
//functionSelector[0] = RegistryServiceManager.upgrade.selector;
|
162
|
-
//_setTargetFunctionRole(address(this), functionSelector, GIF_ADMIN_ROLE());
|
163
|
-
|
164
|
-
// for TokenRegistry
|
165
|
-
|
166
93
|
// for ReleaseManager
|
167
94
|
functionSelector[0] = ReleaseManager.createNextRelease.selector;
|
168
95
|
_setTargetFunctionRole(_releaseManager, functionSelector, GIF_ADMIN_ROLE());
|
@@ -171,7 +98,7 @@ contract RegistryAccessManager is AccessManaged
|
|
171
98
|
_setTargetFunctionRole(_releaseManager, functionSelector, GIF_ADMIN_ROLE());
|
172
99
|
}
|
173
100
|
|
174
|
-
function
|
101
|
+
function _setManagerRole() private
|
175
102
|
{
|
176
103
|
bytes4[] memory functionSelector = new bytes4[](1);
|
177
104
|
|
@@ -183,31 +110,20 @@ contract RegistryAccessManager is AccessManaged
|
|
183
110
|
functionSelector[0] = ReleaseManager.registerService.selector;
|
184
111
|
_setTargetFunctionRole(_releaseManager, functionSelector, GIF_MANAGER_ROLE());
|
185
112
|
|
186
|
-
functionSelector[0] = ReleaseManager.
|
113
|
+
functionSelector[0] = ReleaseManager.prepareNextRelease.selector;
|
187
114
|
_setTargetFunctionRole(_releaseManager, functionSelector, GIF_MANAGER_ROLE());
|
188
|
-
|
189
|
-
// set admin
|
190
|
-
_setRoleAdmin(GIF_MANAGER_ROLE(), GIF_ADMIN_ROLE());
|
191
|
-
}
|
192
|
-
|
193
|
-
function _configureReleaseManagerRole() private
|
194
|
-
{
|
195
|
-
bytes4[] memory functionSelector = new bytes4[](1);
|
196
|
-
|
197
|
-
functionSelector[0] = RegistryAccessManager.setAndGrantUniqueRole.selector;
|
198
|
-
_setTargetFunctionRole(address(this), functionSelector, RELEASE_MANAGER_ROLE());
|
199
115
|
}
|
200
116
|
|
201
117
|
function _setTargetFunctionRole(address target, bytes4[] memory selectors, RoleId roleId) private {
|
202
|
-
|
118
|
+
AccessManager(authority()).setTargetFunctionRole(target, selectors, roleId.toInt());
|
203
119
|
}
|
204
120
|
|
205
121
|
function _setRoleAdmin(RoleId roleId, RoleId adminRoleId) private {
|
206
|
-
|
122
|
+
AccessManager(authority()).setRoleAdmin(roleId.toInt(), adminRoleId.toInt());
|
207
123
|
}
|
208
124
|
|
209
125
|
function _grantRole(RoleId roleId, address account, uint32 executionDelay) private {
|
210
|
-
|
126
|
+
AccessManager(authority()).grantRole(roleId.toInt(), account, executionDelay);
|
211
127
|
}
|
212
128
|
|
213
129
|
function _getNextRoleId() private returns(RoleId roleId) {
|
@@ -54,13 +54,12 @@ contract RegistryService is
|
|
54
54
|
virtual override
|
55
55
|
initializer()
|
56
56
|
{
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
) = abi.decode(data, (address, address));
|
61
|
-
|
62
|
-
initializeService(registryAddress, initialAuthority, owner);
|
57
|
+
address initialOwner;
|
58
|
+
address registryAddress;
|
59
|
+
address authority;
|
60
|
+
(registryAddress, initialOwner, authority) = abi.decode(data, (address, address, address));
|
63
61
|
|
62
|
+
initializeService(registryAddress, authority, owner);
|
64
63
|
registerInterface(type(IRegistryService).interfaceId);
|
65
64
|
}
|
66
65
|
|
@@ -72,7 +71,7 @@ contract RegistryService is
|
|
72
71
|
)
|
73
72
|
{
|
74
73
|
if(!instance.supportsInterface(type(IInstance).interfaceId)) {
|
75
|
-
revert
|
74
|
+
revert ErrorRegistryServiceNotInstance(address(instance));
|
76
75
|
}
|
77
76
|
|
78
77
|
info = _getAndVerifyContractInfo(instance, INSTANCE(), owner);
|
@@ -90,7 +89,7 @@ contract RegistryService is
|
|
90
89
|
{
|
91
90
|
// CAN revert if no ERC165 support -> will revert with empty message
|
92
91
|
if(!product.supportsInterface(type(IProductComponent).interfaceId)) {
|
93
|
-
revert
|
92
|
+
revert ErrorRegistryServiceNotProduct(address(product));
|
94
93
|
}
|
95
94
|
|
96
95
|
info = _getAndVerifyContractInfo(product, PRODUCT(), owner);
|
@@ -105,7 +104,7 @@ contract RegistryService is
|
|
105
104
|
)
|
106
105
|
{
|
107
106
|
if(!pool.supportsInterface(type(IPoolComponent).interfaceId)) {
|
108
|
-
revert
|
107
|
+
revert ErrorRegistryServiceNotPool(address(pool));
|
109
108
|
}
|
110
109
|
|
111
110
|
info = _getAndVerifyContractInfo(pool, POOL(), owner);
|
@@ -120,7 +119,7 @@ contract RegistryService is
|
|
120
119
|
)
|
121
120
|
{
|
122
121
|
if(!distribution.supportsInterface(type(IDistributionComponent).interfaceId)) {
|
123
|
-
revert
|
122
|
+
revert ErrorRegistryServiceNotDistribution(address(distribution));
|
124
123
|
}
|
125
124
|
|
126
125
|
info = _getAndVerifyContractInfo(distribution, DISTRIBUTION(), owner);
|
@@ -142,7 +141,6 @@ contract RegistryService is
|
|
142
141
|
returns(NftId nftId)
|
143
142
|
{
|
144
143
|
_verifyObjectInfo(info, POLICY());
|
145
|
-
|
146
144
|
nftId = getRegistry().register(info);
|
147
145
|
}
|
148
146
|
|
@@ -152,7 +150,6 @@ contract RegistryService is
|
|
152
150
|
returns(NftId nftId)
|
153
151
|
{
|
154
152
|
_verifyObjectInfo(info, BUNDLE());
|
155
|
-
|
156
153
|
nftId = getRegistry().register(info);
|
157
154
|
}
|
158
155
|
|
@@ -162,63 +159,9 @@ contract RegistryService is
|
|
162
159
|
returns(NftId nftId)
|
163
160
|
{
|
164
161
|
_verifyObjectInfo(info, STAKE());
|
165
|
-
|
166
162
|
nftId = getRegistry().register(info);
|
167
163
|
}
|
168
164
|
|
169
|
-
// from IRegisterable
|
170
|
-
|
171
|
-
function getFunctionConfigs()
|
172
|
-
external
|
173
|
-
pure
|
174
|
-
returns(
|
175
|
-
FunctionConfig[] memory config
|
176
|
-
)
|
177
|
-
{
|
178
|
-
config = new FunctionConfig[](9);
|
179
|
-
|
180
|
-
// order of service registrations MUST be reverse to this array
|
181
|
-
/*config[-1].serviceDomain = STAKE();
|
182
|
-
config[-1].selector = RegistryService.registerStake.selector;*/
|
183
|
-
|
184
|
-
config[0].serviceDomain = POLICY();
|
185
|
-
config[0].selectors = new bytes4[](0);
|
186
|
-
|
187
|
-
config[1].serviceDomain = APPLICATION();
|
188
|
-
config[1].selectors = new bytes4[](1);
|
189
|
-
config[1].selectors[0] = RegistryService.registerPolicy.selector;
|
190
|
-
|
191
|
-
config[2].serviceDomain = CLAIM();
|
192
|
-
config[2].selectors = new bytes4[](0);
|
193
|
-
|
194
|
-
config[3].serviceDomain = PRODUCT();
|
195
|
-
config[3].selectors = new bytes4[](1);
|
196
|
-
config[3].selectors[0] = RegistryService.registerProduct.selector;
|
197
|
-
|
198
|
-
config[4].serviceDomain = POOL();
|
199
|
-
config[4].selectors = new bytes4[](1);
|
200
|
-
config[4].selectors[0] = RegistryService.registerPool.selector;
|
201
|
-
|
202
|
-
// registration of bundle service must preceed registration of pool service
|
203
|
-
config[5].serviceDomain = BUNDLE();
|
204
|
-
config[5].selectors = new bytes4[](1);
|
205
|
-
config[5].selectors[0] = RegistryService.registerBundle.selector;
|
206
|
-
|
207
|
-
// registration of pricing service must preceed registration of application service
|
208
|
-
config[6].serviceDomain = PRICE();
|
209
|
-
config[6].selectors = new bytes4[](0);
|
210
|
-
|
211
|
-
// registration of distribution service must preceed registration of pricing service
|
212
|
-
config[7].serviceDomain = DISTRIBUTION();
|
213
|
-
config[7].selectors = new bytes4[](2);
|
214
|
-
config[7].selectors[0] = RegistryService.registerDistribution.selector;
|
215
|
-
config[7].selectors[1] = RegistryService.registerDistributor.selector;
|
216
|
-
|
217
|
-
config[8].serviceDomain = INSTANCE();
|
218
|
-
config[8].selectors = new bytes4[](1);
|
219
|
-
config[8].selectors[0] = RegistryService.registerInstance.selector;
|
220
|
-
}
|
221
|
-
|
222
165
|
// Internal
|
223
166
|
|
224
167
|
function _getAndVerifyContractInfo(
|
@@ -227,34 +170,37 @@ contract RegistryService is
|
|
227
170
|
address expectedOwner // assume can be 0 when given by other service
|
228
171
|
)
|
229
172
|
internal
|
230
|
-
|
173
|
+
view
|
231
174
|
returns(
|
232
175
|
IRegistry.ObjectInfo memory info
|
233
176
|
)
|
234
177
|
{
|
235
178
|
info = registerable.getInitialInfo();
|
236
|
-
|
179
|
+
|
180
|
+
if(info.objectAddress != address(registerable)) {
|
181
|
+
revert ErrorRegistryServiceRegisterableAddressInvalid(registerable, info.objectAddress);
|
182
|
+
}
|
237
183
|
|
238
184
|
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
239
|
-
revert
|
185
|
+
revert ErrorRegistryServiceRegisterableTypeInvalid(registerable, expectedType, info.objectType);
|
240
186
|
}
|
241
187
|
|
242
188
|
address owner = info.initialOwner;
|
243
189
|
|
244
190
|
if(owner != expectedOwner) { // registerable owner protection
|
245
|
-
revert
|
191
|
+
revert ErrorRegistryServiceRegisterableOwnerInvalid(registerable, expectedOwner, owner);
|
246
192
|
}
|
247
193
|
|
248
194
|
if(owner == address(registerable)) {
|
249
|
-
revert
|
195
|
+
revert ErrorRegistryServiceRegisterableSelfRegistration(registerable);
|
250
196
|
}
|
251
197
|
|
252
198
|
if(owner == address(0)) {
|
253
|
-
revert
|
199
|
+
revert ErrorRegistryServiceRegisterableOwnerZero(registerable);
|
254
200
|
}
|
255
201
|
|
256
202
|
if(getRegistry().isRegistered(owner)) {
|
257
|
-
revert
|
203
|
+
revert ErrorRegistryServiceRegisterableOwnerRegistered(registerable, owner);
|
258
204
|
}
|
259
205
|
}
|
260
206
|
|
@@ -269,17 +215,17 @@ contract RegistryService is
|
|
269
215
|
info.objectAddress = address(0);
|
270
216
|
|
271
217
|
if(info.objectType != expectedType) {// type is checked in registry anyway...but service logic may depend on expected value
|
272
|
-
revert
|
218
|
+
revert ErrorRegistryServiceObjectTypeInvalid(expectedType, info.objectType);
|
273
219
|
}
|
274
220
|
|
275
221
|
address owner = info.initialOwner;
|
276
222
|
|
277
223
|
if(owner == address(0)) {
|
278
|
-
revert
|
224
|
+
revert ErrorRegistryServiceObjectOwnerZero(info.objectType);
|
279
225
|
}
|
280
226
|
|
281
227
|
if(getRegistry().isRegistered(owner)) {
|
282
|
-
revert
|
228
|
+
revert ErrorRegistryServiceObjectOwnerRegistered(info.objectType, owner);
|
283
229
|
}
|
284
230
|
}
|
285
231
|
}
|
@@ -2,6 +2,7 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
|
5
|
+
import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
|
5
6
|
|
6
7
|
import {Registry} from "./Registry.sol";
|
7
8
|
import {IVersionable} from "../shared/IVersionable.sol";
|
@@ -13,25 +14,36 @@ import {TokenRegistry} from "./TokenRegistry.sol";
|
|
13
14
|
contract RegistryServiceManager is
|
14
15
|
ProxyManager
|
15
16
|
{
|
17
|
+
error ErrorRegistryAccessManagerAuthorityZero();
|
18
|
+
error ErrorRegistryAccessManagerRegistryZero();
|
19
|
+
|
16
20
|
bytes32 constant public ACCESS_MANAGER_CREATION_CODE_HASH = 0x0;
|
17
21
|
|
18
22
|
RegistryService private immutable _registryService;
|
19
23
|
|
20
24
|
/// @dev initializes proxy manager with registry service implementation and deploys registry
|
21
25
|
constructor(
|
22
|
-
address
|
23
|
-
address
|
24
|
-
|
26
|
+
address authority, // used by implementation
|
27
|
+
address registry, // used by implementation
|
28
|
+
bytes32 salt
|
29
|
+
)
|
30
|
+
ProxyManager(registry)
|
25
31
|
{
|
26
|
-
|
27
|
-
|
32
|
+
if(authority == address(0)) {
|
33
|
+
revert ErrorRegistryAccessManagerAuthorityZero();
|
34
|
+
}
|
35
|
+
|
36
|
+
if(registry == address(0)) {
|
37
|
+
revert ErrorRegistryAccessManagerRegistryZero();
|
38
|
+
}
|
28
39
|
|
29
40
|
// implementation's initializer func `data` argument
|
30
|
-
RegistryService srv = new RegistryService();
|
31
|
-
bytes memory data = abi.encode(
|
32
|
-
IVersionable versionable =
|
41
|
+
RegistryService srv = new RegistryService{ salt: salt }();
|
42
|
+
bytes memory data = abi.encode(registry, address(this), authority);
|
43
|
+
IVersionable versionable = deployDetermenistic(
|
33
44
|
address(srv),
|
34
|
-
data
|
45
|
+
data,
|
46
|
+
salt);
|
35
47
|
|
36
48
|
_registryService = RegistryService(address(versionable));
|
37
49
|
|