@etherisc/gif-next 0.0.2-f30e0eb-805 → 0.0.2-f4f2d93-430
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 +10 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +10 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +100 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +100 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +110 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +100 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +20 -0
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +10 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +34 -14
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +80 -14
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +90 -70
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +76 -57
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +21 -11
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +208 -62
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +62 -22
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
- 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 +2 -2
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +6 -6
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- 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 +124 -53
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +21 -13
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +298 -160
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +74 -14
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +104 -41
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +11 -7
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +189 -123
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +48 -48
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +80 -14
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +142 -113
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +80 -14
- 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 +90 -24
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +430 -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 +136 -65
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +27 -19
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +468 -55
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +18 -14
- 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/IRegistry.sol/IRegistry.dbg.json +1 -1
- 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/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
- 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/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/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- 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/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- 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/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- 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/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- 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 +161 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/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/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- 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/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- 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/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/components/Component.sol +4 -2
- package/contracts/components/IComponent.sol +3 -1
- package/contracts/components/Pool.sol +8 -4
- package/contracts/instance/Instance.sol +1 -0
- package/contracts/instance/InstanceAccessManager.sol +16 -11
- package/contracts/instance/InstanceReader.sol +1 -0
- package/contracts/instance/InstanceService.sol +19 -19
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +8 -3
- package/contracts/instance/module/IAccess.sol +2 -2
- package/contracts/instance/module/IBundle.sol +6 -4
- package/contracts/instance/module/IComponents.sol +6 -0
- package/contracts/instance/service/ApplicationService.sol +9 -9
- package/contracts/instance/service/BundleService.sol +155 -60
- package/contracts/instance/service/ClaimService.sol +3 -3
- package/contracts/instance/service/DistributionService.sol +24 -56
- package/contracts/instance/service/IBundleService.sol +53 -22
- package/contracts/instance/service/IDistributionService.sol +1 -0
- package/contracts/instance/service/IPoolService.sol +65 -1
- package/contracts/instance/service/PolicyService.sol +60 -101
- package/contracts/instance/service/PoolService.sol +132 -49
- package/contracts/instance/service/ProductService.sol +20 -51
- package/contracts/registry/IRegistryService.sol +4 -3
- 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/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +60 -0
- package/contracts/types/Fee.sol +12 -5
- package/package.json +1 -1
| @@ -74,7 +74,7 @@ contract InstanceService is | |
| 74 74 | 
             
                    IRegistry registry = getRegistry();
         | 
| 75 75 | 
             
                    address registryAddress = address(registry);
         | 
| 76 76 | 
             
                    NftId registryNftId = registry.getNftId(registryAddress);
         | 
| 77 | 
            -
                    address registryServiceAddress = registry.getServiceAddress(REGISTRY(),  | 
| 77 | 
            +
                    address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getVersion().toMajorPart());
         | 
| 78 78 | 
             
                    IRegistryService registryService = IRegistryService(registryServiceAddress);
         | 
| 79 79 |  | 
| 80 80 | 
             
                    clonedOzAccessManager = AccessManagerUpgradeableInitializeable(
         | 
| @@ -169,7 +169,7 @@ contract InstanceService is | |
| 169 169 |  | 
| 170 170 | 
             
                function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
         | 
| 171 171 | 
             
                    // configure authorization for distribution service on instance
         | 
| 172 | 
            -
                    address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(),  | 
| 172 | 
            +
                    address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart());
         | 
| 173 173 | 
             
                    clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
         | 
| 174 174 | 
             
                    bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
         | 
| 175 175 | 
             
                    instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
         | 
| @@ -191,7 +191,7 @@ contract InstanceService is | |
| 191 191 |  | 
| 192 192 | 
             
                function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
         | 
| 193 193 | 
             
                    // configure authorization for pool service on instance
         | 
| 194 | 
            -
                    address poolServiceAddress = getRegistry().getServiceAddress(POOL(),  | 
| 194 | 
            +
                    address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart());
         | 
| 195 195 | 
             
                    clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
         | 
