@etherisc/gif-next 0.0.2-9d3eab3-323 → 0.0.2-9dd1984-016
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/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/{BaseComponent.sol/BaseComponent.json → Component.sol/Component.json} +51 -6
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +51 -104
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{IBaseComponent.sol/IBaseComponent.json → IComponent.sol/IComponent.json} +51 -6
- 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/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 +51 -132
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +56 -120
- 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 +90 -13
- 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 +56 -616
- 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/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ComponentServiceBase.sol/ComponentServiceBase.json → ComponentService.sol/ComponentService.json} +98 -24
- 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 +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +219 -48
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +20 -24
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +131 -38
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +17 -21
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +51 -0
- 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 +308 -60
- 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 +131 -38
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +17 -21
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +131 -38
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +13 -9
- 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/IRegistryService.sol/IRegistryService.json +3 -3
- 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 +17 -17
- 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 +84 -101
- 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/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/Component.sol +177 -0
- package/contracts/components/Distribution.sol +5 -14
- package/contracts/components/{IBaseComponent.sol → IComponent.sol} +12 -6
- package/contracts/components/IProductComponent.sol +2 -2
- package/contracts/components/Pool.sol +7 -20
- package/contracts/components/Product.sol +21 -18
- package/contracts/instance/IInstance.sol +3 -3
- package/contracts/instance/IInstanceBase.sol +0 -1
- package/contracts/instance/IInstanceService.sol +10 -4
- package/contracts/instance/Instance.sol +6 -208
- package/contracts/instance/InstanceAccessManager.sol +92 -77
- package/contracts/instance/InstanceBase.sol +0 -2
- package/contracts/instance/InstanceService.sol +117 -71
- package/contracts/instance/InstanceServiceManager.sol +5 -9
- package/contracts/instance/base/ComponentService.sol +133 -0
- package/contracts/instance/base/IInstanceBase.sol +0 -2
- package/contracts/instance/module/IAccess.sol +27 -17
- package/contracts/instance/service/BundleService.sol +38 -5
- package/contracts/instance/service/BundleServiceManager.sol +5 -9
- package/contracts/instance/service/DistributionService.sol +33 -32
- package/contracts/instance/service/DistributionServiceManager.sol +6 -10
- package/contracts/instance/service/IBundleService.sol +5 -6
- package/contracts/instance/service/IPolicyService.sol +7 -0
- package/contracts/instance/service/PolicyService.sol +62 -27
- package/contracts/instance/service/PoolService.sol +46 -26
- package/contracts/instance/service/PoolServiceManager.sol +5 -9
- package/contracts/instance/service/ProductService.sol +104 -31
- package/contracts/registry/IRegistry.sol +17 -3
- package/contracts/registry/IRegistryService.sol +5 -5
- package/contracts/registry/Registry.sol +30 -19
- package/contracts/registry/RegistryAccessManager.sol +27 -27
- package/contracts/registry/RegistryService.sol +22 -32
- package/contracts/registry/RegistryServiceManager.sol +4 -2
- package/contracts/registry/ReleaseManager.sol +87 -123
- package/contracts/registry/TokenRegistry.sol +4 -4
- package/contracts/shared/IRegisterable.sol +0 -2
- package/contracts/shared/NftOwnable.sol +2 -0
- package/contracts/shared/Service.sol +4 -2
- package/contracts/types/RoleId.sol +6 -7
- package/package.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- 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/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +0 -814
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +0 -466
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +0 -4
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.json +0 -442
- package/contracts/components/BaseComponent.sol +0 -132
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/base/ComponentServiceBase.sol +0 -72
- package/contracts/instance/service/ComponentOwnerService.sol +0 -315
- package/contracts/instance/service/IComponentOwnerService.sol +0 -20
- package/contracts/shared/RegisterableUpgradable.sol +0 -16
@@ -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
|
@@ -33,8 +30,6 @@ contract ReleaseManager is AccessManaged
|
|
33
30
|
|
34
31
|
// registerService
|
35
32
|
error NotService();
|
36
|
-
error ServiceNotInRelease(IService service, ObjectType serviceDomain);
|
37
|
-
error ServiceAlreadyRegistered(address service);
|
38
33
|
|
39
34
|
// activateNextRelease
|
40
35
|
//error ReleaseNotCreated();
|
@@ -42,7 +37,7 @@ contract ReleaseManager is AccessManaged
|
|
42
37
|
|
43
38
|
// _getAndVerifyContractInfo
|
44
39
|
error UnexpectedRegisterableType(ObjectType expected, ObjectType found);
|
45
|
-
error NotRegisterableOwner(address
|
40
|
+
error NotRegisterableOwner(address notOwner);
|
46
41
|
error SelfRegistration();
|
47
42
|
error RegisterableOwnerIsRegistered();
|
48
43
|
|
@@ -52,20 +47,10 @@ contract ReleaseManager is AccessManaged
|
|
52
47
|
|
53
48
|
// _verifyAndStoreConfig
|
54
49
|
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
|
-
}
|
50
|
+
error ConfigServiceDomainInvalid(uint configArrayIndex, ObjectType domain);
|
51
|
+
error ConfigSelectorZero(uint configArrayIndex);
|
52
|
+
error SelectorAlreadyExists(VersionPart releaseVersion, ObjectType serviceDomain);
|
63
53
|
|
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
54
|
|
70
55
|
RegistryAccessManager private immutable _accessManager;
|
71
56
|
IRegistry private immutable _registry;
|
@@ -73,66 +58,69 @@ contract ReleaseManager is AccessManaged
|
|
73
58
|
VersionPart _latest;// latest active version
|
74
59
|
VersionPart immutable _initial;// first active version
|
75
60
|
|
76
|
-
mapping(VersionPart version => ReleaseInfo info) _release;
|
61
|
+
mapping(VersionPart version => IRegistry.ReleaseInfo info) _release;
|
77
62
|
|
78
|
-
mapping(VersionPart version => mapping(ObjectType serviceDomain =>
|
79
|
-
|
80
|
-
mapping(VersionPart version => mapping(ObjectType serviceDomain => address)) _service;
|
63
|
+
mapping(VersionPart version => mapping(ObjectType serviceDomain => bytes4)) _selector; // registry service function selector assigned to domain
|
81
64
|
|
82
65
|
uint _awaitingRegistration; // "services left to register" counter
|
83
66
|
|
84
|
-
mapping(address => bool)
|
67
|
+
mapping(address registryService => bool isActive) _active;
|
85
68
|
|
86
69
|
constructor(
|
87
70
|
RegistryAccessManager accessManager,
|
88
71
|
VersionPart initialVersion)
|
89
72
|
AccessManaged(accessManager.authority())
|
90
73
|
{
|
74
|
+
require(initialVersion.toInt() > 0, "ReleaseManager: initial version is 0");
|
75
|
+
|
91
76
|
_accessManager = accessManager;
|
92
77
|
|
93
78
|
_initial = initialVersion;
|
94
79
|
|
95
|
-
_registry = new Registry(
|
80
|
+
_registry = new Registry();
|
96
81
|
}
|
97
82
|
|
98
83
|
// TODO deploy proxy and initialize with given implementation instead of using given proxy?
|
99
|
-
|
84
|
+
// IMPORTANT: MUST never be possible to create with access/release manager, token registry
|
85
|
+
function createNextRelease(IRegistryService service)
|
100
86
|
external
|
101
87
|
restricted // GIF_ADMIN_ROLE
|
102
88
|
returns(NftId nftId)
|
103
89
|
{
|
104
|
-
if(!
|
90
|
+
if(!service.supportsInterface(type(IRegistryService).interfaceId)) {
|
105
91
|
revert NotRegistryService();
|
106
92
|
}
|
107
|
-
|
108
|
-
|
93
|
+
// TODO unreliable! MUST guarantee the same authority -> how?
|
94
|
+
address serviceAuthority = service.authority();
|
95
|
+
if(serviceAuthority != authority()) {
|
109
96
|
revert UnexpectedServiceAuthority(
|
110
|
-
|
111
|
-
|
97
|
+
authority(),
|
98
|
+
serviceAuthority);
|
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,32 @@ contract ReleaseManager is AccessManaged
|
|
147
135
|
//bytes memory data
|
148
136
|
) = _getAndVerifyContractInfo(service, SERVICE(), msg.sender);
|
149
137
|
|
150
|
-
VersionPart
|
151
|
-
ObjectType
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
138
|
+
VersionPart version = getNextVersion();
|
139
|
+
ObjectType domain = _release[version].domains[_awaitingRegistration];// reversed registration order of services specified in RegistryService config
|
140
|
+
_verifyServiceInfo(info, version, domain);
|
141
|
+
|
142
|
+
// setup and grant unique role if service does registrations
|
143
|
+
address registryService = _registry.getServiceAddress(REGISTRY(), version);
|
144
|
+
bytes4[] memory selector = new bytes4[](1);
|
145
|
+
selector[0] = _selector[version][domain];
|
146
|
+
if(selector[0] != 0) {
|
147
|
+
_accessManager.setAndGrantUniqueRole(
|
148
|
+
address(service),
|
149
|
+
registryService,
|
150
|
+
selector);
|
158
151
|
}
|
159
152
|
|
160
|
-
// setup and grant unique role
|
161
|
-
address registryService = _registry.getServiceAddress(SERVICE(), nextVersion);
|
162
|
-
RoleId roleId = _accessManager.setAndGrantUniqueRole(
|
163
|
-
address(service),
|
164
|
-
registryService,
|
165
|
-
selector);
|
166
|
-
|
167
|
-
_config[nextVersion][serviceDomain].roleId = roleId;
|
168
153
|
_awaitingRegistration--;
|
169
154
|
|
170
155
|
// activate release
|
171
156
|
if(_awaitingRegistration == 0) {
|
172
|
-
_latest =
|
173
|
-
|
157
|
+
_latest = version;
|
158
|
+
_active[registryService] = true;
|
174
159
|
|
175
|
-
emit LogReleaseActivation(
|
160
|
+
emit LogReleaseActivation(version);
|
176
161
|
}
|
177
162
|
|
178
|
-
|
179
|
-
|
180
|
-
nftId = _registry.registerService(info);
|
163
|
+
nftId = _registry.registerService(info, version, domain);
|
181
164
|
|
182
165
|
// external call
|
183
166
|
service.linkToRegisteredNftId();
|
@@ -187,8 +170,8 @@ contract ReleaseManager is AccessManaged
|
|
187
170
|
external
|
188
171
|
restricted // GIF_ADMIN_ROLE
|
189
172
|
{
|
190
|
-
VersionPart
|
191
|
-
address service =
|
173
|
+
VersionPart version = getNextVersion();
|
174
|
+
address service = _registry.getServiceAddress(REGISTRY(), version);
|
192
175
|
|
193
176
|
// release was created
|
194
177
|
if(service == address(0)) {
|
@@ -200,19 +183,19 @@ contract ReleaseManager is AccessManaged
|
|
200
183
|
revert ReleaseRegistrationNotFinished();
|
201
184
|
}
|
202
185
|
|
203
|
-
//setTargetClosed(
|
186
|
+
//setTargetClosed(service, false);
|
204
187
|
|
205
|
-
_latest =
|
206
|
-
|
188
|
+
_latest = version;
|
189
|
+
_active[service] = true;
|
207
190
|
|
208
|
-
LogReleaseActivation(
|
191
|
+
LogReleaseActivation(version);
|
209
192
|
}*/
|
210
193
|
|
211
194
|
//--- view functions ----------------------------------------------------//
|
212
195
|
|
213
196
|
function isActiveRegistryService(address service) external view returns(bool)
|
214
197
|
{
|
215
|
-
return
|
198
|
+
return _active[service];
|
216
199
|
}
|
217
200
|
|
218
201
|
function getRegistry() external view returns(address)
|
@@ -220,14 +203,9 @@ contract ReleaseManager is AccessManaged
|
|
220
203
|
return (address(_registry));
|
221
204
|
}
|
222
205
|
|
223
|
-
function
|
206
|
+
function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory)
|
224
207
|
{
|
225
|
-
return
|
226
|
-
}
|
227
|
-
|
228
|
-
function getReleaseInfo(VersionPart releaseVersion) external view returns(ReleaseInfo memory)
|
229
|
-
{
|
230
|
-
return _release[releaseVersion];
|
208
|
+
return _release[version];
|
231
209
|
}
|
232
210
|
|
233
211
|
function getNextVersion() public view returns(VersionPart)
|
@@ -249,22 +227,10 @@ contract ReleaseManager is AccessManaged
|
|
249
227
|
|
250
228
|
//--- private functions ----------------------------------------------------//
|
251
229
|
|
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
230
|
function _getAndVerifyContractInfo(
|
265
231
|
IService service,
|
266
232
|
ObjectType expectedType,
|
267
|
-
address expectedOwner // assume
|
233
|
+
address expectedOwner // assume always valid, can not be 0
|
268
234
|
)
|
269
235
|
internal
|
270
236
|
view
|
@@ -312,66 +278,64 @@ contract ReleaseManager is AccessManaged
|
|
312
278
|
function _verifyServiceInfo(
|
313
279
|
IRegistry.ObjectInfo memory info,
|
314
280
|
VersionPart expectedVersion,
|
315
|
-
ObjectType
|
281
|
+
ObjectType expectedDomain
|
316
282
|
)
|
317
283
|
internal
|
318
284
|
view
|
319
285
|
returns(ObjectType)
|
320
286
|
{
|
321
287
|
(
|
322
|
-
ObjectType
|
323
|
-
VersionPart
|
288
|
+
ObjectType domain,
|
289
|
+
VersionPart version
|
324
290
|
) = abi.decode(info.data, (ObjectType, VersionPart));
|
325
291
|
|
326
|
-
if(
|
327
|
-
revert UnexpectedServiceVersion(expectedVersion,
|
292
|
+
if(version != expectedVersion) {
|
293
|
+
revert UnexpectedServiceVersion(expectedVersion, version);
|
328
294
|
}
|
329
295
|
|
330
|
-
if(
|
331
|
-
if(
|
332
|
-
revert UnexpectedServiceDomain(
|
296
|
+
if(expectedDomain.gtz()) {
|
297
|
+
if(domain != expectedDomain) {
|
298
|
+
revert UnexpectedServiceDomain(expectedDomain, domain);
|
333
299
|
}
|
334
300
|
}
|
335
301
|
|
336
|
-
return
|
302
|
+
return domain;
|
337
303
|
}
|
338
304
|
|
339
|
-
|
305
|
+
// TODO check if registry supports types specified in the config array
|
306
|
+
function _createRelease(bytes memory configBytes)
|
340
307
|
internal
|
341
308
|
{
|
342
|
-
VersionPart
|
309
|
+
VersionPart version = getNextVersion();
|
343
310
|
IRegistryService.FunctionConfig[] memory config = abi.decode(configBytes, (IRegistryService.FunctionConfig[]));
|
344
311
|
|
345
312
|
if(config.length == 0) {
|
346
313
|
revert ConfigMissing();
|
347
314
|
}
|
348
315
|
// always in release
|
349
|
-
_release[
|
350
|
-
|
316
|
+
_release[version].domains.push(REGISTRY());
|
351
317
|
for(uint idx = 0; idx < config.length; idx++)
|
352
318
|
{
|
353
|
-
ObjectType
|
354
|
-
bytes4
|
319
|
+
ObjectType domain = config[idx].serviceDomain;
|
320
|
+
bytes4 selector = config[idx].selector;
|
355
321
|
|
356
|
-
// not "registry service"
|
357
|
-
if(
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
// no zero selectors
|
363
|
-
for(uint jdx = 0; jdx < selector.length; jdx++) {
|
364
|
-
if(selector[jdx] == 0) { revert ConfigSelectorZero(); }
|
365
|
-
}
|
322
|
+
// not "registry service" / zero domain
|
323
|
+
if(
|
324
|
+
domain == REGISTRY() ||
|
325
|
+
domain.eqz()
|
326
|
+
) { revert ConfigServiceDomainInvalid(idx, domain); }
|
366
327
|
|
367
328
|
// no overwrite
|
368
|
-
if(
|
369
|
-
revert
|
329
|
+
if(_selector[version][domain] > 0) {
|
330
|
+
revert SelectorAlreadyExists(version, domain);
|
370
331
|
}
|
371
332
|
|
372
|
-
|
373
|
-
_release[
|
333
|
+
_selector[version][domain] = selector;
|
334
|
+
_release[version].domains.push(domain);
|
374
335
|
}
|
336
|
+
// TODO set when activated?
|
337
|
+
_release[version].createdAt = TimestampLib.blockTimestamp();
|
338
|
+
//_release[version].updatedAt = TimestampLib.blockTimestamp();
|
375
339
|
|
376
340
|
_awaitingRegistration = config.length;
|
377
341
|
}
|
@@ -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
|
}
|
@@ -5,8 +5,6 @@ import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
|
5
5
|
|
6
6
|
import {INftOwnable} from "./INftOwnable.sol";
|
7
7
|
import {IRegistry} from "../registry/IRegistry.sol";
|
8
|
-
import {NftId} from "../types/NftId.sol";
|
9
|
-
import {ObjectType} from "../types/ObjectType.sol";
|
10
8
|
|
11
9
|
interface IRegisterable is IERC165, INftOwnable {
|
12
10
|
|
@@ -5,8 +5,10 @@ import {INftOwnable} from "./INftOwnable.sol";
|
|
5
5
|
import {IRegistry} from "../registry/IRegistry.sol";
|
6
6
|
import {NftId, zeroNftId} from "../types/NftId.sol";
|
7
7
|
|
8
|
+
// TODO make contract upgradeable
|
8
9
|
contract NftOwnable is INftOwnable {
|
9
10
|
|
11
|
+
// TODO move vars to struct and add _getNftOwnableStorage
|
10
12
|
IRegistry internal _registry;
|
11
13
|
NftId private _nftId;
|
12
14
|
address private _initialOwner;
|
@@ -8,14 +8,16 @@ import {Version, VersionPart, VersionLib} from "../types/Version.sol";
|
|
8
8
|
import {Versionable} from "./Versionable.sol";
|
9
9
|
import {IService} from "./IService.sol";
|
10
10
|
import {IVersionable} from "./IVersionable.sol";
|
11
|
-
import {
|
11
|
+
import {Versionable} from "./Versionable.sol";
|
12
|
+
import {Registerable} from "./Registerable.sol";
|
12
13
|
|
13
14
|
import {IRegistry} from "../registry/IRegistry.sol";
|
14
15
|
|
15
16
|
|
16
17
|
/// @dev service base contract
|
17
18
|
abstract contract Service is
|
18
|
-
|
19
|
+
Registerable,
|
20
|
+
Versionable,
|
19
21
|
IService
|
20
22
|
{
|
21
23
|
function getDomain() public pure virtual override returns(ObjectType);
|
@@ -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