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