@etherisc/gif-next 0.0.2-9d3eab3-323 → 0.0.2-9f827bd-593
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/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +29 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +33 -102
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +29 -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/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 +33 -130
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +33 -113
- 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 +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/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +13 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +75 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +69 -603
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +221 -114
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.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 +126 -229
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +26 -126
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +11 -0
- 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 +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +69 -24
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +16 -24
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +2 -2
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +36 -14
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +13 -21
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +23 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +107 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +223 -38
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +48 -20
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +36 -14
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +13 -21
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +36 -14
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +8 -8
- 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 +72 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- 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 +85 -59
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +33 -23
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +14 -14
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +13 -13
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +89 -90
- 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/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/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/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 +2 -2
- 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/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 +35 -8
- package/contracts/components/Distribution.sol +1 -1
- package/contracts/components/IBaseComponent.sol +3 -0
- package/contracts/components/Pool.sol +1 -1
- package/contracts/components/Product.sol +1 -1
- package/contracts/instance/IInstance.sol +2 -0
- package/contracts/instance/IInstanceService.sol +9 -3
- package/contracts/instance/Instance.sol +9 -197
- package/contracts/instance/InstanceAccessManager.sol +92 -77
- package/contracts/instance/InstanceService.sol +115 -64
- package/contracts/instance/InstanceServiceManager.sol +5 -9
- package/contracts/instance/base/ComponentServiceBase.sol +21 -11
- package/contracts/instance/module/IAccess.sol +27 -17
- package/contracts/instance/service/BundleService.sol +15 -0
- package/contracts/instance/service/BundleServiceManager.sol +5 -9
- package/contracts/instance/service/ComponentOwnerService.sol +2 -2
- package/contracts/instance/service/DistributionService.sol +7 -8
- package/contracts/instance/service/DistributionServiceManager.sol +6 -10
- package/contracts/instance/service/IBundleService.sol +3 -6
- package/contracts/instance/service/IPolicyService.sol +7 -0
- package/contracts/instance/service/PolicyService.sol +58 -24
- package/contracts/instance/service/PoolService.sol +3 -1
- package/contracts/instance/service/PoolServiceManager.sol +5 -9
- package/contracts/instance/service/ProductService.sol +3 -1
- package/contracts/registry/IRegistry.sol +17 -3
- package/contracts/registry/IRegistryService.sol +1 -1
- package/contracts/registry/Registry.sol +30 -19
- package/contracts/registry/RegistryAccessManager.sol +27 -27
- package/contracts/registry/RegistryService.sol +8 -15
- package/contracts/registry/RegistryServiceManager.sol +4 -2
- package/contracts/registry/ReleaseManager.sol +83 -113
- package/contracts/registry/TokenRegistry.sol +4 -4
- package/contracts/types/RoleId.sol +6 -7
- package/package.json +1 -1
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
@@ -2,29 +2,26 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
5
|
-
import {AccessManager} from "@openzeppelin/contracts/access/manager/AccessManager.sol";
|
6
5
|
|
7
6
|
import {NftId} from "../types/NftId.sol";
|
8
7
|
import {RoleId} from "../types/RoleId.sol";
|
9
|
-
import {ObjectType, zeroObjectType, SERVICE} from "../types/ObjectType.sol";
|
8
|
+
import {ObjectType, ObjectTypeLib, zeroObjectType, REGISTRY, SERVICE} from "../types/ObjectType.sol";
|
10
9
|
import {VersionPart, VersionPartLib} from "../types/Version.sol";
|
10
|
+
import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
|
11
11
|
|
12
|
-
import {IVersionable} from "../shared/IVersionable.sol";
|
13
12
|
import {IService} from "../shared/IService.sol";
|
14
|
-
import {ProxyManager} from "../shared/ProxyManager.sol";
|
15
13
|
|
16
14
|
import {IRegistry} from "./IRegistry.sol";
|
17
15
|
import {Registry} from "./Registry.sol";
|
18
16
|
import {IRegistryService} from "./IRegistryService.sol";
|
19
|
-
import {RegistryService} from "./RegistryService.sol";
|
20
|
-
import {RegistryServiceManager} from "./RegistryServiceManager.sol";
|
21
17
|
import {RegistryAccessManager} from "./RegistryAccessManager.sol";
|
22
18
|
|
23
19
|
|
24
20
|
contract ReleaseManager is AccessManaged
|
25
21
|
{
|
22
|
+
using ObjectTypeLib for ObjectType;
|
23
|
+
|
26
24
|
event LogReleaseCreation(VersionPart version, IService registryService);
|
27
|
-
event LogServiceRegistration(VersionPart majorVersion, ObjectType serviceDomain);
|
28
25
|
event LogReleaseActivation(VersionPart version);
|
29
26
|
|
30
27
|
// createNextRelease
|
@@ -34,7 +31,6 @@ contract ReleaseManager is AccessManaged
|
|
34
31
|
// registerService
|
35
32
|
error NotService();
|
36
33
|
error ServiceNotInRelease(IService service, ObjectType serviceDomain);
|
37
|
-
error ServiceAlreadyRegistered(address service);
|
38
34
|
|
39
35
|
// activateNextRelease
|
40
36
|
//error ReleaseNotCreated();
|
@@ -42,7 +38,7 @@ contract ReleaseManager is AccessManaged
|
|
42
38
|
|
43
39
|
// _getAndVerifyContractInfo
|
44
40
|
error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
|
45
|
-
error NotRegisterableOwner(address
|
41
|
+
error NotRegisterableOwner(address notOwner);
|
46
42
|
error SelfRegistration();
|
47
43
|
error RegisterableOwnerIsRegistered();
|
48
44
|
|
@@ -52,20 +48,10 @@ contract ReleaseManager is AccessManaged
|
|
52
48
|
|
53
49
|
// _verifyAndStoreConfig
|
54
50
|
error ConfigMissing();
|
55
|
-
error
|
56
|
-
error
|
57
|
-
error
|
58
|
-
error ConfigSelectorAlreadyExists(VersionPart serviceVersion, ObjectType serviceDomain);
|
59
|
-
|
60
|
-
struct ReleaseInfo {
|
61
|
-
ObjectType[] types; // service types in release
|
62
|
-
}
|
51
|
+
error ConfigServiceDomainInvalid(uint configArrayIndex, ObjectType domain);
|
52
|
+
error ConfigSelectorZero(uint configArrayIndex);
|
53
|
+
error SelectorAlreadyExists(VersionPart releaseVersion, ObjectType serviceDomain);
|
63
54
|
|
64
|
-
// unique role for some service function
|
65
|
-
struct ConfigInfo {
|
66
|
-
bytes4[] selector; // selector used by service
|
67
|
-
RoleId roleId; // roleId granted to service
|
68
|
-
}
|
69
55
|
|
70
56
|
RegistryAccessManager private immutable _accessManager;
|
71
57
|
IRegistry private immutable _registry;
|
@@ -73,66 +59,68 @@ contract ReleaseManager is AccessManaged
|
|
73
59
|
VersionPart _latest;// latest active version
|
74
60
|
VersionPart immutable _initial;// first active version
|
75
61
|
|
76
|
-
mapping(VersionPart version => ReleaseInfo info) _release;
|
77
|
-
|
78
|
-
mapping(VersionPart version => mapping(ObjectType serviceDomain => ConfigInfo)) _config;
|
62
|
+
mapping(VersionPart version => IRegistry.ReleaseInfo info) _release;
|
79
63
|
|
80
|
-
mapping(VersionPart version => mapping(ObjectType serviceDomain =>
|
64
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => bytes4)) _selector; // registry service function selector assigned to domain
|
81
65
|
|
82
66
|
uint _awaitingRegistration; // "services left to register" counter
|
83
67
|
|
84
|
-
mapping(address => bool)
|
68
|
+
mapping(address registryService => bool isActive) _active;
|
85
69
|
|
86
70
|
constructor(
|
87
71
|
RegistryAccessManager accessManager,
|
88
72
|
VersionPart initialVersion)
|
89
73
|
AccessManaged(accessManager.authority())
|
90
74
|
{
|
75
|
+
require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
|
76
|
+
|
91
77
|
_accessManager = accessManager;
|
92
78
|
|
93
79
|
_initial = initialVersion;
|
94
80
|
|
95
|
-
_registry = new Registry(
|
81
|
+
_registry = new Registry();
|
96
82
|
}
|
97
83
|
|
98
84
|
// TODO deploy proxy and initialize with given implementation instead of using given proxy?
|
99
|
-
|
85
|
+
// IMPORTANT: MUST never be possible to create with access/release manager, token registry
|
86
|
+
function createNextRelease(IRegistryService service)
|
100
87
|
external
|
101
88
|
restricted // GIF_ADMIN_ROLE
|
102
89
|
returns(NftId nftId)
|
103
90
|
{
|
104
|
-
if(!
|
91
|
+
if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
|
105
92
|
revert NotRegistryService();
|
106
93
|
}
|
107
|
-
|
108
|
-
if(
|
94
|
+
// TODO unreliable! MUST guarantee the same authority -> how?
|
95
|
+
if(service.authority() != authority()) {
|
109
96
|
revert UnexpectedServiceAuthority(
|
110
|
-
|
111
|
-
|
97
|
+
authority(),
|
98
|
+
service.authority());
|
112
99
|
}
|
113
100
|
|
114
101
|
(
|
115
102
|
IRegistry.ObjectInfo memory info,
|
116
103
|
bytes memory data
|
117
|
-
) = _getAndVerifyContractInfo(
|
118
|
-
|
119
|
-
VersionPart nextVersion = getNextVersion();
|
120
|
-
_verifyServiceInfo(info, nextVersion, SERVICE());
|
104
|
+
) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
121
105
|
|
122
|
-
|
106
|
+
VersionPart version = getNextVersion();
|
107
|
+
ObjectType domain = REGISTRY();
|
108
|
+
_verifyServiceInfo(info, version, domain);
|
123
109
|
|
124
|
-
|
110
|
+
_createRelease(data);
|
125
111
|
|
126
|
-
|
112
|
+
//setTargetClosed(service, true);
|
127
113
|
|
128
|
-
nftId = _registry.registerService(info);
|
114
|
+
nftId = _registry.registerService(info, version, domain);
|
129
115
|
|
130
116
|
// external call
|
131
|
-
|
117
|
+
service.linkToRegisteredNftId();
|
132
118
|
|
133
|
-
emit LogReleaseCreation(
|
119
|
+
emit LogReleaseCreation(version, service);
|
134
120
|
}
|
135
121
|
|
122
|
+
// TODO adding service to release -> synchronized with proxy upgrades or simple addServiceToRelease(service, version, selector)?
|
123
|
+
// TODO removing service from release? -> set _active to false forever, but keep all other records?
|
136
124
|
function registerService(IService service)
|
137
125
|
external
|
138
126
|
restricted // GIF_MANAGER_ROLE
|
@@ -147,37 +135,35 @@ contract ReleaseManager is AccessManaged
|
|
147
135
|
//bytes memory data
|
148
136
|
) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
149
137
|
|
150
|
-
VersionPart
|
151
|
-
ObjectType
|
138
|
+
VersionPart version = getNextVersion();
|
139
|
+
ObjectType domain = _verifyServiceInfo(info, version, zeroObjectType());
|
152
140
|
|
153
|
-
bytes4[] memory selector =
|
141
|
+
bytes4[] memory selector = new bytes4[](1);
|
142
|
+
selector[0] = _selector[version][domain];
|
154
143
|
|
155
144
|
// service type is in release
|
156
|
-
if(selector
|
157
|
-
revert ServiceNotInRelease(service,
|
145
|
+
if(selector[0] == 0) {
|
146
|
+
revert ServiceNotInRelease(service, domain);
|
158
147
|
}
|
159
148
|
|
160
149
|
// setup and grant unique role
|
161
|
-
address registryService = _registry.getServiceAddress(
|
162
|
-
|
150
|
+
address registryService = _registry.getServiceAddress(REGISTRY(), version);
|
151
|
+
_accessManager.setAndGrantUniqueRole(
|
163
152
|
address(service),
|
164
153
|
registryService,
|
165
154
|
selector);
|
166
155
|
|
167
|
-
_config[nextVersion][serviceDomain].roleId = roleId;
|
168
156
|
_awaitingRegistration--;
|
169
157
|
|
170
158
|
// activate release
|
171
159
|
if(_awaitingRegistration == 0) {
|
172
|
-
_latest =
|
173
|
-
|
160
|
+
_latest = version;
|
161
|
+
_active[registryService] = true;
|
174
162
|
|
175
|
-
emit LogReleaseActivation(
|
163
|
+
emit LogReleaseActivation(version);
|
176
164
|
}
|
177
165
|
|
178
|
-
|
179
|
-
|
180
|
-
nftId = _registry.registerService(info);
|
166
|
+
nftId = _registry.registerService(info, version, domain);
|
181
167
|
|
182
168
|
// external call
|
183
169
|
service.linkToRegisteredNftId();
|
@@ -187,8 +173,8 @@ contract ReleaseManager is AccessManaged
|
|
187
173
|
external
|
188
174
|
restricted // GIF_ADMIN_ROLE
|
189
175
|
{
|
190
|
-
VersionPart
|
191
|
-
address service =
|
176
|
+
VersionPart version = getNextVersion();
|
177
|
+
address service = _registry.getServiceAddress(REGISTRY(), version);
|
192
178
|
|
193
179
|
// release was created
|
194
180
|
if(service == address(0)) {
|
@@ -200,19 +186,19 @@ contract ReleaseManager is AccessManaged
|
|
200
186
|
revert ReleaseRegistrationNotFinished();
|
201
187
|
}
|
202
188
|
|
203
|
-
//setTargetClosed(
|
189
|
+
//setTargetClosed(service, false);
|
204
190
|
|
205
|
-
_latest =
|
206
|
-
|
191
|
+
_latest = version;
|
192
|
+
_active[service] = true;
|
207
193
|
|
208
|
-
LogReleaseActivation(
|
194
|
+
LogReleaseActivation(version);
|
209
195
|
}*/
|
210
196
|
|
211
197
|
//--- view functions ----------------------------------------------------//
|
212
198
|
|
213
199
|
function isActiveRegistryService(address service) external view returns(bool)
|
214
200
|
{
|
215
|
-
return
|
201
|
+
return _active[service];
|
216
202
|
}
|
217
203
|
|
218
204
|
function getRegistry() external view returns(address)
|
@@ -220,14 +206,9 @@ contract ReleaseManager is AccessManaged
|
|
220
206
|
return (address(_registry));
|
221
207
|
}
|
222
208
|
|
223
|
-
function
|
209
|
+
function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
|
224
210
|
{
|
225
|
-
return
|
226
|
-
}
|
227
|
-
|
228
|
-
function getReleaseInfo(VersionPart releaseVersion) external view returns(ReleaseInfo memory)
|
229
|
-
{
|
230
|
-
return _release[releaseVersion];
|
211
|
+
return _release[version];
|
231
212
|
}
|
232
213
|
|
233
214
|
function getNextVersion() public view returns(VersionPart)
|
@@ -249,22 +230,10 @@ contract ReleaseManager is AccessManaged
|
|
249
230
|
|
250
231
|
//--- private functions ----------------------------------------------------//
|
251
232
|
|
252
|
-
function _registerService(address service, VersionPart version, ObjectType serviceDomain)
|
253
|
-
internal
|
254
|
-
{
|
255
|
-
if(_service[version][serviceDomain] > address(0)) {
|
256
|
-
revert ServiceAlreadyRegistered(service);
|
257
|
-
}
|
258
|
-
|
259
|
-
_service[version][serviceDomain] = service;
|
260
|
-
|
261
|
-
emit LogServiceRegistration(version, serviceDomain);
|
262
|
-
}
|
263
|
-
|
264
233
|
function _getAndVerifyContractInfo(
|
265
234
|
IService service,
|
266
235
|
ObjectType expectedType,
|
267
|
-
address expectedOwner // assume
|
236
|
+
address expectedOwner // assume always valid, can not be 0
|
268
237
|
)
|
269
238
|
internal
|
270
239
|
view
|
@@ -312,66 +281,67 @@ contract ReleaseManager is AccessManaged
|
|
312
281
|
function _verifyServiceInfo(
|
313
282
|
IRegistry.ObjectInfo memory info,
|
314
283
|
VersionPart expectedVersion,
|
315
|
-
ObjectType
|
284
|
+
ObjectType expectedDomain
|
316
285
|
)
|
317
286
|
internal
|
318
287
|
view
|
319
288
|
returns(ObjectType)
|
320
289
|
{
|
321
290
|
(
|
322
|
-
ObjectType
|
323
|
-
VersionPart
|
291
|
+
ObjectType domain,
|
292
|
+
VersionPart version
|
324
293
|
) = abi.decode(info.data, (ObjectType, VersionPart));
|
325
294
|
|
326
|
-
if(
|
327
|
-
revert UnexpectedServiceVersion(expectedVersion,
|
295
|
+
if(version != expectedVersion) {
|
296
|
+
revert UnexpectedServiceVersion(expectedVersion, version);
|
328
297
|
}
|
329
298
|
|
330
|
-
if(
|
331
|
-
if(
|
332
|
-
revert UnexpectedServiceDomain(
|
299
|
+
if(expectedDomain.gtz()) {
|
300
|
+
if(domain != expectedDomain) {
|
301
|
+
revert UnexpectedServiceDomain(expectedDomain, domain);
|
333
302
|
}
|
334
303
|
}
|
335
304
|
|
336
|
-
return
|
305
|
+
return domain;
|
337
306
|
}
|
338
307
|
|
339
|
-
|
308
|
+
// TODO check if registry supports types specified in the config array
|
309
|
+
function _createRelease(bytes memory configBytes)
|
340
310
|
internal
|
341
311
|
{
|
342
|
-
VersionPart
|
312
|
+
VersionPart version = getNextVersion();
|
343
313
|
IRegistryService.FunctionConfig[] memory config = abi.decode(configBytes, (IRegistryService.FunctionConfig[]));
|
344
314
|
|
345
315
|
if(config.length == 0) {
|
346
316
|
revert ConfigMissing();
|
347
317
|
}
|
348
318
|
// always in release
|
349
|
-
_release[
|
350
|
-
|
319
|
+
_release[version].domains.push(REGISTRY());
|
351
320
|
for(uint idx = 0; idx < config.length; idx++)
|
352
321
|
{
|
353
|
-
ObjectType
|
354
|
-
bytes4
|
322
|
+
ObjectType domain = config[idx].serviceDomain;
|
323
|
+
bytes4 selector = config[idx].selector;
|
355
324
|
|
356
|
-
// not "registry service"
|
357
|
-
if(
|
325
|
+
// not "registry service" / zero domain
|
326
|
+
if(
|
327
|
+
domain == REGISTRY() ||
|
328
|
+
domain.eqz()
|
329
|
+
) { revert ConfigServiceDomainInvalid(idx, domain); }
|
358
330
|
|
359
|
-
//
|
360
|
-
if(selector
|
361
|
-
|
362
|
-
// no zero selectors
|
363
|
-
for(uint jdx = 0; jdx < selector.length; jdx++) {
|
364
|
-
if(selector[jdx] == 0) { revert ConfigSelectorZero(); }
|
365
|
-
}
|
331
|
+
// selector not zero
|
332
|
+
if(selector == 0) { revert ConfigSelectorZero(idx); }
|
366
333
|
|
367
334
|
// no overwrite
|
368
|
-
if(
|
369
|
-
revert
|
335
|
+
if(_selector[version][domain] > 0) {
|
336
|
+
revert SelectorAlreadyExists(version, domain);
|
370
337
|
}
|
371
338
|
|
372
|
-
|
373
|
-
_release[
|
339
|
+
_selector[version][domain] = selector;
|
340
|
+
_release[version].domains.push(domain);
|
374
341
|
}
|
342
|
+
// TODO set when activated?
|
343
|
+
_release[version].createdAt = TimestampLib.blockTimestamp();
|
344
|
+
//_release[version].updatedAt = TimestampLib.blockTimestamp();
|
375
345
|
|
376
346
|
_awaitingRegistration = config.length;
|
377
347
|
}
|
@@ -6,8 +6,8 @@ import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165C
|
|
6
6
|
|
7
7
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
8
8
|
import {IRegistry} from "./IRegistry.sol";
|
9
|
-
import {
|
10
|
-
import {
|
9
|
+
import {VersionPart} from "../types/Version.sol";
|
10
|
+
import {REGISTRY} from "../types/ObjectType.sol";
|
11
11
|
import {NftOwnable} from "../shared/NftOwnable.sol";
|
12
12
|
|
13
13
|
/// @title contract to register token per GIF major release.
|
@@ -37,8 +37,8 @@ contract TokenRegistry is
|
|
37
37
|
onlyOwner
|
38
38
|
{
|
39
39
|
IRegistry registry = IRegistry(registryAddress);
|
40
|
-
// TODO use _latest instead of next version -> _latest is 0 before first release activation
|
41
|
-
address registryServiceAddress = registry.getServiceAddress(
|
40
|
+
// TODO use _latest instead of `next version` -> but _latest is 0 before first release activation
|
41
|
+
address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getMajorVersionMax());
|
42
42
|
|
43
43
|
_linkToNftOwnable(registryAddress, registryServiceAddress);
|
44
44
|
}
|
@@ -24,20 +24,19 @@ function PRODUCT_OWNER_ROLE_NAME() pure returns (string memory) { return "Produc
|
|
24
24
|
|
25
25
|
function ADMIN_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(0); }
|
26
26
|
|
27
|
-
// TODO correct numbers (maybe they are already defined in RegistryService)
|
28
27
|
function DISTRIBUTION_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(100); }
|
29
28
|
function ORACLE_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(200); }
|
30
29
|
function POOL_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(300); }
|
31
30
|
function PRODUCT_OWNER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(400); }
|
32
31
|
|
33
32
|
|
34
|
-
function
|
35
|
-
function
|
36
|
-
function
|
37
|
-
function
|
38
|
-
function
|
33
|
+
function INSTANCE_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2000); }
|
34
|
+
function DISTRIBUTION_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2100); }
|
35
|
+
function POOL_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2200); }
|
36
|
+
function PRODUCT_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2300); }
|
37
|
+
function POLICY_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2400); }
|
38
|
+
function BUNDLE_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(2500); }
|
39
39
|
|
40
|
-
function INSTANCE_SERVICE_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(11000); }
|
41
40
|
|
42
41
|
function REGISTRY_SERVICE_ADMIN_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1500); }
|
43
42
|
function REGISTRY_SERVICE_MANAGER_ROLE() pure returns (RoleId) { return RoleIdLib.toRoleId(1600); }
|
package/package.json
CHANGED