@etherisc/gif-next 0.0.2-f36fd21-685 → 0.0.2-f47f21f-178
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 +19 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +67 -11
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +60 -32
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +163 -309
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +91 -277
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +174 -292
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +99 -123
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +78 -92
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +78 -62
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1538 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +470 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +2077 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1471 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1231 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1592 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2095 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +53 -31
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +29 -84
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +56 -123
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +166 -139
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +459 -131
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +77 -242
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -87
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +330 -233
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- 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/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +137 -283
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +66 -80
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +79 -265
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +91 -159
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +75 -83
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +109 -330
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +82 -22
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +359 -194
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +145 -97
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +178 -23
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +88 -130
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +384 -179
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +99 -313
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +506 -334
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +111 -87
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +76 -168
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +72 -92
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +136 -281
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +303 -187
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +119 -103
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +34 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +176 -6
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +310 -118
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +124 -97
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +433 -327
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +119 -103
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +199 -309
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +96 -120
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +136 -281
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +622 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +694 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +286 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +492 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +283 -143
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +78 -284
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -75
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +129 -221
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
- 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/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +65 -236
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +355 -283
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +122 -120
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +55 -54
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +321 -19
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +66 -80
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
- 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 +29 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +79 -265
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +47 -112
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +82 -55
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +63 -93
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +176 -293
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +106 -91
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +71 -165
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +71 -79
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +169 -128
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -23
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +32 -8
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +2 -2
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +55 -70
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/authorization/AccessAdmin.sol +64 -59
- package/contracts/authorization/Authorization.sol +111 -40
- package/contracts/authorization/IAccess.sol +1 -0
- package/contracts/authorization/IAccessAdmin.sol +4 -3
- package/contracts/authorization/IAuthorization.sol +13 -7
- package/contracts/authorization/IServiceAuthorization.sol +3 -1
- package/contracts/authorization/ReleaseAccessManager.sol +38 -0
- package/contracts/authorization/ServiceAuthorization.sol +26 -10
- package/contracts/distribution/BasicDistribution.sol +2 -1
- package/contracts/distribution/Distribution.sol +7 -17
- package/contracts/distribution/DistributionService.sol +83 -65
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +9 -5
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +75 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
- package/contracts/examples/fire/FireProduct.sol +418 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
- package/contracts/instance/IInstance.sol +10 -30
- package/contracts/instance/IInstanceService.sol +0 -20
- package/contracts/instance/Instance.sol +29 -51
- package/contracts/instance/InstanceAdmin.sol +42 -31
- package/contracts/instance/InstanceAuthorizationV3.sol +11 -21
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +65 -97
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +11 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +10 -10
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/BasicOracle.sol +0 -1
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +6 -16
- package/contracts/oracle/OracleService.sol +47 -34
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +21 -31
- package/contracts/pool/BasicPoolAuthorization.sol +5 -3
- package/contracts/pool/BundleService.sol +213 -61
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +31 -8
- package/contracts/pool/IPoolComponent.sol +18 -8
- package/contracts/pool/IPoolService.sol +56 -39
- package/contracts/pool/Pool.sol +60 -53
- package/contracts/pool/PoolService.sol +250 -140
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +59 -30
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +7 -6
- package/contracts/product/BasicProductAuthorization.sol +0 -1
- package/contracts/product/ClaimService.sol +313 -118
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +31 -7
- package/contracts/product/IPolicyService.sol +34 -34
- package/contracts/product/IPricingService.sol +10 -10
- package/contracts/product/IProductComponent.sol +23 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +394 -196
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +54 -54
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +125 -71
- package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +68 -38
- package/contracts/registry/IRegistry.sol +55 -18
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +342 -201
- package/contracts/registry/RegistryAdmin.sol +134 -51
- package/contracts/registry/RegistryService.sol +35 -46
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +204 -188
- package/contracts/registry/ServiceAuthorizationV3.sol +16 -22
- package/contracts/shared/Component.sol +40 -55
- package/contracts/shared/ComponentService.sol +235 -151
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +23 -14
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +10 -6
- package/contracts/shared/IComponentService.sol +25 -13
- package/contracts/shared/IInstanceLinkedComponent.sol +7 -22
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IRegisterable.sol +11 -0
- package/contracts/shared/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +72 -31
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +27 -7
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +19 -9
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +20 -18
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +2 -1
- package/contracts/staking/IStakingService.sol +0 -3
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +13 -32
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +11 -29
- package/contracts/staking/StakingServiceManager.sol +2 -2
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +15 -0
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/NftId.sol +1 -0
- package/contracts/type/ObjectType.sol +16 -11
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +15 -1
- package/contracts/type/RoleId.sol +0 -12
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +4 -0
- package/contracts/upgradeability/ProxyManager.sol +68 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +2 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/contracts/authorization/IModuleAuthorization.sol +0 -21
- package/contracts/authorization/ModuleAuthorization.sol +0 -78
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
| @@ -5,14 +5,17 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER | |
| 5 5 |  | 
| 6 6 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 7 7 | 
             
            import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
         | 
| 8 | 
            +
            import {ContractLib} from "../shared/ContractLib.sol";
         | 
| 8 9 | 
             
            import {Fee, FeeLib} from "../type/Fee.sol";
         | 
| 9 10 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 10 11 | 
             
            import {IComponentService} from "./IComponentService.sol";
         | 
| 11 12 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 12 13 | 
             
            import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
         | 
