@etherisc/gif-next 0.0.2-f29e479-370 → 0.0.2-f30e0eb-805
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +68 -89
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +113 -140
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +65 -73
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +91 -122
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +256 -189
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +69 -145
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +279 -245
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +73 -162
- 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 +64 -50
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +171 -308
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +98 -40
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +260 -379
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +448 -121
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +120 -227
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +148 -161
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +31 -23
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.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/KeyValueStore.sol/KeyValueStore.json +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +54 -71
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- 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/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +161 -62
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +33 -25
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +137 -140
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +12 -12
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +3 -3
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +505 -91
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +78 -42
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +110 -27
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +93 -96
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +350 -8
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +21 -64
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +81 -0
- 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 +58 -157
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +19 -47
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +114 -17
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +17 -9
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +7 -7
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +4 -4
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
- 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/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +5 -5
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +3 -3
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +7 -7
- 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/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +3 -3
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- 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/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +3 -3
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +3 -3
- 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/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
- 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/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +2 -2
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- 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/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- 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/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +25 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/Component.sol +95 -85
- package/contracts/components/Distribution.sol +12 -19
- package/contracts/components/IComponent.sol +37 -17
- package/contracts/components/IDistributionComponent.sol +1 -22
- package/contracts/components/IPoolComponent.sol +73 -47
- package/contracts/components/IProductComponent.sol +3 -2
- package/contracts/components/Pool.sol +171 -126
- package/contracts/components/Product.sol +26 -18
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +7 -5
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +16 -10
- package/contracts/instance/IInstanceService.sol +18 -5
- package/contracts/instance/Instance.sol +45 -9
- package/contracts/instance/InstanceAccessManager.sol +382 -157
- package/contracts/instance/InstanceReader.sol +7 -10
- package/contracts/instance/InstanceService.sol +174 -155
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +5 -5
- package/contracts/instance/base/KeyValueStore.sol +5 -2
- package/contracts/instance/base/Lifecycle.sol +11 -2
- package/contracts/instance/module/IAccess.sol +20 -13
- package/contracts/instance/module/IBundle.sol +2 -1
- package/contracts/instance/module/IComponents.sol +35 -0
- package/contracts/instance/module/IDistribution.sol +2 -1
- package/contracts/instance/module/IPolicy.sol +26 -1
- package/contracts/instance/module/ISetup.sol +7 -22
- package/contracts/instance/service/ApplicationService.sol +123 -41
- package/contracts/instance/service/BundleService.sol +76 -38
- package/contracts/instance/service/DistributionService.sol +139 -47
- package/contracts/instance/service/IApplicationService.sol +7 -7
- package/contracts/instance/service/IBundleService.sol +19 -11
- package/contracts/instance/service/IDistributionService.sol +19 -4
- package/contracts/instance/service/IPolicyService.sol +3 -20
- package/contracts/instance/service/IPoolService.sol +17 -2
- package/contracts/instance/service/PolicyService.sol +59 -132
- package/contracts/instance/service/PoolService.sol +128 -17
- package/contracts/instance/service/ProductService.sol +10 -2
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +2 -0
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +23 -20
- package/contracts/registry/RegistryService.sol +5 -5
- package/contracts/shared/Registerable.sol +2 -2
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/Fee.sol +1 -0
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +1 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +13 -6
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +1 -0
- package/contracts/types/Timestamp.sol +13 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +1 -1
@@ -17,6 +17,7 @@ import {StateId} from "../types/StateId.sol";
|
|
17
17
|
|
18
18
|
import {IRegistry} from "../registry/IRegistry.sol";
|
19
19
|
import {IBundle} from "../instance/module/IBundle.sol";
|
20
|
+
import {IComponents} from "../instance/module/IComponents.sol";
|
20
21
|
import {IDistribution} from "../instance/module/IDistribution.sol";
|
21
22
|
import {IInstance} from "./IInstance.sol";
|
22
23
|
import {IKeyValueStore} from "../instance/base/IKeyValueStore.sol";
|
@@ -30,19 +31,15 @@ import {TimestampLib} from "../types/Timestamp.sol";
|
|
30
31
|
contract InstanceReader {
|
31
32
|
bool private _initialized;
|
32
33
|
|
33
|
-
IRegistry internal _registry;
|
34
34
|
IInstance internal _instance;
|
35
35
|
IKeyValueStore internal _store;
|
36
36
|
|
37
|
-
function initialize(address
|
37
|
+
function initialize(address instance) public {
|
38
38
|
require(!_initialized, "ERROR:CRD-000:ALREADY_INITIALIZED");
|
39
39
|
|
40
40
|
require(
|
41
|
-
address(
|
42
|
-
"ERROR:CRD-001:
|
43
|
-
|
44
|
-
|
45
|
-
_registry = IRegistry(registry);
|
41
|
+
address(instance) != address(0),
|
42
|
+
"ERROR:CRD-001:INSTANCE_ZERO");
|
46
43
|
|
47
44
|
_instance = IInstance(instance);
|
48
45
|
_store = IKeyValueStore(instance);
|
@@ -151,14 +148,14 @@ contract InstanceReader {
|
|
151
148
|
}
|
152
149
|
}
|
153
150
|
|
154
|
-
function
|
151
|
+
function getComponentInfo(NftId poolNftId)
|
155
152
|
public
|
156
153
|
view
|
157
|
-
returns (
|
154
|
+
returns (IComponents.ComponentInfo memory info)
|
158
155
|
{
|
159
156
|
bytes memory data = _store.getData(toPoolKey(poolNftId));
|
160
157
|
if (data.length > 0) {
|
161
|
-
return abi.decode(data, (
|
158
|
+
return abi.decode(data, (IComponents.ComponentInfo));
|
162
159
|
}
|
163
160
|
}
|
164
161
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
|
5
|
+
import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
|
5
6
|
|
6
7
|
import {Instance} from "./Instance.sol";
|
7
8
|
import {IInstance} from "./IInstance.sol";
|
@@ -9,6 +10,7 @@ import {InstanceAccessManager} from "./InstanceAccessManager.sol";
|
|
9
10
|
import {IInstanceService} from "./IInstanceService.sol";
|
10
11
|
import {InstanceReader} from "./InstanceReader.sol";
|
11
12
|
import {BundleManager} from "./BundleManager.sol";
|
13
|
+
import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
|
12
14
|
import {IRegistry} from "../registry/IRegistry.sol";
|
13
15
|
import {IRegistryService} from "../registry/IRegistryService.sol";
|
14
16
|
import {ChainNft} from "../registry/ChainNft.sol";
|
@@ -16,7 +18,7 @@ import {Service} from "../../contracts/shared/Service.sol";
|
|
16
18
|
import {IService} from "../shared/IService.sol";
|
17
19
|
import {NftId} from "../../contracts/types/NftId.sol";
|
18
20
|
import {RoleId} from "../types/RoleId.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, APPLICATION_SERVICE_ROLE, POLICY_SERVICE_ROLE, CLAIM_SERVICE_ROLE, BUNDLE_SERVICE_ROLE} from "../types/RoleId.sol";
|
21
|
+
import {ADMIN_ROLE, INSTANCE_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, APPLICATION_SERVICE_ROLE, POLICY_SERVICE_ROLE, CLAIM_SERVICE_ROLE, BUNDLE_SERVICE_ROLE, INSTANCE_ROLE} from "../types/RoleId.sol";
|
20
22
|
import {ObjectType, INSTANCE, BUNDLE, APPLICATION, POLICY, CLAIM, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
|
21
23
|
import {IDistributionComponent} from "../components/IDistributionComponent.sol";
|
22
24
|
import {IPoolComponent} from "../components/IPoolComponent.sol";
|
@@ -26,7 +28,7 @@ contract InstanceService is
|
|
26
28
|
Service,
|
27
29
|
IInstanceService
|
28
30
|
{
|
29
|
-
|
31
|
+
address internal _masterOzAccessManager;
|
30
32
|
address internal _masterInstanceAccessManager;
|
31
33
|
address internal _masterInstance;
|
32
34
|
address internal _masterInstanceReader;
|
@@ -35,20 +37,24 @@ contract InstanceService is
|
|
35
37
|
// TODO update to real hash when instance is stable
|
36
38
|
bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
|
37
39
|
|
38
|
-
modifier onlyInstanceOwner(NftId instanceNftId) {
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
|
43
|
-
revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
|
40
|
+
modifier onlyInstanceOwner(NftId instanceNftId) {
|
41
|
+
if(msg.sender != getRegistry().ownerOf(instanceNftId)) {
|
42
|
+
revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
|
44
43
|
}
|
45
44
|
_;
|
46
45
|
}
|
47
|
-
|
46
|
+
// TODO check service domain?
|
47
|
+
// TODO check release version?
|
48
48
|
modifier onlyRegisteredService() {
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
if (! getRegistry().isRegisteredService(msg.sender)) {
|
50
|
+
revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
|
51
|
+
}
|
52
|
+
_;
|
53
|
+
}
|
54
|
+
// TODO check release version?
|
55
|
+
modifier onlyComponent() {
|
56
|
+
if (! getRegistry().isRegisteredComponent(msg.sender)) {
|
57
|
+
revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
|
52
58
|
}
|
53
59
|
_;
|
54
60
|
}
|
@@ -56,7 +62,8 @@ contract InstanceService is
|
|
56
62
|
function createInstanceClone()
|
57
63
|
external
|
58
64
|
returns (
|
59
|
-
|
65
|
+
AccessManagerUpgradeableInitializeable clonedOzAccessManager,
|
66
|
+
InstanceAccessManager clonedInstanceAccessManager,
|
60
67
|
Instance clonedInstance,
|
61
68
|
NftId clonedInstanceNftId,
|
62
69
|
InstanceReader clonedInstanceReader,
|
@@ -70,42 +77,62 @@ contract InstanceService is
|
|
70
77
|
address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
|
71
78
|
IRegistryService registryService = IRegistryService(registryServiceAddress);
|
72
79
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
80
|
+
clonedOzAccessManager = AccessManagerUpgradeableInitializeable(
|
81
|
+
Clones.clone(_masterOzAccessManager));
|
82
|
+
|
83
|
+
// initially grants ADMIN_ROLE to this (being the instance service).
|
84
|
+
// This will allow the instance service to bootstrap the authorizations of the instance.
|
85
|
+
// Instance service will not use oz access manager directlly but through instance access manager instead
|
86
|
+
// Instance service will renounce ADMIN_ROLE when bootstraping is finished
|
87
|
+
clonedOzAccessManager.initialize(address(this));
|
78
88
|
|
79
89
|
clonedInstance = Instance(Clones.clone(_masterInstance));
|
80
|
-
clonedInstance.initialize(
|
90
|
+
clonedInstance.initialize(
|
91
|
+
address(clonedOzAccessManager),
|
92
|
+
registryAddress,
|
93
|
+
instanceOwner);
|
81
94
|
|
82
95
|
clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
|
83
|
-
clonedInstanceReader.initialize(
|
96
|
+
clonedInstanceReader.initialize(address(clonedInstance));
|
84
97
|
clonedInstance.setInstanceReader(clonedInstanceReader);
|
85
98
|
|
86
99
|
clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
|
87
|
-
clonedBundleManager.initialize(address(
|
100
|
+
clonedBundleManager.initialize(address(clonedInstance));
|
88
101
|
clonedInstance.setBundleManager(clonedBundleManager);
|
89
102
|
|
103
|
+
clonedInstanceAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
|
104
|
+
clonedOzAccessManager.grantRole(ADMIN_ROLE().toInt(), address(clonedInstanceAccessManager), 0);
|
105
|
+
clonedInstanceAccessManager.initialize(address(clonedInstance));
|
106
|
+
clonedInstance.setInstanceAccessManager(clonedInstanceAccessManager);
|
107
|
+
|
90
108
|
// TODO amend setters with instance specific , policy manager ...
|
91
109
|
|
92
|
-
_grantInitialAuthorizations(
|
110
|
+
_grantInitialAuthorizations(clonedInstanceAccessManager, clonedInstance, clonedBundleManager, instanceOwner);
|
93
111
|
|
94
|
-
|
95
|
-
// TODO: use a role less powerful than admin, maybe INSTANCE_ADMIN (does not exist yet)
|
96
|
-
clonedAccessManager.grantRole(ADMIN_ROLE(), instanceOwner);
|
97
|
-
clonedAccessManager.revokeRole(ADMIN_ROLE(), address(this));
|
112
|
+
clonedOzAccessManager.renounceRole(ADMIN_ROLE().toInt(), address(this));
|
98
113
|
|
99
114
|
IRegistry.ObjectInfo memory info = registryService.registerInstance(clonedInstance, instanceOwner);
|
100
115
|
clonedInstanceNftId = info.nftId;
|
101
116
|
// clonedInstance.linkToRegisteredNftId();
|
102
117
|
|
103
|
-
emit LogInstanceCloned(
|
118
|
+
emit LogInstanceCloned(
|
119
|
+
address(clonedOzAccessManager),
|
120
|
+
address(clonedInstanceAccessManager),
|
121
|
+
address(clonedInstance),
|
122
|
+
address(clonedBundleManager),
|
123
|
+
address(clonedInstanceReader),
|
124
|
+
clonedInstanceNftId);
|
104
125
|
}
|
105
126
|
|
106
|
-
function _grantInitialAuthorizations(
|
107
|
-
|
108
|
-
|
127
|
+
function _grantInitialAuthorizations(
|
128
|
+
InstanceAccessManager clonedAccessManager,
|
129
|
+
Instance clonedInstance,
|
130
|
+
BundleManager clonedBundleManager,
|
131
|
+
address instanceOwner)
|
132
|
+
internal
|
133
|
+
{
|
134
|
+
_createCoreAndGifRoles(clonedAccessManager);
|
135
|
+
_createCoreTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
|
109
136
|
_grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
|
110
137
|
_grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
|
111
138
|
_grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
|
@@ -114,33 +141,35 @@ contract InstanceService is
|
|
114
141
|
_grantClaimServiceAuthorizations(clonedAccessManager, clonedInstance);
|
115
142
|
_grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
|
116
143
|
_grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
|
144
|
+
_grantInstanceOwnerAuthorizations(clonedAccessManager, instanceOwner);
|
117
145
|
}
|
118
146
|
|
119
|
-
function
|
120
|
-
|
121
|
-
|
122
|
-
clonedAccessManager.
|
123
|
-
|
124
|
-
clonedAccessManager.
|
125
|
-
clonedAccessManager.
|
126
|
-
clonedAccessManager.
|
127
|
-
clonedAccessManager.
|
128
|
-
clonedAccessManager.
|
129
|
-
clonedAccessManager.
|
130
|
-
|
131
|
-
clonedAccessManager.createGifRole(
|
147
|
+
function _createCoreAndGifRoles(InstanceAccessManager clonedAccessManager) internal {
|
148
|
+
// default roles controlled by ADMIN_ROLE -> core roles
|
149
|
+
// all set/granted only once during cloning (the only exception is INSTANCE_OWNER_ROLE, hooked to instance nft)
|
150
|
+
clonedAccessManager.createCoreRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
|
151
|
+
clonedAccessManager.createCoreRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
|
152
|
+
clonedAccessManager.createCoreRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
|
153
|
+
clonedAccessManager.createCoreRole(APPLICATION_SERVICE_ROLE(), "ApplicationServiceRole");
|
154
|
+
clonedAccessManager.createCoreRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
|
155
|
+
clonedAccessManager.createCoreRole(CLAIM_SERVICE_ROLE(), "ClaimServiceRole");
|
156
|
+
clonedAccessManager.createCoreRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
|
157
|
+
clonedAccessManager.createCoreRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
|
158
|
+
// default roles controlled by INSTANCE_OWNER_ROLE -> gif roles
|
159
|
+
clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole", INSTANCE_OWNER_ROLE());
|
160
|
+
clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole", INSTANCE_OWNER_ROLE());
|
161
|
+
clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole", INSTANCE_OWNER_ROLE());
|
132
162
|
}
|
133
163
|
|
134
|
-
function
|
135
|
-
clonedAccessManager.
|
136
|
-
clonedAccessManager.
|
137
|
-
clonedAccessManager.
|
164
|
+
function _createCoreTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
|
165
|
+
clonedAccessManager.createCoreTarget(address(clonedAccessManager), "InstanceAccessManager");
|
166
|
+
clonedAccessManager.createCoreTarget(address(clonedInstance), "Instance");
|
167
|
+
clonedAccessManager.createCoreTarget(address(clonedBundleManager), "BundleManager");
|
138
168
|
}
|
139
169
|
|
140
170
|
function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
141
171
|
// configure authorization for distribution service on instance
|
142
|
-
|
143
|
-
address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
|
172
|
+
address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(), getMajorVersion());
|
144
173
|
clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
|
145
174
|
bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
|
146
175
|
instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
|
@@ -154,7 +183,7 @@ contract InstanceService is
|
|
154
183
|
instanceDistributionServiceSelectors[8] = clonedInstance.createReferral.selector;
|
155
184
|
instanceDistributionServiceSelectors[9] = clonedInstance.updateReferral.selector;
|
156
185
|
instanceDistributionServiceSelectors[10] = clonedInstance.updateReferralState.selector;
|
157
|
-
clonedAccessManager.
|
186
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
158
187
|
"Instance",
|
159
188
|
instanceDistributionServiceSelectors,
|
160
189
|
DISTRIBUTION_SERVICE_ROLE());
|
@@ -167,7 +196,7 @@ contract InstanceService is
|
|
167
196
|
bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
|
168
197
|
instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
|
169
198
|
instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
|
170
|
-
clonedAccessManager.
|
199
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
171
200
|
"Instance",
|
172
201
|
instancePoolServiceSelectors,
|
173
202
|
POOL_SERVICE_ROLE());
|
@@ -183,7 +212,7 @@ contract InstanceService is
|
|
183
212
|
instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
|
184
213
|
instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
|
185
214
|
instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
|
186
|
-
clonedAccessManager.
|
215
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
187
216
|
"Instance",
|
188
217
|
instanceProductServiceSelectors,
|
189
218
|
PRODUCT_SERVICE_ROLE());
|
@@ -197,7 +226,7 @@ contract InstanceService is
|
|
197
226
|
instanceApplicationServiceSelectors[0] = clonedInstance.createApplication.selector;
|
198
227
|
instanceApplicationServiceSelectors[1] = clonedInstance.updateApplication.selector;
|
199
228
|
instanceApplicationServiceSelectors[2] = clonedInstance.updateApplicationState.selector;
|
200
|
-
clonedAccessManager.
|
229
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
201
230
|
"Instance",
|
202
231
|
instanceApplicationServiceSelectors,
|
203
232
|
APPLICATION_SERVICE_ROLE());
|
@@ -210,7 +239,7 @@ contract InstanceService is
|
|
210
239
|
bytes4[] memory instancePolicyServiceSelectors = new bytes4[](2);
|
211
240
|
instancePolicyServiceSelectors[0] = clonedInstance.updatePolicy.selector;
|
212
241
|
instancePolicyServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
|
213
|
-
clonedAccessManager.
|
242
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
214
243
|
"Instance",
|
215
244
|
instancePolicyServiceSelectors,
|
216
245
|
POLICY_SERVICE_ROLE());
|
@@ -224,7 +253,7 @@ contract InstanceService is
|
|
224
253
|
bytes4[] memory instanceClaimServiceSelectors = new bytes4[](0);
|
225
254
|
// instanceClaimServiceSelectors[0] = clonedInstance.updatePolicy.selector;
|
226
255
|
// instanceClaimServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
|
227
|
-
clonedAccessManager.
|
256
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
228
257
|
"Instance",
|
229
258
|
instanceClaimServiceSelectors,
|
230
259
|
CLAIM_SERVICE_ROLE());
|
@@ -234,10 +263,11 @@ contract InstanceService is
|
|
234
263
|
// configure authorization for bundle service on instance
|
235
264
|
address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getMajorVersion());
|
236
265
|
clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
|
237
|
-
bytes4[] memory instanceBundleServiceSelectors = new bytes4[](
|
266
|
+
bytes4[] memory instanceBundleServiceSelectors = new bytes4[](3);
|
238
267
|
instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
|
239
268
|
instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
|
240
|
-
|
269
|
+
instanceBundleServiceSelectors[2] = clonedInstance.updateBundleState.selector;
|
270
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
241
271
|
"Instance",
|
242
272
|
instanceBundleServiceSelectors,
|
243
273
|
BUNDLE_SERVICE_ROLE());
|
@@ -249,59 +279,82 @@ contract InstanceService is
|
|
249
279
|
bundleManagerBundleServiceSelectors[2] = clonedBundleManager.add.selector;
|
250
280
|
bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
|
251
281
|
bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
|
252
|
-
clonedAccessManager.
|
282
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
253
283
|
"BundleManager",
|
254
284
|
bundleManagerBundleServiceSelectors,
|
255
285
|
BUNDLE_SERVICE_ROLE());
|
256
286
|
}
|
257
287
|
|
258
288
|
function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
259
|
-
// configure authorization for instance service on instance
|
289
|
+
// configure authorization for instance service on instance
|
260
290
|
address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
|
261
291
|
clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
|
262
292
|
bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
|
263
293
|
instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
|
264
|
-
clonedAccessManager.
|
294
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
265
295
|
"Instance",
|
266
296
|
instanceInstanceServiceSelectors,
|
267
297
|
INSTANCE_SERVICE_ROLE());
|
268
298
|
|
269
|
-
|
270
|
-
|
271
|
-
clonedAccessManager.
|
299
|
+
// configure authorizations for instance service on instance access manager
|
300
|
+
bytes4[] memory accessManagerInstanceServiceSelectors = new bytes4[](3);
|
301
|
+
accessManagerInstanceServiceSelectors[0] = clonedAccessManager.createGifTarget.selector;
|
302
|
+
accessManagerInstanceServiceSelectors[1] = clonedAccessManager.setTargetLocked.selector;
|
303
|
+
accessManagerInstanceServiceSelectors[2] = clonedAccessManager.setCoreTargetFunctionRole.selector;
|
304
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
272
305
|
"InstanceAccessManager",
|
273
|
-
|
306
|
+
accessManagerInstanceServiceSelectors,
|
274
307
|
INSTANCE_SERVICE_ROLE());
|
275
308
|
}
|
276
309
|
|
310
|
+
function _grantInstanceOwnerAuthorizations(InstanceAccessManager clonedAccessManager, address instanceOwner) internal {
|
311
|
+
// configure authorization for instance owner on instance access manager
|
312
|
+
// instance owner role is granted/revoked ONLY by INSTANCE_ROLE
|
313
|
+
bytes4[] memory accessManagerInstanceOwnerSelectors = new bytes4[](3);
|
314
|
+
accessManagerInstanceOwnerSelectors[0] = clonedAccessManager.createRole.selector;
|
315
|
+
accessManagerInstanceOwnerSelectors[1] = clonedAccessManager.createTarget.selector;
|
316
|
+
accessManagerInstanceOwnerSelectors[2] = clonedAccessManager.setTargetFunctionRole.selector;
|
317
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
318
|
+
"InstanceAccessManager",
|
319
|
+
accessManagerInstanceOwnerSelectors,
|
320
|
+
INSTANCE_OWNER_ROLE());
|
321
|
+
}
|
322
|
+
|
323
|
+
|
277
324
|
function setAndRegisterMasterInstance(address instanceAddress)
|
278
325
|
external
|
279
326
|
onlyOwner
|
280
327
|
returns(NftId masterInstanceNftId)
|
281
328
|
{
|
282
329
|
if(_masterInstance != address(0)) { revert ErrorInstanceServiceMasterInstanceAlreadySet(); }
|
330
|
+
if(_masterOzAccessManager != address(0)) { revert ErrorInstanceServiceMasterOzAccessManagerAlreadySet(); }
|
283
331
|
if(_masterInstanceAccessManager != address(0)) { revert ErrorInstanceServiceMasterInstanceAccessManagerAlreadySet(); }
|
284
332
|
if(_masterInstanceBundleManager != address(0)) { revert ErrorInstanceServiceMasterBundleManagerAlreadySet(); }
|
285
333
|
|
286
334
|
if(instanceAddress == address(0)) { revert ErrorInstanceServiceInstanceAddressZero(); }
|
287
335
|
|
288
336
|
IInstance instance = IInstance(instanceAddress);
|
289
|
-
|
290
|
-
address
|
337
|
+
AccessManagerUpgradeableInitializeable ozAccessManager = AccessManagerUpgradeableInitializeable(instance.authority());
|
338
|
+
address ozAccessManagerAddress = address(ozAccessManager);
|
339
|
+
InstanceAccessManager instanceAccessManager = instance.getInstanceAccessManager();
|
340
|
+
address instanceAccessManagerAddress = address(instanceAccessManager);
|
291
341
|
InstanceReader instanceReader = instance.getInstanceReader();
|
292
342
|
address instanceReaderAddress = address(instanceReader);
|
293
343
|
BundleManager bundleManager = instance.getBundleManager();
|
294
344
|
address bundleManagerAddress = address(bundleManager);
|
295
345
|
|
296
|
-
if(
|
346
|
+
if(ozAccessManagerAddress == address(0)) { revert ErrorInstanceServiceOzAccessManagerZero();}
|
347
|
+
if(instanceAccessManagerAddress == address(0)) { revert ErrorInstanceServiceInstanceAccessManagerZero(); }
|
297
348
|
if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderZero(); }
|
298
349
|
if(bundleManagerAddress == address(0)) { revert ErrorInstanceServiceBundleManagerZero(); }
|
299
350
|
|
300
|
-
if(instance.authority() !=
|
351
|
+
if(instance.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceInstanceAuthorityMismatch(); }
|
352
|
+
if(bundleManager.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceBundleManagerAuthorityMismatch(); }
|
301
353
|
if(instanceReader.getInstance() != instance) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch2(); }
|
302
354
|
if(bundleManager.getInstance() != instance) { revert ErrorInstanceServiceBundleMangerInstanceMismatch(); }
|
303
355
|
|
304
|
-
|
356
|
+
_masterOzAccessManager = ozAccessManagerAddress;
|
357
|
+
_masterInstanceAccessManager = instanceAccessManagerAddress;
|
305
358
|
_masterInstance = instanceAddress;
|
306
359
|
_masterInstanceReader = instanceReaderAddress;
|
307
360
|
_masterInstanceBundleManager = bundleManagerAddress;
|
@@ -325,19 +378,16 @@ contract InstanceService is
|
|
325
378
|
_masterInstanceReader = instanceReaderAddress;
|
326
379
|
}
|
327
380
|
|
328
|
-
|
329
|
-
|
381
|
+
function upgradeInstanceReader(NftId instanceNftId)
|
382
|
+
external
|
383
|
+
onlyInstanceOwner(instanceNftId)
|
384
|
+
{
|
330
385
|
IRegistry registry = getRegistry();
|
331
386
|
IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
|
332
387
|
Instance instance = Instance(instanceInfo.objectAddress);
|
333
|
-
address owner = instance.getOwner();
|
334
|
-
|
335
|
-
if (msg.sender != owner) {
|
336
|
-
revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
|
337
|
-
}
|
338
388
|
|
339
389
|
InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
|
340
|
-
upgradedInstanceReaderClone.initialize(address(
|
390
|
+
upgradedInstanceReaderClone.initialize(address(instance));
|
341
391
|
instance.setInstanceReader(upgradedInstanceReaderClone);
|
342
392
|
}
|
343
393
|
|
@@ -380,97 +430,66 @@ contract InstanceService is
|
|
380
430
|
registerInterface(type(IInstanceService).interfaceId);
|
381
431
|
}
|
382
432
|
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
433
|
+
// all gif targets MUST be childs of instanceNftId
|
434
|
+
function createGifTarget(
|
435
|
+
NftId instanceNftId,
|
436
|
+
address targetAddress,
|
437
|
+
string memory targetName,
|
438
|
+
bytes4[][] memory selectors,
|
439
|
+
RoleId[] memory roles
|
440
|
+
)
|
441
|
+
external
|
442
|
+
onlyRegisteredService
|
443
|
+
{
|
444
|
+
(
|
445
|
+
IInstance instance, // or instanceInfo
|
446
|
+
NftId targetNftId // or targetInfo
|
447
|
+
) = _validateInstanceAndComponent(instanceNftId, targetAddress);
|
388
448
|
|
389
|
-
|
390
|
-
IRegistry registry = getRegistry();
|
391
|
-
IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
|
392
|
-
Instance instance = Instance(instanceInfo.objectAddress);
|
393
|
-
InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
|
449
|
+
InstanceAccessManager accessManager = instance.getInstanceAccessManager();
|
394
450
|
accessManager.createGifTarget(targetAddress, targetName);
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
if (distributionInfo.objectType != DISTRIBUTION()) {
|
402
|
-
revert ErrorInstanceServiceInvalidComponentType(distributionAddress, DISTRIBUTION(), distributionInfo.objectType);
|
451
|
+
// set proposed target config
|
452
|
+
// TODO restriction: for gif targets can set only once and only here?
|
453
|
+
// assume config is a mix of gif and custom roles and no further configuration by INSTANCE_OWNER_ROLE is ever needed?
|
454
|
+
for(uint roleIdx = 0; roleIdx < roles.length; roleIdx++)
|
455
|
+
{
|
456
|
+
accessManager.setCoreTargetFunctionRole(targetName, selectors[roleIdx], roles[roleIdx]);
|
403
457
|
}
|
404
|
-
|
405
|
-
IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
|
406
|
-
Instance instance = Instance(instanceInfo.objectAddress);
|
407
|
-
InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
|
408
|
-
|
409
|
-
bytes4[] memory fctSelectors = new bytes4[](1);
|
410
|
-
fctSelectors[0] = IDistributionComponent.setFees.selector;
|
411
|
-
instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors, DISTRIBUTION_OWNER_ROLE());
|
412
|
-
|
413
|
-
bytes4[] memory fctSelectors2 = new bytes4[](2);
|
414
|
-
fctSelectors2[0] = IDistributionComponent.processSale.selector;
|
415
|
-
fctSelectors2[1] = IDistributionComponent.processRenewal.selector;
|
416
|
-
instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors2, PRODUCT_SERVICE_ROLE());
|
417
458
|
}
|
418
459
|
|
419
|
-
|
460
|
+
// TODO called by component, but target can be component helper...so needs target name
|
461
|
+
// TODO check that targetName associated with component...how???
|
462
|
+
//function setTargetLocked(string memory targetName, bool locked) onlyComponent external {
|
463
|
+
function setComponentLocked(bool locked) onlyComponent external {
|
464
|
+
address componentAddress = msg.sender;
|
420
465
|
IRegistry registry = getRegistry();
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
revert ErrorInstanceServiceInvalidComponentType(poolAddress, POOL(), poolInfo.objectType);
|
425
|
-
}
|
426
|
-
|
427
|
-
IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
|
428
|
-
Instance instance = Instance(instanceInfo.objectAddress);
|
429
|
-
InstanceAccessManager instanceAccessManager = InstanceAccessManager(instance.authority());
|
430
|
-
|
431
|
-
bytes4[] memory fctSelectors = new bytes4[](1);
|
432
|
-
fctSelectors[0] = IPoolComponent.setFees.selector;
|
433
|
-
instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors, POOL_OWNER_ROLE());
|
466
|
+
NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
|
467
|
+
address instanceAddress = registry.getObjectInfo(instanceNftId).objectAddress;
|
468
|
+
IInstance instance = IInstance(instanceAddress);
|
434
469
|
|
435
|
-
|
436
|
-
|
437
|
-
|
470
|
+
InstanceAccessManager accessManager = instance.getInstanceAccessManager();
|
471
|
+
// TODO setLocked by target address?
|
472
|
+
string memory componentName = ShortStrings.toString(accessManager.getTargetInfo(componentAddress).name);
|
473
|
+
accessManager.setTargetLocked(componentName, locked);
|
438
474
|
}
|
439
475
|
|
440
|
-
function
|
476
|
+
function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress)
|
477
|
+
internal
|
478
|
+
view
|
479
|
+
returns (IInstance instance, NftId componentNftId)
|
480
|
+
{
|
441
481
|
IRegistry registry = getRegistry();
|
442
|
-
IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productAddress);
|
443
|
-
|
444
|
-
if (productInfo.objectType != PRODUCT()) {
|
445
|
-
revert ErrorInstanceServiceInvalidComponentType(productAddress, PRODUCT(), productInfo.objectType);
|
446
|
-
}
|
447
|
-
|
448
482
|
IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
bytes4[] memory fctSelectors = new bytes4[](1);
|
453
|
-
fctSelectors[0] = IProductComponent.setFees.selector;
|
454
|
-
instanceAccessManager.setTargetFunctionRole(productName, fctSelectors, PRODUCT_OWNER_ROLE());
|
455
|
-
}
|
483
|
+
if(instanceInfo.objectType != INSTANCE()) {
|
484
|
+
revert ErrorInstanceServiceNotInstance(instanceNftId);
|
485
|
+
}
|
456
486
|
|
457
|
-
function setTargetLocked(string memory targetName, bool locked) external {
|
458
|
-
address componentAddress = msg.sender;
|
459
|
-
IRegistry registry = getRegistry();
|
460
487
|
IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
|
461
|
-
if
|
462
|
-
revert
|
488
|
+
if(componentInfo.parentNftId != instanceNftId) {
|
489
|
+
revert ErrorInstanceServiceInstanceComponentMismatch(instanceNftId, componentInfo.nftId);
|
463
490
|
}
|
464
491
|
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
|
469
|
-
IInstance instance = IInstance(instanceAddress);
|
470
|
-
|
471
|
-
InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
|
472
|
-
accessManager.setTargetClosed(targetName, locked);
|
492
|
+
instance = Instance(instanceInfo.objectAddress);
|
493
|
+
componentNftId = componentInfo.nftId;
|
473
494
|
}
|
474
|
-
|
475
|
-
}
|
476
|
-
|
495
|
+
}
|
@@ -24,18 +24,16 @@ contract ObjectManager is
|
|
24
24
|
IInstance internal _instance; // store instance address -> more flexible, instance may not be registered during ObjectManager initialization
|
25
25
|
|
26
26
|
/// @dev call to initialize MUST be made in the same transaction as cloning of the contract
|
27
|
-
function initialize(
|
28
|
-
|
29
|
-
address registry,
|
30
|
-
address instance
|
31
|
-
)
|
27
|
+
function initialize(address instanceAddress)
|
28
|
+
initializer
|
32
29
|
external
|
33
30
|
{
|
34
|
-
|
31
|
+
IInstance instance = IInstance(instanceAddress);
|
32
|
+
initialize(instance.authority(), instance.getRegistryAddress());
|
35
33
|
|
36
|
-
_instance =
|
34
|
+
_instance = instance;
|
37
35
|
|
38
|
-
emit LogObjectManagerInitialized(
|
36
|
+
emit LogObjectManagerInitialized(instanceAddress);
|
39
37
|
}
|
40
38
|
|
41
39
|
function getInstance() external view returns (IInstance) {
|
@@ -87,10 +87,10 @@ abstract contract ComponentService is Service {
|
|
87
87
|
// check instance has assigned required role to owner
|
88
88
|
instanceNftId = componentInfo.parentNftId;
|
89
89
|
instance = _getInstance(instanceNftId);
|
90
|
-
|
91
|
-
|
92
|
-
requiredRole,
|
93
|
-
|
90
|
+
InstanceAccessManager accessManager = instance.getInstanceAccessManager();
|
91
|
+
bool hasRole = accessManager.hasRole(
|
92
|
+
requiredRole,
|
93
|
+
owner);
|
94
94
|
|
95
95
|
if(!hasRole) {
|
96
96
|
revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
|
@@ -126,7 +126,7 @@ abstract contract ComponentService is Service {
|
|
126
126
|
address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
|
127
127
|
instance = IInstance(instanceAddress);
|
128
128
|
|
129
|
-
InstanceAccessManager accessManager =
|
129
|
+
InstanceAccessManager accessManager = instance.getInstanceAccessManager();
|
130
130
|
if (accessManager.isTargetLocked(info.objectAddress)) {
|
131
131
|
revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
|
132
132
|
}
|