@etherisc/gif-next 0.0.2-9c44ae6-473 → 0.0.2-a0a9c3a-892
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +126 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +136 -10
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +88 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +26 -0
- 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 +160 -8
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +134 -8
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +45 -56
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +26 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +100 -139
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +55 -32
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +2 -2
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +165 -96
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +71 -31
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +15 -2
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +0 -19
- 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/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +923 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +440 -0
- 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 +16 -48
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +8 -24
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +669 -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 +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +664 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +9 -212
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +9 -233
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +984 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +464 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +20 -306
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +10 -42
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +20 -399
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +10 -78
- 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/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/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- 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/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- 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/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/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 +49 -8
- package/contracts/components/IBaseComponent.sol +6 -0
- package/contracts/components/IPoolComponent.sol +4 -0
- package/contracts/components/Pool.sol +27 -3
- package/contracts/components/Product.sol +8 -5
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
- package/contracts/instance/BundleManager.sol +1 -26
- package/contracts/instance/IInstance.sol +4 -0
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +2 -2
- package/contracts/instance/Instance.sol +25 -14
- package/contracts/instance/InstanceAccessManager.sol +6 -6
- package/contracts/instance/InstanceBase.sol +41 -0
- package/contracts/instance/InstanceService.sol +78 -49
- package/contracts/instance/ObjectManager.sol +7 -1
- package/contracts/instance/base/ComponentServiceBase.sol +15 -77
- package/contracts/instance/service/BundleService.sol +260 -0
- package/contracts/instance/service/BundleServiceManager.sol +54 -0
- package/contracts/instance/service/DistributionService.sol +38 -8
- package/contracts/instance/service/IBundleService.sol +45 -0
- package/contracts/instance/service/IPolicyService.sol +87 -0
- package/contracts/instance/service/IPoolService.sol +2 -33
- package/contracts/instance/service/IProductService.sol +2 -72
- package/contracts/instance/service/PolicyService.sol +508 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +40 -144
- package/contracts/instance/service/ProductService.sol +50 -447
- package/contracts/types/RoleId.sol +2 -0
- package/package.json +1 -1
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +0 -101
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1132
- package/contracts/instance/AccessManagedSimple.sol +0 -115
- package/contracts/instance/AccessManagerSimple.sol +0 -692
@@ -10,7 +10,7 @@ import {IRegistry} from "../registry/IRegistry.sol";
|
|
10
10
|
import {IRegisterable} from "../shared/IRegisterable.sol";
|
11
11
|
import {IBaseComponent} from "../components/IBaseComponent.sol";
|
12
12
|
|
13
|
-
import {
|
13
|
+
import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
|
14
14
|
import {Instance} from "./Instance.sol";
|
15
15
|
import {InstanceReader} from "./InstanceReader.sol";
|
16
16
|
import {BundleManager} from "./BundleManager.sol";
|
@@ -22,7 +22,7 @@ interface IInstanceService is IService {
|
|
22
22
|
function createInstanceClone()
|
23
23
|
external
|
24
24
|
returns (
|
25
|
-
|
25
|
+
AccessManagerUpgradeableInitializeable clonedAccessManager,
|
26
26
|
Instance clonedInstance,
|
27
27
|
NftId instanceNftId,
|
28
28
|
InstanceReader clonedInstanceReader,
|
@@ -3,9 +3,10 @@ pragma solidity ^0.8.20;
|
|
3
3
|
|
4
4
|
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
5
5
|
import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
|
6
|
+
import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
|
7
|
+
import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
|
8
|
+
import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
|
6
9
|
|
7
|
-
import {AccessManagedSimple} from "./AccessManagedSimple.sol";
|
8
|
-
import {AccessManagerSimple} from "./AccessManagerSimple.sol";
|
9
10
|
import {IAccess} from "./module/IAccess.sol";
|
10
11
|
import {IBundle} from "./module/IBundle.sol";
|
11
12
|
import {IPolicy} from "./module/IPolicy.sol";
|
@@ -29,14 +30,16 @@ import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
|
29
30
|
import {IDistributionService} from "./service/IDistributionService.sol";
|
30
31
|
import {IPoolService} from "./service/IPoolService.sol";
|
31
32
|
import {IProductService} from "./service/IProductService.sol";
|
33
|
+
import {IPolicyService} from "./service/IPolicyService.sol";
|
34
|
+
import {IBundleService} from "./service/IBundleService.sol";
|
32
35
|
import {VersionPart} from "../types/Version.sol";
|
36
|
+
import {InstanceBase} from "./InstanceBase.sol";
|
33
37
|
|
34
38
|
contract Instance is
|
35
|
-
|
36
|
-
KeyValueStore,
|
39
|
+
AccessManagedUpgradeable,
|
37
40
|
IInstance,
|
38
|
-
|
39
|
-
|
41
|
+
// Initializable,
|
42
|
+
InstanceBase
|
40
43
|
{
|
41
44
|
|
42
45
|
uint64 public constant ADMIN_ROLE = type(uint64).min;
|
@@ -53,21 +56,19 @@ contract Instance is
|
|
53
56
|
|
54
57
|
mapping(ShortString name => address target) internal _target;
|
55
58
|
|
56
|
-
|
59
|
+
AccessManagerUpgradeable internal _accessManager;
|
57
60
|
InstanceReader internal _instanceReader;
|
58
61
|
BundleManager internal _bundleManager;
|
59
62
|
|
60
|
-
|
63
|
+
function initialize(address accessManagerAddress, address registryAddress, NftId registryNftId, address initialOwner)
|
64
|
+
public
|
65
|
+
initializer
|
61
66
|
{
|
62
|
-
initialize(accessManagerAddress, registryAddress, registryNftId, msg.sender);
|
63
|
-
}
|
64
|
-
|
65
|
-
function initialize(address accessManagerAddress, address registryAddress, NftId registryNftId, address initialOwner) public {
|
66
67
|
require(!_initialized, "Contract instance has already been initialized");
|
67
68
|
|
68
|
-
|
69
|
+
__AccessManaged_init(accessManagerAddress);
|
69
70
|
|
70
|
-
_accessManager =
|
71
|
+
_accessManager = AccessManagerUpgradeable(accessManagerAddress);
|
71
72
|
_createRole(RoleIdLib.toRoleId(ADMIN_ROLE), "AdminRole", false, false);
|
72
73
|
_createRole(RoleIdLib.toRoleId(PUBLIC_ROLE), "PublicRole", false, false);
|
73
74
|
|
@@ -434,8 +435,17 @@ contract Instance is
|
|
434
435
|
return IPoolService(_registry.getServiceAddress("PoolService", VersionPart.wrap(3)));
|
435
436
|
}
|
436
437
|
|
438
|
+
function getPolicyService() external view returns (IPolicyService) {
|
439
|
+
return IPolicyService(_registry.getServiceAddress("PolicyService", VersionPart.wrap(3)));
|
440
|
+
}
|
441
|
+
|
442
|
+
function getBundleService() external view returns (IBundleService) {
|
443
|
+
return IBundleService(_registry.getServiceAddress("BundleService", VersionPart.wrap(3)));
|
444
|
+
}
|
445
|
+
|
437
446
|
function setInstanceReader(InstanceReader instanceReader) external restricted() {
|
438
447
|
require(address(_instanceReader) == address(0), "InstanceReader is set");
|
448
|
+
require(instanceReader.getInstanceNftId() == getNftId(), "NFT ID of InstanceReader does not match");
|
439
449
|
_instanceReader = instanceReader;
|
440
450
|
}
|
441
451
|
|
@@ -445,6 +455,7 @@ contract Instance is
|
|
445
455
|
|
446
456
|
function setBundleManager(BundleManager bundleManager) external restricted() {
|
447
457
|
require(address(_bundleManager) == address(0), "BundleManager is set");
|
458
|
+
require(bundleManager.getInstanceNftId() == getNftId(), "NFT ID of BundleManager does not match");
|
448
459
|
_bundleManager = bundleManager;
|
449
460
|
}
|
450
461
|
|
@@ -3,9 +3,9 @@ pragma solidity ^0.8.20;
|
|
3
3
|
|
4
4
|
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
5
5
|
import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
|
6
|
+
import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
|
7
|
+
import {AccessManagerUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagerUpgradeable.sol";
|
6
8
|
|
7
|
-
import {AccessManagedSimple} from "./AccessManagedSimple.sol";
|
8
|
-
import {AccessManagerSimple} from "./AccessManagerSimple.sol";
|
9
9
|
import {IBundle} from "./module/IBundle.sol";
|
10
10
|
import {IPolicy} from "./module/IPolicy.sol";
|
11
11
|
import {IRisk} from "./module/IRisk.sol";
|
@@ -21,7 +21,7 @@ import {StateId, ACTIVE} from "../types/StateId.sol";
|
|
21
21
|
import {Timestamp, TimestampLib} from "../types/Timestamp.sol";
|
22
22
|
|
23
23
|
contract InstanceAccessManager is
|
24
|
-
|
24
|
+
AccessManagedUpgradeable
|
25
25
|
{
|
26
26
|
string public constant ADMIN_ROLE_NAME = "AdminRole";
|
27
27
|
string public constant PUBLIC_ROLE_NAME = "PublicRole";
|
@@ -76,12 +76,12 @@ contract InstanceAccessManager is
|
|
76
76
|
mapping(ShortString name => address target) internal _targetForName;
|
77
77
|
address [] internal _targets;
|
78
78
|
|
79
|
-
|
79
|
+
AccessManagerUpgradeable internal _accessManager;
|
80
80
|
|
81
81
|
constructor(address accessManager)
|
82
82
|
{
|
83
|
-
_accessManager =
|
84
|
-
|
83
|
+
_accessManager = AccessManagerUpgradeable(accessManager);
|
84
|
+
__AccessManaged_init(accessManager);
|
85
85
|
|
86
86
|
_createRole(RoleIdLib.toRoleId(_accessManager.ADMIN_ROLE()), ADMIN_ROLE_NAME, false, false);
|
87
87
|
_createRole(RoleIdLib.toRoleId(_accessManager.PUBLIC_ROLE()), PUBLIC_ROLE_NAME, false, false);
|
@@ -0,0 +1,41 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
5
|
+
import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
|
6
|
+
|
7
|
+
import {IAccess} from "./module/IAccess.sol";
|
8
|
+
import {IBundle} from "./module/IBundle.sol";
|
9
|
+
import {IPolicy} from "./module/IPolicy.sol";
|
10
|
+
import {IRisk} from "./module/IRisk.sol";
|
11
|
+
import {ISetup} from "./module/ISetup.sol";
|
12
|
+
import {Key32, KeyId, Key32Lib} from "../types/Key32.sol";
|
13
|
+
import {KeyValueStore} from "./base/KeyValueStore.sol";
|
14
|
+
import {IInstance} from "./IInstance.sol";
|
15
|
+
import {InstanceReader} from "./InstanceReader.sol";
|
16
|
+
import {BundleManager} from "./BundleManager.sol";
|
17
|
+
import {NftId} from "../types/NftId.sol";
|
18
|
+
import {NumberId} from "../types/NumberId.sol";
|
19
|
+
import {ObjectType, BUNDLE, DISTRIBUTION, INSTANCE, POLICY, POOL, ROLE, PRODUCT, TARGET} from "../types/ObjectType.sol";
|
20
|
+
import {RiskId, RiskIdLib} from "../types/RiskId.sol";
|
21
|
+
import {RoleId, RoleIdLib} from "../types/RoleId.sol";
|
22
|
+
import {StateId, ACTIVE} from "../types/StateId.sol";
|
23
|
+
import {ERC165} from "../shared/ERC165.sol";
|
24
|
+
import {Registerable} from "../shared/Registerable.sol";
|
25
|
+
import {ComponentOwnerService} from "./service/ComponentOwnerService.sol";
|
26
|
+
import {IComponentOwnerService} from "./service/IComponentOwnerService.sol";
|
27
|
+
import {IDistributionService} from "./service/IDistributionService.sol";
|
28
|
+
import {IPoolService} from "./service/IPoolService.sol";
|
29
|
+
import {IProductService} from "./service/IProductService.sol";
|
30
|
+
import {VersionPart} from "../types/Version.sol";
|
31
|
+
import {IInstanceBase} from "./IInstanceBase.sol";
|
32
|
+
|
33
|
+
contract InstanceBase is
|
34
|
+
IInstanceBase,
|
35
|
+
KeyValueStore,
|
36
|
+
ERC165,
|
37
|
+
Registerable
|
38
|
+
{
|
39
|
+
|
40
|
+
|
41
|
+
}
|
@@ -2,8 +2,9 @@
|
|
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";
|
5
6
|
|
6
|
-
import {
|
7
|
+
import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
|
7
8
|
import {InstanceAccessManager} from "./InstanceAccessManager.sol";
|
8
9
|
import {Instance} from "./Instance.sol";
|
9
10
|
import {IInstanceService} from "./IInstanceService.sol";
|
@@ -18,7 +19,7 @@ import {ContractDeployerLib} from "../shared/ContractDeployerLib.sol";
|
|
18
19
|
import {NftId, NftIdLib, zeroNftId} from "../../contracts/types/NftId.sol";
|
19
20
|
import {RoleId} from "../types/RoleId.sol";
|
20
21
|
import {VersionLib} from "../types/Version.sol";
|
21
|
-
import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../types/RoleId.sol";
|
22
|
+
import {ADMIN_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, POLICY_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
|
22
23
|
|
23
24
|
contract InstanceService is Service, IInstanceService {
|
24
25
|
|
@@ -35,7 +36,7 @@ contract InstanceService is Service, IInstanceService {
|
|
35
36
|
function createInstanceClone()
|
36
37
|
external
|
37
38
|
returns (
|
38
|
-
|
39
|
+
AccessManagerUpgradeableInitializeable clonedAccessManager,
|
39
40
|
Instance clonedInstance,
|
40
41
|
NftId clonedInstanceNftId,
|
41
42
|
InstanceReader clonedInstanceReader,
|
@@ -51,8 +52,8 @@ contract InstanceService is Service, IInstanceService {
|
|
51
52
|
// initially set the authority of the access managar to this (being the instance service).
|
52
53
|
// This will allow the instance service to bootstrap the authorizations of the instance
|
53
54
|
// and then transfer the ownership of the access manager to the instance owner once everything is setup
|
54
|
-
clonedAccessManager =
|
55
|
-
clonedAccessManager.
|
55
|
+
clonedAccessManager = AccessManagerUpgradeableInitializeable(Clones.clone(_accessManagerMaster));
|
56
|
+
clonedAccessManager.__AccessManagerUpgradeableInitializeable_init(address(this));
|
56
57
|
|
57
58
|
clonedInstance = Instance(Clones.clone(_instanceMaster));
|
58
59
|
clonedInstance.initialize(address(clonedAccessManager), _registryAddress, registryNftId, msg.sender);
|
@@ -79,7 +80,7 @@ contract InstanceService is Service, IInstanceService {
|
|
79
80
|
emit LogInstanceCloned(address(clonedAccessManager), address(clonedInstance), address(clonedInstanceReader), clonedInstanceNftId);
|
80
81
|
}
|
81
82
|
|
82
|
-
function _grantInitialAuthorizations(
|
83
|
+
function _grantInitialAuthorizations(AccessManagerUpgradeable clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
|
83
84
|
// configure authorization for distribution service on instance
|
84
85
|
address distributionServiceAddress = _registry.getServiceAddress("DistributionService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
85
86
|
clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE().toInt(), distributionServiceAddress, 0);
|
@@ -97,69 +98,88 @@ contract InstanceService is Service, IInstanceService {
|
|
97
98
|
bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
|
98
99
|
instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
|
99
100
|
instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
|
100
|
-
instancePoolServiceSelectors[2] = clonedInstance.createBundle.selector;
|
101
|
-
instancePoolServiceSelectors[3] = clonedInstance.updateBundle.selector;
|
102
101
|
clonedAccessManager.setTargetFunctionRole(
|
103
102
|
address(clonedInstance),
|
104
103
|
instancePoolServiceSelectors,
|
105
104
|
POOL_SERVICE_ROLE().toInt());
|
106
|
-
|
107
|
-
// configure authorization for pool service on bundle manager
|
108
|
-
bytes4[] memory bundleManagerPoolServiceSelectors = new bytes4[](5);
|
109
|
-
bundleManagerPoolServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
|
110
|
-
bundleManagerPoolServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
|
111
|
-
bundleManagerPoolServiceSelectors[2] = clonedBundleManager.add.selector;
|
112
|
-
bundleManagerPoolServiceSelectors[3] = clonedBundleManager.lock.selector;
|
113
|
-
bundleManagerPoolServiceSelectors[4] = clonedBundleManager.unlock.selector;
|
114
|
-
clonedAccessManager.setTargetFunctionRole(
|
115
|
-
address(clonedBundleManager),
|
116
|
-
bundleManagerPoolServiceSelectors,
|
117
|
-
POOL_SERVICE_ROLE().toInt());
|
118
105
|
|
119
106
|
// configure authorization for product service on instance
|
120
107
|
address productServiceAddress = _registry.getServiceAddress("ProductService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
121
108
|
clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE().toInt(), address(productServiceAddress), 0);
|
122
|
-
bytes4[] memory instanceProductServiceSelectors = new bytes4[](
|
109
|
+
bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
|
123
110
|
instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
|
124
111
|
instanceProductServiceSelectors[1] = clonedInstance.updateProductSetup.selector;
|
125
112
|
instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
|
126
113
|
instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
|
127
114
|
instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
|
128
|
-
instanceProductServiceSelectors[5] = clonedInstance.createPolicy.selector;
|
129
|
-
instanceProductServiceSelectors[6] = clonedInstance.updatePolicy.selector;
|
130
|
-
instanceProductServiceSelectors[7] = clonedInstance.updatePolicyState.selector;
|
131
115
|
clonedAccessManager.setTargetFunctionRole(
|
132
116
|
address(clonedInstance),
|
133
117
|
instanceProductServiceSelectors,
|
134
118
|
PRODUCT_SERVICE_ROLE().toInt());
|
135
|
-
}
|
136
119
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
120
|
+
// configure authorization for policy service on instance
|
121
|
+
address policyServiceAddress = _registry.getServiceAddress("PolicyService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
122
|
+
clonedAccessManager.grantRole(POLICY_SERVICE_ROLE().toInt(), address(policyServiceAddress), 0);
|
123
|
+
bytes4[] memory instancePolicyServiceSelectors = new bytes4[](3);
|
124
|
+
instancePolicyServiceSelectors[0] = clonedInstance.createPolicy.selector;
|
125
|
+
instancePolicyServiceSelectors[1] = clonedInstance.updatePolicy.selector;
|
126
|
+
instancePolicyServiceSelectors[2] = clonedInstance.updatePolicyState.selector;
|
127
|
+
clonedAccessManager.setTargetFunctionRole(
|
128
|
+
address(clonedInstance),
|
129
|
+
instancePolicyServiceSelectors,
|
130
|
+
POLICY_SERVICE_ROLE().toInt());
|
131
|
+
|
132
|
+
// configure authorization for bundle service on instance
|
133
|
+
address bundleServiceAddress = _registry.getServiceAddress("BundleService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
134
|
+
clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE().toInt(), address(bundleServiceAddress), 0);
|
135
|
+
bytes4[] memory instanceBundleServiceSelectors = new bytes4[](2);
|
136
|
+
instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
|
137
|
+
instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
|
138
|
+
clonedAccessManager.setTargetFunctionRole(
|
139
|
+
address(clonedInstance),
|
140
|
+
instanceBundleServiceSelectors,
|
141
|
+
BUNDLE_SERVICE_ROLE().toInt());
|
143
142
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
143
|
+
// configure authorization for bundle service on bundle manager
|
144
|
+
bytes4[] memory bundleManagerBundleServiceSelectors = new bytes4[](5);
|
145
|
+
bundleManagerBundleServiceSelectors[0] = clonedBundleManager.linkPolicy.selector;
|
146
|
+
bundleManagerBundleServiceSelectors[1] = clonedBundleManager.unlinkPolicy.selector;
|
147
|
+
bundleManagerBundleServiceSelectors[2] = clonedBundleManager.add.selector;
|
148
|
+
bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
|
149
|
+
bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
|
150
|
+
clonedAccessManager.setTargetFunctionRole(
|
151
|
+
address(clonedBundleManager),
|
152
|
+
bundleManagerBundleServiceSelectors,
|
153
|
+
BUNDLE_SERVICE_ROLE().toInt());
|
149
154
|
}
|
150
155
|
|
151
|
-
function
|
152
|
-
require(
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
+
function setMasterInstance(address accessManagerAddress, address instanceAddress, address instanceReaderAddress, address bundleManagerAddress) external onlyOwner {
|
157
|
+
require( _accessManagerMaster == address(0), "ERROR:CRD-001:ACCESS_MANAGER_MASTER_ALREADY_SET");
|
158
|
+
require( _instanceMaster == address(0), "ERROR:CRD-002:INSTANCE_MASTER_ALREADY_SET");
|
159
|
+
require( _instanceBundleManagerMaster == address(0), "ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
|
160
|
+
|
161
|
+
require (accessManagerAddress != address(0), "ERROR:CRD-005:ACCESS_MANAGER_ZERO");
|
162
|
+
require (instanceAddress != address(0), "ERROR:CRD-006:INSTANCE_ZERO");
|
163
|
+
require (instanceReaderAddress != address(0), "ERROR:CRD-007:INSTANCE_READER_ZERO");
|
164
|
+
require (bundleManagerAddress != address(0), "ERROR:CRD-008:BUNDLE_MANAGER_ZERO");
|
165
|
+
|
166
|
+
Instance instance = Instance(instanceAddress);
|
167
|
+
InstanceReader instanceReader = InstanceReader(instanceReaderAddress);
|
168
|
+
BundleManager bundleManager = BundleManager(bundleManagerAddress);
|
169
|
+
|
170
|
+
require(instance.authority() == accessManagerAddress, "ERROR:CRD-009:INSTANCE_AUTHORITY_MISMATCH");
|
171
|
+
require(instanceReader.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-010:INSTANCE_READER_INSTANCE_MISMATCH");
|
172
|
+
require(bundleManager.getInstanceNftId() == instance.getNftId(), "ERROR:CRD-011:BUNDLE_MANAGER_INSTANCE_MISMATCH");
|
173
|
+
|
174
|
+
_accessManagerMaster = accessManagerAddress;
|
175
|
+
_instanceMaster = instanceAddress;
|
176
|
+
_instanceReaderMaster = instanceReaderAddress;
|
177
|
+
_instanceBundleManagerMaster = bundleManagerAddress;
|
156
178
|
}
|
157
179
|
|
158
|
-
function
|
159
|
-
|
160
|
-
|
161
|
-
"ERROR:CRD-004:BUNDLE_MANAGER_MASTER_ALREADY_SET");
|
162
|
-
_instanceBundleManagerMaster = bundleManagerMaster;
|
180
|
+
function upgradeInstanceReader(NftId instanceNftId) external {
|
181
|
+
// TODO: ensure this is done by instance owner
|
182
|
+
// TODO: upgrade instance reader of this instance to latest (set above here)
|
163
183
|
}
|
164
184
|
|
165
185
|
function getInstanceReaderMaster() external view returns (address) {
|
@@ -216,12 +236,21 @@ contract InstanceService is Service, IInstanceService {
|
|
216
236
|
_registerInterface(type(IService).interfaceId);
|
217
237
|
_registerInterface(type(IInstanceService).interfaceId);
|
218
238
|
}
|
219
|
-
|
220
|
-
function hasRole(address account, RoleId role, NftId instanceNftId) external view returns (bool) {
|
239
|
+
// TODO use instanceAddress instead of nft
|
240
|
+
/*function hasRole(address account, RoleId role, NftId instanceNftId) external view returns (bool) {
|
221
241
|
IRegistry.ObjectInfo memory instanceObjectInfo = getRegistry().getObjectInfo(instanceNftId);
|
222
242
|
address instanceAddress = instanceObjectInfo.objectAddress;
|
223
243
|
Instance instance = Instance(instanceAddress);
|
224
|
-
|
244
|
+
AccessManagerUpgradeable accessManager = AccessManagerUpgradeable(instance.authority());
|
245
|
+
(bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
|
246
|
+
if (executionDelay > 0) {
|
247
|
+
return false;
|
248
|
+
}
|
249
|
+
return isMember;
|
250
|
+
}*/
|
251
|
+
function hasRole(address account, RoleId role, address instanceAddress) external view returns (bool) {
|
252
|
+
Instance instance = Instance(instanceAddress);
|
253
|
+
AccessManagerUpgradeable accessManager = AccessManagerUpgradeable(instance.authority());
|
225
254
|
(bool isMember, uint32 executionDelay) = accessManager.hasRole(role.toInt(), account);
|
226
255
|
if (executionDelay > 0) {
|
227
256
|
return false;
|
@@ -21,6 +21,7 @@ contract ObjectManager is
|
|
21
21
|
|
22
22
|
mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _activeObjects;
|
23
23
|
mapping(NftId compnentNftId => LibNftIdSet.Set objects) internal _allObjects;
|
24
|
+
NftId internal _instanceNftId;
|
24
25
|
InstanceReader internal _instanceReader;
|
25
26
|
|
26
27
|
constructor() Cloneable() {
|
@@ -45,7 +46,8 @@ contract ObjectManager is
|
|
45
46
|
|
46
47
|
IInstance instance = IInstance(instanceInfo.objectAddress);
|
47
48
|
_instanceReader = instance.getInstanceReader();
|
48
|
-
|
49
|
+
_instanceNftId = instanceNftId;
|
50
|
+
|
49
51
|
emit LogObjectManagerInitialized(instanceNftId, address(_instanceReader));
|
50
52
|
}
|
51
53
|
|
@@ -53,6 +55,10 @@ contract ObjectManager is
|
|
53
55
|
return _instanceReader;
|
54
56
|
}
|
55
57
|
|
58
|
+
function getInstanceNftId() external view returns (NftId) {
|
59
|
+
return _instanceNftId;
|
60
|
+
}
|
61
|
+
|
56
62
|
function _add(NftId componentNftId, NftId objectNftId) internal {
|
57
63
|
LibNftIdSet.Set storage allSet = _allObjects[componentNftId];
|
58
64
|
LibNftIdSet.Set storage activeSet = _activeObjects[componentNftId];
|
@@ -20,21 +20,6 @@ abstract contract ComponentServiceBase is Service {
|
|
20
20
|
error ExpectedRoleMissing(RoleId expected, address caller);
|
21
21
|
error ComponentTypeInvalid(ObjectType componentType);
|
22
22
|
|
23
|
-
mapping (ObjectType => RoleId) internal _objectTypeToExpectedRole;
|
24
|
-
|
25
|
-
/// @dev modifier to check if caller has a role on the instance the component is registered in
|
26
|
-
modifier onlyComponentOwnerRole(address componentAddress) {
|
27
|
-
BaseComponent component = BaseComponent(componentAddress);
|
28
|
-
ObjectType objectType = _getObjectType(component);
|
29
|
-
RoleId expectedRole = _objectTypeToExpectedRole[objectType];
|
30
|
-
|
31
|
-
address componentOwner = msg.sender;
|
32
|
-
INftOwnable nftOwnable = INftOwnable(address(component.getInstance()));
|
33
|
-
if(! getInstanceService().hasRole(componentOwner, expectedRole, nftOwnable.getNftId())) {
|
34
|
-
revert ExpectedRoleMissing(expectedRole, componentOwner);
|
35
|
-
}
|
36
|
-
_;
|
37
|
-
}
|
38
23
|
|
39
24
|
/// @dev modifier to check if caller is a registered service
|
40
25
|
modifier onlyService() {
|
@@ -43,64 +28,19 @@ abstract contract ComponentServiceBase is Service {
|
|
43
28
|
_;
|
44
29
|
}
|
45
30
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
override
|
52
|
-
{
|
53
|
-
super._initializeService(registry, initialOwner);
|
54
|
-
_objectTypeToExpectedRole[PRODUCT()] = PRODUCT_OWNER_ROLE();
|
55
|
-
_objectTypeToExpectedRole[POOL()] = POOL_OWNER_ROLE();
|
56
|
-
_objectTypeToExpectedRole[DISTRIBUTION()] = DISTRIBUTION_OWNER_ROLE();
|
57
|
-
_objectTypeToExpectedRole[ORACLE()] = ORACLE_OWNER_ROLE();
|
31
|
+
// view functions
|
32
|
+
|
33
|
+
function getRegistryService() public view virtual returns (IRegistryService) {
|
34
|
+
address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
|
35
|
+
return IRegistryService(service);
|
58
36
|
}
|
59
37
|
|
60
38
|
function getInstanceService() public view returns (InstanceService) {
|
61
39
|
return InstanceService(getRegistry().getServiceAddress("InstanceService", getMajorVersion()));
|
62
40
|
}
|
63
41
|
|
64
|
-
|
65
|
-
external
|
66
|
-
onlyComponentOwnerRole(componentAddress)
|
67
|
-
returns (NftId componentNftId)
|
68
|
-
{
|
69
|
-
address componentOwner = msg.sender;
|
70
|
-
BaseComponent component = BaseComponent(componentAddress);
|
71
|
-
ObjectType objectType = _getObjectType(component);
|
72
|
-
IRegistryService registryService = getRegistryService();
|
73
|
-
|
74
|
-
IRegistry.ObjectInfo memory objInfo;
|
75
|
-
bytes memory initialObjData;
|
76
|
-
|
77
|
-
if (objectType == DISTRIBUTION()) {
|
78
|
-
(objInfo, initialObjData) = registryService.registerDistribution(component, componentOwner);
|
79
|
-
} else if (objectType == PRODUCT()) {
|
80
|
-
(objInfo, initialObjData) = registryService.registerProduct(component, componentOwner);
|
81
|
-
} else if (objectType == POOL()) {
|
82
|
-
(objInfo, initialObjData) = registryService.registerPool(component, componentOwner);
|
83
|
-
// TODO: implement this for oracle - currently missing in registry
|
84
|
-
// } else if (objectType == ORACLE()) {
|
85
|
-
// (objInfo, initialObjData) = registryService.registerOracle(component, componentOwner);
|
86
|
-
} else {
|
87
|
-
revert ComponentTypeInvalid(objectType);
|
88
|
-
}
|
89
|
-
|
90
|
-
componentNftId = objInfo.nftId;
|
91
|
-
{
|
92
|
-
IInstance instance = _getInstance(objInfo);
|
93
|
-
_finalizeComponentRegistration(componentNftId, initialObjData, instance);
|
94
|
-
}
|
95
|
-
}
|
96
|
-
|
97
|
-
function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal virtual;
|
42
|
+
// internal view functions
|
98
43
|
|
99
|
-
function _getObjectType(BaseComponent component) internal view returns (ObjectType) {
|
100
|
-
(IRegistry.ObjectInfo memory compInitialInfo, ) = component.getInitialInfo();
|
101
|
-
return compInitialInfo.objectType;
|
102
|
-
}
|
103
|
-
|
104
44
|
function _getInstance(IRegistry.ObjectInfo memory compObjInfo) internal view returns (IInstance) {
|
105
45
|
IRegistry registry = getRegistry();
|
106
46
|
IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(compObjInfo.parentNftId);
|
@@ -108,7 +48,8 @@ abstract contract ComponentServiceBase is Service {
|
|
108
48
|
}
|
109
49
|
|
110
50
|
function _getAndVerifyComponentInfoAndInstance(
|
111
|
-
|
51
|
+
//address component,
|
52
|
+
ObjectType expectedType
|
112
53
|
)
|
113
54
|
internal
|
114
55
|
view
|
@@ -117,18 +58,15 @@ abstract contract ComponentServiceBase is Service {
|
|
117
58
|
IInstance instance
|
118
59
|
)
|
119
60
|
{
|
120
|
-
|
121
|
-
|
61
|
+
IRegistry registry = getRegistry();
|
62
|
+
//TODO redundant check -> just check type
|
63
|
+
//NftId componentNftId = registry.getNftId(component);
|
64
|
+
//require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
|
122
65
|
|
123
|
-
info =
|
124
|
-
require(info.objectType ==
|
66
|
+
info = registry.getObjectInfo(msg.sender);
|
67
|
+
require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
|
125
68
|
|
126
|
-
address instanceAddress =
|
69
|
+
address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
|
127
70
|
instance = IInstance(instanceAddress);
|
128
71
|
}
|
129
|
-
|
130
|
-
function getRegistryService() public view virtual returns (IRegistryService) {
|
131
|
-
address service = getRegistry().getServiceAddress("RegistryService", getMajorVersion());
|
132
|
-
return IRegistryService(service);
|
133
|
-
}
|
134
72
|
}
|