| 14 | 
            +
            import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
         | 
| 13 15 | 
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 14 16 | 
             
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 15 17 | 
             
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 18 | 
            +
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 16 19 | 
             
            import {IPoolComponent} from "../pool/IPoolComponent.sol";
         | 
| 17 20 | 
             
            import {IProductComponent} from "../product/IProductComponent.sol";
         | 
| 18 21 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| @@ -20,21 +23,13 @@ import {IRegistryService} from "../registry/IRegistryService.sol"; | |
| 20 23 | 
             
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 21 24 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 22 25 | 
             
            import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
         | 
| 23 | 
            -
            import {RoleId | 
| 24 | 
            -
            import { | 
| 26 | 
            +
            import {RoleId} from "../type/RoleId.sol";
         | 
| 27 | 
            +
            import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
         | 
| 25 28 |  | 
| 26 29 | 
             
            contract ComponentService is
         | 
| 27 30 | 
             
                ComponentVerifyingService,
         | 
| 28 31 | 
             
                IComponentService
         | 
| 29 32 | 
             
            {
         | 
| 30 | 
            -
                error ErrorComponentServiceAlreadyRegistered(address component);
         | 
| 31 | 
            -
                error ErrorComponentServiceNotComponent(address component);
         | 
| 32 | 
            -
                error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
         | 
| 33 | 
            -
                error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
         | 
| 34 | 
            -
                error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
         | 
| 35 | 
            -
                error ErrorComponentServiceComponentLocked(address component);
         | 
| 36 | 
            -
                error ErrorComponentServiceSenderNotService(address sender);
         | 
| 37 | 
            -
                error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
         | 
| 38 33 |  | 
| 39 34 | 
             
                bool private constant INCREASE = true;
         | 
| 40 35 | 
             
                bool private constant DECREASE = false;
         | 
| @@ -42,6 +37,14 @@ contract ComponentService is | |
| 42 37 | 
             
                IRegistryService private _registryService;
         | 
| 43 38 | 
             
                IInstanceService private _instanceService;
         | 
| 44 39 |  | 
| 40 | 
            +
                modifier onlyComponent(address component) {
         | 
| 41 | 
            +
                    if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
         | 
| 42 | 
            +
                        revert ErrorComponentServiceNotInstanceLinkedComponent(component);
         | 
| 43 | 
            +
                    }
         | 
| 44 | 
            +
                    _;
         | 
| 45 | 
            +
                }
         | 
| 46 | 
            +
             | 
| 47 | 
            +
             | 
| 45 48 | 
             
                function _initialize(
         | 
| 46 49 | 
             
                    address owner, 
         | 
| 47 50 | 
             
                    bytes memory data
         | 
| @@ -50,21 +53,44 @@ contract ComponentService is | |
| 50 53 | 
             
                    virtual override
         | 
| 51 54 | 
             
                    initializer()
         | 
| 52 55 | 
             
                {
         | 
| 53 | 
            -
                     | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
                     | 
| 56 | 
            +
                    (
         | 
| 57 | 
            +
                        address registryAddress,
         | 
| 58 | 
            +
                        address authority
         | 
| 59 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 57 60 |  | 
| 58 | 
            -
                     | 
| 61 | 
            +
                    _initializeService(registryAddress, authority, owner);
         | 
| 59 62 |  | 
| 60 63 | 
             
                    _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 61 64 | 
             
                    _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
         | 
| 62 65 |  | 
| 63 | 
            -
                     | 
| 66 | 
            +
                    _registerInterface(type(IComponentService).interfaceId);
         | 
| 64 67 | 
             
                }
         | 
| 65 68 |  | 
| 66 69 | 
             
                //-------- component ----------------------------------------------------//
         | 
| 67 70 |  | 
| 71 | 
            +
                function registerComponent(address component)
         | 
| 72 | 
            +
                    external
         | 
| 73 | 
            +
                    virtual
         | 
| 74 | 
            +
                    onlyComponent(component)
         | 
| 75 | 
            +
                    returns (NftId componentNftId)
         | 
| 76 | 
            +
                {
         | 
| 77 | 
            +
                    // type specific registration
         | 
| 78 | 
            +
                    ObjectType componentType = IInstanceLinkedComponent(component).getInitialInfo().objectType;
         | 
| 79 | 
            +
                    if (componentType == POOL()) {
         | 
| 80 | 
            +
                        return _registerPool(component);
         | 
| 81 | 
            +
                    }
         | 
| 82 | 
            +
                    if (componentType == DISTRIBUTION()) {
         | 
| 83 | 
            +
                        return _registerDistribution(component);
         | 
| 84 | 
            +
                    }
         | 
| 85 | 
            +
                    if (componentType == ORACLE()) {
         | 
| 86 | 
            +
                        return _registerOracle(component);
         | 
| 87 | 
            +
                    }
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                    // fail
         | 
| 90 | 
            +
                    revert ErrorComponentServiceTypeNotSupported(component, componentType);
         | 
| 91 | 
            +
                }
         | 
| 92 | 
            +
             | 
| 93 | 
            +
             | 
| 68 94 | 
             
                function setWallet(address newWallet) external virtual {
         | 
| 69 95 | 
             
                    (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
         | 
| 70 96 | 
             
                    IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
         | 
| @@ -115,51 +141,41 @@ contract ComponentService is | |
| 115 141 | 
             
                        }
         | 
| 116 142 | 
             
                    }
         | 
| 117 143 |  | 
| 118 | 
            -
                    // check allowance
         | 
| 119 | 
            -
                    TokenHandler tokenHandler = info.tokenHandler;
         | 
| 120 | 
            -
                    IERC20Metadata token = IERC20Metadata(info.token);
         | 
| 121 | 
            -
                    uint256 tokenAllowance = token.allowance(componentWallet, address(tokenHandler));
         | 
| 122 | 
            -
                    if (tokenAllowance < withdrawnAmount.toInt()) {
         | 
| 123 | 
            -
                        revert ErrorComponentServiceWalletAllowanceTooSmall(componentWallet, address(tokenHandler), tokenAllowance, withdrawnAmount.toInt());
         | 
| 124 | 
            -
                    }
         | 
| 125 | 
            -
             | 
| 126 144 | 
             
                    // decrease fee counters by withdrawnAmount
         | 
| 127 145 | 
             
                    _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
         | 
| 128 146 |  | 
| 129 147 | 
             
                    // transfer amount to component owner
         | 
| 130 148 | 
             
                    address componentOwner = getRegistry().ownerOf(componentNftId);
         | 
| 131 | 
            -
                     | 
| 132 | 
            -
                    tokenHandler. | 
| 133 | 
            -
             | 
| 134 | 
            -
                    emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(token), withdrawnAmount);
         | 
| 149 | 
            +
                    emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
         | 
| 150 | 
            +
                    info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
         | 
| 135 151 | 
             
                }
         | 
| 136 152 |  | 
| 137 153 |  | 
| 138 154 | 
             
                //-------- product ------------------------------------------------------//
         | 
| 139 155 |  | 
| 140 | 
            -
                function registerProduct()
         | 
| 156 | 
            +
                function registerProduct(address productAddress)
         | 
| 141 157 | 
             
                    external
         | 
| 142 158 | 
             
                    virtual
         | 
| 159 | 
            +
                    onlyComponent(productAddress)
         | 
| 160 | 
            +
                    returns (NftId productNftId)
         | 
| 143 161 | 
             
                {
         | 
| 144 | 
            -
                    address contractAddress = msg.sender;
         | 
| 145 | 
            -
             | 
| 146 162 | 
             
                    // register/create component setup
         | 
| 147 | 
            -
                     | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 150 | 
            -
                         | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
                    // create  | 
| 157 | 
            -
                     | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 161 | 
            -
                     | 
| 162 | 
            -
                     | 
| 163 | 
            +
                    InstanceAdmin instanceAdmin;
         | 
| 164 | 
            +
                    InstanceStore instanceStore;
         | 
| 165 | 
            +
                    (, instanceAdmin, instanceStore,, productNftId) = _register(
         | 
| 166 | 
            +
                        productAddress,
         | 
| 167 | 
            +
                        PRODUCT());
         | 
| 168 | 
            +
             | 
| 169 | 
            +
                    // get product
         | 
| 170 | 
            +
                    IProductComponent product = IProductComponent(productAddress);
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                    // create info
         | 
| 173 | 
            +
                    instanceStore.createProduct(
         | 
| 174 | 
            +
                        productNftId, 
         | 
| 175 | 
            +
                        product.getInitialProductInfo());
         | 
| 176 | 
            +
             | 
| 177 | 
            +
                    // authorize
         | 
| 178 | 
            +
                    instanceAdmin.initializeComponentAuthorization(product);
         | 
| 163 179 | 
             
                }
         | 
| 164 180 |  | 
| 165 181 |  | 
| @@ -220,17 +236,36 @@ contract ComponentService is | |
| 220 236 | 
             
                //-------- distribution -------------------------------------------------//
         | 
| 221 237 |  | 
| 222 238 | 
             
                /// @dev registers the sending component as a distribution component
         | 
| 223 | 
            -
                function  | 
| 224 | 
            -
                     | 
| 239 | 
            +
                function _registerDistribution(address distributioAddress)
         | 
| 240 | 
            +
                    internal
         | 
| 225 241 | 
             
                    virtual
         | 
| 242 | 
            +
                    returns (NftId distributionNftId)
         | 
| 226 243 | 
             
                {
         | 
| 227 | 
            -
                    address contractAddress = msg.sender;
         | 
| 228 | 
            -
             | 
| 229 244 | 
             
                    // register/create component info
         | 
| 230 | 
            -
                     | 
| 231 | 
            -
             | 
| 232 | 
            -
             | 
| 233 | 
            -
             | 
| 245 | 
            +
                    InstanceReader instanceReader;
         | 
| 246 | 
            +
                    InstanceAdmin instanceAdmin;
         | 
| 247 | 
            +
                    InstanceStore instanceStore;
         | 
| 248 | 
            +
                    NftId productNftId;
         | 
| 249 | 
            +
                    (instanceReader, instanceAdmin, instanceStore, productNftId, distributionNftId) = _register(
         | 
| 250 | 
            +
                        distributioAddress,
         | 
| 251 | 
            +
                        DISTRIBUTION());
         | 
| 252 | 
            +
             | 
| 253 | 
            +
                    // check product is still expecting a distribution registration
         | 
| 254 | 
            +
                    IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 255 | 
            +
                    if (!productInfo.hasDistribution) {
         | 
| 256 | 
            +
                        revert ErrorProductServiceNoDistributionExpected(productNftId);
         | 
| 257 | 
            +
                    }
         | 
| 258 | 
            +
                    if (productInfo.distributionNftId.gtz()) {
         | 
| 259 | 
            +
                        revert ErrorProductServiceDistributionAlreadyRegistered(productNftId, productInfo.distributionNftId);
         | 
| 260 | 
            +
                    }
         | 
| 261 | 
            +
             | 
| 262 | 
            +
                    // set distribution in product info
         | 
| 263 | 
            +
                    productInfo.distributionNftId = distributionNftId;
         | 
| 264 | 
            +
                    instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
         | 
| 265 | 
            +
             | 
| 266 | 
            +
                    // authorize
         | 
| 267 | 
            +
                    instanceAdmin.initializeComponentAuthorization(
         | 
| 268 | 
            +
                        IInstanceLinkedComponent(distributioAddress));
         | 
| 234 269 | 
             
                }
         | 
| 235 270 |  | 
| 236 271 |  | 
| @@ -327,46 +362,75 @@ contract ComponentService is | |
| 327 362 |  | 
| 328 363 | 
             
                //-------- oracle -------------------------------------------------------//
         | 
| 329 364 |  | 
| 330 | 
            -
                function  | 
| 331 | 
            -
                     | 
| 365 | 
            +
                function _registerOracle(address oracleAddress)
         | 
| 366 | 
            +
                    internal
         | 
| 332 367 | 
             
                    virtual
         | 
| 368 | 
            +
                    returns (NftId oracleNftId)
         | 
| 333 369 | 
             
                {
         | 
| 334 | 
            -
                    address contractAddress = msg.sender;
         | 
| 335 | 
            -
             | 
| 336 370 | 
             
                    // register/create component setup
         | 
| 337 | 
            -
                     | 
| 338 | 
            -
             | 
| 339 | 
            -
             | 
| 340 | 
            -
             | 
| 341 | 
            -
             | 
| 342 | 
            -
             | 
| 343 | 
            -
                         | 
| 344 | 
            -
                         | 
| 371 | 
            +
                    InstanceReader instanceReader;
         | 
| 372 | 
            +
                    InstanceAdmin instanceAdmin;
         | 
| 373 | 
            +
                    InstanceStore instanceStore;
         | 
| 374 | 
            +
                    NftId productNftId;
         | 
| 375 | 
            +
             | 
| 376 | 
            +
                    (instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) =_register(
         | 
| 377 | 
            +
                        oracleAddress,
         | 
| 378 | 
            +
                        ORACLE());
         | 
| 379 | 
            +
             | 
| 380 | 
            +
                    // check product is still expecting an oracle registration
         | 
| 381 | 
            +
                    IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 382 | 
            +
                    if (productInfo.expectedNumberOfOracles == 0) {
         | 
| 383 | 
            +
                        revert ErrorProductServiceNoOraclesExpected(productNftId);
         | 
| 384 | 
            +
                    }
         | 
| 385 | 
            +
                    if (productInfo.numberOfOracles == productInfo.expectedNumberOfOracles) {
         | 
| 386 | 
            +
                        revert ErrorProductServiceOraclesAlreadyRegistered(productNftId, productInfo.expectedNumberOfOracles);
         | 
| 387 | 
            +
                    }
         | 
| 388 | 
            +
             | 
| 389 | 
            +
                    // update/add oracle to product info
         | 
| 390 | 
            +
                    productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
         | 
| 391 | 
            +
                    productInfo.numberOfOracles++;
         | 
| 392 | 
            +
                    instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
         | 
| 393 | 
            +
             | 
| 394 | 
            +
                    // authorize
         | 
| 395 | 
            +
                    instanceAdmin.initializeComponentAuthorization(
         | 
| 396 | 
            +
                        IInstanceLinkedComponent(oracleAddress));
         | 
| 345 397 | 
             
                }
         | 
| 346 398 |  | 
| 347 399 | 
             
                //-------- pool ---------------------------------------------------------//
         | 
| 348 400 |  | 
| 349 | 
            -
                function  | 
| 350 | 
            -
                     | 
| 401 | 
            +
                function _registerPool(address poolAddress)
         | 
| 402 | 
            +
                    internal
         | 
| 351 403 | 
             
                    virtual
         | 
| 404 | 
            +
                    returns (NftId poolNftId)
         | 
| 352 405 | 
             
                {
         | 
| 353 | 
            -
                    address contractAddress = msg.sender;
         | 
| 354 | 
            -
             | 
| 355 406 | 
             
                    // register/create component setup
         | 
| 356 | 
            -
                     | 
| 357 | 
            -
             | 
| 358 | 
            -
             | 
| 359 | 
            -
             | 
| 360 | 
            -
             | 
| 361 | 
            -
             | 
| 362 | 
            -
                         | 
| 363 | 
            -
                         | 
| 407 | 
            +
                    InstanceReader instanceReader;
         | 
| 408 | 
            +
                    InstanceAdmin instanceAdmin;
         | 
| 409 | 
            +
                    InstanceStore instanceStore;
         | 
| 410 | 
            +
                    NftId productNftId;
         | 
| 411 | 
            +
             | 
| 412 | 
            +
                    (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) =_register(
         | 
| 413 | 
            +
                        poolAddress,
         | 
| 414 | 
            +
                        POOL());
         | 
| 415 | 
            +
             | 
| 416 | 
            +
                    // check product is still expecting a pool registration
         | 
| 417 | 
            +
                    IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 418 | 
            +
                    if (productInfo.poolNftId.gtz()) {
         | 
| 419 | 
            +
                        revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
         | 
| 420 | 
            +
                    }
         | 
| 364 421 |  | 
| 365 422 | 
             
                    // create info
         | 
| 423 | 
            +
                    IPoolComponent pool = IPoolComponent(poolAddress);
         | 
| 366 424 | 
             
                    instanceStore.createPool(
         | 
| 367 | 
            -
                         | 
| 368 | 
            -
                         | 
| 369 | 
            -
             | 
| 425 | 
            +
                        poolNftId, 
         | 
| 426 | 
            +
                        pool.getInitialPoolInfo());
         | 
| 427 | 
            +
             | 
| 428 | 
            +
                    // update pool in product info
         | 
| 429 | 
            +
                    productInfo.poolNftId = poolNftId;
         | 
| 430 | 
            +
                    instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
         | 
| 431 | 
            +
             | 
| 432 | 
            +
                    // authorize
         | 
| 433 | 
            +
                    instanceAdmin.initializeComponentAuthorization(pool);
         | 
| 370 434 | 
             
                }
         | 
| 371 435 |  | 
| 372 436 |  | 
| @@ -492,74 +556,67 @@ contract ComponentService is | |
| 492 556 | 
             
                    }
         | 
| 493 557 | 
             
                }
         | 
