@etherisc/gif-next 0.0.2-f29e479-370 → 0.0.2-f2df3e2-873
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 -89
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +139 -140
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +156 -64
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +181 -112
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +353 -176
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +162 -138
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +299 -245
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +83 -162
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +527 -400
- 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 +500 -612
- 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 +253 -236
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +305 -211
- 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 +86 -31
- 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 +291 -100
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +46 -22
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +422 -252
- 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 +373 -87
- 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 +579 -123
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +71 -47
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +200 -46
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +241 -188
- 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 +444 -25
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +430 -76
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +511 -14
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +544 -153
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +51 -27
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +562 -52
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +24 -12
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +115 -52
- 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 +18 -37
- 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 +3 -3
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +87 -16
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +3 -3
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +102 -27
- 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 +185 -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 +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 -191
- 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 +8 -5
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +2 -1
- package/contracts/instance/module/IPolicy.sol +37 -7
- package/contracts/instance/module/ISetup.sol +7 -22
- package/contracts/instance/service/ApplicationService.sol +137 -50
- package/contracts/instance/service/BundleService.sol +221 -83
- package/contracts/instance/service/ClaimService.sol +114 -26
- package/contracts/instance/service/DistributionService.sol +174 -118
- package/contracts/instance/service/IApplicationService.sol +9 -13
- package/contracts/instance/service/IBundleService.sol +68 -26
- package/contracts/instance/service/IClaimService.sol +46 -15
- package/contracts/instance/service/IDistributionService.sol +20 -4
- package/contracts/instance/service/IPolicyService.sol +69 -21
- package/contracts/instance/service/IPoolService.sol +82 -3
- package/contracts/instance/service/PolicyService.sol +297 -232
- package/contracts/instance/service/PoolService.sol +214 -20
- 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 +15 -16
- package/contracts/registry/ReleaseManager.sol +20 -18
- package/contracts/shared/IService.sol +4 -6
- package/contracts/shared/Registerable.sol +2 -2
- 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 +65 -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,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, 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 | 
            +
                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,101 +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[](2);
         | 
| 414 | 
            -
                    fctSelectors2[0] = IDistributionComponent.processSale.selector;
         | 
| 415 | 
            -
                    fctSelectors2[1] = IDistributionComponent.processRenewal.selector;
         | 
| 416 | 
            -
                    instanceAccessManager.setTargetFunctionRole(distributionName, fctSelectors2, PRODUCT_SERVICE_ROLE());
         | 
| 417 440 | 
             
                }
         | 
| 418 441 |  | 
| 419 | 
            -
                 | 
| 420 | 
            -
             | 
| 421 | 
            -
             | 
| 422 | 
            -
             | 
| 423 | 
            -
                    if (poolInfo.objectType != POOL()) {
         | 
| 424 | 
            -
                        revert ErrorInstanceServiceInvalidComponentType(poolAddress, POOL(), poolInfo.objectType);
         | 
| 425 | 
            -
                    }
         | 
| 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 {
         | 
| 426 445 |  | 
| 427 | 
            -
                     | 
| 428 | 
            -
                     | 
| 429 | 
            -
                     | 
| 446 | 
            +
                    address componentAddress = msg.sender;
         | 
| 447 | 
            +
                    IRegistry registry = getRegistry();
         | 
| 448 | 
            +
                    NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
         | 
| 430 449 |  | 
| 431 | 
            -
                     | 
| 432 | 
            -
             | 
| 433 | 
            -
             | 
| 450 | 
            +
                    IInstance instance = IInstance(
         | 
| 451 | 
            +
                        registry.getObjectInfo(
         | 
| 452 | 
            +
                            instanceNftId).objectAddress);
         | 
| 434 453 |  | 
| 435 | 
            -
                     | 
| 436 | 
            -
             | 
| 437 | 
            -
             | 
| 454 | 
            +
                    instance.getInstanceAccessManager().setTargetLocked(
         | 
| 455 | 
            +
                        componentAddress, 
         | 
| 456 | 
            +
                        locked);
         | 
| 438 457 | 
             
                }
         | 
| 439 458 |  | 
| 440 | 
            -
                function  | 
| 459 | 
            +
                function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress) 
         | 
| 460 | 
            +
                    internal
         | 
| 461 | 
            +
                    view
         | 
| 462 | 
            +
                    returns (IInstance instance, NftId componentNftId)
         | 
| 463 | 
            +
                {
         | 
| 441 464 | 
             
                    IRegistry registry = getRegistry();
         | 
| 442 | 
            -
                    IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productAddress);
         | 
| 443 | 
            -
             | 
| 444 | 
            -
                    if (productInfo.objectType != PRODUCT()) {
         | 
| 445 | 
            -
                        revert ErrorInstanceServiceInvalidComponentType(productAddress, PRODUCT(), productInfo.objectType);
         | 
| 446 | 
            -
                    }
         | 
| 447 | 
            -
             | 
| 448 465 | 
             
                    IRegistry.ObjectInfo memory instanceInfo = registry.getObjectInfo(instanceNftId);
         | 
| 449 | 
            -
                     | 
| 450 | 
            -
             | 
| 451 | 
            -
             | 
| 452 | 
            -
                    bytes4[] memory fctSelectors = new bytes4[](1);
         | 
| 453 | 
            -
                    fctSelectors[0] = IProductComponent.setFees.selector;
         | 
| 454 | 
            -
                    instanceAccessManager.setTargetFunctionRole(productName, fctSelectors, PRODUCT_OWNER_ROLE());
         | 
| 455 | 
            -
                }
         | 
| 466 | 
            +
                    if(instanceInfo.objectType != INSTANCE()) {
         | 
| 467 | 
            +
                        revert ErrorInstanceServiceNotInstance(instanceNftId);
         | 
| 468 | 
            +
                    }
         | 
| 456 469 |  | 
| 457 | 
            -
                function setTargetLocked(string memory targetName, bool locked) external {
         | 
| 458 | 
            -
                    address componentAddress = msg.sender;
         | 
| 459 | 
            -
                    IRegistry registry = getRegistry();
         | 
| 460 470 | 
             
                    IRegistry.ObjectInfo memory componentInfo = registry.getObjectInfo(componentAddress);
         | 
| 461 | 
            -
                    if | 
| 462 | 
            -
                        revert  | 
| 471 | 
            +
                    if(componentInfo.parentNftId != instanceNftId) {
         | 
| 472 | 
            +
                        revert ErrorInstanceServiceInstanceComponentMismatch(instanceNftId, componentInfo.nftId);
         | 
| 463 473 | 
             
                    }
         | 
| 464 474 |  | 
| 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);
         | 
| 475 | 
            +
                    instance = Instance(instanceInfo.objectAddress);
         | 
| 476 | 
            +
                    componentNftId = componentInfo.nftId;
         | 
| 473 477 | 
             
                }
         | 
| 474 | 
            -
             | 
| 475 | 
            -
            }
         | 
| 476 | 
            -
             | 
| 478 | 
            +
            }
         |