@etherisc/gif-next 0.0.2-da0f894-204 → 0.0.2-db1e1e4-828
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 +6 -83
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +68 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +64 -14
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +158 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +150 -10
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +184 -149
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +158 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +114 -189
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +68 -0
- 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 +127 -182
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +175 -51
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +215 -252
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -126
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +102 -168
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +304 -171
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +71 -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 +85 -30
- 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 +56 -73
- 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 +145 -53
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +21 -13
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +384 -249
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -14
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +104 -41
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +11 -7
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +356 -111
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +57 -45
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +101 -14
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +212 -186
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +80 -14
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +250 -18
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +106 -19
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +511 -14
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +152 -60
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +27 -19
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +561 -51
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +24 -12
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +114 -51
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
- 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/IRegistryService.sol/IRegistryService.json +0 -24
- 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 +17 -36
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
- 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/IService.sol/IService.json +80 -14
- 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 +2 -2
- 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 +86 -15
- 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 +2 -2
- 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 +101 -26
- 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/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
- 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 +40 -9
- 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 +1 -1
- 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 +2 -2
- 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 +42 -10
- package/contracts/components/Distribution.sol +0 -13
- package/contracts/components/IComponent.sol +9 -1
- package/contracts/components/IDistributionComponent.sol +0 -8
- package/contracts/components/IPoolComponent.sol +5 -43
- package/contracts/components/Pool.sol +47 -122
- package/contracts/components/Product.sol +4 -0
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +6 -4
- 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 +46 -9
- package/contracts/instance/InstanceAccessManager.sol +388 -158
- package/contracts/instance/InstanceReader.sol +8 -10
- package/contracts/instance/InstanceService.sol +184 -179
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +13 -5
- package/contracts/instance/base/Lifecycle.sol +11 -2
- package/contracts/instance/module/IAccess.sol +21 -14
- package/contracts/instance/module/IBundle.sol +6 -4
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/ISetup.sol +4 -17
- package/contracts/instance/service/ApplicationService.sol +22 -18
- package/contracts/instance/service/BundleService.sol +209 -77
- package/contracts/instance/service/ClaimService.sol +3 -3
- package/contracts/instance/service/DistributionService.sol +118 -77
- package/contracts/instance/service/IApplicationService.sol +1 -0
- package/contracts/instance/service/IBundleService.sol +63 -25
- package/contracts/instance/service/IDistributionService.sol +14 -1
- package/contracts/instance/service/IPolicyService.sol +2 -0
- package/contracts/instance/service/IPoolService.sol +82 -3
- package/contracts/instance/service/PolicyService.sol +96 -138
- package/contracts/instance/service/PoolService.sol +214 -20
- package/contracts/instance/service/ProductService.sol +30 -53
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +2 -0
- package/contracts/registry/IRegistryService.sol +4 -3
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +23 -20
- package/contracts/registry/RegistryService.sol +10 -11
- package/contracts/registry/ReleaseManager.sol +20 -18
- package/contracts/shared/IService.sol +4 -6
- package/contracts/shared/Service.sol +21 -7
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +60 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/Fee.sol +13 -5
- 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 +6 -4
- package/contracts/types/StateId.sol +1 -0
- package/contracts/types/Timestamp.sol +1 -0
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +1 -1
@@ -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,
|
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,
|
@@ -67,45 +74,65 @@ contract InstanceService is
|
|
67
74
|
IRegistry registry = getRegistry();
|
68
75
|
address registryAddress = address(registry);
|
69
76
|
NftId registryNftId = registry.getNftId(registryAddress);
|
70
|
-
address registryServiceAddress = registry.getServiceAddress(REGISTRY(),
|
77
|
+
address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getVersion().toMajorPart());
|
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(), getVersion().toMajorPart());
|
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());
|
@@ -162,12 +191,12 @@ contract InstanceService is
|
|
162
191
|
|
163
192
|
function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
164
193
|
// configure authorization for pool service on instance
|
165
|
-
address poolServiceAddress = getRegistry().getServiceAddress(POOL(),
|
194
|
+
address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart());
|
166
195
|
clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
|
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());
|
@@ -175,7 +204,7 @@ contract InstanceService is
|
|
175
204
|
|
176
205
|
function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
177
206
|
// configure authorization for product service on instance
|
178
|
-
address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(),
|
207
|
+
address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getVersion().toMajorPart());
|
179
208
|
clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
|
180
209
|
bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
|
181
210
|
instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
|
@@ -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());
|
@@ -191,13 +220,13 @@ contract InstanceService is
|
|
191
220
|
|
192
221
|
function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
193
222
|
// configure authorization for application services on instance
|
194
|
-
address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(),
|
223
|
+
address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getVersion().toMajorPart());
|
195
224
|
clonedAccessManager.grantRole(APPLICATION_SERVICE_ROLE(), applicationServiceAddress);
|
196
225
|
bytes4[] memory instanceApplicationServiceSelectors = new bytes4[](3);
|
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());
|
@@ -205,12 +234,12 @@ contract InstanceService is
|
|
205
234
|
|
206
235
|
function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
207
236
|
// configure authorization for policy services on instance
|
208
|
-
address policyServiceAddress = getRegistry().getServiceAddress(POLICY(),
|
237
|
+
address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart());
|
209
238
|
clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), policyServiceAddress);
|
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());
|
@@ -218,13 +247,13 @@ contract InstanceService is
|
|
218
247
|
|
219
248
|
function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
220
249
|
// configure authorization for claim/payout services on instance
|
221
|
-
address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(),
|
250
|
+
address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getVersion().toMajorPart());
|
222
251
|
clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), claimServiceAddress);
|
223
252
|
// TODO add claims function authz
|
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());
|
@@ -232,12 +261,13 @@ contract InstanceService is
|
|
232
261
|
|
233
262
|
function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
|
234
263
|
// configure authorization for bundle service on instance
|
235
|
-
address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(),
|
264
|
+
address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart());
|
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,64 +279,87 @@ 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
|
260
|
-
address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(),
|
289
|
+
// configure authorization for instance service on instance
|
290
|
+
address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getVersion().toMajorPart());
|
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;
|
308
361
|
|
309
|
-
IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(),
|
362
|
+
IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getVersion().toMajorPart()));
|
310
363
|
IInstance masterInstance = IInstance(_masterInstance);
|
311
364
|
IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
|
312
365
|
masterInstanceNftId = info.nftId;
|
@@ -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
|
|
@@ -358,7 +408,7 @@ contract InstanceService is
|
|
358
408
|
}
|
359
409
|
|
360
410
|
// From IService
|
361
|
-
function getDomain() public pure override
|
411
|
+
function getDomain() public pure override returns(ObjectType) {
|
362
412
|
return INSTANCE();
|
363
413
|
}
|
364
414
|
|
@@ -376,115 +426,70 @@ contract InstanceService is
|
|
376
426
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
377
427
|
// TODO while InstanceService is not deployed in InstanceServiceManager constructor
|
378
428
|
// owner is InstanceServiceManager deployer
|
379
|
-
initializeService(registryAddress, owner);
|
429
|
+
initializeService(registryAddress, address(0), owner);
|
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 setComponentLocked(bool locked) onlyComponent external {
|
463
|
+
address componentAddress = msg.sender;
|
420
464
|
IRegistry registry = getRegistry();
|
421
|
-
|
465
|
+
NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
|
422
466
|
|
423
|
-
|
424
|
-
|
425
|
-
|
467
|
+
IInstance instance = IInstance(
|
468
|
+
registry.getObjectInfo(
|
469
|
+
instanceNftId).objectAddress);
|
426
470
|
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
bytes4[] memory fctSelectors = new bytes4[](1);
|
432
|
-
fctSelectors[0] = IPoolComponent.setFees.selector;
|
433
|
-
instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors, POOL_OWNER_ROLE());
|
434
|
-
|
435
|
-
bytes4[] memory fctSelectors2 = new bytes4[](1);
|
436
|
-
fctSelectors2[0] = IPoolComponent.verifyApplication.selector;
|
437
|
-
instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors2, POLICY_SERVICE_ROLE());
|
438
|
-
|
439
|
-
// bundle owner specific functions
|
440
|
-
bytes4[] memory fctSelectors3 = new bytes4[](7);
|
441
|
-
fctSelectors3[0] = IPoolComponent.stake.selector;
|
442
|
-
fctSelectors3[1] = IPoolComponent.unstake.selector;
|
443
|
-
fctSelectors3[2] = IPoolComponent.extend.selector;
|
444
|
-
fctSelectors3[3] = IPoolComponent.lockBundle.selector;
|
445
|
-
fctSelectors3[4] = IPoolComponent.unlockBundle.selector;
|
446
|
-
fctSelectors3[5] = IPoolComponent.close.selector;
|
447
|
-
fctSelectors3[6] = IPoolComponent.setBundleFee.selector;
|
448
|
-
instanceAccessManager.setTargetFunctionRole(
|
449
|
-
poolName,
|
450
|
-
fctSelectors3,
|
451
|
-
IPoolComponent(poolAddress).getBundleOwnerRole());
|
471
|
+
instance.getInstanceAccessManager().setTargetLocked(
|
472
|
+
componentAddress,
|
473
|
+
locked);
|
452
474
|
}
|
453
475
|
|
454
|
-
function
|
476
|
+
function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress)
|
477
|
+
internal
|
478
|
+
view
|
479
|
+
returns (IInstance instance, NftId componentNftId)
|
480
|
+
{
|
455
481
|
IRegistry registry = getRegistry();
|
456
|
-
IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productAddress);
|
457
|
-
|
458
|
-
if (productInfo.objectType != PRODUCT()) {
|
459
|
-
revert ErrorInstanceServiceInvalidComponentType(productAddress, PRODUCT(), productInfo.objectType);
|
460
|
-
}
|
461
|
-
|
462
482
|
IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
bytes4[] memory fctSelectors = new bytes4[](1);
|
467
|
-
fctSelectors[0] = IProductComponent.setFees.selector;
|
468
|
-
instanceAccessManager.setTargetFunctionRole(productName, fctSelectors, PRODUCT_OWNER_ROLE());
|
469
|
-
}
|
483
|
+
if(instanceInfo.objectType != INSTANCE()) {
|
484
|
+
revert ErrorInstanceServiceNotInstance(instanceNftId);
|
485
|
+
}
|
470
486
|
|
471
|
-
function setTargetLocked(string memory targetName, bool locked) external {
|
472
|
-
address componentAddress = msg.sender;
|
473
|
-
IRegistry registry = getRegistry();
|
474
487
|
IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
|
475
|
-
if
|
476
|
-
revert
|
488
|
+
if(componentInfo.parentNftId != instanceNftId) {
|
489
|
+
revert ErrorInstanceServiceInstanceComponentMismatch(instanceNftId, componentInfo.nftId);
|
477
490
|
}
|
478
491
|
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
|
483
|
-
IInstance instance = IInstance(instanceAddress);
|
484
|
-
|
485
|
-
InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
|
486
|
-
accessManager.setTargetClosed(targetName, locked);
|
492
|
+
instance = Instance(instanceInfo.objectAddress);
|
493
|
+
componentNftId = componentInfo.nftId;
|
487
494
|
}
|
488
|
-
|
489
|
-
}
|
490
|
-
|
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) {
|