| 494 558 |  | 
| 495 | 
            -
                /// @dev  | 
| 559 | 
            +
                /// @dev Registers the component represented by the provided address.
         | 
| 496 560 | 
             
                function _register(
         | 
| 497 561 | 
             
                    address componentAddress, // address of component to register
         | 
| 498 | 
            -
                    ObjectType requiredType | 
| 499 | 
            -
                    RoleId requiredRole // role required for comonent owner for registration
         | 
| 562 | 
            +
                    ObjectType requiredType // required type for component for registration
         | 
| 500 563 | 
             
                )
         | 
| 501 564 | 
             
                    internal
         | 
| 502 565 | 
             
                    virtual
         | 
| 503 566 | 
             
                    returns (
         | 
| 504 567 | 
             
                        InstanceReader instanceReader, 
         | 
| 568 | 
            +
                        InstanceAdmin instanceAdmin, 
         | 
| 505 569 | 
             
                        InstanceStore instanceStore, 
         | 
| 570 | 
            +
                        NftId parentNftId,
         | 
| 506 571 | 
             
                        NftId componentNftId
         | 
| 507 572 | 
             
                    )
         | 
| 508 573 | 
             
                {
         | 
| 574 | 
            +
                    NftId instanceNftId;
         | 
| 575 | 
            +
                    IInstance instance;
         | 
| 576 | 
            +
                    IInstanceLinkedComponent component;
         | 
| 577 | 
            +
                    address initialOwner;
         | 
| 578 | 
            +
             | 
| 509 579 | 
             
                    (
         | 
| 510 | 
            -
                         | 
| 511 | 
            -
                         | 
| 512 | 
            -
                         | 
| 580 | 
            +
                        instanceNftId, 
         | 
| 581 | 
            +
                        instance, 
         | 
| 582 | 
            +
                        parentNftId, 
         | 
| 583 | 
            +
                        component, 
         | 
| 584 | 
            +
                        initialOwner
         | 
| 513 585 | 
             
                    ) = _getAndVerifyRegisterableComponent(
         | 
| 586 | 
            +
                        getRegistry(),
         | 
| 514 587 | 
             
                        componentAddress,
         | 
| 515 | 
            -
                        requiredType | 
| 516 | 
            -
                        requiredRole);
         | 
| 588 | 
            +
                        requiredType);
         | 
