@etherisc/gif-next 0.0.2-f1f3b2c-994 → 0.0.2-f2273b3-211
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 +27 -6
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +163 -55
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +233 -5
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +200 -16
- 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 +94 -14
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +107 -15
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +8 -8
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +175 -216
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +206 -27
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +113 -130
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +275 -171
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +111 -65
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +100 -112
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +148 -72
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +158 -195
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +206 -27
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +336 -295
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +203 -28
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +215 -168
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +156 -153
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +282 -193
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +589 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +717 -292
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +589 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +158 -57
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +105 -103
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +211 -82
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +386 -117
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +150 -90
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +590 -204
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +129 -157
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +75 -45
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +445 -375
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
- 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 +3 -3
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
- 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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +132 -173
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +180 -29
- 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 +94 -106
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +69 -11
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +108 -125
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +151 -81
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +95 -41
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +107 -152
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +206 -27
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +156 -326
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +79 -101
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +84 -135
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +94 -145
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +192 -229
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +107 -163
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +456 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +330 -368
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +119 -69
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +130 -54
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +71 -41
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +228 -186
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +206 -27
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +272 -173
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +100 -78
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +89 -9
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +170 -19
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +139 -54
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +105 -52
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +211 -164
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +55 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +235 -170
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +293 -0
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +102 -64
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +181 -116
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +89 -51
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +224 -182
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +112 -63
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +80 -38
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +98 -2
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +144 -41
- package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
- package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
- 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 +142 -38
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +277 -213
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +181 -74
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +67 -33
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1849 -0
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +3 -3
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +337 -65
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +12 -12
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +105 -104
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +483 -485
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +99 -73
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +55 -2
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +454 -5
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +92 -86
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +446 -276
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +94 -106
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- 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/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +148 -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 +55 -2
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +107 -124
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +1 -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 +18 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +152 -38
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +55 -2
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +327 -73
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +113 -136
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +130 -16
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +49 -49
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +203 -206
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +3 -3
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +93 -51
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -57
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +181 -55
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +77 -39
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +130 -130
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +23 -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 +3 -3
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
- 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 +3 -3
- 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/Key32Set.sol/LibKey32Set.dbg.json +4 -0
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
- 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 +2 -2
- 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 +62 -5
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +79 -15
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- 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 +2 -2
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +3 -3
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +47 -2
- 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 +44 -12
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/accounting/AccountingService.sol +262 -0
- package/contracts/accounting/AccountingServiceManager.sol +38 -0
- package/contracts/accounting/IAccountingService.sol +45 -0
- package/contracts/authorization/AccessAdmin.sol +216 -125
- package/contracts/authorization/AccessManagerCloneable.sol +136 -3
- package/contracts/authorization/Authorization.sol +321 -205
- package/contracts/authorization/IAccess.sol +1 -0
- package/contracts/authorization/IAccessAdmin.sol +14 -8
- package/contracts/authorization/IAuthorization.sol +27 -7
- package/contracts/authorization/IServiceAuthorization.sol +1 -1
- package/contracts/authorization/ServiceAuthorization.sol +4 -4
- package/contracts/distribution/BasicDistribution.sol +15 -12
- package/contracts/distribution/BasicDistributionAuthorization.sol +22 -9
- package/contracts/distribution/Distribution.sol +41 -47
- package/contracts/distribution/DistributionService.sol +100 -78
- package/contracts/distribution/DistributionServiceManager.sol +1 -1
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +19 -19
- package/contracts/examples/fire/FirePool.sol +25 -10
- package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
- package/contracts/examples/fire/FireProduct.sol +40 -13
- package/contracts/examples/fire/FireProductAuthorization.sol +3 -3
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +11 -4
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -4
- package/contracts/examples/unpermissioned/SimplePool.sol +37 -7
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +49 -23
- package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
- package/contracts/instance/BundleSet.sol +42 -38
- package/contracts/instance/IInstance.sol +17 -10
- package/contracts/instance/IInstanceService.sol +9 -29
- package/contracts/instance/Instance.sol +52 -34
- package/contracts/instance/InstanceAdmin.sol +249 -100
- package/contracts/instance/InstanceAuthorizationV3.sol +54 -45
- package/contracts/instance/InstanceReader.sol +174 -32
- package/contracts/instance/InstanceService.sol +85 -146
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/InstanceStore.sol +13 -2
- package/contracts/instance/RiskSet.sol +118 -0
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +4 -2
- package/contracts/instance/base/ObjectSet.sol +31 -33
- package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
- package/contracts/instance/module/IComponents.sol +10 -7
- package/contracts/instance/module/IDistribution.sol +2 -1
- package/contracts/instance/module/IPolicy.sol +2 -1
- package/contracts/instance/module/IRisk.sol +3 -0
- package/contracts/oracle/BasicOracle.sol +0 -1
- package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +5 -16
- package/contracts/oracle/OracleService.sol +107 -78
- package/contracts/oracle/OracleServiceManager.sol +1 -1
- package/contracts/pool/BasicPool.sol +33 -24
- package/contracts/pool/BasicPoolAuthorization.sol +27 -9
- package/contracts/pool/BundleService.sol +88 -154
- package/contracts/pool/BundleServiceManager.sol +1 -1
- package/contracts/pool/IBundleService.sol +15 -43
- package/contracts/pool/IPoolComponent.sol +1 -7
- package/contracts/pool/IPoolService.sol +58 -64
- package/contracts/pool/Pool.sol +112 -120
- package/contracts/pool/PoolLib.sol +216 -0
- package/contracts/pool/PoolService.sol +436 -242
- package/contracts/pool/PoolServiceManager.sol +1 -1
- package/contracts/product/ApplicationService.sol +24 -16
- package/contracts/product/ApplicationServiceManager.sol +1 -1
- package/contracts/product/BasicProduct.sol +10 -12
- package/contracts/product/BasicProductAuthorization.sol +24 -11
- package/contracts/product/ClaimService.sol +202 -151
- package/contracts/product/ClaimServiceManager.sol +1 -1
- package/contracts/product/IApplicationService.sol +5 -2
- package/contracts/product/IClaimService.sol +14 -2
- package/contracts/product/IPolicyService.sol +26 -11
- package/contracts/product/IPricingService.sol +9 -9
- package/contracts/product/IProductComponent.sol +10 -1
- package/contracts/product/PolicyService.sol +248 -252
- package/contracts/product/PolicyServiceLib.sol +65 -0
- package/contracts/product/PolicyServiceManager.sol +1 -1
- package/contracts/product/PricingService.sol +30 -26
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +106 -60
- package/contracts/product/RiskService.sol +74 -25
- package/contracts/product/RiskServiceManager.sol +1 -1
- package/contracts/registry/ChainNft.sol +10 -11
- package/contracts/registry/IRegistry.sol +14 -15
- package/contracts/registry/IRegistryService.sol +6 -4
- package/contracts/registry/IRelease.sol +26 -0
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +29 -6
- package/contracts/registry/RegistryAdmin.sol +132 -226
- package/contracts/registry/RegistryService.sol +40 -58
- package/contracts/registry/RegistryServiceManager.sol +1 -1
- package/contracts/registry/ReleaseAdmin.sol +245 -0
- package/contracts/registry/ReleaseLifecycle.sol +2 -0
- package/contracts/registry/ReleaseRegistry.sol +139 -124
- package/contracts/registry/ServiceAuthorizationV3.sol +97 -48
- package/contracts/registry/TokenRegistry.sol +6 -8
- package/contracts/shared/Component.sol +69 -118
- package/contracts/shared/ComponentService.sol +422 -371
- package/contracts/shared/ComponentServiceManager.sol +1 -1
- package/contracts/shared/ComponentVerifyingService.sol +27 -15
- package/contracts/shared/ContractLib.sol +224 -9
- package/contracts/shared/IComponent.sol +8 -20
- package/contracts/shared/IComponentService.sol +41 -37
- package/contracts/shared/IInstanceLinkedComponent.sol +3 -22
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IRegisterable.sol +23 -1
- package/contracts/shared/IService.sol +3 -5
- package/contracts/shared/InstanceLinkedComponent.sol +68 -42
- package/contracts/shared/Lifecycle.sol +7 -7
- package/contracts/shared/NftOwnable.sol +26 -6
- package/contracts/shared/PolicyHolder.sol +1 -1
- package/contracts/shared/Registerable.sol +53 -19
- package/contracts/shared/RegistryLinked.sol +7 -13
- package/contracts/shared/Service.sol +9 -31
- package/contracts/shared/TokenHandler.sol +274 -72
- package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
- package/contracts/staking/IStaking.sol +6 -10
- package/contracts/staking/IStakingService.sol +12 -4
- package/contracts/staking/StakeManagerLib.sol +69 -20
- package/contracts/staking/Staking.sol +73 -41
- package/contracts/staking/StakingReader.sol +1 -16
- package/contracts/staking/StakingService.sol +70 -24
- package/contracts/staking/StakingServiceManager.sol +5 -4
- package/contracts/type/Key32.sol +2 -2
- package/contracts/type/Key32Set.sol +62 -0
- package/contracts/type/NftId.sol +6 -0
- package/contracts/type/ObjectType.sol +48 -21
- package/contracts/type/RiskId.sol +23 -6
- package/contracts/type/RoleId.sol +23 -15
- package/contracts/type/Selector.sol +5 -0
- package/contracts/type/Timestamp.sol +0 -5
- package/contracts/type/UFixed.sol +9 -119
- package/contracts/type/Version.sol +15 -5
- package/contracts/upgradeability/ProxyManager.sol +2 -1
- package/package.json +3 -3
- 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/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
- package/contracts/authorization/IModuleAuthorization.sol +0 -21
- package/contracts/authorization/ModuleAuthorization.sol +0 -78
- package/contracts/instance/module/IAccess.sol +0 -46
| @@ -1,45 +1,72 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import { | 
| 5 | 
            -
             | 
| 6 | 
            -
            import { | 
| 4 | 
            +
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            import {IAccountingService} from "../accounting/IAccountingService.sol";
         | 
| 7 | 
            +
            import {IComponent} from "../shared/IComponent.sol";
         | 
| 7 8 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 8 9 | 
             
            import {IComponentService} from "./IComponentService.sol";
         | 
| 9 10 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 10 11 | 
             
            import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
         | 
| 12 | 
            +
            import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
         | 
| 11 13 | 
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 12 14 | 
             
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 13 15 | 
             
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 14 16 | 
             
            import {IPoolComponent} from "../pool/IPoolComponent.sol";
         | 
| 15 17 | 
             
            import {IProductComponent} from "../product/IProductComponent.sol";
         | 
| 18 | 
            +
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 16 19 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 17 20 | 
             
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 23 | 
            +
            import {ContractLib} from "../shared/ContractLib.sol";
         | 
| 24 | 
            +
            import {Fee, FeeLib} from "../type/Fee.sol";
         | 
| 18 25 | 
             
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 19 | 
            -
            import {NftId} from "../type/NftId.sol";
         | 
| 20 | 
            -
            import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
         | 
| 21 | 
            -
            import { | 
| 26 | 
            +
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 27 | 
            +
            import {ObjectType, ACCOUNTING, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
         | 
| 28 | 
            +
            import {Service} from "../shared/Service.sol";
         | 
| 29 | 
            +
            import {TokenHandler} from "../shared/TokenHandler.sol";
         | 
| 22 30 | 
             
            import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
         | 
| 31 | 
            +
            import {VersionPart} from "../type/Version.sol";
         | 
| 32 | 
            +
             | 
| 23 33 |  | 
| 24 34 | 
             
            contract ComponentService is
         | 
| 25 | 
            -
                 | 
| 35 | 
            +
                Service,
         | 
| 26 36 | 
             
                IComponentService
         | 
| 27 37 | 
             
            {
         | 
| 28 | 
            -
                error ErrorComponentServiceAlreadyRegistered(address component);
         | 
| 29 | 
            -
                error ErrorComponentServiceNotComponent(address component);
         | 
| 30 | 
            -
                error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
         | 
| 31 | 
            -
                error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
         | 
| 32 | 
            -
                error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
         | 
| 33 | 
            -
                error ErrorComponentServiceComponentLocked(address component);
         | 
| 34 | 
            -
                error ErrorComponentServiceSenderNotService(address sender);
         | 
| 35 | 
            -
                error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
         | 
| 36 | 
            -
             | 
| 37 38 | 
             
                bool private constant INCREASE = true;
         | 
| 38 39 | 
             
                bool private constant DECREASE = false;
         | 
| 39 40 |  | 
| 41 | 
            +
                IAccountingService private _accountingService;
         | 
| 40 42 | 
             
                IRegistryService private _registryService;
         | 
| 41 43 | 
             
                IInstanceService private _instanceService;
         | 
| 42 44 |  | 
| 45 | 
            +
                modifier onlyComponent(address component) {
         | 
| 46 | 
            +
                    _checkSupportsInterface(component);
         | 
| 47 | 
            +
                    _;
         | 
| 48 | 
            +
                }
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                modifier onlyInstance() {        
         | 
| 51 | 
            +
                    NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
         | 
| 52 | 
            +
                    if (instanceNftId.eqz()) {
         | 
| 53 | 
            +
                        revert ErrorComponentServiceNotRegistered(msg.sender);
         | 
| 54 | 
            +
                    }
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    ObjectType objectType = getRegistry().getObjectInfo(instanceNftId).objectType;
         | 
| 57 | 
            +
                    if (objectType != INSTANCE()) {
         | 
| 58 | 
            +
                        revert ErrorComponentServiceNotInstance(msg.sender, objectType);
         | 
| 59 | 
            +
                    }
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                    VersionPart instanceVersion = IInstance(msg.sender).getRelease();
         | 
| 62 | 
            +
                    if (instanceVersion != getVersion().toMajorPart()) {
         | 
| 63 | 
            +
                        revert ErrorComponentServiceInstanceVersionMismatch(msg.sender, instanceVersion);
         | 
| 64 | 
            +
                    }
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                    _;
         | 
| 67 | 
            +
                }
         | 
| 68 | 
            +
             | 
| 69 | 
            +
             | 
| 43 70 | 
             
                function _initialize(
         | 
| 44 71 | 
             
                    address owner, 
         | 
| 45 72 | 
             
                    bytes memory data
         | 
| @@ -49,12 +76,13 @@ contract ComponentService is | |
| 49 76 | 
             
                    initializer()
         | 
| 50 77 | 
             
                {
         | 
| 51 78 | 
             
                    (
         | 
| 52 | 
            -
                        address  | 
| 53 | 
            -
                        address  | 
| 79 | 
            +
                        address authority,
         | 
| 80 | 
            +
                        address registry
         | 
| 54 81 | 
             
                    ) = abi.decode(data, (address, address));
         | 
| 55 82 |  | 
| 56 | 
            -
                     | 
| 83 | 
            +
                    __Service_init(authority, registry, owner);
         | 
| 57 84 |  | 
| 85 | 
            +
                    _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
         | 
| 58 86 | 
             
                    _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 59 87 | 
             
                    _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
         | 
| 60 88 |  | 
| @@ -63,91 +91,163 @@ contract ComponentService is | |
| 63 91 |  | 
| 64 92 | 
             
                //-------- component ----------------------------------------------------//
         | 
| 65 93 |  | 
| 66 | 
            -
                function  | 
| 67 | 
            -
                     | 
| 68 | 
            -
                     | 
| 69 | 
            -
                     | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 94 | 
            +
                function registerComponent(address component)
         | 
| 95 | 
            +
                    external
         | 
| 96 | 
            +
                    virtual
         | 
| 97 | 
            +
                    onlyComponent(component)
         | 
| 98 | 
            +
                    returns (NftId componentNftId)
         | 
| 99 | 
            +
                {
         | 
| 100 | 
            +
                    // type specific registration
         | 
| 101 | 
            +
                    ObjectType componentType = IInstanceLinkedComponent(component).getInitialInfo().objectType;
         | 
| 102 | 
            +
                    if (componentType == POOL()) {
         | 
| 103 | 
            +
                        return _registerPool(component);
         | 
| 73 104 | 
             
                    }
         | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
                        revert ErrorComponentServiceWalletAddressZero();
         | 
| 105 | 
            +
                    if (componentType == DISTRIBUTION()) {
         | 
| 106 | 
            +
                        return _registerDistribution(component);
         | 
| 77 107 | 
             
                    }
         | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
                        revert ErrorComponentServiceWalletAddressIsSameAsCurrent();
         | 
| 108 | 
            +
                    if (componentType == ORACLE()) {
         | 
| 109 | 
            +
                        return _registerOracle(component);
         | 
| 81 110 | 
             
                    }
         | 
| 82 111 |  | 
| 83 | 
            -
                     | 
| 84 | 
            -
                     | 
| 85 | 
            -
             | 
| 112 | 
            +
                    // fail
         | 
| 113 | 
            +
                    revert ErrorComponentServiceTypeNotSupported(component, componentType);
         | 
| 114 | 
            +
                }
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                function approveTokenHandler(
         | 
| 117 | 
            +
                    IERC20Metadata token,
         | 
| 118 | 
            +
                    Amount amount
         | 
| 119 | 
            +
                )
         | 
| 120 | 
            +
                    external
         | 
| 121 | 
            +
                    virtual
         | 
| 122 | 
            +
                {
         | 
| 123 | 
            +
                    // checks
         | 
| 124 | 
            +
                    (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
         | 
| 125 | 
            +
                    TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
         | 
| 126 | 
            +
                        componentNftId).tokenHandler;
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                    // effects
         | 
| 129 | 
            +
                    tokenHandler.approve(token, amount);
         | 
| 86 130 | 
             
                }
         | 
| 87 131 |  | 
| 88 | 
            -
                // TODO implement
         | 
| 89 | 
            -
                function lock() external virtual {}
         | 
| 90 132 |  | 
| 91 | 
            -
                 | 
| 92 | 
            -
             | 
| 133 | 
            +
                function setWallet(address newWallet)
         | 
| 134 | 
            +
                    external
         | 
| 135 | 
            +
                    virtual
         | 
| 136 | 
            +
                {
         | 
| 137 | 
            +
                    // checks
         | 
| 138 | 
            +
                    (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
         | 
| 139 | 
            +
                    TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
         | 
| 140 | 
            +
                        componentNftId).tokenHandler;
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                    // effects
         | 
| 143 | 
            +
                    tokenHandler.setWallet(newWallet);
         | 
| 144 | 
            +
                }
         | 
| 93 145 |  | 
| 146 | 
            +
                /// @inheritdoc IComponentService
         | 
| 147 | 
            +
                function setLockedFromInstance(address componentAddress, bool locked) 
         | 
| 148 | 
            +
                    external 
         | 
| 149 | 
            +
                    virtual
         | 
| 150 | 
            +
                    onlyInstance()
         | 
| 151 | 
            +
                {
         | 
| 152 | 
            +
                    address instanceAddress = msg.sender;
         | 
| 153 | 
            +
                    // NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
         | 
| 154 | 
            +
                    IInstance instance = IInstance(instanceAddress);
         | 
| 155 | 
            +
                    _setLocked(instance.getInstanceAdmin(), componentAddress, locked);
         | 
| 156 | 
            +
                }
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                /// @inheritdoc IComponentService
         | 
| 159 | 
            +
                function setLockedFromComponent(address componentAddress, bool locked) 
         | 
| 160 | 
            +
                    external
         | 
| 161 | 
            +
                    virtual
         | 
| 162 | 
            +
                    onlyComponent(msg.sender)
         | 
| 163 | 
            +
                {
         | 
| 164 | 
            +
                    (, IInstance instance) = _getAndVerifyComponent(COMPONENT(), false);
         | 
| 165 | 
            +
                    _setLocked(instance.getInstanceAdmin(), componentAddress, locked);
         | 
| 166 | 
            +
                }
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                /// @inheritdoc IComponentService
         | 
| 94 169 | 
             
                function withdrawFees(Amount amount)
         | 
| 95 170 | 
             
                    external
         | 
| 96 171 | 
             
                    virtual
         | 
| 97 172 | 
             
                    returns (Amount withdrawnAmount)
         | 
| 98 173 | 
             
                {
         | 
| 99 | 
            -
                     | 
| 100 | 
            -
                     | 
| 101 | 
            -
                     | 
| 174 | 
            +
                    // checks
         | 
| 175 | 
            +
                    (NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
         | 
| 176 | 
            +
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 102 177 |  | 
| 103 178 | 
             
                    // determine withdrawn amount
         | 
| 179 | 
            +
                    Amount maxAvailableAmount = instanceReader.getFeeAmount(componentNftId);
         | 
| 104 180 | 
             
                    withdrawnAmount = amount;
         | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
                     | 
| 181 | 
            +
             | 
| 182 | 
            +
                    // max amount -> withraw all available fees
         | 
| 183 | 
            +
                    if (amount == AmountLib.max()) {
         | 
| 184 | 
            +
                        withdrawnAmount = maxAvailableAmount;
         | 
| 185 | 
            +
                    }
         | 
| 186 | 
            +
             | 
| 187 | 
            +
                    // check modified withdrawn amount
         | 
| 188 | 
            +
                    if (withdrawnAmount.eqz()) {
         | 
| 108 189 | 
             
                        revert ErrorComponentServiceWithdrawAmountIsZero();
         | 
| 109 | 
            -
                    } else {
         | 
| 110 | 
            -
                         | 
| 111 | 
            -
                        if (withdrawnAmount.gt(withdrawLimit)) {
         | 
| 112 | 
            -
                            revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
         | 
| 113 | 
            -
                        }
         | 
| 190 | 
            +
                    } else if (withdrawnAmount > maxAvailableAmount) {
         | 
| 191 | 
            +
                        revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, maxAvailableAmount);
         | 
| 114 192 | 
             
                    }
         | 
| 115 193 |  | 
| 194 | 
            +
                    // effects
         | 
| 116 195 | 
             
                    // decrease fee counters by withdrawnAmount
         | 
| 117 | 
            -
                     | 
| 196 | 
            +
                    _accountingService.decreaseComponentFees(
         | 
| 197 | 
            +
                        instance.getInstanceStore(), 
         | 
| 198 | 
            +
                        componentNftId, 
         | 
| 199 | 
            +
                        withdrawnAmount);
         | 
| 118 200 |  | 
| 119 | 
            -
                    // transfer amount to component owner
         | 
| 120 201 | 
             
                    address componentOwner = getRegistry().ownerOf(componentNftId);
         | 
| 121 | 
            -
                     | 
| 122 | 
            -
                     | 
| 202 | 
            +
                    TokenHandler tokenHandler = instanceReader.getTokenHandler(componentNftId);
         | 
| 203 | 
            +
                    emit LogComponentServiceComponentFeesWithdrawn(
         | 
| 204 | 
            +
                        componentNftId, 
         | 
| 205 | 
            +
                        componentOwner, 
         | 
| 206 | 
            +
                        address(tokenHandler.TOKEN()), 
         | 
| 207 | 
            +
                        withdrawnAmount);
         | 
| 208 | 
            +
             | 
| 209 | 
            +
                    // interactions
         | 
| 210 | 
            +
                    // transfer amount to component owner
         | 
| 211 | 
            +
                    tokenHandler.pushFeeToken(
         | 
| 212 | 
            +
                        componentOwner, 
         | 
| 213 | 
            +
                        withdrawnAmount);
         | 
| 123 214 | 
             
                }
         | 
| 124 215 |  | 
| 125 216 |  | 
| 126 217 | 
             
                //-------- product ------------------------------------------------------//
         | 
| 127 218 |  | 
| 128 | 
            -
                function registerProduct()
         | 
| 219 | 
            +
                function registerProduct(address productAddress)
         | 
| 129 220 | 
             
                    external
         | 
| 130 221 | 
             
                    virtual
         | 
| 222 | 
            +
                    nonReentrant()
         | 
| 223 | 
            +
                    onlyComponent(productAddress)
         | 
| 224 | 
            +
                    returns (NftId productNftId)
         | 
| 131 225 | 
             
                {
         | 
| 132 | 
            -
                    address contractAddress = msg.sender;
         | 
| 133 | 
            -
             | 
| 134 226 | 
             
                    // register/create component setup
         | 
| 135 | 
            -
                     | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
                         | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 227 | 
            +
                    InstanceAdmin instanceAdmin;
         | 
| 228 | 
            +
                    InstanceStore instanceStore;
         | 
| 229 | 
            +
                    (, instanceAdmin, instanceStore,, productNftId) = _register(
         | 
| 230 | 
            +
                        productAddress,
         | 
| 231 | 
            +
                        PRODUCT());
         | 
| 232 | 
            +
             | 
| 233 | 
            +
                    // get product
         | 
| 234 | 
            +
                    IProductComponent product = IProductComponent(productAddress);
         | 
| 143 235 |  | 
| 144 | 
            -
                     | 
| 145 | 
            -
                     | 
| 146 | 
            -
                     | 
| 236 | 
            +
                    IComponents.ProductInfo memory initialProductInfo = product.getInitialProductInfo();
         | 
| 237 | 
            +
                    // force initialization of linked components with empty values to 
         | 
| 238 | 
            +
                    // ensure no components are linked upon initialization of the product
         | 
| 239 | 
            +
                    initialProductInfo.poolNftId = NftIdLib.zero();
         | 
| 240 | 
            +
                    initialProductInfo.distributionNftId = NftIdLib.zero();
         | 
| 241 | 
            +
                    initialProductInfo.oracleNftId = new NftId[](initialProductInfo.expectedNumberOfOracles);
         | 
| 147 242 |  | 
| 148 | 
            -
                    //  | 
| 149 | 
            -
                     | 
| 150 | 
            -
             | 
| 243 | 
            +
                    // create info
         | 
| 244 | 
            +
                    instanceStore.createProduct(
         | 
| 245 | 
            +
                        productNftId, 
         | 
| 246 | 
            +
                        initialProductInfo);
         | 
| 247 | 
            +
             | 
| 248 | 
            +
                    instanceStore.createFee(
         | 
| 249 | 
            +
                        productNftId, 
         | 
| 250 | 
            +
                        product.getInitialFeeInfo());
         | 
| 151 251 | 
             
                }
         | 
| 152 252 |  | 
| 153 253 |  | 
| @@ -157,68 +257,62 @@ contract ComponentService is | |
| 157 257 | 
             
                )
         | 
| 158 258 | 
             
                    external
         | 
| 159 259 | 
             
                    virtual
         | 
| 260 | 
            +
                    nonReentrant()
         | 
| 160 261 | 
             
                {
         | 
| 161 | 
            -
                    (NftId productNftId | 
| 162 | 
            -
                    IComponents. | 
| 262 | 
            +
                    (NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
         | 
| 263 | 
            +
                    IComponents.FeeInfo memory feeInfo = instance.getInstanceReader().getFeeInfo(productNftId);
         | 
| 163 264 | 
             
                    bool feesChanged = false;
         | 
| 164 265 |  | 
| 165 266 | 
             
                    // update product fee if required
         | 
| 166 | 
            -
                    if(!FeeLib.eq( | 
| 167 | 
            -
                        _logUpdateFee(productNftId, "ProductFee",  | 
| 168 | 
            -
                         | 
| 267 | 
            +
                    if(!FeeLib.eq(feeInfo.productFee, productFee)) {
         | 
| 268 | 
            +
                        _logUpdateFee(productNftId, "ProductFee", feeInfo.productFee, productFee);
         | 
| 269 | 
            +
                        feeInfo.productFee = productFee;
         | 
| 169 270 | 
             
                        feesChanged = true;
         | 
| 170 271 | 
             
                    }
         | 
| 171 272 |  | 
| 172 273 | 
             
                    // update processing fee if required
         | 
| 173 | 
            -
                    if(!FeeLib.eq( | 
| 174 | 
            -
                        _logUpdateFee(productNftId, "ProcessingFee",  | 
| 175 | 
            -
                         | 
| 274 | 
            +
                    if(!FeeLib.eq(feeInfo.processingFee, processingFee)) {
         | 
| 275 | 
            +
                        _logUpdateFee(productNftId, "ProcessingFee", feeInfo.processingFee, processingFee);
         | 
| 276 | 
            +
                        feeInfo.processingFee = processingFee;
         | 
| 176 277 | 
             
                        feesChanged = true;
         | 
| 177 278 | 
             
                    }
         | 
| 178 279 |  | 
| 179 280 | 
             
                    if(feesChanged) {
         | 
| 180 | 
            -
                        instance.getInstanceStore(). | 
| 281 | 
            +
                        instance.getInstanceStore().updateFee(productNftId, feeInfo);
         | 
| 181 282 | 
             
                        emit LogComponentServiceProductFeesUpdated(productNftId);
         | 
| 182 283 | 
             
                    }
         | 
| 183 284 | 
             
                }
         | 
| 184 285 |  | 
| 185 | 
            -
                function increaseProductFees(
         | 
| 186 | 
            -
                    InstanceStore instanceStore,
         | 
| 187 | 
            -
                    NftId productNftId, 
         | 
| 188 | 
            -
                    Amount feeAmount
         | 
| 189 | 
            -
                ) 
         | 
| 190 | 
            -
                    external 
         | 
| 191 | 
            -
                    virtual 
         | 
| 192 | 
            -
                    // TODO re-enable once role granting is stable and fixed
         | 
| 193 | 
            -
                    // restricted()
         | 
| 194 | 
            -
                {
         | 
| 195 | 
            -
                    _changeTargetBalance(INCREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
         | 
| 196 | 
            -
                }
         | 
| 197 | 
            -
             | 
| 198 | 
            -
             | 
| 199 | 
            -
                function decreaseProductFees(InstanceStore instanceStore, NftId productNftId, Amount feeAmount)
         | 
| 200 | 
            -
                    external 
         | 
| 201 | 
            -
                    virtual 
         | 
| 202 | 
            -
                    // TODO re-enable once role granting is stable and fixed
         | 
| 203 | 
            -
                    // restricted()
         | 
| 204 | 
            -
                {
         | 
| 205 | 
            -
                    _changeTargetBalance(DECREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
         | 
| 206 | 
            -
                }
         | 
| 207 | 
            -
             | 
| 208 286 | 
             
                //-------- distribution -------------------------------------------------//
         | 
| 209 287 |  | 
| 210 288 | 
             
                /// @dev registers the sending component as a distribution component
         | 
| 211 | 
            -
                function  | 
| 212 | 
            -
                     | 
| 289 | 
            +
                function _registerDistribution(address distributioAddress)
         | 
| 290 | 
            +
                    internal
         | 
| 213 291 | 
             
                    virtual
         | 
| 292 | 
            +
                    nonReentrant()
         | 
| 293 | 
            +
                    returns (NftId distributionNftId)
         | 
| 214 294 | 
             
                {
         | 
| 215 | 
            -
                    address contractAddress = msg.sender;
         | 
| 216 | 
            -
             | 
| 217 295 | 
             
                    // register/create component info
         | 
| 218 | 
            -
                     | 
| 219 | 
            -
             | 
| 220 | 
            -
             | 
| 221 | 
            -
             | 
| 296 | 
            +
                    InstanceReader instanceReader;
         | 
| 297 | 
            +
                    InstanceAdmin instanceAdmin;
         | 
| 298 | 
            +
                    InstanceStore instanceStore;
         | 
| 299 | 
            +
                    NftId productNftId;
         | 
| 300 | 
            +
                    (instanceReader, instanceAdmin, instanceStore, productNftId, distributionNftId) = _register(
         | 
| 301 | 
            +
                        distributioAddress,
         | 
| 302 | 
            +
                        DISTRIBUTION());
         | 
| 303 | 
            +
             | 
| 304 | 
            +
                    // check product is still expecting a distribution registration
         | 
| 305 | 
            +
                    IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 306 | 
            +
                    if (!productInfo.hasDistribution) {
         | 
| 307 | 
            +
                        revert ErrorProductServiceNoDistributionExpected(productNftId);
         | 
| 308 | 
            +
                    }
         | 
| 309 | 
            +
                    if (productInfo.distributionNftId.gtz()) {
         | 
| 310 | 
            +
                        revert ErrorProductServiceDistributionAlreadyRegistered(productNftId, productInfo.distributionNftId);
         | 
| 311 | 
            +
                    }
         | 
| 312 | 
            +
             | 
| 313 | 
            +
                    // set distribution in product info
         | 
| 314 | 
            +
                    productInfo.distributionNftId = distributionNftId;
         | 
| 315 | 
            +
                    instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
         | 
| 222 316 | 
             
                }
         | 
| 223 317 |  | 
| 224 318 |  | 
| @@ -229,132 +323,95 @@ contract ComponentService is | |
| 229 323 | 
             
                    external
         | 
| 230 324 | 
             
                    virtual
         | 
| 231 325 | 
             
                {
         | 
| 232 | 
            -
                    (NftId distributionNftId | 
| 233 | 
            -
                    (NftId productNftId, IComponents. | 
| 326 | 
            +
                    (NftId distributionNftId, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
         | 
| 327 | 
            +
                    (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
         | 
| 234 328 | 
             
                        instance.getInstanceReader(), distributionNftId);
         | 
| 235 329 | 
             
                    bool feesChanged = false;
         | 
| 236 330 |  | 
| 237 331 | 
             
                    // update distributino fee if required
         | 
| 238 | 
            -
                    if(!FeeLib.eq( | 
| 239 | 
            -
                        _logUpdateFee(productNftId, "DistributionFee",  | 
| 240 | 
            -
                         | 
| 332 | 
            +
                    if(!FeeLib.eq(feeInfo.distributionFee, distributionFee)) {
         | 
| 333 | 
            +
                        _logUpdateFee(productNftId, "DistributionFee", feeInfo.distributionFee, distributionFee);
         | 
| 334 | 
            +
                        feeInfo.distributionFee = distributionFee;
         | 
| 241 335 | 
             
                        feesChanged = true;
         | 
| 242 336 | 
             
                    }
         | 
| 243 337 |  | 
| 244 338 | 
             
                    // update min distribution owner fee if required
         | 
| 245 | 
            -
                    if(!FeeLib.eq( | 
| 246 | 
            -
                        _logUpdateFee(productNftId, "MinDistributionOwnerFee",  | 
| 247 | 
            -
                         | 
| 339 | 
            +
                    if(!FeeLib.eq(feeInfo.minDistributionOwnerFee, minDistributionOwnerFee)) {
         | 
| 340 | 
            +
                        _logUpdateFee(productNftId, "MinDistributionOwnerFee", feeInfo.minDistributionOwnerFee, minDistributionOwnerFee);
         | 
| 341 | 
            +
                        feeInfo.minDistributionOwnerFee = minDistributionOwnerFee;
         | 
| 248 342 | 
             
                        feesChanged = true;
         | 
| 249 343 | 
             
                    }
         | 
| 250 344 |  | 
| 251 345 | 
             
                    if(feesChanged) {
         | 
| 252 | 
            -
                        instance.getInstanceStore(). | 
| 346 | 
            +
                        instance.getInstanceStore().updateFee(productNftId, feeInfo);
         | 
| 253 347 | 
             
                        emit LogComponentServiceDistributionFeesUpdated(distributionNftId);
         | 
| 254 348 | 
             
                    }
         | 
| 255 349 | 
             
                }
         | 
| 256 350 |  | 
| 257 | 
            -
                function increaseDistributionBalance(
         | 
| 258 | 
            -
                    InstanceStore instanceStore, 
         | 
| 259 | 
            -
                    NftId distributionNftId, 
         | 
| 260 | 
            -
                    Amount amount,
         | 
| 261 | 
            -
                    Amount feeAmount
         | 
| 262 | 
            -
                )
         | 
| 263 | 
            -
                    external
         | 
| 264 | 
            -
                    virtual
         | 
| 265 | 
            -
                    // TODO re-enable once role granting is stable and fixed
         | 
| 266 | 
            -
                    // restricted()
         | 
| 267 | 
            -
                {
         | 
| 268 | 
            -
                    _changeTargetBalance(INCREASE, instanceStore, distributionNftId, amount, feeAmount);
         | 
| 269 | 
            -
                }
         | 
| 270 | 
            -
             | 
| 271 | 
            -
             | 
| 272 | 
            -
                function decreaseDistributionBalance(
         | 
| 273 | 
            -
                    InstanceStore instanceStore, 
         | 
| 274 | 
            -
                    NftId distributionNftId, 
         | 
| 275 | 
            -
                    Amount amount,
         | 
| 276 | 
            -
                    Amount feeAmount
         | 
| 277 | 
            -
                )
         | 
| 278 | 
            -
                    external
         | 
| 279 | 
            -
                    virtual
         | 
| 280 | 
            -
                    // TODO re-enable once role granting is stable and fixed
         | 
| 281 | 
            -
                    // restricted()
         | 
| 282 | 
            -
                {
         | 
| 283 | 
            -
                    _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
         | 
| 284 | 
            -
                }
         | 
| 285 | 
            -
             | 
| 286 | 
            -
                //-------- distributor -------------------------------------------------------//
         | 
| 287 | 
            -
             | 
| 288 | 
            -
                function increaseDistributorBalance(
         | 
| 289 | 
            -
                    InstanceStore instanceStore, 
         | 
| 290 | 
            -
                    NftId distributorNftId, 
         | 
| 291 | 
            -
                    Amount amount, 
         | 
| 292 | 
            -
                    Amount feeAmount
         | 
| 293 | 
            -
                )
         | 
| 294 | 
            -
                    external
         | 
| 295 | 
            -
                    virtual
         | 
| 296 | 
            -
                    // TODO re-enable once role granting is stable and fixed
         | 
| 297 | 
            -
                    // restricted()
         | 
| 298 | 
            -
                {
         | 
| 299 | 
            -
                    _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
         | 
| 300 | 
            -
                }
         | 
| 301 | 
            -
             | 
| 302 | 
            -
                function decreaseDistributorBalance(
         | 
| 303 | 
            -
                    InstanceStore instanceStore, 
         | 
| 304 | 
            -
                    NftId distributorNftId, 
         | 
| 305 | 
            -
                    Amount amount, 
         | 
| 306 | 
            -
                    Amount feeAmount
         | 
| 307 | 
            -
                )
         | 
| 308 | 
            -
                    external
         | 
| 309 | 
            -
                    virtual
         | 
| 310 | 
            -
                    // TODO re-enable once role granting is stable and fixed
         | 
| 311 | 
            -
                    // restricted()
         | 
| 312 | 
            -
                {
         | 
| 313 | 
            -
                    _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
         | 
| 314 | 
            -
                }
         | 
| 315 | 
            -
             | 
| 316 351 | 
             
                //-------- oracle -------------------------------------------------------//
         | 
| 317 352 |  | 
| 318 | 
            -
                function  | 
| 319 | 
            -
                     | 
| 353 | 
            +
                function _registerOracle(address oracleAddress)
         | 
| 354 | 
            +
                    internal
         | 
| 320 355 | 
             
                    virtual
         | 
| 356 | 
            +
                    returns (NftId oracleNftId)
         | 
| 321 357 | 
             
                {
         | 
| 322 | 
            -
                    address contractAddress = msg.sender;
         | 
| 323 | 
            -
             | 
| 324 358 | 
             
                    // register/create component setup
         | 
| 325 | 
            -
                     | 
| 326 | 
            -
             | 
| 327 | 
            -
             | 
| 328 | 
            -
             | 
| 329 | 
            -
             | 
| 330 | 
            -
             | 
| 331 | 
            -
                         | 
| 332 | 
            -
                         | 
| 359 | 
            +
                    InstanceReader instanceReader;
         | 
| 360 | 
            +
                    InstanceAdmin instanceAdmin;
         | 
| 361 | 
            +
                    InstanceStore instanceStore;
         | 
| 362 | 
            +
                    NftId productNftId;
         | 
| 363 | 
            +
             | 
| 364 | 
            +
                    (instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) = _register(
         | 
| 365 | 
            +
                        oracleAddress,
         | 
| 366 | 
            +
                        ORACLE());
         | 
| 367 | 
            +
             | 
| 368 | 
            +
                    // check product is still expecting an oracle registration
         | 
| 369 | 
            +
                    IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 370 | 
            +
                    if (productInfo.expectedNumberOfOracles == 0) {
         | 
| 371 | 
            +
                        revert ErrorProductServiceNoOraclesExpected(productNftId);
         | 
| 372 | 
            +
                    }
         | 
| 373 | 
            +
                    if (productInfo.numberOfOracles == productInfo.expectedNumberOfOracles) {
         | 
| 374 | 
            +
                        revert ErrorProductServiceOraclesAlreadyRegistered(productNftId, productInfo.expectedNumberOfOracles);
         | 
| 375 | 
            +
                    }
         | 
| 376 | 
            +
             | 
| 377 | 
            +
                    // update/add oracle to product info
         | 
| 378 | 
            +
                    productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
         | 
| 379 | 
            +
                    productInfo.numberOfOracles++;
         | 
| 380 | 
            +
                    instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
         | 
| 333 381 | 
             
                }
         | 
| 334 382 |  | 
| 335 383 | 
             
                //-------- pool ---------------------------------------------------------//
         | 
| 336 384 |  | 
| 337 | 
            -
                function  | 
| 338 | 
            -
                     | 
| 385 | 
            +
                function _registerPool(address poolAddress)
         | 
| 386 | 
            +
                    internal
         | 
| 339 387 | 
             
                    virtual
         | 
| 388 | 
            +
                    returns (NftId poolNftId)
         | 
| 340 389 | 
             
                {
         | 
| 341 | 
            -
                    address contractAddress = msg.sender;
         | 
| 342 | 
            -
             | 
| 343 390 | 
             
                    // register/create component setup
         | 
| 344 | 
            -
                     | 
| 345 | 
            -
             | 
| 346 | 
            -
             | 
| 347 | 
            -
             | 
| 348 | 
            -
             | 
| 349 | 
            -
             | 
| 350 | 
            -
                         | 
| 351 | 
            -
                         | 
| 391 | 
            +
                    InstanceReader instanceReader;
         | 
| 392 | 
            +
                    InstanceAdmin instanceAdmin;
         | 
| 393 | 
            +
                    InstanceStore instanceStore;
         | 
| 394 | 
            +
                    NftId productNftId;
         | 
| 395 | 
            +
             | 
| 396 | 
            +
                    (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) = _register(
         | 
| 397 | 
            +
                        poolAddress,
         | 
| 398 | 
            +
                        POOL());
         | 
| 399 | 
            +
             | 
| 400 | 
            +
                    // check product is still expecting a pool registration
         | 
| 401 | 
            +
                    IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 402 | 
            +
                    if (productInfo.poolNftId.gtz()) {
         | 
| 403 | 
            +
                        revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
         | 
| 404 | 
            +
                    }
         | 
| 352 405 |  | 
| 353 406 | 
             
                    // create info
         | 
| 407 | 
            +
                    IPoolComponent pool = IPoolComponent(poolAddress);
         | 
| 354 408 | 
             
                    instanceStore.createPool(
         | 
| 355 | 
            -
                         | 
| 356 | 
            -
                         | 
| 357 | 
            -
             | 
| 409 | 
            +
                        poolNftId, 
         | 
| 410 | 
            +
                        pool.getInitialPoolInfo());
         | 
| 411 | 
            +
             | 
| 412 | 
            +
                    // update pool in product info
         | 
| 413 | 
            +
                    productInfo.poolNftId = poolNftId;
         | 
| 414 | 
            +
                    instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
         | 
| 358 415 | 
             
                }
         | 
| 359 416 |  | 
| 360 417 |  | 
| @@ -366,190 +423,105 @@ contract ComponentService is | |
| 366 423 | 
             
                    external
         | 
| 367 424 | 
             
                    virtual
         | 
| 368 425 | 
             
                {
         | 
| 369 | 
            -
                    (NftId poolNftId | 
| 370 | 
            -
             | 
| 426 | 
            +
                    (NftId poolNftId, IInstance instance) = _getAndVerifyActiveComponent(POOL());
         | 
| 427 | 
            +
             | 
| 428 | 
            +
                    (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
         | 
| 371 429 | 
             
                        instance.getInstanceReader(), poolNftId);
         | 
| 372 430 | 
             
                    bool feesChanged = false;
         | 
| 373 431 |  | 
| 374 432 | 
             
                    // update pool fee if required
         | 
| 375 | 
            -
                    if(!FeeLib.eq( | 
| 376 | 
            -
                        _logUpdateFee(productNftId, "PoolFee",  | 
| 377 | 
            -
                         | 
| 433 | 
            +
                    if(!FeeLib.eq(feeInfo.poolFee, poolFee)) {
         | 
| 434 | 
            +
                        _logUpdateFee(productNftId, "PoolFee", feeInfo.poolFee, poolFee);
         | 
| 435 | 
            +
                        feeInfo.poolFee = poolFee;
         | 
| 378 436 | 
             
                        feesChanged = true;
         | 
| 379 437 | 
             
                    }
         | 
| 380 438 |  | 
| 381 439 | 
             
                    // update staking fee if required
         | 
| 382 | 
            -
                    if(!FeeLib.eq( | 
| 383 | 
            -
                        _logUpdateFee(productNftId, "StakingFee",  | 
| 384 | 
            -
                         | 
| 440 | 
            +
                    if(!FeeLib.eq(feeInfo.stakingFee, stakingFee)) {
         | 
| 441 | 
            +
                        _logUpdateFee(productNftId, "StakingFee", feeInfo.stakingFee, stakingFee);
         | 
| 442 | 
            +
                        feeInfo.stakingFee = stakingFee;
         | 
| 385 443 | 
             
                        feesChanged = true;
         | 
| 386 444 | 
             
                    }
         | 
| 387 445 |  | 
| 388 446 | 
             
                    // update performance fee if required
         | 
| 389 | 
            -
                    if(!FeeLib.eq( | 
| 390 | 
            -
                        _logUpdateFee(productNftId, "PerformanceFee",  | 
| 391 | 
            -
                         | 
| 447 | 
            +
                    if(!FeeLib.eq(feeInfo.performanceFee, performanceFee)) {
         | 
| 448 | 
            +
                        _logUpdateFee(productNftId, "PerformanceFee", feeInfo.performanceFee, performanceFee);
         | 
| 449 | 
            +
                        feeInfo.performanceFee = performanceFee;
         | 
| 392 450 | 
             
                        feesChanged = true;
         | 
| 393 451 | 
             
                    }
         | 
| 394 452 |  | 
| 395 453 | 
             
                    if(feesChanged) {
         | 
| 396 | 
            -
                        instance.getInstanceStore(). | 
| 454 | 
            +
                        instance.getInstanceStore().updateFee(productNftId, feeInfo);
         | 
| 397 455 | 
             
                        emit LogComponentServicePoolFeesUpdated(poolNftId);
         | 
| 398 456 | 
             
                    }
         | 
| 399 457 | 
             
                }
         | 
| 400 458 |  | 
| 401 | 
            -
                 | 
| 402 | 
            -
                    InstanceStore instanceStore, 
         | 
| 403 | 
            -
                    NftId poolNftId, 
         | 
| 404 | 
            -
                    Amount amount, 
         | 
| 405 | 
            -
                    Amount feeAmount
         | 
| 406 | 
            -
                )
         | 
| 407 | 
            -
                    public 
         | 
| 408 | 
            -
                    virtual 
         | 
| 409 | 
            -
                    // TODO re-enable once role granting is stable and fixed
         | 
| 410 | 
            -
                    // restricted()
         | 
| 411 | 
            -
                {
         | 
| 412 | 
            -
                    _changeTargetBalance(INCREASE, instanceStore, poolNftId, amount, feeAmount);
         | 
| 413 | 
            -
                }
         | 
| 414 | 
            -
             | 
| 415 | 
            -
                function decreasePoolBalance(
         | 
| 416 | 
            -
                    InstanceStore instanceStore, 
         | 
| 417 | 
            -
                    NftId poolNftId, 
         | 
| 418 | 
            -
                    Amount amount, 
         | 
| 419 | 
            -
                    Amount feeAmount
         | 
| 420 | 
            -
                )
         | 
| 421 | 
            -
                    public 
         | 
| 422 | 
            -
                    virtual 
         | 
| 423 | 
            -
                    // TODO re-enable once role granting is stable and fixed
         | 
| 424 | 
            -
                    // restricted()
         | 
| 425 | 
            -
                {
         | 
| 426 | 
            -
                    _changeTargetBalance(DECREASE, instanceStore, poolNftId, amount, feeAmount);
         | 
| 427 | 
            -
                }
         | 
| 428 | 
            -
             | 
| 429 | 
            -
                //-------- bundle -------------------------------------------------------//
         | 
| 430 | 
            -
             | 
| 431 | 
            -
                function increaseBundleBalance(
         | 
| 432 | 
            -
                    InstanceStore instanceStore, 
         | 
| 433 | 
            -
                    NftId bundleNftId, 
         | 
| 434 | 
            -
                    Amount amount, 
         | 
| 435 | 
            -
                    Amount feeAmount
         | 
| 436 | 
            -
                )
         | 
| 437 | 
            -
                    external
         | 
| 438 | 
            -
                    virtual
         | 
| 439 | 
            -
                    // TODO re-enable once role granting is stable and fixed
         | 
| 440 | 
            -
                    // restricted()
         | 
| 441 | 
            -
                {
         | 
| 442 | 
            -
                    _changeTargetBalance(INCREASE, instanceStore, bundleNftId, amount, feeAmount);
         | 
| 443 | 
            -
                }
         | 
| 444 | 
            -
             | 
| 445 | 
            -
                function decreaseBundleBalance(
         | 
| 446 | 
            -
                    InstanceStore instanceStore, 
         | 
| 447 | 
            -
                    NftId bundleNftId, 
         | 
| 448 | 
            -
                    Amount amount, 
         | 
| 449 | 
            -
                    Amount feeAmount
         | 
| 450 | 
            -
                )
         | 
| 451 | 
            -
                    external
         | 
| 452 | 
            -
                    virtual
         | 
| 453 | 
            -
                    // TODO re-enable once role granting is stable and fixed
         | 
| 454 | 
            -
                    // restricted()
         | 
| 455 | 
            -
                {
         | 
| 456 | 
            -
                    _changeTargetBalance(DECREASE, instanceStore, bundleNftId, amount, feeAmount);
         | 
| 457 | 
            -
                }
         | 
| 458 | 
            -
             | 
| 459 | 
            -
             | 
| 460 | 
            -
                //-------- internal functions ------------------------------------------//
         | 
| 461 | 
            -
             | 
| 462 | 
            -
                function _changeTargetBalance(
         | 
| 463 | 
            -
                    bool increase,
         | 
| 464 | 
            -
                    InstanceStore instanceStore, 
         | 
| 465 | 
            -
                    NftId targetNftId, 
         | 
| 466 | 
            -
                    Amount amount, 
         | 
| 467 | 
            -
                    Amount feeAmount
         | 
| 468 | 
            -
                )
         | 
| 469 | 
            -
                    internal
         | 
| 470 | 
            -
                    virtual
         | 
| 471 | 
            -
                {
         | 
| 472 | 
            -
                    Amount totalAmount = amount + feeAmount;
         | 
| 473 | 
            -
             | 
| 474 | 
            -
                    if(increase) {
         | 
| 475 | 
            -
                        if(totalAmount.gtz()) { instanceStore.increaseBalance(targetNftId, totalAmount); }
         | 
| 476 | 
            -
                        if(feeAmount.gtz()) { instanceStore.increaseFees(targetNftId, feeAmount); }
         | 
| 477 | 
            -
                    } else {
         | 
| 478 | 
            -
                        if(totalAmount.gtz()) { instanceStore.decreaseBalance(targetNftId, totalAmount); }
         | 
| 479 | 
            -
                        if(feeAmount.gtz()) { instanceStore.decreaseFees(targetNftId, feeAmount); }
         | 
| 480 | 
            -
                    }
         | 
| 481 | 
            -
                }
         | 
| 482 | 
            -
             | 
| 483 | 
            -
                /// @dev registers the component represented by the provided address
         | 
| 459 | 
            +
                /// @dev Registers the component represented by the provided address.
         | 
| 484 460 | 
             
                function _register(
         | 
| 485 461 | 
             
                    address componentAddress, // address of component to register
         | 
| 486 | 
            -
                    ObjectType requiredType | 
| 487 | 
            -
                    RoleId requiredRole // role required for comonent owner for registration
         | 
| 462 | 
            +
                    ObjectType requiredType // required type for component for registration
         | 
| 488 463 | 
             
                )
         | 
| 489 464 | 
             
                    internal
         | 
| 490 465 | 
             
                    virtual
         | 
| 491 466 | 
             
                    returns (
         | 
| 492 467 | 
             
                        InstanceReader instanceReader, 
         | 
| 468 | 
            +
                        InstanceAdmin instanceAdmin, 
         | 
| 493 469 | 
             
                        InstanceStore instanceStore, 
         | 
| 470 | 
            +
                        NftId parentNftId,
         | 
| 494 471 | 
             
                        NftId componentNftId
         | 
| 495 472 | 
             
                    )
         | 
| 496 473 | 
             
                {
         | 
| 474 | 
            +
                    NftId instanceNftId;
         | 
| 475 | 
            +
                    IInstance instance;
         | 
| 476 | 
            +
                    IInstanceLinkedComponent component;
         | 
| 477 | 
            +
                    address initialOwner;
         | 
| 478 | 
            +
             | 
| 497 479 | 
             
                    (
         | 
| 498 | 
            -
                         | 
| 499 | 
            -
                         | 
| 500 | 
            -
                         | 
| 480 | 
            +
                        instanceNftId, 
         | 
| 481 | 
            +
                        instance, 
         | 
| 482 | 
            +
                        parentNftId, 
         | 
| 483 | 
            +
                        component, 
         | 
| 484 | 
            +
                        initialOwner
         | 
| 501 485 | 
             
                    ) = _getAndVerifyRegisterableComponent(
         | 
| 486 | 
            +
                        getRegistry(),
         | 
| 502 487 | 
             
                        componentAddress,
         | 
| 503 | 
            -
                        requiredType | 
| 504 | 
            -
                        requiredRole);
         | 
| 488 | 
            +
                        requiredType);
         | 
| 505 489 |  | 
| 506 | 
            -
                    //  | 
| 507 | 
            -
                    componentNftId = _registryService.registerComponent(
         | 
| 508 | 
            -
                        component, 
         | 
| 509 | 
            -
                        requiredType, 
         | 
| 510 | 
            -
                        owner).nftId;
         | 
| 511 | 
            -
             | 
| 512 | 
            -
                    component.linkToRegisteredNftId();
         | 
| 513 | 
            -
             | 
| 514 | 
            -
                    // save amended component info with instance
         | 
| 490 | 
            +
                    // get instance supporting contracts (as function return values)
         | 
| 515 491 | 
             
                    instanceReader = instance.getInstanceReader();
         | 
| 492 | 
            +
                    instanceAdmin = instance.getInstanceAdmin();
         | 
| 516 493 | 
             
                    instanceStore = instance.getInstanceStore();
         | 
| 517 494 |  | 
| 495 | 
            +
                    // register with registry
         | 
| 496 | 
            +
                    if (requiredType == PRODUCT()) {
         | 
| 497 | 
            +
                        componentNftId = _registryService.registerProduct(
         | 
| 498 | 
            +
                            component, initialOwner).nftId;
         | 
| 499 | 
            +
                    } else {
         | 
| 500 | 
            +
                        componentNftId = _registryService.registerProductLinkedComponent(
         | 
| 501 | 
            +
                            component, requiredType, initialOwner).nftId;
         | 
| 502 | 
            +
                    }
         | 
| 503 | 
            +
             | 
| 504 | 
            +
                    // deploy and wire token handler
         | 
| 518 505 | 
             
                    IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
         | 
| 506 | 
            +
                    IERC20Metadata token = componentInfo.token;
         | 
| 519 507 | 
             
                    componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
         | 
| 520 | 
            -
                        address( | 
| 521 | 
            -
                        address( | 
| 522 | 
            -
             | 
| 508 | 
            +
                        address(getRegistry()),
         | 
| 509 | 
            +
                        address(component), // initially, component is its own wallet
         | 
| 510 | 
            +
                        address(token), 
         | 
| 511 | 
            +
                        address(instanceAdmin.authority()));
         | 
| 512 | 
            +
                    
         | 
| 513 | 
            +
                    // register component with instance
         | 
| 523 514 | 
             
                    instanceStore.createComponent(
         | 
| 524 | 
            -
                         | 
| 515 | 
            +
                        componentNftId, 
         | 
| 525 516 | 
             
                        componentInfo);
         | 
| 526 517 |  | 
| 527 | 
            -
                    //  | 
| 528 | 
            -
                     | 
| 529 | 
            -
                        instance.getNftId(),
         | 
| 530 | 
            -
                        component);
         | 
| 531 | 
            -
             | 
| 532 | 
            -
                    // TODO add logging
         | 
| 533 | 
            -
                }
         | 
| 518 | 
            +
                    // link component contract to nft id
         | 
| 519 | 
            +
                    component.linkToRegisteredNftId();
         | 
| 534 520 |  | 
| 521 | 
            +
                    // authorize
         | 
| 522 | 
            +
                    instanceAdmin.initializeComponentAuthorization(component);
         | 
| 535 523 |  | 
| 536 | 
            -
             | 
| 537 | 
            -
                function _linkToProduct(
         | 
| 538 | 
            -
                    InstanceReader instanceReader, 
         | 
| 539 | 
            -
                    InstanceStore instanceStore,
         | 
| 540 | 
            -
                    NftId componentNftId,
         | 
| 541 | 
            -
                    NftId productNftId
         | 
| 542 | 
            -
                )
         | 
| 543 | 
            -
                    internal
         | 
| 544 | 
            -
                {
         | 
| 545 | 
            -
                    // only link components that are registered
         | 
| 546 | 
            -
                    if(componentNftId.eqz()) {
         | 
| 547 | 
            -
                        return;
         | 
| 548 | 
            -
                    }
         | 
| 549 | 
            -
                
         | 
| 550 | 
            -
                    IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(componentNftId);
         | 
| 551 | 
            -
                    componentInfo.productNftId = productNftId;
         | 
| 552 | 
            -
                    instanceStore.updateComponent(componentNftId, componentInfo, KEEP_STATE());
         | 
| 524 | 
            +
                    emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, address(component), address(token), initialOwner);
         | 
| 553 525 | 
             
                }
         | 
| 554 526 |  | 
| 555 527 |  | 
| @@ -568,13 +540,7 @@ contract ComponentService is | |
| 568 540 | 
             
                }
         | 
| 569 541 |  | 
| 570 542 |  | 
| 571 | 
            -
                function  | 
| 572 | 
            -
                    selectors = new bytes4[](1);
         | 
| 573 | 
            -
                    selectors[0] = selector;
         | 
| 574 | 
            -
                }
         | 
| 575 | 
            -
             | 
| 576 | 
            -
             | 
| 577 | 
            -
                function _getLinkedProductInfo(
         | 
| 543 | 
            +
                function _getLinkedFeeInfo(
         | 
| 578 544 | 
             
                    InstanceReader instanceReader, 
         | 
| 579 545 | 
             
                    NftId componentNftId
         | 
| 580 546 | 
             
                )
         | 
| @@ -582,40 +548,48 @@ contract ComponentService is | |
| 582 548 | 
             
                    view 
         | 
| 583 549 | 
             
                    returns(
         | 
| 584 550 | 
             
                        NftId productNftId, 
         | 
| 585 | 
            -
                        IComponents. | 
| 551 | 
            +
                        IComponents.FeeInfo memory info
         | 
| 586 552 | 
             
                    )
         | 
| 587 553 | 
             
                {
         | 
| 588 | 
            -
                    productNftId =  | 
| 589 | 
            -
                    info = instanceReader. | 
| 554 | 
            +
                    productNftId = getRegistry().getParentNftId(componentNftId);
         | 
| 555 | 
            +
                    info = instanceReader.getFeeInfo(productNftId);
         | 
| 590 556 | 
             
                }
         | 
| 591 557 |  | 
| 592 558 |  | 
| 593 | 
            -
                /// @dev  | 
| 594 | 
            -
                ///  | 
| 595 | 
            -
                /// - the  | 
| 559 | 
            +
                /// @dev Based on the provided component address required type the component 
         | 
| 560 | 
            +
                /// and related instance contract this function reverts iff:
         | 
| 561 | 
            +
                /// - the sender is not registered
         | 
| 596 562 | 
             
                /// - the component contract does not support IInstanceLinkedComponent
         | 
| 597 563 | 
             
                /// - the component type does not match with the required type
         | 
| 598 | 
            -
                /// - the  | 
| 564 | 
            +
                /// - the component has already been registered
         | 
| 599 565 | 
             
                function _getAndVerifyRegisterableComponent(
         | 
| 566 | 
            +
                    IRegistry registry,
         | 
| 600 567 | 
             
                    address componentAddress,
         | 
| 601 | 
            -
                    ObjectType requiredType | 
| 602 | 
            -
                    RoleId requiredRole
         | 
| 568 | 
            +
                    ObjectType requiredType
         | 
| 603 569 | 
             
                )
         | 
| 604 570 | 
             
                    internal
         | 
| 605 571 | 
             
                    view
         | 
| 606 572 | 
             
                    returns (
         | 
| 573 | 
            +
                        NftId instanceNftId,
         | 
| 607 574 | 
             
                        IInstance instance,
         | 
| 575 | 
            +
                        NftId parentNftId,
         | 
| 608 576 | 
             
                        IInstanceLinkedComponent component,
         | 
| 609 | 
            -
                        address  | 
| 577 | 
            +
                        address initialOwner
         | 
| 610 578 | 
             
                    )
         | 
| 611 579 | 
             
                {
         | 
| 612 | 
            -
                    // check  | 
| 613 | 
            -
                     | 
| 614 | 
            -
                    if( | 
| 615 | 
            -
                        revert  | 
| 580 | 
            +
                    // check sender (instance or product) is registered
         | 
| 581 | 
            +
                    IRegistry.ObjectInfo memory senderInfo = registry.getObjectInfo(msg.sender);
         | 
| 582 | 
            +
                    if (senderInfo.nftId.eqz()) {
         | 
| 583 | 
            +
                        revert ErrorComponentServiceSenderNotRegistered(msg.sender);
         | 
| 616 584 | 
             
                    }
         | 
| 617 585 |  | 
| 586 | 
            +
                    // the sender is the parent of the component to be registered
         | 
| 587 | 
            +
                    // an instance caller wanting to register a product - or -
         | 
| 588 | 
            +
                    // a product caller wantint go register a distribution, oracle or pool
         | 
| 589 | 
            +
                    parentNftId = senderInfo.nftId;
         | 
| 590 | 
            +
             | 
| 618 591 | 
             
                    // check component is of required type
         | 
| 592 | 
            +
                    component = IInstanceLinkedComponent(componentAddress);
         | 
| 619 593 | 
             
                    IRegistry.ObjectInfo memory info = component.getInitialInfo();
         | 
| 620 594 | 
             
                    if(info.objectType != requiredType) {
         | 
| 621 595 | 
             
                        revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
         | 
| @@ -626,16 +600,93 @@ contract ComponentService is | |
| 626 600 | 
             
                        revert ErrorComponentServiceAlreadyRegistered(componentAddress);
         | 
| 627 601 | 
             
                    }
         | 
| 628 602 |  | 
| 629 | 
            -
                    //  | 
| 630 | 
            -
                     | 
| 631 | 
            -
                     | 
| 603 | 
            +
                    // component release matches servie release
         | 
| 604 | 
            +
                    address parentAddress = registry.getObjectAddress(parentNftId);
         | 
| 605 | 
            +
                    if (component.getRelease() != getRelease()) {
         | 
| 606 | 
            +
                        revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), getRelease());
         | 
| 607 | 
            +
                    // component release matches parent release
         | 
| 608 | 
            +
                    } else if (component.getRelease() != IRegisterable(parentAddress).getRelease()){
         | 
| 609 | 
            +
                        revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), IRegisterable(parentAddress).getRelease());
         | 
| 610 | 
            +
                    }
         | 
| 632 611 |  | 
| 633 | 
            -
                     | 
| 634 | 
            -
             | 
| 612 | 
            +
                    // check component belongs to same product cluster 
         | 
| 613 | 
            +
                    // parent of product must be instance, parent of other componet types must be product
         | 
| 614 | 
            +
                    if (info.parentNftId != senderInfo.nftId) {
         | 
| 615 | 
            +
                        revert ErrorComponentServiceSenderNotComponentParent(senderInfo.nftId, info.parentNftId);
         | 
| 635 616 | 
             
                    }
         | 
| 617 | 
            +
             | 
| 618 | 
            +
                    // verify parent is registered instance
         | 
| 619 | 
            +
                    if (requiredType == PRODUCT()) {
         | 
| 620 | 
            +
                        if (senderInfo.objectType != INSTANCE()) {
         | 
| 621 | 
            +
                            revert ErrorComponentServiceParentNotInstance(senderInfo.nftId, senderInfo.objectType);
         | 
| 622 | 
            +
                        }
         | 
| 623 | 
            +
             | 
| 624 | 
            +
                        instanceNftId = senderInfo.nftId;
         | 
| 625 | 
            +
                    // verify parent is registered product
         | 
| 626 | 
            +
                    } else {
         | 
| 627 | 
            +
                        if (senderInfo.objectType != PRODUCT()) {
         | 
| 628 | 
            +
                            revert ErrorComponentServiceParentNotProduct(senderInfo.nftId, senderInfo.objectType);
         | 
| 629 | 
            +
                        }
         | 
| 630 | 
            +
             | 
| 631 | 
            +
                        instanceNftId = senderInfo.parentNftId;
         | 
| 632 | 
            +
                    }
         | 
| 633 | 
            +
             | 
| 634 | 
            +
                    // get initial owner and instance
         | 
| 635 | 
            +
                    initialOwner = info.initialOwner;
         | 
| 636 | 
            +
                    instance = IInstance(registry.getObjectAddress(instanceNftId));
         | 
| 637 | 
            +
                }
         | 
| 638 | 
            +
             | 
| 639 | 
            +
                function _setLocked(InstanceAdmin instanceAdmin, address componentAddress, bool locked) internal {
         | 
| 640 | 
            +
                    instanceAdmin.setTargetLocked(componentAddress, locked);
         | 
| 641 | 
            +
                }
         | 
| 642 | 
            +
             | 
| 643 | 
            +
                function _getAndVerifyActiveComponent(ObjectType expectedType) 
         | 
| 644 | 
            +
                    internal 
         | 
| 645 | 
            +
                    view 
         | 
| 646 | 
            +
                    returns (
         | 
| 647 | 
            +
                        NftId componentNftId,
         | 
| 648 | 
            +
                        IInstance instance
         | 
| 649 | 
            +
                    )
         | 
| 650 | 
            +
                {
         | 
| 651 | 
            +
                    return _getAndVerifyComponent(expectedType, true); // only active
         | 
| 652 | 
            +
                }
         | 
| 653 | 
            +
             | 
| 654 | 
            +
                function _getAndVerifyComponent(ObjectType expectedType, bool isActive) 
         | 
| 655 | 
            +
                    internal 
         | 
| 656 | 
            +
                    view 
         | 
| 657 | 
            +
                    returns (
         | 
| 658 | 
            +
                        NftId componentNftId,
         | 
| 659 | 
            +
                        IInstance instance
         | 
| 660 | 
            +
                    )
         | 
| 661 | 
            +
                {
         | 
| 662 | 
            +
                    IRegistry.ObjectInfo memory info;
         | 
| 663 | 
            +
                    address instanceAddress;
         | 
| 664 | 
            +
             | 
| 665 | 
            +
                    if (expectedType != COMPONENT()) {
         | 
| 666 | 
            +
                        (info, instanceAddress) = ContractLib.getAndVerifyComponent(
         | 
| 667 | 
            +
                            getRegistry(),
         | 
| 668 | 
            +
                            msg.sender, // caller
         | 
| 669 | 
            +
                            expectedType,
         | 
| 670 | 
            +
                            isActive); 
         | 
| 671 | 
            +
                    } else {
         | 
| 672 | 
            +
                        (info, instanceAddress) = ContractLib.getAndVerifyAnyComponent(
         | 
| 673 | 
            +
                            getRegistry(),
         | 
| 674 | 
            +
                            msg.sender,
         | 
| 675 | 
            +
                            isActive); 
         | 
| 676 | 
            +
                    }
         | 
| 677 | 
            +
             | 
| 678 | 
            +
                    // get component nft id and instance
         | 
| 679 | 
            +
                    componentNftId = info.nftId;
         | 
| 680 | 
            +
                    instance = IInstance(instanceAddress);
         | 
| 636 681 | 
             
                }
         | 
| 637 682 |  | 
| 638 683 | 
             
                function _getDomain() internal pure virtual override returns(ObjectType) {
         | 
| 639 684 | 
             
                    return COMPONENT();
         | 
| 640 685 | 
             
                }
         | 
| 686 | 
            +
             | 
| 687 | 
            +
                function _checkSupportsInterface(address component) internal view {
         | 
| 688 | 
            +
                    if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
         | 
| 689 | 
            +
                        revert ErrorComponentServiceNotInstanceLinkedComponent(component);
         | 
| 690 | 
            +
                    }
         | 
| 691 | 
            +
                }
         | 
| 641 692 | 
             
            }
         |