@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,22 +2,22 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
|
5
|
-
import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
|
6
5
|
|
7
|
-
import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
|
8
6
|
import {Instance} from "./Instance.sol";
|
7
|
+
import {IInstance} from "./IInstance.sol";
|
8
|
+
import {InstanceAccessManager} from "./InstanceAccessManager.sol";
|
9
9
|
import {IInstanceService} from "./IInstanceService.sol";
|
10
10
|
import {InstanceReader} from "./InstanceReader.sol";
|
11
11
|
import {BundleManager} from "./BundleManager.sol";
|
12
12
|
import {IRegistry} from "../registry/IRegistry.sol";
|
13
13
|
import {RegistryService} from "../registry/RegistryService.sol";
|
14
|
+
import {ChainNft} from "../registry/ChainNft.sol";
|
14
15
|
import {Service} from "../../contracts/shared/Service.sol";
|
15
16
|
import {IService} from "../shared/IService.sol";
|
16
17
|
import {NftId} from "../../contracts/types/NftId.sol";
|
17
18
|
import {RoleId} from "../types/RoleId.sol";
|
18
|
-
import {
|
19
|
-
import {
|
20
|
-
import {ObjectType, INSTANCE, SERVICE, PRODUCT, POOL, DISTRIBUTION, POLICY, BUNDLE} from "../types/ObjectType.sol";
|
19
|
+
import {ADMIN_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
|
20
|
+
import {ObjectType, INSTANCE, BUNDLE, POLICY, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
|
21
21
|
|
22
22
|
contract InstanceService is Service, IInstanceService {
|
23
23
|
|
@@ -28,11 +28,30 @@ contract InstanceService is Service, IInstanceService {
|
|
28
28
|
|
29
29
|
// TODO update to real hash when instance is stable
|
30
30
|
bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
|
31
|
+
string public constant NAME = "InstanceService";
|
32
|
+
|
33
|
+
modifier onlyInstanceOwner(NftId instanceNftId) {
|
34
|
+
IRegistry registry = getRegistry();
|
35
|
+
ChainNft chainNft = registry.getChainNft();
|
36
|
+
|
37
|
+
if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
|
38
|
+
revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
|
39
|
+
}
|
40
|
+
_;
|
41
|
+
}
|
42
|
+
|
43
|
+
modifier onlyRegisteredService() {
|
44
|
+
address caller = msg.sender;
|
45
|
+
if (! getRegistry().isRegisteredService(caller)) {
|
46
|
+
revert ErrorInstanceServiceRequestUnauhorized(caller);
|
47
|
+
}
|
48
|
+
_;
|
49
|
+
}
|
31
50
|
|
32
51
|
function createInstanceClone()
|
33
52
|
external
|
34
53
|
returns (
|
35
|
-
|
54
|
+
InstanceAccessManager clonedAccessManager,
|
36
55
|
Instance clonedInstance,
|
37
56
|
NftId clonedInstanceNftId,
|
38
57
|
InstanceReader clonedInstanceReader,
|
@@ -43,14 +62,14 @@ contract InstanceService is Service, IInstanceService {
|
|
43
62
|
IRegistry registry = getRegistry();
|
44
63
|
address registryAddress = address(registry);
|
45
64
|
NftId registryNftId = registry.getNftId(registryAddress);
|
46
|
-
address registryServiceAddress = registry.getServiceAddress(
|
65
|
+
address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
|
47
66
|
RegistryService registryService = RegistryService(registryServiceAddress);
|
48
67
|
|
49
68
|
// initially set the authority of the access managar to this (being the instance service).
|
50
69
|
// This will allow the instance service to bootstrap the authorizations of the instance
|
51
70
|
// and then transfer the ownership of the access manager to the instance owner once everything is setup
|
52
|
-
clonedAccessManager =
|
53
|
-
clonedAccessManager.
|
71
|
+
clonedAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
|
72
|
+
clonedAccessManager.__InstanceAccessManager_initialize(address(this));
|
54
73
|
|
55
74
|
clonedInstance = Instance(Clones.clone(_masterInstance));
|
56
75
|
clonedInstance.initialize(address(clonedAccessManager), registryAddress, registryNftId, msg.sender);
|
@@ -71,14 +90,16 @@ contract InstanceService is Service, IInstanceService {
|
|
71
90
|
|
72
91
|
// to complete setup switch instance ownership to the instance owner
|
73
92
|
// TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
|
74
|
-
clonedAccessManager.grantRole(ADMIN_ROLE()
|
75
|
-
clonedAccessManager.revokeRole(ADMIN_ROLE()
|
93
|
+
clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
|
94
|
+
clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
|
76
95
|
|
77
96
|
emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
|
78
97
|
}
|
79
98
|
|
80
|
-
function _grantInitialAuthorizations(
|
81
|
-
|
99
|
+
function _grantInitialAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
|
100
|
+
_createGifRoles(clonedAccessManager);
|
101
|
+
_createGifTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
|
102
|
+
_grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
|
82
103
|
_grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
|
83
104
|
_grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
|
84
105
|
_grantPolicyServiceAuthorizations(clonedAccessManager, clonedInstance);
|
@@ -86,37 +107,55 @@ contract InstanceService is Service, IInstanceService {
|
|
86
107
|
_grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
|
87
108
|
}
|
88
109
|
|
89
|
-
function
|
110
|
+
function _createGifRoles(InstanceAccessManager clonedAccessManager) internal {
|
111
|
+
clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole");
|
112
|
+
clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole");
|
113
|
+
clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole");
|
114
|
+
|
115
|
+
clonedAccessManager.createGifRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
|
116
|
+
clonedAccessManager.createGifRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
|
117
|
+
clonedAccessManager.createGifRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
|
118
|
+
clonedAccessManager.createGifRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
|
119
|
+
clonedAccessManager.createGifRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
|
120
|
+
clonedAccessManager.createGifRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
|
121
|
+
}
|
122
|
+
|
123
|
+
function _createGifTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
|
124
|
+
clonedAccessManager.createGifTarget(address(clonedInstance), "Instance");
|
125
|
+
clonedAccessManager.createGifTarget(address(clonedBundleManager), "BundleManager");
|
126
|
+
}
|
127
|
+
|
128
|
+
function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
90
129
|
// configure authorization for distribution service on instance
|
91
130
|
IRegistry registry = getRegistry();
|
92
|
-
address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(),
|
93
|
-
clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE()
|
131
|
+
address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
|
132
|
+
clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
|
94
133
|
bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](2);
|
95
134
|
instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
|
96
135
|
instanceDistributionServiceSelectors[1] = clonedInstance.updateDistributionSetup.selector;
|
97
136
|
clonedAccessManager.setTargetFunctionRole(
|
98
|
-
|
137
|
+
"Instance",
|
99
138
|
instanceDistributionServiceSelectors,
|
100
|
-
DISTRIBUTION_SERVICE_ROLE()
|
139
|
+
DISTRIBUTION_SERVICE_ROLE());
|
101
140
|
}
|
102
141
|
|
103
|
-
function _grantPoolServiceAuthorizations(
|
142
|
+
function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
104
143
|
// configure authorization for pool service on instance
|
105
|
-
address poolServiceAddress = _registry.getServiceAddress(POOL(),
|
106
|
-
clonedAccessManager.grantRole(POOL_SERVICE_ROLE()
|
144
|
+
address poolServiceAddress = _registry.getServiceAddress(POOL(), getMajorVersion());
|
145
|
+
clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
|
107
146
|
bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
|
108
147
|
instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
|
109
148
|
instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
|
110
149
|
clonedAccessManager.setTargetFunctionRole(
|
111
|
-
|
150
|
+
"Instance",
|
112
151
|
instancePoolServiceSelectors,
|
113
|
-
POOL_SERVICE_ROLE()
|
152
|
+
POOL_SERVICE_ROLE());
|
114
153
|
}
|
115
154
|
|
116
|
-
function _grantProductServiceAuthorizations(
|
155
|
+
function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
117
156
|
// configure authorization for product service on instance
|
118
|
-
address productServiceAddress = _registry.getServiceAddress(PRODUCT(),
|
119
|
-
clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE()
|
157
|
+
address productServiceAddress = _registry.getServiceAddress(PRODUCT(), getMajorVersion());
|
158
|
+
clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
|
120
159
|
bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
|
121
160
|
instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
|
122
161
|
instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
|
@@ -124,36 +163,36 @@ contract InstanceService is Service, IInstanceService {
|
|
124
163
|
instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
|
125
164
|
instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
|
126
165
|
clonedAccessManager.setTargetFunctionRole(
|
127
|
-
|
166
|
+
"Instance",
|
128
167
|
instanceProductServiceSelectors,
|
129
|
-
PRODUCT_SERVICE_ROLE()
|
168
|
+
PRODUCT_SERVICE_ROLE());
|
130
169
|
}
|
131
170
|
|
132
|
-
function _grantPolicyServiceAuthorizations(
|
171
|
+
function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
133
172
|
// configure authorization for policy service on instance
|
134
|
-
address policyServiceAddress = _registry.getServiceAddress(POLICY(),
|
135
|
-
clonedAccessManager.grantRole(POLICY_SERVICE_ROLE()
|
173
|
+
address policyServiceAddress = _registry.getServiceAddress(POLICY(), getMajorVersion());
|
174
|
+
clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), address(policyServiceAddress));
|
136
175
|
bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
|
137
176
|
instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
|
138
177
|
instancePolicyServiceSelectors[1] = clonedInstance.updatePolicy.selector;
|
139
178
|
instancePolicyServiceSelectors[2] = clonedInstance.updatePolicyState.selector;
|
140
179
|
clonedAccessManager.setTargetFunctionRole(
|
141
|
-
|
180
|
+
"Instance",
|
142
181
|
instancePolicyServiceSelectors,
|
143
|
-
POLICY_SERVICE_ROLE()
|
182
|
+
POLICY_SERVICE_ROLE());
|
144
183
|
}
|
145
184
|
|
146
|
-
function _grantBundleServiceAuthorizations(
|
185
|
+
function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
|
147
186
|
// configure authorization for bundle service on instance
|
148
|
-
address bundleServiceAddress = _registry.getServiceAddress(BUNDLE(),
|
149
|
-
clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE()
|
187
|
+
address bundleServiceAddress = _registry.getServiceAddress(BUNDLE(), getMajorVersion());
|
188
|
+
clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
|
150
189
|
bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
|
151
190
|
instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
|
152
191
|
instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
|
153
192
|
clonedAccessManager.setTargetFunctionRole(
|
154
|
-
|
193
|
+
"Instance",
|
155
194
|
instanceBundleServiceSelectors,
|
156
|
-
BUNDLE_SERVICE_ROLE()
|
195
|
+
BUNDLE_SERVICE_ROLE());
|
157
196
|
|
158
197
|
// configure authorization for bundle service on bundle manager
|
159
198
|
bytes4[] memory bundleManagerBundleServiceSelectors = new bytes4[](5);
|
@@ -163,21 +202,21 @@ contract InstanceService is Service, IInstanceService {
|
|
163
202
|
bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
|
164
203
|
bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
|
165
204
|
clonedAccessManager.setTargetFunctionRole(
|
166
|
-
|
205
|
+
"BundleManager",
|
167
206
|
bundleManagerBundleServiceSelectors,
|
168
|
-
BUNDLE_SERVICE_ROLE()
|
207
|
+
BUNDLE_SERVICE_ROLE());
|
169
208
|
}
|
170
209
|
|
171
|
-
function _grantInstanceServiceAuthorizations(
|
210
|
+
function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
172
211
|
// configure authorization for instance service on instance
|
173
|
-
address instanceServiceAddress = _registry.getServiceAddress(INSTANCE(),
|
174
|
-
clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE()
|
212
|
+
address instanceServiceAddress = _registry.getServiceAddress(INSTANCE(), getMajorVersion());
|
213
|
+
clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
|
175
214
|
bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
|
176
215
|
instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
|
177
216
|
clonedAccessManager.setTargetFunctionRole(
|
178
|
-
|
217
|
+
"Instance",
|
179
218
|
instanceInstanceServiceSelectors,
|
180
|
-
INSTANCE_SERVICE_ROLE()
|
219
|
+
INSTANCE_SERVICE_ROLE());
|
181
220
|
}
|
182
221
|
|
183
222
|
function setMasterInstance(address accessManagerAddress, address instanceAddress, address instanceReaderAddress, address bundleManagerAddress) external onlyOwner {
|
@@ -274,26 +313,38 @@ contract InstanceService is Service, IInstanceService {
|
|
274
313
|
_registerInterface(type(IService).interfaceId);
|
275
314
|
_registerInterface(type(IInstanceService).interfaceId);
|
276
315
|
}
|
277
|
-
|
278
|
-
|
279
|
-
IRegistry.ObjectInfo memory instanceObjectInfo = getRegistry().getObjectInfo(instanceNftId);
|
280
|
-
address instanceAddress = instanceObjectInfo.objectAddress;
|
281
|
-
Instance instance = Instance(instanceAddress);
|
282
|
-
AccessManagerUpgradeable accessManager = AccessManagerUpgradeable(instance.authority());
|
283
|
-
(bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
|
284
|
-
if (executionDelay > 0) {
|
285
|
-
return false;
|
286
|
-
}
|
287
|
-
return isMember;
|
288
|
-
}*/
|
289
|
-
function hasRole(address account, RoleId role, address instanceAddress) external view returns (bool) {
|
316
|
+
|
317
|
+
function hasRole(address account, RoleId role, address instanceAddress) public view returns (bool) {
|
290
318
|
Instance instance = Instance(instanceAddress);
|
291
|
-
|
292
|
-
|
293
|
-
if (executionDelay > 0) {
|
294
|
-
return false;
|
295
|
-
}
|
296
|
-
return isMember;
|
319
|
+
InstanceAccessManager accessManager = instance.getInstanceAccessManager();
|
320
|
+
return accessManager.hasRole(role, account);
|
297
321
|
}
|
322
|
+
|
323
|
+
function createTarget(NftId instanceNftId, address targetAddress, string memory targetName) external onlyRegisteredService {
|
324
|
+
IRegistry registry = getRegistry();
|
325
|
+
IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
|
326
|
+
Instance instance = Instance(instanceInfo.objectAddress);
|
327
|
+
InstanceAccessManager accessManager = instance.getInstanceAccessManager();
|
328
|
+
accessManager.createTarget(targetAddress, targetName);
|
329
|
+
}
|
330
|
+
|
331
|
+
function setTargetLocked(string memory targetName, bool locked) external {
|
332
|
+
address componentAddress = msg.sender;
|
333
|
+
IRegistry registry = getRegistry();
|
334
|
+
IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
|
335
|
+
if (componentInfo.nftId.eqz()) {
|
336
|
+
revert ErrorInstanceServiceComponentNotRegistered(componentAddress);
|
337
|
+
}
|
338
|
+
|
339
|
+
// TODO validate component type
|
340
|
+
|
341
|
+
|
342
|
+
address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
|
343
|
+
IInstance instance = IInstance(instanceAddress);
|
344
|
+
|
345
|
+
InstanceAccessManager accessManager = instance.getInstanceAccessManager();
|
346
|
+
accessManager.setTargetClosed(targetName, locked);
|
347
|
+
}
|
348
|
+
|
298
349
|
}
|
299
350
|
|
@@ -7,8 +7,7 @@ import {ProxyManager} from "../shared/ProxyManager.sol";
|
|
7
7
|
import {InstanceService} from "./InstanceService.sol";
|
8
8
|
import {Registry} from "../registry/Registry.sol";
|
9
9
|
import {RegistryService} from "../registry/RegistryService.sol";
|
10
|
-
import {
|
11
|
-
import {SERVICE} from "../types/ObjectType.sol";
|
10
|
+
import {REGISTRY} from "../types/ObjectType.sol";
|
12
11
|
|
13
12
|
contract InstanceServiceManager is ProxyManager {
|
14
13
|
|
@@ -29,10 +28,10 @@ contract InstanceServiceManager is ProxyManager {
|
|
29
28
|
|
30
29
|
_instanceService = InstanceService(address(versionable));
|
31
30
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
//
|
31
|
+
// TODO `this` must have a role or own nft to register service
|
32
|
+
//Registry registry = Registry(registryAddress);
|
33
|
+
//address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _instanceService.getMajorVersion());
|
34
|
+
//RegistryService registryService = RegistryService(registryServiceAddress);
|
36
35
|
//registryService.registerService(_instanceService);
|
37
36
|
// RegistryService registryService = _instanceService.getRegistryService();
|
38
37
|
|
@@ -41,9 +40,6 @@ contract InstanceServiceManager is ProxyManager {
|
|
41
40
|
//_linkToNftOwnable(
|
42
41
|
// address(registryAddress),
|
43
42
|
// address(_instanceService));
|
44
|
-
|
45
|
-
// implies that after this constructor call only upgrade functionality is available
|
46
|
-
_isDeployed = true;
|
47
43
|
}
|
48
44
|
|
49
45
|
//--- view functions ----------------------------------------------------//
|
@@ -4,19 +4,18 @@ pragma solidity ^0.8.19;
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
5
|
import {IRegistryService} from "../../registry/IRegistryService.sol";
|
6
6
|
import {IInstance} from "../../instance/IInstance.sol";
|
7
|
-
import {
|
8
|
-
import {
|
9
|
-
import {
|
7
|
+
import {IAccess} from "../module/IAccess.sol";
|
8
|
+
import {ObjectType, INSTANCE, REGISTRY} from "../../types/ObjectType.sol";
|
9
|
+
import {NftId} from "../../types/NftId.sol";
|
10
|
+
import {RoleId} from "../../types/RoleId.sol";
|
10
11
|
|
11
|
-
import {BaseComponent} from "../../components/BaseComponent.sol";
|
12
|
-
import {Product} from "../../components/Product.sol";
|
13
|
-
import {INftOwnable} from "../../shared/INftOwnable.sol";
|
14
12
|
import {Service} from "../../shared/Service.sol";
|
15
13
|
import {InstanceService} from "../InstanceService.sol";
|
16
|
-
import {
|
14
|
+
import {InstanceAccessManager} from "../InstanceAccessManager.sol";
|
17
15
|
|
18
16
|
abstract contract ComponentServiceBase is Service {
|
19
17
|
|
18
|
+
error ErrorComponentServiceBaseComponentLocked(address componentAddress);
|
20
19
|
error ExpectedRoleMissing(RoleId expected, address caller);
|
21
20
|
error ComponentTypeInvalid(ObjectType componentType);
|
22
21
|
|
@@ -31,20 +30,26 @@ abstract contract ComponentServiceBase is Service {
|
|
31
30
|
// view functions
|
32
31
|
|
33
32
|
function getRegistryService() public view virtual returns (IRegistryService) {
|
34
|
-
address service = getRegistry().getServiceAddress(
|
33
|
+
address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
|
35
34
|
return IRegistryService(service);
|
36
35
|
}
|
37
36
|
|
38
37
|
function getInstanceService() public view returns (InstanceService) {
|
39
|
-
|
38
|
+
address service = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
|
39
|
+
return InstanceService(service);
|
40
40
|
}
|
41
41
|
|
42
42
|
// internal view functions
|
43
43
|
|
44
|
-
function _getInstance(
|
44
|
+
function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
|
45
|
+
IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
|
46
|
+
return IInstance(instanceInfo.objectAddress);
|
47
|
+
}
|
48
|
+
|
49
|
+
function _getInstanceNftId(IRegistry.ObjectInfo memory compObjInfo) internal view returns (NftId) {
|
45
50
|
IRegistry registry = getRegistry();
|
46
51
|
IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(compObjInfo.parentNftId);
|
47
|
-
return
|
52
|
+
return instanceInfo.nftId;
|
48
53
|
}
|
49
54
|
|
50
55
|
function _getAndVerifyComponentInfoAndInstance(
|
@@ -68,5 +73,10 @@ abstract contract ComponentServiceBase is Service {
|
|
68
73
|
|
69
74
|
address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
|
70
75
|
instance = IInstance(instanceAddress);
|
76
|
+
|
77
|
+
InstanceAccessManager accessManager = instance.getInstanceAccessManager();
|
78
|
+
if (accessManager.isTargetLocked(info.objectAddress)) {
|
79
|
+
revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
|
80
|
+
}
|
71
81
|
}
|
72
82
|
}
|
@@ -5,34 +5,44 @@ import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet
|
|
5
5
|
import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
|
6
6
|
|
7
7
|
import {RoleId} from "../../types/RoleId.sol";
|
8
|
+
import {Timestamp} from "../../types/Timestamp.sol";
|
8
9
|
|
9
10
|
interface IAccess {
|
11
|
+
|
10
12
|
struct RoleInfo {
|
11
13
|
ShortString name;
|
12
14
|
bool isCustom;
|
15
|
+
bool isLocked;
|
16
|
+
Timestamp createdAt;
|
17
|
+
Timestamp updatedAt;
|
13
18
|
}
|
14
19
|
|
15
20
|
struct TargetInfo {
|
16
21
|
ShortString name;
|
17
22
|
bool isCustom;
|
23
|
+
bool isLocked;
|
24
|
+
Timestamp createdAt;
|
25
|
+
Timestamp updatedAt;
|
18
26
|
}
|
19
27
|
|
20
|
-
error
|
21
|
-
error
|
22
|
-
error
|
23
|
-
error
|
24
|
-
error
|
25
|
-
|
26
|
-
error
|
27
|
-
error
|
28
|
-
error
|
29
|
-
error
|
30
|
-
error
|
31
|
-
error
|
32
|
-
error
|
33
|
-
error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
|
34
|
-
error ErrorGrantNonexstentRole(RoleId roleId);
|
35
|
-
error ErrorRevokeNonexstentRole(RoleId roleId);
|
36
|
-
error ErrorRenounceNonexstentRole(RoleId roleId);
|
28
|
+
error ErrorIAccessRoleIdInvalid(RoleId roleId);
|
29
|
+
error ErrorIAccessRoleIdTooBig(RoleId roleId);
|
30
|
+
error ErrorIAccessRoleIdTooSmall(RoleId roleId);
|
31
|
+
error ErrorIAccessRoleIdAlreadyExists(RoleId roleId, ShortString name);
|
32
|
+
error ErrorIAccessRoleIdNotActive(RoleId roleId);
|
33
|
+
error ErrorIAccessRoleNameEmpty(RoleId roleId);
|
34
|
+
error ErrorIAccessRoleNameNotUnique(RoleId roleId, ShortString name);
|
35
|
+
error ErrorIAccessRoleInvalidUpdate(RoleId roleId, bool isCustom);
|
36
|
+
error ErrorIAccessRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
|
37
|
+
error ErrorIAccessSetLockedForNonexstentRole(RoleId roleId);
|
38
|
+
error ErrorIAccessGrantNonexstentRole(RoleId roleId);
|
39
|
+
error ErrorIAccessRevokeNonexstentRole(RoleId roleId);
|
40
|
+
error ErrorIAccessRenounceNonexstentRole(RoleId roleId);
|
37
41
|
|
42
|
+
error ErrorIAccessTargetAddressZero();
|
43
|
+
error ErrorIAccessTargetAlreadyExists(address target, ShortString name);
|
44
|
+
error ErrorIAccessTargetNameEmpty(address target);
|
45
|
+
error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
|
46
|
+
error ErrorIAccessSetLockedForNonexstentTarget(address target);
|
47
|
+
error ErrorIAccessTargetLocked(address target);
|
38
48
|
}
|
@@ -186,6 +186,21 @@ contract BundleService is
|
|
186
186
|
linkPolicy(instance, policyNftId);
|
187
187
|
}
|
188
188
|
|
189
|
+
function increaseBalance(IInstance instance,
|
190
|
+
NftId bundleNftId,
|
191
|
+
uint256 amount
|
192
|
+
)
|
193
|
+
external
|
194
|
+
onlyService
|
195
|
+
{
|
196
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
197
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
198
|
+
|
199
|
+
bundleInfo.balanceAmount += amount;
|
200
|
+
|
201
|
+
instance.updateBundle(bundleNftId, bundleInfo, KEEP_STATE());
|
202
|
+
}
|
203
|
+
|
189
204
|
/// @dev links policy to bundle
|
190
205
|
function linkPolicy(IInstance instance, NftId policyNftId)
|
191
206
|
internal
|
@@ -6,8 +6,7 @@ import {ProxyManager} from "../../shared/ProxyManager.sol";
|
|
6
6
|
import {BundleService} from "./BundleService.sol";
|
7
7
|
import {Registry} from "../../registry/Registry.sol";
|
8
8
|
import {RegistryService} from "../../registry/RegistryService.sol";
|
9
|
-
import {
|
10
|
-
import {ObjectType, SERVICE} from "../../types/ObjectType.sol";
|
9
|
+
import {ObjectType, REGISTRY} from "../../types/ObjectType.sol";
|
11
10
|
|
12
11
|
contract BundleServiceManager is ProxyManager {
|
13
12
|
|
@@ -27,10 +26,10 @@ contract BundleServiceManager is ProxyManager {
|
|
27
26
|
|
28
27
|
_bundleService = BundleService(address(versionable));
|
29
28
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
//
|
29
|
+
// TODO `this` must have a role or own nft to register service
|
30
|
+
//Registry registry = Registry(registryAddress);
|
31
|
+
//address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _bundleService.getMajorVersion());
|
32
|
+
//RegistryService registryService = RegistryService(registryServiceAddress);
|
34
33
|
//registryService.registerService(_poolService);
|
35
34
|
|
36
35
|
// TODO no nft to link yet
|
@@ -38,9 +37,6 @@ contract BundleServiceManager is ProxyManager {
|
|
38
37
|
//_linkToNftOwnable(
|
39
38
|
// address(registryAddress),
|
40
39
|
// address(_poolService));
|
41
|
-
|
42
|
-
// implies that after this constructor call only upgrade functionality is available
|
43
|
-
_isDeployed = true;
|
44
40
|
}
|
45
41
|
|
46
42
|
//--- view functions ----------------------------------------------------//
|
@@ -16,7 +16,7 @@ import {IVersionable} from "../../shared/IVersionable.sol";
|
|
16
16
|
import {Versionable} from "../../shared/Versionable.sol";
|
17
17
|
|
18
18
|
import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
|
19
|
-
import {ObjectType,
|
19
|
+
import {ObjectType, REGISTRY, TOKEN, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
|
20
20
|
import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
|
21
21
|
import {Key32} from "../../types/Key32.sol";
|
22
22
|
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
@@ -88,7 +88,7 @@ contract ComponentOwnerService is
|
|
88
88
|
}
|
89
89
|
|
90
90
|
function getRegistryService() public view virtual returns (IRegistryService) {
|
91
|
-
address service = getRegistry().getServiceAddress(
|
91
|
+
address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
|
92
92
|
return IRegistryService(service);
|
93
93
|
}
|
94
94
|
|
@@ -2,11 +2,10 @@
|
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
|
-
import {IRegistryService} from "../../registry/IRegistryService.sol";
|
6
5
|
import {IInstance} from "../../instance/IInstance.sol";
|
6
|
+
import {InstanceAccessManager} from "../InstanceAccessManager.sol";
|
7
7
|
import {InstanceReader} from "../../instance/InstanceReader.sol";
|
8
8
|
import {ISetup} from "../../instance/module/ISetup.sol";
|
9
|
-
import {ITreasury} from "../../instance/module/ITreasury.sol";
|
10
9
|
|
11
10
|
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
12
11
|
import {Fee} from "../../types/Fee.sol";
|
@@ -21,11 +20,8 @@ import {Versionable} from "../../shared/Versionable.sol";
|
|
21
20
|
import {IService} from "../../shared/IService.sol";
|
22
21
|
import {Service} from "../../shared/Service.sol";
|
23
22
|
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
24
|
-
import {IDistributionService} from "./IDistributionService.sol";
|
25
|
-
import {Distribution} from "../../components/Distribution.sol";
|
26
23
|
import {InstanceService} from "../InstanceService.sol";
|
27
|
-
import {
|
28
|
-
import {INftOwnable} from "../../shared/INftOwnable.sol";
|
24
|
+
import {IDistributionService} from "./IDistributionService.sol";
|
29
25
|
import {IBaseComponent} from "../../components/IBaseComponent.sol";
|
30
26
|
|
31
27
|
|
@@ -70,9 +66,10 @@ contract DistributionService is
|
|
70
66
|
bytes memory data;
|
71
67
|
(info, data) = getRegistryService().registerDistribution(distribution, distributionOwner);
|
72
68
|
|
73
|
-
IInstance instance = _getInstance(info);
|
69
|
+
IInstance instance = _getInstance(info.parentNftId);
|
70
|
+
InstanceService instanceService = getInstanceService();
|
74
71
|
|
75
|
-
bool hasRole =
|
72
|
+
bool hasRole = instanceService.hasRole(
|
76
73
|
distributionOwner,
|
77
74
|
DISTRIBUTION_OWNER_ROLE(),
|
78
75
|
address(instance));
|
@@ -84,6 +81,8 @@ contract DistributionService is
|
|
84
81
|
distributionNftId = info.nftId;
|
85
82
|
ISetup.DistributionSetupInfo memory initialSetup = _decodeAndVerifyDistributionSetup(data);
|
86
83
|
instance.createDistributionSetup(distributionNftId, initialSetup);
|
84
|
+
|
85
|
+
instanceService.createTarget(_getInstanceNftId(info), distributionAddress, distribution.getName());
|
87
86
|
}
|
88
87
|
|
89
88
|
function _decodeAndVerifyDistributionSetup(bytes memory data) internal returns(ISetup.DistributionSetupInfo memory setup)
|
@@ -6,8 +6,7 @@ import {ProxyManager} from "../../shared/ProxyManager.sol";
|
|
6
6
|
import {DistributionService} from "./DistributionService.sol";
|
7
7
|
import {Registry} from "../../registry/Registry.sol";
|
8
8
|
import {RegistryService} from "../../registry/RegistryService.sol";
|
9
|
-
import {
|
10
|
-
import {SERVICE} from "../../types/ObjectType.sol";
|
9
|
+
import {REGISTRY} from "../../types/ObjectType.sol";
|
11
10
|
|
12
11
|
contract DistributionServiceManager is ProxyManager {
|
13
12
|
|
@@ -26,11 +25,11 @@ contract DistributionServiceManager is ProxyManager {
|
|
26
25
|
data);
|
27
26
|
|
28
27
|
_distributionService = DistributionService(address(versionable));
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
//
|
28
|
+
|
29
|
+
// TODO `thi` must have a role or own nft to register service
|
30
|
+
//Registry registry = Registry(registryAddress);
|
31
|
+
//address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _distributionService.getMajorVersion());
|
32
|
+
//RegistryService registryService = RegistryService(registryServiceAddress);
|
34
33
|
//registryService.registerService(_distributionService);
|
35
34
|
|
36
35
|
// TODO no nft to link yet
|
@@ -38,9 +37,6 @@ contract DistributionServiceManager is ProxyManager {
|
|
38
37
|
//_linkToNftOwnable(
|
39
38
|
// address(registryAddress),
|
40
39
|
// address(_distributionService));
|
41
|
-
|
42
|
-
// implies that after this constructor call only upgrade functionality is available
|
43
|
-
_isDeployed = true;
|
44
40
|
}
|
45
41
|
|
46
42
|
//--- view functions ----------------------------------------------------//
|