| 517 589 |  | 
| 518 | 
            -
                    //  | 
| 519 | 
            -
                    componentNftId = _registryService.registerComponent(
         | 
| 520 | 
            -
                        component, 
         | 
| 521 | 
            -
                        requiredType, 
         | 
| 522 | 
            -
                        owner).nftId;
         | 
| 523 | 
            -
             | 
| 524 | 
            -
                    component.linkToRegisteredNftId();
         | 
| 525 | 
            -
             | 
| 526 | 
            -
                    // setup initial component authorization
         | 
| 527 | 
            -
                    _instanceService.initializeAuthorization(
         | 
| 528 | 
            -
                        instance.getNftId(),
         | 
| 529 | 
            -
                        component);
         | 
| 530 | 
            -
             | 
| 531 | 
            -
                    // save amended component info with instance
         | 
| 590 | 
            +
                    // get instance supporting contracts (as function return values)
         | 
| 532 591 | 
             
                    instanceReader = instance.getInstanceReader();
         | 
| 592 | 
            +
                    instanceAdmin = instance.getInstanceAdmin();
         | 
| 533 593 | 
             
                    instanceStore = instance.getInstanceStore();
         | 
| 534 594 |  | 
| 535 | 
            -
                     | 
| 536 | 
            -
                     | 
