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