@etherisc/gif-next 0.0.2-e922e07-736 → 0.0.2-e94f4c7-084
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 +84 -0
- 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 +158 -0
- 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 +457 -268
- 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 +426 -476
- 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 +217 -169
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +304 -210
- 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 +175 -83
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +29 -13
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +426 -233
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +78 -14
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +372 -86
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +55 -7
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +189 -139
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +48 -56
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +111 -40
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +246 -170
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +251 -58
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +101 -24
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +470 -41
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +627 -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 +607 -85
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +71 -19
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +777 -55
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +72 -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 +209 -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/ClaimId.sol/ClaimIdLib.json +83 -4
- 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/PayoutId.sol/PayoutIdLib.json +116 -7
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
- 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 +17 -4
- 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 +6 -2
- package/contracts/components/IComponent.sol +9 -1
- package/contracts/components/IPoolComponent.sol +6 -44
- package/contracts/components/Pool.sol +50 -126
- package/contracts/components/Product.sol +141 -59
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +9 -8
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +37 -27
- package/contracts/instance/IInstanceService.sol +18 -9
- package/contracts/instance/Instance.sol +117 -98
- package/contracts/instance/InstanceAccessManager.sol +388 -158
- package/contracts/instance/InstanceReader.sol +36 -12
- package/contracts/instance/InstanceService.sol +193 -204
- 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 +23 -6
- 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/IPolicy.sol +11 -6
- package/contracts/instance/module/ISetup.sol +3 -16
- package/contracts/instance/service/ApplicationService.sol +25 -19
- package/contracts/instance/service/BundleService.sol +224 -80
- package/contracts/instance/service/ClaimService.sol +114 -26
- package/contracts/instance/service/DistributionService.sol +58 -77
- package/contracts/instance/service/IApplicationService.sol +3 -7
- package/contracts/instance/service/IBundleService.sol +72 -25
- package/contracts/instance/service/IClaimService.sol +46 -15
- package/contracts/instance/service/IDistributionService.sol +1 -0
- package/contracts/instance/service/IPolicyService.sol +72 -5
- package/contracts/instance/service/IPoolService.sol +85 -3
- package/contracts/instance/service/PolicyService.sol +320 -143
- package/contracts/instance/service/PoolService.sol +245 -18
- package/contracts/instance/service/ProductService.sol +31 -54
- 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 +70 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +6 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/RoleId.sol +6 -4
- package/contracts/types/StateId.sol +7 -2
- package/contracts/types/Timestamp.sol +6 -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,24 +10,20 @@ 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
|
-
import {ChainNft} from "../registry/ChainNft.sol";
|
15
16
|
import {Service} from "../../contracts/shared/Service.sol";
|
16
|
-
import {IService} from "../shared/IService.sol";
|
17
17
|
import {NftId} from "../../contracts/types/NftId.sol";
|
18
18
|
import {RoleId} from "../types/RoleId.sol";
|
19
|
-
import {ADMIN_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE,
|
19
|
+
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
20
|
import {ObjectType, INSTANCE, BUNDLE, APPLICATION, POLICY, CLAIM, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
|
21
|
-
import {IDistributionComponent} from "../components/IDistributionComponent.sol";
|
22
|
-
import {IPoolComponent} from "../components/IPoolComponent.sol";
|
23
|
-
import {IProductComponent} from "../components/IProductComponent.sol";
|
24
21
|
|
25
22
|
contract InstanceService is
|
26
23
|
Service,
|
27
24
|
IInstanceService
|
28
25
|
{
|
29
|
-
|
26
|
+
address internal _masterOzAccessManager;
|
30
27
|
address internal _masterInstanceAccessManager;
|
31
28
|
address internal _masterInstance;
|
32
29
|
address internal _masterInstanceReader;
|
@@ -35,20 +32,24 @@ contract InstanceService is
|
|
35
32
|
// TODO update to real hash when instance is stable
|
36
33
|
bytes32 public constant INSTANCE_CREATION_CODE_HASH = bytes32(0);
|
37
34
|
|
38
|
-
modifier onlyInstanceOwner(NftId instanceNftId) {
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
if( msg.sender != chainNft.ownerOf(instanceNftId.toInt())) {
|
43
|
-
revert ErrorInstanceServiceNotInstanceOwner(msg.sender, instanceNftId);
|
35
|
+
modifier onlyInstanceOwner(NftId instanceNftId) {
|
36
|
+
if(msg.sender != getRegistry().ownerOf(instanceNftId)) {
|
37
|
+
revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
|
44
38
|
}
|
45
39
|
_;
|
46
40
|
}
|
47
|
-
|
41
|
+
// TODO check service domain?
|
42
|
+
// TODO check release version?
|
48
43
|
modifier onlyRegisteredService() {
|
49
|
-
|
50
|
-
|
51
|
-
|
44
|
+
if (! getRegistry().isRegisteredService(msg.sender)) {
|
45
|
+
revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
|
46
|
+
}
|
47
|
+
_;
|
48
|
+
}
|
49
|
+
// TODO check release version?
|
50
|
+
modifier onlyComponent() {
|
51
|
+
if (! getRegistry().isRegisteredComponent(msg.sender)) {
|
52
|
+
revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
|
52
53
|
}
|
53
54
|
_;
|
54
55
|
}
|
@@ -56,7 +57,8 @@ contract InstanceService is
|
|
56
57
|
function createInstanceClone()
|
57
58
|
external
|
58
59
|
returns (
|
59
|
-
|
60
|
+
AccessManagerUpgradeableInitializeable clonedOzAccessManager,
|
61
|
+
InstanceAccessManager clonedInstanceAccessManager,
|
60
62
|
Instance clonedInstance,
|
61
63
|
NftId clonedInstanceNftId,
|
62
64
|
InstanceReader clonedInstanceReader,
|
@@ -65,47 +67,65 @@ contract InstanceService is
|
|
65
67
|
{
|
66
68
|
address instanceOwner = msg.sender;
|
67
69
|
IRegistry registry = getRegistry();
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
70
|
+
IRegistryService registryService = IRegistryService(
|
71
|
+
registry.getServiceAddress(
|
72
|
+
REGISTRY(), getVersion().toMajorPart()));
|
73
|
+
|
74
|
+
clonedOzAccessManager = AccessManagerUpgradeableInitializeable(
|
75
|
+
Clones.clone(_masterOzAccessManager));
|
72
76
|
|
73
|
-
// initially
|
74
|
-
// This will allow the instance service to bootstrap the authorizations of the instance
|
75
|
-
//
|
76
|
-
|
77
|
-
|
77
|
+
// initially grants ADMIN_ROLE to this (being the instance service).
|
78
|
+
// This will allow the instance service to bootstrap the authorizations of the instance.
|
79
|
+
// Instance service will not use oz access manager directlly but through instance access manager instead
|
80
|
+
// Instance service will renounce ADMIN_ROLE when bootstraping is finished
|
81
|
+
clonedOzAccessManager.initialize(address(this));
|
78
82
|
|
79
83
|
clonedInstance = Instance(Clones.clone(_masterInstance));
|
80
|
-
clonedInstance.initialize(
|
84
|
+
clonedInstance.initialize(
|
85
|
+
address(clonedOzAccessManager),
|
86
|
+
address(registry),
|
87
|
+
instanceOwner);
|
81
88
|
|
82
89
|
clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
|
83
|
-
clonedInstanceReader.initialize(
|
90
|
+
clonedInstanceReader.initialize(address(clonedInstance));
|
84
91
|
clonedInstance.setInstanceReader(clonedInstanceReader);
|
85
92
|
|
86
93
|
clonedBundleManager = BundleManager(Clones.clone(_masterInstanceBundleManager));
|
87
|
-
clonedBundleManager.initialize(address(
|
94
|
+
clonedBundleManager.initialize(address(clonedInstance));
|
88
95
|
clonedInstance.setBundleManager(clonedBundleManager);
|
89
96
|
|
97
|
+
clonedInstanceAccessManager = InstanceAccessManager(Clones.clone(_masterInstanceAccessManager));
|
98
|
+
clonedOzAccessManager.grantRole(ADMIN_ROLE().toInt(), address(clonedInstanceAccessManager), 0);
|
99
|
+
clonedInstanceAccessManager.initialize(address(clonedInstance));
|
100
|
+
clonedInstance.setInstanceAccessManager(clonedInstanceAccessManager);
|
101
|
+
|
90
102
|
// TODO amend setters with instance specific , policy manager ...
|
91
103
|
|
92
|
-
_grantInitialAuthorizations(
|
104
|
+
_grantInitialAuthorizations(clonedInstanceAccessManager, clonedInstance, clonedBundleManager, instanceOwner);
|
93
105
|
|
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));
|
106
|
+
clonedOzAccessManager.renounceRole(ADMIN_ROLE().toInt(), address(this));
|
98
107
|
|
99
108
|
IRegistry.ObjectInfo memory info = registryService.registerInstance(clonedInstance, instanceOwner);
|
100
109
|
clonedInstanceNftId = info.nftId;
|
101
|
-
// clonedInstance.linkToRegisteredNftId();
|
102
110
|
|
103
|
-
emit LogInstanceCloned(
|
111
|
+
emit LogInstanceCloned(
|
112
|
+
address(clonedOzAccessManager),
|
113
|
+
address(clonedInstanceAccessManager),
|
114
|
+
address(clonedInstance),
|
115
|
+
address(clonedBundleManager),
|
116
|
+
address(clonedInstanceReader),
|
117
|
+
clonedInstanceNftId);
|
104
118
|
}
|
105
119
|
|
106
|
-
function _grantInitialAuthorizations(
|
107
|
-
|
108
|
-
|
120
|
+
function _grantInitialAuthorizations(
|
121
|
+
InstanceAccessManager clonedAccessManager,
|
122
|
+
Instance clonedInstance,
|
123
|
+
BundleManager clonedBundleManager,
|
124
|
+
address instanceOwner)
|
125
|
+
internal
|
126
|
+
{
|
127
|
+
_createCoreAndGifRoles(clonedAccessManager);
|
128
|
+
_createCoreTargets(clonedAccessManager, clonedInstance, clonedBundleManager);
|
109
129
|
_grantDistributionServiceAuthorizations(clonedAccessManager, clonedInstance);
|
110
130
|
_grantPoolServiceAuthorizations(clonedAccessManager, clonedInstance);
|
111
131
|
_grantProductServiceAuthorizations(clonedAccessManager, clonedInstance);
|
@@ -114,33 +134,35 @@ contract InstanceService is
|
|
114
134
|
_grantClaimServiceAuthorizations(clonedAccessManager, clonedInstance);
|
115
135
|
_grantBundleServiceAuthorizations(clonedAccessManager, clonedInstance, clonedBundleManager);
|
116
136
|
_grantInstanceServiceAuthorizations(clonedAccessManager, clonedInstance);
|
137
|
+
_grantInstanceOwnerAuthorizations(clonedAccessManager, instanceOwner);
|
117
138
|
}
|
118
139
|
|
119
|
-
function
|
120
|
-
|
121
|
-
|
122
|
-
clonedAccessManager.
|
123
|
-
|
124
|
-
clonedAccessManager.
|
125
|
-
clonedAccessManager.
|
126
|
-
clonedAccessManager.
|
127
|
-
clonedAccessManager.
|
128
|
-
clonedAccessManager.
|
129
|
-
clonedAccessManager.
|
130
|
-
|
131
|
-
clonedAccessManager.createGifRole(
|
140
|
+
function _createCoreAndGifRoles(InstanceAccessManager clonedAccessManager) internal {
|
141
|
+
// default roles controlled by ADMIN_ROLE -> core roles
|
142
|
+
// all set/granted only once during cloning (the only exception is INSTANCE_OWNER_ROLE, hooked to instance nft)
|
143
|
+
clonedAccessManager.createCoreRole(INSTANCE_SERVICE_ROLE(), "InstanceServiceRole");
|
144
|
+
clonedAccessManager.createCoreRole(DISTRIBUTION_SERVICE_ROLE(), "DistributionServiceRole");
|
145
|
+
clonedAccessManager.createCoreRole(POOL_SERVICE_ROLE(), "PoolServiceRole");
|
146
|
+
clonedAccessManager.createCoreRole(APPLICATION_SERVICE_ROLE(), "ApplicationServiceRole");
|
147
|
+
clonedAccessManager.createCoreRole(PRODUCT_SERVICE_ROLE(), "ProductServiceRole");
|
148
|
+
clonedAccessManager.createCoreRole(CLAIM_SERVICE_ROLE(), "ClaimServiceRole");
|
149
|
+
clonedAccessManager.createCoreRole(POLICY_SERVICE_ROLE(), "PolicyServiceRole");
|
150
|
+
clonedAccessManager.createCoreRole(BUNDLE_SERVICE_ROLE(), "BundleServiceRole");
|
151
|
+
// default roles controlled by INSTANCE_OWNER_ROLE -> gif roles
|
152
|
+
clonedAccessManager.createGifRole(DISTRIBUTION_OWNER_ROLE(), "DistributionOwnerRole", INSTANCE_OWNER_ROLE());
|
153
|
+
clonedAccessManager.createGifRole(POOL_OWNER_ROLE(), "PoolOwnerRole", INSTANCE_OWNER_ROLE());
|
154
|
+
clonedAccessManager.createGifRole(PRODUCT_OWNER_ROLE(), "ProductOwnerRole", INSTANCE_OWNER_ROLE());
|
132
155
|
}
|
133
156
|
|
134
|
-
function
|
135
|
-
clonedAccessManager.
|
136
|
-
clonedAccessManager.
|
137
|
-
clonedAccessManager.
|
157
|
+
function _createCoreTargets(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
|
158
|
+
clonedAccessManager.createCoreTarget(address(clonedAccessManager), "InstanceAccessManager");
|
159
|
+
clonedAccessManager.createCoreTarget(address(clonedInstance), "Instance");
|
160
|
+
clonedAccessManager.createCoreTarget(address(clonedBundleManager), "BundleManager");
|
138
161
|
}
|
139
162
|
|
140
163
|
function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
141
164
|
// configure authorization for distribution service on instance
|
142
|
-
|
143
|
-
address distributionServiceAddress = registry.getServiceAddress(DISTRIBUTION(), getMajorVersion());
|
165
|
+
address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart());
|
144
166
|
clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
|
145
167
|
bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
|
146
168
|
instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
|
@@ -154,7 +176,7 @@ contract InstanceService is
|
|
154
176
|
instanceDistributionServiceSelectors[8] = clonedInstance.createReferral.selector;
|
155
177
|
instanceDistributionServiceSelectors[9] = clonedInstance.updateReferral.selector;
|
156
178
|
instanceDistributionServiceSelectors[10] = clonedInstance.updateReferralState.selector;
|
157
|
-
clonedAccessManager.
|
179
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
158
180
|
"Instance",
|
159
181
|
instanceDistributionServiceSelectors,
|
160
182
|
DISTRIBUTION_SERVICE_ROLE());
|
@@ -162,12 +184,12 @@ contract InstanceService is
|
|
162
184
|
|
163
185
|
function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
164
186
|
// configure authorization for pool service on instance
|
165
|
-
address poolServiceAddress = getRegistry().getServiceAddress(POOL(),
|
187
|
+
address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart());
|
166
188
|
clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
|
167
189
|
bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
|
168
190
|
instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
|
169
191
|
instancePoolServiceSelectors[1] = clonedInstance.updatePoolSetup.selector;
|
170
|
-
clonedAccessManager.
|
192
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
171
193
|
"Instance",
|
172
194
|
instancePoolServiceSelectors,
|
173
195
|
POOL_SERVICE_ROLE());
|
@@ -175,7 +197,7 @@ contract InstanceService is
|
|
175
197
|
|
176
198
|
function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
177
199
|
// configure authorization for product service on instance
|
178
|
-
address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(),
|
200
|
+
address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getVersion().toMajorPart());
|
179
201
|
clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
|
180
202
|
bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
|
181
203
|
instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
|
@@ -183,7 +205,7 @@ contract InstanceService is
|
|
183
205
|
instanceProductServiceSelectors[2] = clonedInstance.createRisk.selector;
|
184
206
|
instanceProductServiceSelectors[3] = clonedInstance.updateRisk.selector;
|
185
207
|
instanceProductServiceSelectors[4] = clonedInstance.updateRiskState.selector;
|
186
|
-
clonedAccessManager.
|
208
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
187
209
|
"Instance",
|
188
210
|
instanceProductServiceSelectors,
|
189
211
|
PRODUCT_SERVICE_ROLE());
|
@@ -191,13 +213,13 @@ contract InstanceService is
|
|
191
213
|
|
192
214
|
function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
193
215
|
// configure authorization for application services on instance
|
194
|
-
address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(),
|
216
|
+
address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getVersion().toMajorPart());
|
195
217
|
clonedAccessManager.grantRole(APPLICATION_SERVICE_ROLE(), applicationServiceAddress);
|
196
218
|
bytes4[] memory instanceApplicationServiceSelectors = new bytes4[](3);
|
197
219
|
instanceApplicationServiceSelectors[0] = clonedInstance.createApplication.selector;
|
198
220
|
instanceApplicationServiceSelectors[1] = clonedInstance.updateApplication.selector;
|
199
221
|
instanceApplicationServiceSelectors[2] = clonedInstance.updateApplicationState.selector;
|
200
|
-
clonedAccessManager.
|
222
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
201
223
|
"Instance",
|
202
224
|
instanceApplicationServiceSelectors,
|
203
225
|
APPLICATION_SERVICE_ROLE());
|
@@ -205,12 +227,12 @@ contract InstanceService is
|
|
205
227
|
|
206
228
|
function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
207
229
|
// configure authorization for policy services on instance
|
208
|
-
address policyServiceAddress = getRegistry().getServiceAddress(POLICY(),
|
230
|
+
address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart());
|
209
231
|
clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), policyServiceAddress);
|
210
232
|
bytes4[] memory instancePolicyServiceSelectors = new bytes4[](2);
|
211
233
|
instancePolicyServiceSelectors[0] = clonedInstance.updatePolicy.selector;
|
212
234
|
instancePolicyServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
|
213
|
-
clonedAccessManager.
|
235
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
214
236
|
"Instance",
|
215
237
|
instancePolicyServiceSelectors,
|
216
238
|
POLICY_SERVICE_ROLE());
|
@@ -218,13 +240,14 @@ contract InstanceService is
|
|
218
240
|
|
219
241
|
function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
220
242
|
// configure authorization for claim/payout services on instance
|
221
|
-
address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(),
|
222
|
-
clonedAccessManager.grantRole(
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
243
|
+
address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getVersion().toMajorPart());
|
244
|
+
clonedAccessManager.grantRole(CLAIM_SERVICE_ROLE(), claimServiceAddress);
|
245
|
+
bytes4[] memory instanceClaimServiceSelectors = new bytes4[](4);
|
246
|
+
instanceClaimServiceSelectors[0] = clonedInstance.createClaim.selector;
|
247
|
+
instanceClaimServiceSelectors[1] = clonedInstance.updateClaim.selector;
|
248
|
+
instanceClaimServiceSelectors[2] = clonedInstance.createPayout.selector;
|
249
|
+
instanceClaimServiceSelectors[3] = clonedInstance.updatePayout.selector;
|
250
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
228
251
|
"Instance",
|
229
252
|
instanceClaimServiceSelectors,
|
230
253
|
CLAIM_SERVICE_ROLE());
|
@@ -232,12 +255,13 @@ contract InstanceService is
|
|
232
255
|
|
233
256
|
function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
|
234
257
|
// configure authorization for bundle service on instance
|
235
|
-
address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(),
|
258
|
+
address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart());
|
236
259
|
clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
|
237
|
-
bytes4[] memory instanceBundleServiceSelectors = new bytes4[](
|
260
|
+
bytes4[] memory instanceBundleServiceSelectors = new bytes4[](3);
|
238
261
|
instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
|
239
262
|
instanceBundleServiceSelectors[1] = clonedInstance.updateBundle.selector;
|
240
|
-
|
263
|
+
instanceBundleServiceSelectors[2] = clonedInstance.updateBundleState.selector;
|
264
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
241
265
|
"Instance",
|
242
266
|
instanceBundleServiceSelectors,
|
243
267
|
BUNDLE_SERVICE_ROLE());
|
@@ -249,64 +273,87 @@ contract InstanceService is
|
|
249
273
|
bundleManagerBundleServiceSelectors[2] = clonedBundleManager.add.selector;
|
250
274
|
bundleManagerBundleServiceSelectors[3] = clonedBundleManager.lock.selector;
|
251
275
|
bundleManagerBundleServiceSelectors[4] = clonedBundleManager.unlock.selector;
|
252
|
-
clonedAccessManager.
|
276
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
253
277
|
"BundleManager",
|
254
278
|
bundleManagerBundleServiceSelectors,
|
255
279
|
BUNDLE_SERVICE_ROLE());
|
256
280
|
}
|
257
281
|
|
258
282
|
function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
|
259
|
-
// configure authorization for instance service on instance
|
260
|
-
address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(),
|
283
|
+
// configure authorization for instance service on instance
|
284
|
+
address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getVersion().toMajorPart());
|
261
285
|
clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
|
262
286
|
bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
|
263
287
|
instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
|
264
|
-
clonedAccessManager.
|
288
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
265
289
|
"Instance",
|
266
290
|
instanceInstanceServiceSelectors,
|
267
291
|
INSTANCE_SERVICE_ROLE());
|
268
292
|
|
269
|
-
|
270
|
-
|
271
|
-
clonedAccessManager.
|
293
|
+
// configure authorizations for instance service on instance access manager
|
294
|
+
bytes4[] memory accessManagerInstanceServiceSelectors = new bytes4[](3);
|
295
|
+
accessManagerInstanceServiceSelectors[0] = clonedAccessManager.createGifTarget.selector;
|
296
|
+
accessManagerInstanceServiceSelectors[1] = clonedAccessManager.setTargetLocked.selector;
|
297
|
+
accessManagerInstanceServiceSelectors[2] = clonedAccessManager.setCoreTargetFunctionRole.selector;
|
298
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
272
299
|
"InstanceAccessManager",
|
273
|
-
|
300
|
+
accessManagerInstanceServiceSelectors,
|
274
301
|
INSTANCE_SERVICE_ROLE());
|
275
302
|
}
|
276
303
|
|
304
|
+
function _grantInstanceOwnerAuthorizations(InstanceAccessManager clonedAccessManager, address instanceOwner) internal {
|
305
|
+
// configure authorization for instance owner on instance access manager
|
306
|
+
// instance owner role is granted/revoked ONLY by INSTANCE_ROLE
|
307
|
+
bytes4[] memory accessManagerInstanceOwnerSelectors = new bytes4[](3);
|
308
|
+
accessManagerInstanceOwnerSelectors[0] = clonedAccessManager.createRole.selector;
|
309
|
+
accessManagerInstanceOwnerSelectors[1] = clonedAccessManager.createTarget.selector;
|
310
|
+
accessManagerInstanceOwnerSelectors[2] = clonedAccessManager.setTargetFunctionRole.selector;
|
311
|
+
clonedAccessManager.setCoreTargetFunctionRole(
|
312
|
+
"InstanceAccessManager",
|
313
|
+
accessManagerInstanceOwnerSelectors,
|
314
|
+
INSTANCE_OWNER_ROLE());
|
315
|
+
}
|
316
|
+
|
317
|
+
|
277
318
|
function setAndRegisterMasterInstance(address instanceAddress)
|
278
319
|
external
|
279
320
|
onlyOwner
|
280
321
|
returns(NftId masterInstanceNftId)
|
281
322
|
{
|
282
323
|
if(_masterInstance != address(0)) { revert ErrorInstanceServiceMasterInstanceAlreadySet(); }
|
324
|
+
if(_masterOzAccessManager != address(0)) { revert ErrorInstanceServiceMasterOzAccessManagerAlreadySet(); }
|
283
325
|
if(_masterInstanceAccessManager != address(0)) { revert ErrorInstanceServiceMasterInstanceAccessManagerAlreadySet(); }
|
284
326
|
if(_masterInstanceBundleManager != address(0)) { revert ErrorInstanceServiceMasterBundleManagerAlreadySet(); }
|
285
327
|
|
286
328
|
if(instanceAddress == address(0)) { revert ErrorInstanceServiceInstanceAddressZero(); }
|
287
329
|
|
288
330
|
IInstance instance = IInstance(instanceAddress);
|
289
|
-
|
290
|
-
address
|
331
|
+
AccessManagerUpgradeableInitializeable ozAccessManager = AccessManagerUpgradeableInitializeable(instance.authority());
|
332
|
+
address ozAccessManagerAddress = address(ozAccessManager);
|
333
|
+
InstanceAccessManager instanceAccessManager = instance.getInstanceAccessManager();
|
334
|
+
address instanceAccessManagerAddress = address(instanceAccessManager);
|
291
335
|
InstanceReader instanceReader = instance.getInstanceReader();
|
292
336
|
address instanceReaderAddress = address(instanceReader);
|
293
337
|
BundleManager bundleManager = instance.getBundleManager();
|
294
338
|
address bundleManagerAddress = address(bundleManager);
|
295
339
|
|
296
|
-
if(
|
340
|
+
if(ozAccessManagerAddress == address(0)) { revert ErrorInstanceServiceOzAccessManagerZero();}
|
341
|
+
if(instanceAccessManagerAddress == address(0)) { revert ErrorInstanceServiceInstanceAccessManagerZero(); }
|
297
342
|
if(instanceReaderAddress == address(0)) { revert ErrorInstanceServiceInstanceReaderZero(); }
|
298
343
|
if(bundleManagerAddress == address(0)) { revert ErrorInstanceServiceBundleManagerZero(); }
|
299
344
|
|
300
|
-
if(instance.authority() !=
|
345
|
+
if(instance.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceInstanceAuthorityMismatch(); }
|
346
|
+
if(bundleManager.authority() != instanceAccessManager.authority()) { revert ErrorInstanceServiceBundleManagerAuthorityMismatch(); }
|
301
347
|
if(instanceReader.getInstance() != instance) { revert ErrorInstanceServiceInstanceReaderInstanceMismatch2(); }
|
302
348
|
if(bundleManager.getInstance() != instance) { revert ErrorInstanceServiceBundleMangerInstanceMismatch(); }
|
303
349
|
|
304
|
-
|
350
|
+
_masterOzAccessManager = ozAccessManagerAddress;
|
351
|
+
_masterInstanceAccessManager = instanceAccessManagerAddress;
|
305
352
|
_masterInstance = instanceAddress;
|
306
353
|
_masterInstanceReader = instanceReaderAddress;
|
307
354
|
_masterInstanceBundleManager = bundleManagerAddress;
|
308
355
|
|
309
|
-
IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(),
|
356
|
+
IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getVersion().toMajorPart()));
|
310
357
|
IInstance masterInstance = IInstance(_masterInstance);
|
311
358
|
IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
|
312
359
|
masterInstanceNftId = info.nftId;
|
@@ -325,19 +372,16 @@ contract InstanceService is
|
|
325
372
|
_masterInstanceReader = instanceReaderAddress;
|
326
373
|
}
|
327
374
|
|
328
|
-
|
329
|
-
|
375
|
+
function upgradeInstanceReader(NftId instanceNftId)
|
376
|
+
external
|
377
|
+
onlyInstanceOwner(instanceNftId)
|
378
|
+
{
|
330
379
|
IRegistry registry = getRegistry();
|
331
380
|
IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
|
332
381
|
Instance instance = Instance(instanceInfo.objectAddress);
|
333
|
-
address owner = instance.getOwner();
|
334
|
-
|
335
|
-
if (msg.sender != owner) {
|
336
|
-
revert ErrorInstanceServiceRequestUnauhorized(msg.sender);
|
337
|
-
}
|
338
382
|
|
339
383
|
InstanceReader upgradedInstanceReaderClone = InstanceReader(Clones.clone(address(_masterInstanceReader)));
|
340
|
-
upgradedInstanceReaderClone.initialize(address(
|
384
|
+
upgradedInstanceReaderClone.initialize(address(instance));
|
341
385
|
instance.setInstanceReader(upgradedInstanceReaderClone);
|
342
386
|
}
|
343
387
|
|
@@ -345,20 +389,8 @@ contract InstanceService is
|
|
345
389
|
return _masterInstanceReader;
|
346
390
|
}
|
347
391
|
|
348
|
-
function getMasterInstance() external view returns (address) {
|
349
|
-
return _masterInstance;
|
350
|
-
}
|
351
|
-
|
352
|
-
function getMasterInstanceAccessManager() external view returns (address) {
|
353
|
-
return _masterInstanceAccessManager;
|
354
|
-
}
|
355
|
-
|
356
|
-
function getMasterInstanceBundleManager() external view returns (address) {
|
357
|
-
return _masterInstanceBundleManager;
|
358
|
-
}
|
359
|
-
|
360
392
|
// From IService
|
361
|
-
function getDomain() public pure override
|
393
|
+
function getDomain() public pure override returns(ObjectType) {
|
362
394
|
return INSTANCE();
|
363
395
|
}
|
364
396
|
|
@@ -376,114 +408,71 @@ contract InstanceService is
|
|
376
408
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
377
409
|
// TODO while InstanceService is not deployed in InstanceServiceManager constructor
|
378
410
|
// owner is InstanceServiceManager deployer
|
379
|
-
initializeService(registryAddress, owner);
|
411
|
+
initializeService(registryAddress, address(0), owner);
|
380
412
|
registerInterface(type(IInstanceService).interfaceId);
|
381
413
|
}
|
382
414
|
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
415
|
+
// all gif targets MUST be childs of instanceNftId
|
416
|
+
function createGifTarget(
|
417
|
+
NftId instanceNftId,
|
418
|
+
address targetAddress,
|
419
|
+
string memory targetName,
|
420
|
+
bytes4[][] memory selectors,
|
421
|
+
RoleId[] memory roles
|
422
|
+
)
|
423
|
+
external
|
424
|
+
onlyRegisteredService
|
425
|
+
{
|
426
|
+
(
|
427
|
+
IInstance instance, // or instanceInfo
|
428
|
+
NftId targetNftId // or targetInfo
|
429
|
+
) = _validateInstanceAndComponent(instanceNftId, targetAddress);
|
388
430
|
|
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());
|
431
|
+
InstanceAccessManager accessManager = instance.getInstanceAccessManager();
|
394
432
|
accessManager.createGifTarget(targetAddress, targetName);
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
if (distributionInfo.objectType != DISTRIBUTION()) {
|
402
|
-
revert ErrorInstanceServiceInvalidComponentType(distributionAddress, DISTRIBUTION(), distributionInfo.objectType);
|
433
|
+
// set proposed target config
|
434
|
+
// TODO restriction: for gif targets can set only once and only here?
|
435
|
+
// assume config is a mix of gif and custom roles and no further configuration by INSTANCE_OWNER_ROLE is ever needed?
|
436
|
+
for(uint roleIdx = 0; roleIdx < roles.length; roleIdx++)
|
437
|
+
{
|
438
|
+
accessManager.setCoreTargetFunctionRole(targetName, selectors[roleIdx], roles[roleIdx]);
|
403
439
|
}
|
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[](1);
|
414
|
-
fctSelectors2[0] = IDistributionComponent.processRenewal.selector;
|
415
|
-
instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors2, PRODUCT_SERVICE_ROLE());
|
416
440
|
}
|
417
441
|
|
418
|
-
|
442
|
+
// TODO called by component, but target can be component helper...so needs target name
|
443
|
+
// TODO check that targetName associated with component...how???
|
444
|
+
function setComponentLocked(bool locked) onlyComponent external {
|
445
|
+
|
446
|
+
address componentAddress = msg.sender;
|
419
447
|
IRegistry registry = getRegistry();
|
420
|
-
|
448
|
+
NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
|
421
449
|
|
422
|
-
|
423
|
-
|
424
|
-
|
450
|
+
IInstance instance = IInstance(
|
451
|
+
registry.getObjectInfo(
|
452
|
+
instanceNftId).objectAddress);
|
425
453
|
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
bytes4[] memory fctSelectors = new bytes4[](1);
|
431
|
-
fctSelectors[0] = IPoolComponent.setFees.selector;
|
432
|
-
instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors, POOL_OWNER_ROLE());
|
433
|
-
|
434
|
-
bytes4[] memory fctSelectors2 = new bytes4[](1);
|
435
|
-
fctSelectors2[0] = IPoolComponent.verifyApplication.selector;
|
436
|
-
instanceAccessManager.setTargetFunctionRole(poolName, fctSelectors2, POLICY_SERVICE_ROLE());
|
437
|
-
|
438
|
-
// bundle owner specific functions
|
439
|
-
bytes4[] memory fctSelectors3 = new bytes4[](7);
|
440
|
-
fctSelectors3[0] = IPoolComponent.stake.selector;
|
441
|
-
fctSelectors3[1] = IPoolComponent.unstake.selector;
|
442
|
-
fctSelectors3[2] = IPoolComponent.extend.selector;
|
443
|
-
fctSelectors3[3] = IPoolComponent.lockBundle.selector;
|
444
|
-
fctSelectors3[4] = IPoolComponent.unlockBundle.selector;
|
445
|
-
fctSelectors3[5] = IPoolComponent.close.selector;
|
446
|
-
fctSelectors3[6] = IPoolComponent.setBundleFee.selector;
|
447
|
-
instanceAccessManager.setTargetFunctionRole(
|
448
|
-
poolName,
|
449
|
-
fctSelectors3,
|
450
|
-
IPoolComponent(poolAddress).getBundleOwnerRole());
|
454
|
+
instance.getInstanceAccessManager().setTargetLocked(
|
455
|
+
componentAddress,
|
456
|
+
locked);
|
451
457
|
}
|
452
458
|
|
453
|
-
function
|
459
|
+
function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress)
|
460
|
+
internal
|
461
|
+
view
|
462
|
+
returns (IInstance instance, NftId componentNftId)
|
463
|
+
{
|
454
464
|
IRegistry registry = getRegistry();
|
455
|
-
IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productAddress);
|
456
|
-
|
457
|
-
if (productInfo.objectType != PRODUCT()) {
|
458
|
-
revert ErrorInstanceServiceInvalidComponentType(productAddress, PRODUCT(), productInfo.objectType);
|
459
|
-
}
|
460
|
-
|
461
465
|
IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
bytes4[] memory fctSelectors = new bytes4[](1);
|
466
|
-
fctSelectors[0] = IProductComponent.setFees.selector;
|
467
|
-
instanceAccessManager.setTargetFunctionRole(productName, fctSelectors, PRODUCT_OWNER_ROLE());
|
468
|
-
}
|
466
|
+
if(instanceInfo.objectType != INSTANCE()) {
|
467
|
+
revert ErrorInstanceServiceNotInstance(instanceNftId);
|
468
|
+
}
|
469
469
|
|
470
|
-
function setTargetLocked(string memory targetName, bool locked) external {
|
471
|
-
address componentAddress = msg.sender;
|
472
|
-
IRegistry registry = getRegistry();
|
473
470
|
IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
|
474
|
-
if
|
475
|
-
revert
|
471
|
+
if(componentInfo.parentNftId != instanceNftId) {
|
472
|
+
revert ErrorInstanceServiceInstanceComponentMismatch(instanceNftId, componentInfo.nftId);
|
476
473
|
}
|
477
474
|
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
address instanceAddress = registry.getObjectInfo(componentInfo.parentNftId).objectAddress;
|
482
|
-
IInstance instance = IInstance(instanceAddress);
|
483
|
-
|
484
|
-
InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
|
485
|
-
accessManager.setTargetClosed(targetName, locked);
|
475
|
+
instance = Instance(instanceInfo.objectAddress);
|
476
|
+
componentNftId = componentInfo.nftId;
|
486
477
|
}
|
487
|
-
|
488
|
-
}
|
489
|
-
|
478
|
+
}
|