| 595 | 
            +
                    // register with registry
         | 
| 596 | 
            +
                    if (requiredType == PRODUCT()) {
         | 
| 597 | 
            +
                        componentNftId = _registryService.registerProduct(
         | 
| 598 | 
            +
                            component, initialOwner).nftId;
         | 
| 599 | 
            +
                    } else {
         | 
| 600 | 
            +
                        componentNftId = _registryService.registerProductLinkedComponent(
         | 
| 601 | 
            +
                            component, requiredType, initialOwner).nftId;
         | 
| 602 | 
            +
                    }
         | 
| 603 | 
            +
             | 
| 604 | 
            +
                    // deploy and wire token handler
         | 
| 605 | 
            +
                    IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
         | 
| 606 | 
            +
                    IERC20Metadata token = componentInfo.token;
         | 
| 607 | 
            +
                    componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
         | 
| 608 | 
            +
                        address(token), 
         | 
| 609 | 
            +
                        address(instanceAdmin.authority()));
         | 
| 537 610 |  | 
| 611 | 
            +
                    // register component with instance
         | 
| 538 612 | 
             
                    instanceStore.createComponent(
         | 
| 539 | 
            -
                         | 
| 613 | 
            +
                        componentNftId, 
         | 
| 540 614 | 
             
                        componentInfo);
         | 
