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