| 196 196 | 
             
                    bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
         | 
| 197 197 | 
             
                    instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
         | 
| @@ -204,7 +204,7 @@ contract InstanceService is | |
| 204 204 |  | 
| 205 205 | 
             
                function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
         | 
| 206 206 | 
             
                    // configure authorization for product service on instance
         | 
| 207 | 
            -
                    address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(),  | 
| 207 | 
            +
                    address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getVersion().toMajorPart());
         | 
| 208 208 | 
             
                    clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
         | 
| 209 209 | 
             
                    bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
         | 
| 210 210 | 
             
                    instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
         | 
| @@ -220,7 +220,7 @@ contract InstanceService is | |
| 220 220 |  | 
| 221 221 | 
             
                function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
         | 
| 222 222 | 
             
                    // configure authorization for application services on instance
         | 
| 223 | 
            -
                    address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(),  | 
| 223 | 
            +
                    address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getVersion().toMajorPart());
         | 
| 224 224 | 
             
                    clonedAccessManager.grantRole(APPLICATION_SERVICE_ROLE(), applicationServiceAddress);
         | 
| 225 225 | 
             
                    bytes4[] memory instanceApplicationServiceSelectors = new bytes4[](3);
         | 
| 226 226 | 
             
                    instanceApplicationServiceSelectors[0] = clonedInstance.createApplication.selector;
         | 
| @@ -234,7 +234,7 @@ contract InstanceService is | |
| 234 234 |  | 
| 235 235 | 
             
                function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
         | 
| 236 236 | 
             
                    // configure authorization for policy services on instance
         | 
| 237 | 
            -
                    address policyServiceAddress = getRegistry().getServiceAddress(POLICY(),  | 
| 237 | 
            +
                    address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart());
         | 
| 238 238 | 
             
                    clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), policyServiceAddress);
         | 
| 239 239 | 
             
                    bytes4[] memory instancePolicyServiceSelectors = new bytes4[](2);
         | 
| 240 240 | 
             
                    instancePolicyServiceSelectors[0] = clonedInstance.updatePolicy.selector;
         | 
| @@ -247,7 +247,7 @@ contract InstanceService is | |
| 247 247 |  | 
| 248 248 | 
             
                function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
         | 
| 249 249 | 
             
                    // configure authorization for claim/payout services on instance
         | 
| 250 | 
            -
                    address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(),  | 
| 250 | 
            +
                    address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getVersion().toMajorPart());
         | 
| 251 251 | 
             
                    clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), claimServiceAddress);
         | 
| 252 252 | 
             
                    // TODO add claims function authz
         | 
| 253 253 | 
             
                    bytes4[] memory instanceClaimServiceSelectors = new bytes4[](0);
         | 
| @@ -261,7 +261,7 @@ contract InstanceService is | |
| 261 261 |  | 
| 262 262 | 
             
                function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
         | 
| 263 263 | 
             
                    // configure authorization for bundle service on instance
         | 
| 264 | 
            -
                    address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(),  | 
| 264 | 
            +
                    address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart());
         | 
| 265 265 | 
             
                    clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
         | 
| 266 266 | 
             
                    bytes4[] memory instanceBundleServiceSelectors = new bytes4[](3);
         | 
| 267 267 | 
             
                    instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
         | 
| @@ -287,7 +287,7 @@ contract InstanceService is | |
| 287 287 |  | 
| 288 288 | 
             
                function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
         | 
| 289 289 | 
             
                    // configure authorization for instance service on instance
         | 
| 290 | 
            -
                    address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(),  | 
| 290 | 
            +
                    address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getVersion().toMajorPart());
         | 
| 291 291 | 
             
                    clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
         | 
| 292 292 | 
             
                    bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
         | 
| 293 293 | 
             
                    instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
         | 
| @@ -359,7 +359,7 @@ contract InstanceService is | |
| 359 359 | 
             
                    _masterInstanceReader = instanceReaderAddress;
         | 
| 360 360 | 
             
                    _masterInstanceBundleManager = bundleManagerAddress;
         | 