| 541 615 |  | 
| 542 | 
            -
                    //  | 
| 543 | 
            -
             | 
| 544 | 
            -
             | 
| 616 | 
            +
                    // link component contract to nft id
         | 
| 617 | 
            +
                    component.linkToRegisteredNftId();
         | 
| 545 618 |  | 
| 546 | 
            -
             | 
| 547 | 
            -
                function _linkToProduct(
         | 
| 548 | 
            -
                    InstanceReader instanceReader, 
         | 
| 549 | 
            -
                    InstanceStore instanceStore,
         | 
| 550 | 
            -
                    NftId componentNftId,
         | 
| 551 | 
            -
                    NftId productNftId
         | 
| 552 | 
            -
                )
         | 
| 553 | 
            -
                    internal
         | 
| 554 | 
            -
                {
         | 
| 555 | 
            -
                    // only link components that are registered
         | 
| 556 | 
            -
                    if(componentNftId.eqz()) {
         | 
| 557 | 
            -
                        return;
         | 
| 558 | 
            -
                    }
         | 
| 559 | 
            -
                
         | 
| 560 | 
            -
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(componentNftId);
         | 
| 561 | 
            -
                    componentInfo.productNftId = productNftId;
         | 
| 562 | 
            -
                    instanceStore.updateComponent(componentNftId, componentInfo, KEEP_STATE());
         | 
| 619 | 
            +
                    emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, address(component), address(token), initialOwner);
         | 
| 563 620 | 
             
                }
         | 
| 564 621 |  | 
| 565 622 |  | 
| @@ -578,12 +635,6 @@ contract ComponentService is | |
| 578 635 | 
             
                }
         | 
| 579 636 |  | 
| 580 637 |  | 
| 581 | 
            -
                function _createSelectors(bytes4 selector) internal pure returns (bytes4[] memory selectors) {
         | 
| 582 | 
            -
                    selectors = new bytes4[](1);
         | 
| 583 | 
            -
                    selectors[0] = selector;
         | 
| 584 | 
            -
                }
         | 
| 585 | 
            -
             | 
| 586 | 
            -
             | 
| 587 638 | 
             
                function _getLinkedProductInfo(
         | 
| 588 639 | 
             
                    InstanceReader instanceReader, 
         | 
| 589 640 | 
             
                    NftId componentNftId
         | 
| @@ -595,56 +646,89 @@ contract ComponentService is | |
| 595 646 | 
             
                        IComponents.ProductInfo memory info
         | 
| 596 647 | 
             
                    )
         | 
| 597 648 | 
             
                {
         | 
| 598 | 
            -
                    productNftId =  | 
| 649 | 
            +
                    productNftId = _getProductNftId(componentNftId);
         | 
| 599 650 | 
             
                    info = instanceReader.getProductInfo(productNftId);
         | 
| 600 651 | 
             
                }
         | 
| 601 652 |  | 
| 602 653 |  | 
| 603 | 
            -
                /// @dev  | 
| 604 | 
            -
                ///  | 
| 605 | 
            -
                /// - the  | 
| 654 | 
            +
                /// @dev Based on the provided component address required type the component 
         | 
| 655 | 
            +
                /// and related instance contract this function reverts iff:
         | 
| 656 | 
            +
                /// - the sender is not registered
         | 
| 606 657 | 
             
                /// - the component contract does not support IInstanceLinkedComponent
         | 
| 607 658 | 
             
                /// - the component type does not match with the required type
         | 
| 608 | 
            -
                /// - the  | 
| 659 | 
            +
                /// - the component has already been registered
         | 
| 609 660 | 
             
                function _getAndVerifyRegisterableComponent(
         | 
| 661 | 
            +
                    IRegistry registry,
         | 
| 610 662 | 
             
                    address componentAddress,
         | 
| 611 | 
            -
                    ObjectType requiredType | 
| 612 | 
            -
                    RoleId requiredRole
         | 
| 663 | 
            +
                    ObjectType requiredType
         | 
| 613 664 | 
             
                )
         | 
| 614 665 | 
             
                    internal
         | 
| 615 666 | 
             
                    view
         | 
| 616 667 | 
             
                    returns (
         | 
| 668 | 
            +
                        NftId instanceNftId,
         | 
| 617 669 | 
             
                        IInstance instance,
         | 
| 670 | 
            +
                        NftId parentNftId,
         | 
| 618 671 | 
             
                        IInstanceLinkedComponent component,
         | 
| 619 | 
            -
                        address  | 
| 672 | 
            +
                        address initialOwner
         | 
| 620 673 | 
             
                    )
         | 
| 621 674 | 
             
                {
         | 
| 622 | 
            -
                    // check  | 
| 623 | 
            -
                     | 
| 624 | 
            -
                    if( | 
| 625 | 
            -
                        revert  | 
| 675 | 
            +
                    // check sender (instance or product) is registered
         | 
| 676 | 
            +
                    IRegistry.ObjectInfo memory senderInfo = registry.getObjectInfo(msg.sender);
         | 
| 677 | 
            +
                    if (senderInfo.nftId.eqz()) {
         | 
| 678 | 
            +
                        revert ErrorComponentServiceSenderNotRegistered(msg.sender);
         | 
| 626 679 | 
             
                    }
         | 
| 627 680 |  | 
| 681 | 
            +
                    // the sender is the parent of the component to be registered
         | 
| 682 | 
            +
                    // an instance caller wanting to register a product - or -
         | 
| 683 | 
            +
                    // a product caller wantint go register a distribution, oracle or pool
         | 
| 684 | 
            +
                    parentNftId = senderInfo.nftId;
         | 
| 685 | 
            +
             | 
| 628 686 | 
             
                    // check component is of required type
         | 
| 687 | 
            +
                    component = IInstanceLinkedComponent(componentAddress);
         | 
| 629 688 | 
             
                    IRegistry.ObjectInfo memory info = component.getInitialInfo();
         | 
| 630 689 | 
             
                    if(info.objectType != requiredType) {
         | 
| 631 690 | 
             
                        revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
         | 
| 632 691 | 
             
                    }
         | 
| 633 692 |  | 
| 634 693 | 
             
                    // check component has not already been registered
         | 
| 635 | 
            -
                    if (getRegistry(). | 
| 694 | 
            +
                    if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
         | 
| 636 695 | 
             
                        revert ErrorComponentServiceAlreadyRegistered(componentAddress);
         | 
| 637 696 | 
             
                    }
         | 
| 638 697 |  | 
| 639 | 
            -
                    // check  | 
| 640 | 
            -
                     | 
| 641 | 
            -
                     | 
| 698 | 
            +
                    // check release matches
         | 
| 699 | 
            +
                    address parentAddress = registry.getObjectAddress(parentNftId);
         | 
| 700 | 
            +
                    if (component.getRelease() != IRegisterable(parentAddress).getRelease()) {
         | 
| 701 | 
            +
                        revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), IRegisterable(parentAddress).getRelease());
         | 
| 702 | 
            +
                    }
         | 
| 703 | 
            +
             | 
| 704 | 
            +
                    // check component belongs to same product cluster 
         | 
| 705 | 
            +
                    // parent of product must be instance, parent of other componet types must be product
         | 
| 706 | 
            +
                    if (info.parentNftId != senderInfo.nftId) {
         | 
| 707 | 
            +
                        revert ErrorComponentServiceSenderNotComponentParent(senderInfo.nftId, info.parentNftId);
         | 
| 708 | 
            +
                    }
         | 
| 709 | 
            +
             | 
| 710 | 
            +
                    // verify parent is registered instance
         | 
| 711 | 
            +
                    if (requiredType == PRODUCT()) {
         | 
| 712 | 
            +
                        if (senderInfo.objectType != INSTANCE()) {
         | 
| 713 | 
            +
                            revert ErrorComponentServiceParentNotInstance(senderInfo.nftId, senderInfo.objectType);
         | 
| 714 | 
            +
                        }
         | 
| 715 | 
            +
             | 
| 716 | 
            +
                        instanceNftId = senderInfo.nftId;
         | 
| 717 | 
            +
                    // verify parent is registered product
         | 
| 718 | 
            +
                    } else {
         | 
| 719 | 
            +
                        if (senderInfo.objectType != PRODUCT()) {
         | 
| 720 | 
            +
                            revert ErrorComponentServiceParentNotProduct(senderInfo.nftId, senderInfo.objectType);
         | 
| 721 | 
            +
                        }
         | 
| 642 722 |  | 
| 643 | 
            -
             | 
| 644 | 
            -
                        revert ErrorComponentServiceExpectedRoleMissing(info.parentNftId, requiredRole, owner);
         | 
| 723 | 
            +
                        instanceNftId = senderInfo.parentNftId;
         | 
| 645 724 | 
             
                    }
         | 
| 725 | 
            +
             | 
| 726 | 
            +
                    // get initial owner and instance
         | 
| 727 | 
            +
                    initialOwner = info.initialOwner;
         | 
| 728 | 
            +
                    instance = _getInstance(registry, instanceNftId);
         | 
| 646 729 | 
             
                }
         | 
| 647 730 |  | 
| 731 | 
            +
             | 
| 648 732 | 
             
                function _getDomain() internal pure virtual override returns(ObjectType) {
         | 
| 649 733 | 
             
                    return COMPONENT();
         | 
| 650 734 | 
             
                }
         | 