| 361 361 |  | 
| 362 | 
            -
                    IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(),  | 
| 362 | 
            +
                    IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getVersion().toMajorPart()));
         | 
| 363 363 | 
             
                    IInstance masterInstance = IInstance(_masterInstance);
         | 
| 364 364 | 
             
                    IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
         | 
| 365 365 | 
             
                    masterInstanceNftId = info.nftId;
         | 
| @@ -408,7 +408,7 @@ contract InstanceService is | |
| 408 408 | 
             
                }
         | 
| 409 409 |  | 
| 410 410 | 
             
                // From IService
         | 
| 411 | 
            -
                function getDomain() public pure override | 
| 411 | 
            +
                function getDomain() public pure override returns(ObjectType) {
         | 
| 412 412 | 
             
                    return INSTANCE();
         | 
| 413 413 | 
             
                }
         | 
| 414 414 |  | 
| @@ -426,7 +426,7 @@ contract InstanceService is | |
| 426 426 | 
             
                    (registryAddress, initialOwner) = abi.decode(data, (address, address));
         | 
| 427 427 | 
             
                    // TODO while InstanceService is not deployed in InstanceServiceManager constructor
         | 
| 428 428 | 
             
                    //      owner is InstanceServiceManager deployer
         | 
| 429 | 
            -
                    initializeService(registryAddress, owner);
         | 
| 429 | 
            +
                    initializeService(registryAddress, address(0), owner);
         | 
| 430 430 | 
             
                    registerInterface(type(IInstanceService).interfaceId);
         | 
| 431 431 | 
             
                }
         | 
| 432 432 |  | 
| @@ -459,18 +459,18 @@ contract InstanceService is | |
| 459 459 |  | 
| 460 460 | 
             
                // TODO called by component, but target can be component helper...so needs target name
         | 
| 461 461 | 
             
                // TODO check that targetName associated with component...how???
         | 
| 462 | 
            -
                //function setTargetLocked(string memory targetName, bool locked) onlyComponent external {
         | 
| 463 462 | 
             
                function setComponentLocked(bool locked) onlyComponent external {
         | 
| 464 463 | 
             
                    address componentAddress = msg.sender;
         | 
| 465 464 | 
             
                    IRegistry registry = getRegistry();
         | 
| 466 465 | 
             
                    NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
         | 
| 467 | 
            -
                    address instanceAddress = registry.getObjectInfo(instanceNftId).objectAddress;
         | 
| 468 | 
            -
                    IInstance instance = IInstance(instanceAddress);
         | 
| 469 466 |  | 
| 470 | 
            -
                     | 
| 471 | 
            -
             | 
| 472 | 
            -
             | 
| 473 | 
            -
             | 
| 467 | 
            +
                    IInstance instance = IInstance(
         | 
| 468 | 
            +
                        registry.getObjectInfo(
         | 
| 469 | 
            +
                            instanceNftId).objectAddress);
         | 
| 470 | 
            +
             | 
| 471 | 
            +
                    instance.getInstanceAccessManager().setTargetLocked(
         | 
| 472 | 
            +
                        componentAddress, 
         | 
| 473 | 
            +
                        locked);
         | 
| 474 474 | 
             
                }
         | 
| 475 475 |  | 
| 476 476 | 
             
                function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress) 
         | 
| @@ -16,7 +16,6 @@ import {InstanceAccessManager} from "../InstanceAccessManager.sol"; | |
| 16 16 |  | 
| 17 17 | 
             
            abstract contract ComponentService is Service {
         | 
| 18 18 |  | 
| 19 | 
            -
                error ErrorComponentServiceAlreadyRegistered(address component, NftId nftId);
         | 
| 20 19 | 
             
                error ErrorComponentServiceNotComponent(address component);
         | 
| 21 20 | 
             
                error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
         | 
| 22 21 | 
             
                error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
         | 
| @@ -33,13 +32,15 @@ abstract contract ComponentService is Service { | |
| 33 32 | 
             
                // view functions
         | 
| 34 33 |  | 
| 35 34 | 
             
                function getRegistryService() public view virtual returns (IRegistryService) {
         | 
| 36 | 
            -
                     | 
| 37 | 
            -
                    return IRegistryService(service);
         | 
| 35 | 
            +
                    return IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 38 36 | 
             
                }
         | 
| 39 37 |  | 
| 40 38 | 
             
                function getInstanceService() public view returns (InstanceService) {
         | 
| 41 | 
            -
                     | 
| 42 | 
            -
             | 
| 39 | 
            +
                    return InstanceService(_getServiceAddress(INSTANCE()));
         | 
| 40 | 
            +
                }
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                function _getServiceAddress(ObjectType domain) internal view returns (address) {
         | 
| 43 | 
            +
                    return getRegistry().getServiceAddress(domain, getVersion().toMajorPart());
         | 
| 43 44 | 
             
                }
         | 
| 44 45 |  | 
| 45 46 | 
             
                // internal functions
         | 
| @@ -60,12 +61,6 @@ abstract contract ComponentService is Service { | |
| 60 61 | 
             
                    // component may only be registerd by initial owner of component
         | 
| 61 62 | 
             
                    owner = msg.sender;
         | 
| 62 63 |  | 
| 63 | 
            -
                    // check component has not already been registerd
         | 
| 64 | 
            -
                    NftId compoentNftId = getRegistry().getNftId(componentAddress);
         | 
| 65 | 
            -
                    if(compoentNftId.gtz()) {
         | 
| 66 | 
            -
                        revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
         | 
| 67 | 
            -
                    }
         | 
| 68 | 
            -
             | 
| 69 64 | 
             
                    // check this is a component
         | 
| 70 65 | 
             
                    component = IComponent(componentAddress);
         | 
| 71 66 | 
             
                    if(!component.supportsInterface(type(IComponent).interfaceId)) {
         | 
| @@ -87,48 +82,40 @@ abstract contract ComponentService is Service { | |
| 87 82 | 
             
                    // check instance has assigned required role to owner
         | 
| 88 83 | 
             
                    instanceNftId = componentInfo.parentNftId;
         | 
| 89 84 | 
             
                    instance = _getInstance(instanceNftId);
         | 
| 90 | 
            -
                     | 
| 91 | 
            -
                    bool hasRole = accessManager.hasRole(
         | 
| 92 | 
            -
                        requiredRole,
         | 
| 93 | 
            -
                        owner);
         | 
| 94 | 
            -
             | 
| 95 | 
            -
                    if(!hasRole) {
         | 
| 85 | 
            +
                    if(!instance.getInstanceAccessManager().hasRole(requiredRole, owner)) {
         | 
| 96 86 | 
             
                        revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
         | 
| 97 87 | 
             
                    }
         | 
| 98 88 | 
             
                }
         | 
| 99 89 |  | 
| 100 90 | 
             
                // internal view functions
         | 
| 101 91 |  | 
| 102 | 
            -
                function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
         | 
| 103 | 
            -
                    IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
         | 
| 104 | 
            -
                    return IInstance(instanceInfo.objectAddress);
         | 
| 105 | 
            -
                }
         | 
| 106 | 
            -
             | 
| 107 92 | 
             
                function _getAndVerifyComponentInfoAndInstance(
         | 
| 108 | 
            -
                    //address component,
         | 
| 109 93 | 
             
                    ObjectType expectedType
         | 
| 110 94 | 
             
                )
         | 
| 111 95 | 
             
                    internal
         | 
| 112 96 | 
             
                    view
         | 
| 113 97 | 
             
                    returns(
         | 
| 98 | 
            +
                        NftId nftId,
         | 
| 114 99 | 
             
                        IRegistry.ObjectInfo memory info, 
         | 
| 115 100 | 
             
                        IInstance instance
         | 
| 116 101 | 
             
                    )
         | 
| 117 102 | 
             
                {
         | 
| 118 103 | 
             
                    IRegistry registry = getRegistry();
         | 
| 119 | 
            -
                    //TODO redundant check -> just check type
         | 
| 120 | 
            -
                    //NftId componentNftId = registry.getNftId(component); 
         | 
| 121 | 
            -
                    //require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
         | 
| 122 104 |  | 
| 123 105 | 
             
                    info = registry.getObjectInfo(msg.sender);
         | 
| 124 106 | 
             
                    require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
         | 
| 125 107 |  | 
| 126 | 
            -
                     | 
| 127 | 
            -
                    instance =  | 
| 108 | 
            +
                    nftId = info.nftId;
         | 
| 109 | 
            +
                    instance = _getInstance(info.parentNftId);
         | 
| 128 110 |  | 
| 129 | 
            -
                     | 
| 130 | 
            -
                    if (accessManager.isTargetLocked(info.objectAddress)) {
         | 
| 111 | 
            +
                    if (instance.getInstanceAccessManager().isTargetLocked(info.objectAddress)) {
         | 
| 131 112 | 
             
                        revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
         | 
| 132 113 | 
             
                    }
         | 
| 133 114 | 
             
                }
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
         | 
| 117 | 
            +
                    return IInstance(
         | 
| 118 | 
            +
                        getRegistry().getObjectInfo(
         | 
| 119 | 
            +
                            instanceNftId).objectAddress);
         | 
| 120 | 
            +
                }
         | 
| 134 121 | 
             
            }
         | 
| @@ -5,7 +5,7 @@ import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blockn | |
| 5 5 | 
             
            import {Key32, KeyId, Key32Lib} from "../../types/Key32.sol";
         | 
| 6 6 | 
             
            import {NftId} from "../../types/NftId.sol";
         | 
| 7 7 | 
             
            import {ObjectType} from "../../types/ObjectType.sol";
         | 
| 8 | 
            -
            import {StateId, ACTIVE} from "../../types/StateId.sol";
         | 
| 8 | 
            +
            import {StateId, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
         | 
| 9 9 | 
             
            import {Timestamp, TimestampLib} from "../../types/Timestamp.sol";
         | 
| 10 10 |  | 
| 11 11 | 
             
            import {Lifecycle} from "./Lifecycle.sol";
         | 
| @@ -79,10 +79,15 @@ contract KeyValueStore is Lifecycle, IKeyValueStore { | |
| 79 79 | 
             
                    // update data
         | 
| 80 80 | 
             
                    _value[key32].data = data;
         | 
| 81 81 |  | 
| 82 | 
            -
                    // update  | 
| 82 | 
            +
                    // update state 
         | 
| 83 | 
            +
                    if(state != KEEP_STATE()) {
         | 
| 84 | 
            +
                        metadata.state = state;
         | 
| 85 | 
            +
                    }
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                    // update reest of metadata
         | 
| 83 88 | 
             
                    address updatedBy = msg.sender;
         | 
| 84 89 | 
             
                    Blocknumber lastUpdatedIn = metadata.updatedIn;
         | 
| 85 | 
            -
             | 
| 90 | 
            +
             | 
| 86 91 | 
             
                    metadata.updatedBy = updatedBy;
         | 
| 87 92 | 
             
                    metadata.updatedIn = blockBlocknumber();
         | 
| 88 93 |  | 
| @@ -43,9 +43,9 @@ interface IAccess { | |
| 43 43 | 
             
                error ErrorIAccessRoleTypeInvalid(RoleId roleId, Type rtype);
         | 
| 44 44 |  | 
| 45 45 | 
             
                error ErrorIAccessTargetAddressZero();
         | 
| 46 | 
            -
                error ErrorIAccessTargetDoesNotExist( | 
| 46 | 
            +
                error ErrorIAccessTargetDoesNotExist(address target);
         | 
| 47 47 | 
             
                error ErrorIAccessTargetExists(address target, ShortString name);
         | 
| 48 | 
            -
                error ErrorIAccessTargetTypeInvalid( | 
| 48 | 
            +
                error ErrorIAccessTargetTypeInvalid(address target, Type ttype);
         | 
| 49 49 | 
             
                error ErrorIAccessTargetNameEmpty(address target);
         | 
| 50 50 | 
             
                error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
         | 
| 51 51 | 
             
                error ErrorIAccessTargetLocked(address target);
         | 
| @@ -1,21 +1,23 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            +
            import {Amount} from "../../types/Amount.sol";
         | 
| 4 5 | 
             
            import {NftId} from "../../types/NftId.sol";
         | 
| 5 6 | 
             
            import {Fee} from "../../types/Fee.sol";
         | 
| 6 7 | 
             
            import {Seconds} from "../../types/Seconds.sol";
         | 
| 7 8 | 
             
            import {Timestamp} from "../../types/Timestamp.sol";
         | 
| 8 9 |  | 
| 9 10 | 
             
            interface IBundle {
         | 
| 11 | 
            +
             | 
| 10 12 | 
             
                struct BundleInfo {
         | 
| 11 13 | 
             
                    NftId poolNftId;
         | 
| 12 14 | 
             
                    Fee fee; // bundle fee on net premium amounts
         | 
| 13 15 | 
             
                    bytes filter; // required conditions for applications to be considered for collateralization by this bundle
         | 
| 14 | 
            -
                     | 
| 15 | 
            -
                     | 
| 16 | 
            -
                     | 
| 16 | 
            +
                    Amount capitalAmount; // net stakings + net premiums - payouts
         | 
| 17 | 
            +
                    Amount lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= capital amount)
         | 
| 18 | 
            +
                    Amount feeAmount; // accumulated fee amount
         | 
| 17 19 | 
             
                    Seconds lifetime;
         | 
| 18 | 
            -
                    Timestamp expiredAt; // no new policies
         | 
| 20 | 
            +
                    Timestamp expiredAt; // no new policies starting with this timestamp
         | 
| 19 21 | 
             
                    Timestamp closedAt; // no open policies, locked amount = 0
         | 
| 20 22 | 
             
                }
         | 
| 21 23 | 
             
            }
         | 
| @@ -3,6 +3,7 @@ pragma solidity ^0.8.20; | |
| 3 3 |  | 
| 4 4 | 
             
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 5 |  | 
| 6 | 
            +
            import {Amount} from "../../types/Amount.sol";
         | 
| 6 7 | 
             
            import {Fee} from "../../types/Fee.sol";
         | 
| 7 8 | 
             
            import {NftId} from "../../types/NftId.sol";
         | 
| 8 9 | 
             
            import {RoleId} from "../../types/RoleId.sol";
         | 
| @@ -16,13 +17,18 @@ interface IComponents { | |
| 16 17 | 
             
                    IERC20Metadata token;
         | 
| 17 18 | 
             
                    TokenHandler tokenHandler;
         | 
| 18 19 | 
             
                    address wallet;
         | 
| 20 | 
            +
                    Amount balanceAmount; // calculated balance (may not necessarily match withg wallet balance)
         | 
| 21 | 
            +
                    Amount feeAmount; // accumulated fees belonging to component owner
         | 
| 19 22 | 
             
                    bytes data; // will hold component type specific additional info (eg encoded pool info)
         | 
| 20 23 | 
             
                }
         | 
| 21 24 |  | 
| 22 25 | 
             
                struct PoolInfo {
         | 
| 23 26 | 
             
                    NftId productNftId; // the nft of the product this pool is linked to
         | 
| 24 27 | 
             
                    RoleId bundleOwnerRole; // the required role for bundle owners
         | 
| 28 | 
            +
                    // TODO maxCapitalAmount -> maxBalanceAmount
         | 
| 25 29 | 
             
                    uint256 maxCapitalAmount; // max capital amount allowed for pool
         | 
| 30 | 
            +
                    uint256 balanceAmount; // current pool balance (accounting view)
         | 
| 31 | 
            +
                    uint256 feeAmount; // accumulated fee amount
         | 
| 26 32 | 
             
                    bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
         | 
| 27 33 | 
             
                    bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
         | 
| 28 34 | 
             
                    bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications 
         | 
| @@ -65,14 +65,14 @@ contract ApplicationService is | |
| 65 65 | 
             
                    address initialOwner;
         | 
| 66 66 | 
             
                    (registryAddress, initialOwner) = abi.decode(data, (address, address));
         | 
| 67 67 |  | 
| 68 | 
            -
                    initializeService(registryAddress, owner);
         | 
| 68 | 
            +
                    initializeService(registryAddress, address(0), owner);
         | 
| 69 69 | 
             
                    registerInterface(type(IApplicationService).interfaceId);
         | 
| 70 70 |  | 
| 71 | 
            -
                    _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(),  | 
| 71 | 
            +
                    _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart()));
         | 
| 72 72 | 
             
                }
         | 
| 73 73 |  | 
| 74 74 |  | 
| 75 | 
            -
                function getDomain() public pure override | 
| 75 | 
            +
                function getDomain() public pure override returns(ObjectType) {
         | 
| 76 76 | 
             
                    return APPLICATION();
         | 
| 77 77 | 
             
                }
         | 
| 78 78 |  | 
| @@ -90,13 +90,13 @@ contract ApplicationService is | |
| 90 90 | 
             
                    virtual
         | 
| 91 91 | 
             
                    returns (NftId applicationNftId)
         | 
| 92 92 | 
             
                {
         | 
| 93 | 
            -
                    ( | 
| 93 | 
            +
                    (NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         | 
| 94 94 | 
             
                    // TODO: add validations (see create bundle in pool service)
         | 
| 95 95 |  | 
| 96 96 | 
             
                    applicationNftId = getRegistryService().registerPolicy(
         | 
| 97 97 | 
             
                        IRegistry.ObjectInfo(
         | 
| 98 98 | 
             
                            zeroNftId(),
         | 
| 99 | 
            -
                             | 
| 99 | 
            +
                            productNftId,
         | 
| 100 100 | 
             
                            POLICY(),
         | 
| 101 101 | 
             
                            false, // intercepting property for policies is defined on product
         | 
| 102 102 | 
             
                            address(0),
         | 
| @@ -107,7 +107,7 @@ contract ApplicationService is | |
| 107 107 |  | 
| 108 108 | 
             
                    // (uint256 premiumAmount,,,,,) = calculatePremium(
         | 
| 109 109 | 
             
                    IPolicy.Premium memory premium = calculatePremium(
         | 
| 110 | 
            -
                         | 
| 110 | 
            +
                        productNftId,
         | 
| 111 111 | 
             
                        riskId,
         | 
| 112 112 | 
             
                        sumInsuredAmount,
         | 
| 113 113 | 
             
                        lifetime,
         | 
| @@ -117,7 +117,7 @@ contract ApplicationService is | |
| 117 117 | 
             
                    );
         | 
| 118 118 |  | 
| 119 119 | 
             
                    IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
         | 
| 120 | 
            -
                         | 
| 120 | 
            +
                        productNftId,
         | 
| 121 121 | 
             
                        bundleNftId,
         | 
| 122 122 | 
             
                        referralId,
         | 
| 123 123 | 
             
                        riskId,
         | 
| @@ -172,7 +172,7 @@ contract ApplicationService is | |
| 172 172 | 
             
                    external
         | 
| 173 173 | 
             
                    virtual override
         | 
| 174 174 | 
             
                {
         | 
| 175 | 
            -
                    ( | 
| 175 | 
            +
                    (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         | 
| 176 176 | 
             
                    instance.updateApplicationState(applicationNftId, REVOKED());
         | 
| 177 177 | 
             
                }
         | 
| 178 178 |  | 
| @@ -337,7 +337,7 @@ contract ApplicationService is | |
| 337 337 |  | 
| 338 338 | 
             
                function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
         | 
| 339 339 | 
             
                    IRegistry.ObjectInfo memory productInfo;
         | 
| 340 | 
            -
                    (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         | 
| 340 | 
            +
                    (, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
         | 
| 341 341 | 
             
                    product = Product(productInfo.objectAddress);
         | 
| 342 342 | 
             
                }
         | 
| 343 343 |  |