| @@ -11,15 +11,18 @@ contract ComponentServiceManager is ProxyManager { | |
| 11 11 |  | 
| 12 12 | 
             
                /// @dev initializes proxy manager with service implementation 
         | 
| 13 13 | 
             
                constructor(
         | 
| 14 | 
            -
                    address  | 
| 14 | 
            +
                    address authority, 
         | 
| 15 | 
            +
                    address registry,
         | 
| 16 | 
            +
                    bytes32 salt
         | 
| 15 17 | 
             
                )
         | 
| 16 | 
            -
                    ProxyManager(registryAddress)
         | 
| 17 18 | 
             
                {
         | 
| 18 19 | 
             
                    ComponentService svc = new ComponentService();
         | 
| 19 | 
            -
                    bytes memory data = abi.encode( | 
| 20 | 
            -
                    IVersionable versionable =  | 
| 20 | 
            +
                    bytes memory data = abi.encode(registry, authority);
         | 
| 21 | 
            +
                    IVersionable versionable = initialize(
         | 
| 22 | 
            +
                        registry,
         | 
| 21 23 | 
             
                        address(svc), 
         | 
| 22 | 
            -
                        data | 
| 24 | 
            +
                        data,
         | 
| 25 | 
            +
                        salt);
         | 
| 23 26 |  | 
| 24 27 | 
             
                    _componentService = ComponentService(address(versionable));
         | 
| 25 28 | 
             
                }
         | 
| @@ -12,7 +12,6 @@ import {Service} from "../shared/Service.sol"; | |
| 12 12 | 
             
            abstract contract ComponentVerifyingService is 
         | 
| 13 13 | 
             
                Service
         | 
| 14 14 | 
             
            {
         | 
| 15 | 
            -
             | 
| 16 15 | 
             
                error ErrorComponentVerifyingServiceComponentTypeInvalid(NftId componentNftId, ObjectType expectedType, ObjectType actualType);
         | 
| 17 16 | 
             
                error ErrorComponentVerifyingServiceComponentIsLocked(NftId componentNftId);
         | 
| 18 17 |  | 
| @@ -32,7 +31,7 @@ abstract contract ComponentVerifyingService is | |
| 32 31 | 
             
                        IInstance instance
         | 
| 33 32 | 
             
                    )
         | 
| 34 33 | 
             
                {
         | 
| 35 | 
            -
                    componentNftId = getRegistry(). | 
| 34 | 
            +
                    componentNftId = getRegistry().getNftIdForAddress(msg.sender);
         | 
| 36 35 | 
             
                    (componentInfo, instance) = _getAndVerifyComponentInfo(
         | 
| 37 36 | 
             
                        componentNftId, 
         | 
| 38 37 | 
             
                        expectedType,
         | 
| @@ -83,7 +82,7 @@ abstract contract ComponentVerifyingService is | |
| 83 82 | 
             
                        }
         | 
| 84 83 | 
             
                    }
         | 
| 85 84 |  | 
| 86 | 
            -
                    instance =  | 
| 85 | 
            +
                    instance = _getInstanceForComponent(registry, info);
         | 
| 87 86 |  | 
| 88 87 | 
             
                    // ensure component is not locked
         | 
| 89 88 | 
             
                    if (onlyActive) {
         | 
| @@ -94,24 +93,34 @@ abstract contract ComponentVerifyingService is | |
| 94 93 | 
             
                }
         | 
| 95 94 |  | 
| 96 95 |  | 
| 97 | 
            -
                 | 
| 98 | 
            -
                function _getProductNftId(
         | 
| 99 | 
            -
                    InstanceReader instanceReader,
         | 
| 100 | 
            -
                    NftId componentNftId
         | 
| 101 | 
            -
                )
         | 
| 96 | 
            +
                function _getInstanceForComponent(IRegistry registry, IRegistry.ObjectInfo memory componentInfo)
         | 
| 102 97 | 
             
                    internal
         | 
| 103 | 
            -
                    virtual
         | 
| 104 98 | 
             
                    view
         | 
| 105 | 
            -
                    returns ( | 
| 99 | 
            +
                    returns (IInstance instance)
         | 
| 106 100 | 
             
                {
         | 
| 107 | 
            -
                     | 
| 101 | 
            +
                    // parent of product is instance
         | 
| 102 | 
            +
                    if (componentInfo.objectType == PRODUCT()) {
         | 
| 103 | 
            +
                        instance = _getInstance(registry, componentInfo.parentNftId);
         | 
| 104 | 
            +
                    // parent of other types is product
         | 
| 105 | 
            +
                    } else {
         | 
| 106 | 
            +
                        instance = _getInstance(
         | 
| 107 | 
            +
                            registry,
         | 
| 108 | 
            +
                            registry.getObjectInfo(
         | 
| 109 | 
            +
                                componentInfo.parentNftId).parentNftId);
         | 
| 110 | 
            +
                    }
         | 
| 111 | 
            +
                }
         | 
| 112 | 
            +
             | 
| 113 | 
            +
             | 
| 114 | 
            +
                /// @dev returns the product nft id from the registry.
         | 
| 115 | 
            +
                /// assumes the component nft id is valid and represents a product linked component.
         | 
| 116 | 
            +
                function _getProductNftId(NftId componentNftId) internal view returns (NftId productNftId) {
         | 
| 117 | 
            +
                    productNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
         | 
| 108 118 | 
             
                }
         | 
| 109 119 |  | 
| 110 120 |  | 
| 111 121 | 
             
                /// @dev returns an IInstance contract reference for the specified instance nft id
         | 
| 112 | 
            -
                function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
         | 
| 122 | 
            +
                function _getInstance(IRegistry registry, NftId instanceNftId) internal view returns (IInstance) {
         | 
| 113 123 | 
             
                    return IInstance(
         | 
| 114 | 
            -
                         | 
| 115 | 
            -
                            instanceNftId).objectAddress);
         | 
| 124 | 
            +
                        registry.getObjectAddress(instanceNftId));
         | 
| 116 125 | 
             
                }
         | 
| 117 126 | 
             
            }
         |