@etherisc/gif-next 0.0.2-f1b01e0-214 → 0.0.2-f1e6957-384
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 +76 -341
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +100 -32
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +111 -45
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +1 -1
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +52 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +367 -126
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdminLib.sol/AccessAdminLib.json +1546 -211
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +2 -2
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +261 -59
- 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 +258 -82
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +97 -14
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +256 -16
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +426 -27
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +52 -27
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +264 -64
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +20 -11
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +368 -139
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +160 -78
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +19 -10
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +228 -15
- 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 +81 -52
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +263 -63
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +109 -68
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +263 -63
- 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 +74 -33
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +263 -63
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +35 -26
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +85 -60
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +263 -63
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +264 -78
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +263 -63
- package/artifacts/contracts/instance/BaseStore.sol/BaseStore.dbg.json +4 -0
- package/artifacts/contracts/{shared/IKeyValueStore.sol/IKeyValueStore.json → instance/BaseStore.sol/BaseStore.json} +51 -229
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.dbg.json +4 -0
- package/artifacts/contracts/instance/IBaseStore.sol/IBaseStore.json +304 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +359 -33
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +297 -3
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +407 -97
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +756 -392
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +231 -75
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +492 -424
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +323 -29
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +100 -42
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +1444 -2133
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.dbg.json +4 -0
- package/artifacts/contracts/instance/ProductStore.sol/ProductStore.json +3427 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +1 -1
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +101 -88
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +8 -8
- 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 +2 -2
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +2 -2
- 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 +25 -16
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +277 -60
- 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 +19 -10
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +29 -0
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +19 -10
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +83 -38
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +116 -50
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +37 -36
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +263 -63
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +294 -117
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +144 -58
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +180 -27
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +19 -10
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +220 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +19 -10
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +88 -22
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +324 -65
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +141 -63
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +216 -59
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +113 -43
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +19 -10
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +263 -63
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +142 -102
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +128 -70
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +166 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +50 -10
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +55 -0
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +29 -0
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -10
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +203 -18
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +157 -86
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +508 -18
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +138 -72
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +93 -72
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +120 -50
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +19 -10
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +231 -46
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +101 -43
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +33 -22
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +29 -0
- package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +71 -60
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +537 -300
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAuthorization.sol/RegistryAuthorization.json +330 -71
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +41 -12
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +96 -38
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +543 -226
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +167 -103
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +459 -26
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +119 -59
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +19 -10
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +169 -174
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +130 -64
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +76 -41
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +2 -2
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +19 -10
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +84 -105
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -10
- 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 +19 -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 +19 -0
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -10
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.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 +21 -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 +19 -0
- 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 +29 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +2 -2
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +2 -2
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +1384 -128
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +94 -114
- package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.dbg.json +4 -0
- package/artifacts/contracts/staking/ITargetLimitHandler.sol/ITargetLimitHandler.json +50 -0
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +1472 -185
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLib.sol/StakingLib.json +73 -72
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +139 -64
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +293 -149
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +128 -164
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +96 -46
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +1617 -817
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.dbg.json +4 -0
- package/artifacts/contracts/staking/TargetHandler.sol/TargetHandler.json +309 -0
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +140 -78
- 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 +2 -2
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +64 -19
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/type/ChainId.sol/ChainIdLib.json +193 -0
- 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 +2 -2
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +1 -1
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +2 -2
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +6 -6
- 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 +2 -2
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +39 -218
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +45 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/String.sol/StrLib.json +50 -2
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +3 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.json +10 -0
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +81 -27
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +15 -2
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.json +10 -0
- package/contracts/accounting/AccountingService.sol +15 -3
- package/contracts/accounting/IAccountingService.sol +2 -0
- package/contracts/authorization/AccessAdmin.sol +292 -317
- package/contracts/authorization/AccessAdminLib.sol +517 -22
- package/contracts/authorization/AccessManagerCloneable.sol +0 -18
- package/contracts/authorization/Authorization.sol +64 -239
- package/contracts/authorization/IAccess.sol +23 -14
- package/contracts/authorization/IAccessAdmin.sol +25 -53
- package/contracts/authorization/IAuthorization.sol +3 -57
- package/contracts/authorization/IServiceAuthorization.sol +55 -17
- package/contracts/authorization/ServiceAuthorization.sol +228 -34
- package/contracts/distribution/BasicDistribution.sol +3 -4
- package/contracts/distribution/BasicDistributionAuthorization.sol +11 -4
- package/contracts/distribution/Distribution.sol +9 -8
- package/contracts/distribution/DistributionService.sol +98 -35
- package/contracts/distribution/IDistributionComponent.sol +3 -1
- package/contracts/distribution/IDistributionService.sol +20 -8
- package/contracts/examples/fire/FireProduct.sol +6 -6
- package/contracts/examples/unpermissioned/SimpleProduct.sol +83 -19
- package/contracts/instance/BaseStore.sol +93 -0
- package/contracts/instance/IBaseStore.sol +37 -0
- package/contracts/instance/IInstance.sol +55 -5
- package/contracts/instance/IInstanceService.sol +37 -6
- package/contracts/instance/Instance.sol +103 -56
- package/contracts/instance/InstanceAdmin.sol +151 -294
- package/contracts/instance/InstanceAuthorizationV3.sol +106 -66
- package/contracts/instance/InstanceReader.sol +350 -394
- package/contracts/instance/InstanceService.sol +180 -125
- package/contracts/instance/InstanceStore.sol +153 -128
- package/contracts/instance/ProductStore.sol +290 -0
- package/contracts/instance/RiskSet.sol +10 -2
- package/contracts/instance/TargetNames.sol +10 -0
- package/contracts/instance/base/BalanceStore.sol +4 -6
- package/contracts/instance/base/ObjectLifecycle.sol +2 -6
- package/contracts/instance/module/IComponents.sol +0 -2
- package/contracts/oracle/BasicOracle.sol +2 -3
- package/contracts/oracle/BasicOracleAuthorization.sol +18 -2
- package/contracts/oracle/Oracle.sol +4 -6
- package/contracts/oracle/OracleService.sol +8 -8
- package/contracts/pool/BasicPool.sol +4 -16
- package/contracts/pool/BasicPoolAuthorization.sol +10 -5
- package/contracts/pool/BundleService.sol +34 -43
- package/contracts/pool/IBundleService.sol +14 -13
- package/contracts/pool/IPoolService.sol +7 -2
- package/contracts/pool/Pool.sol +6 -18
- package/contracts/pool/PoolLib.sol +127 -2
- package/contracts/pool/PoolService.sol +40 -181
- package/contracts/product/ApplicationService.sol +64 -11
- package/contracts/product/BasicProduct.sol +2 -3
- package/contracts/product/BasicProductAuthorization.sol +11 -4
- package/contracts/product/ClaimService.sol +99 -105
- package/contracts/product/IApplicationService.sol +21 -2
- package/contracts/product/IClaimService.sol +5 -4
- package/contracts/product/IPolicyService.sol +9 -2
- package/contracts/product/IRiskService.sol +18 -3
- package/contracts/product/PolicyService.sol +40 -59
- package/contracts/product/PolicyServiceLib.sol +79 -5
- package/contracts/product/PricingService.sol +22 -25
- package/contracts/product/Product.sol +40 -16
- package/contracts/product/RiskService.sol +50 -15
- package/contracts/registry/IRegistry.sol +11 -9
- package/contracts/registry/IRelease.sol +6 -3
- package/contracts/registry/Registry.sol +15 -9
- package/contracts/registry/RegistryAdmin.sol +33 -118
- package/contracts/registry/RegistryAuthorization.sol +139 -69
- package/contracts/registry/RegistryService.sol +1 -1
- package/contracts/registry/ReleaseAdmin.sol +52 -106
- package/contracts/registry/ReleaseRegistry.sol +20 -12
- package/contracts/registry/ServiceAuthorizationV3.sol +43 -32
- package/contracts/registry/TokenRegistry.sol +56 -52
- package/contracts/shared/Component.sol +8 -8
- package/contracts/shared/ComponentService.sol +245 -262
- package/contracts/shared/ContractLib.sol +106 -75
- package/contracts/shared/IComponent.sol +1 -1
- package/contracts/shared/IComponentService.sol +12 -13
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IRegisterable.sol +0 -1
- package/contracts/shared/InstanceLinkedComponent.sol +6 -9
- package/contracts/shared/NftOwnable.sol +3 -1
- package/contracts/shared/PolicyHolder.sol +3 -2
- package/contracts/shared/Service.sol +6 -4
- package/contracts/staking/IStaking.sol +261 -70
- package/contracts/staking/IStakingService.sol +39 -84
- package/contracts/staking/ITargetLimitHandler.sol +17 -0
- package/contracts/staking/Staking.sol +468 -217
- package/contracts/staking/StakingLib.sol +38 -124
- package/contracts/staking/StakingManager.sol +4 -3
- package/contracts/staking/StakingReader.sol +62 -71
- package/contracts/staking/StakingService.sol +42 -185
- package/contracts/staking/StakingServiceManager.sol +1 -0
- package/contracts/staking/StakingStore.sol +1093 -331
- package/contracts/staking/TargetHandler.sol +132 -0
- package/contracts/staking/TargetManagerLib.sol +69 -46
- package/contracts/type/Amount.sol +4 -0
- package/contracts/type/Blocknumber.sol +17 -22
- package/contracts/type/ChainId.sol +101 -0
- package/contracts/type/NftId.sol +3 -3
- package/contracts/type/ObjectType.sol +16 -3
- package/contracts/type/RoleId.sol +57 -59
- package/contracts/type/Seconds.sol +19 -0
- package/contracts/type/String.sol +12 -0
- package/contracts/type/Timestamp.sol +4 -2
- package/contracts/type/UFixed.sol +1 -0
- package/contracts/upgradeability/IVersionable.sol +3 -0
- package/contracts/upgradeability/ProxyManager.sol +26 -12
- package/contracts/upgradeability/UpgradableProxyWithAdmin.sol +12 -2
- package/contracts/upgradeability/Versionable.sol +6 -3
- package/package.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +0 -4
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +0 -24
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +0 -4
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -485
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +0 -4
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +0 -538
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +0 -4
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +0 -205
- package/contracts/shared/ComponentVerifyingService.sol +0 -128
- package/contracts/shared/IKeyValueStore.sol +0 -54
- package/contracts/shared/KeyValueStore.sol +0 -131
- package/contracts/staking/StakingLifecycle.sol +0 -23
| @@ -4,7 +4,6 @@ pragma solidity ^0.8.20; | |
| 4 4 | 
             
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 5 |  | 
| 6 6 | 
             
            import {IAccountingService} from "../accounting/IAccountingService.sol";
         | 
| 7 | 
            -
            import {IComponent} from "../shared/IComponent.sol";
         | 
| 8 7 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 9 8 | 
             
            import {IComponentService} from "./IComponentService.sol";
         | 
| 10 9 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| @@ -12,24 +11,25 @@ import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol"; | |
| 12 11 | 
             
            import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
         | 
| 13 12 | 
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 14 13 | 
             
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 15 | 
            -
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 16 14 | 
             
            import {IPoolComponent} from "../pool/IPoolComponent.sol";
         | 
| 17 15 | 
             
            import {IProductComponent} from "../product/IProductComponent.sol";
         | 
| 18 | 
            -
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 19 16 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 20 17 | 
             
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 18 | 
            +
            import {IStaking} from "../staking/IStaking.sol";
         | 
| 19 | 
            +
            import {IStakingService} from "../staking/IStakingService.sol";
         | 
| 21 20 |  | 
| 22 21 | 
             
            import {AccessManagerCloneable} from "../authorization/AccessManagerCloneable.sol";
         | 
| 23 22 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 23 | 
            +
            import {ChainIdLib} from "../type/ChainId.sol";
         | 
| 24 24 | 
             
            import {ContractLib} from "../shared/ContractLib.sol";
         | 
| 25 25 | 
             
            import {Fee, FeeLib} from "../type/Fee.sol";
         | 
| 26 26 | 
             
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 27 27 | 
             
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| 28 | 
            -
            import {ObjectType, ACCOUNTING, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
         | 
| 28 | 
            +
            import {ObjectType, ACCOUNTING, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT, STAKING} from "../type/ObjectType.sol";
         | 
| 29 | 
            +
            import {ProductStore} from "../instance/ProductStore.sol";
         | 
| 29 30 | 
             
            import {Service} from "../shared/Service.sol";
         | 
| 30 31 | 
             
            import {TokenHandler} from "../shared/TokenHandler.sol";
         | 
| 31 32 | 
             
            import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
         | 
| 32 | 
            -
            import {VersionPart} from "../type/Version.sol";
         | 
| 33 33 |  | 
| 34 34 |  | 
| 35 35 | 
             
            contract ComponentService is
         | 
| @@ -41,32 +41,7 @@ contract ComponentService is | |
| 41 41 |  | 
| 42 42 | 
             
                IAccountingService private _accountingService;
         | 
| 43 43 | 
             
                IRegistryService private _registryService;
         | 
| 44 | 
            -
                 | 
| 45 | 
            -
             | 
| 46 | 
            -
                modifier onlyComponent(address component) {
         | 
| 47 | 
            -
                    _checkSupportsInterface(component);
         | 
| 48 | 
            -
                    _;
         | 
| 49 | 
            -
                }
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                modifier onlyInstance() {        
         | 
| 52 | 
            -
                    NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
         | 
| 53 | 
            -
                    if (instanceNftId.eqz()) {
         | 
| 54 | 
            -
                        revert ErrorComponentServiceNotRegistered(msg.sender);
         | 
| 55 | 
            -
                    }
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                    ObjectType objectType = getRegistry().getObjectInfo(instanceNftId).objectType;
         | 
| 58 | 
            -
                    if (objectType != INSTANCE()) {
         | 
| 59 | 
            -
                        revert ErrorComponentServiceNotInstance(msg.sender, objectType);
         | 
| 60 | 
            -
                    }
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                    VersionPart instanceVersion = IInstance(msg.sender).getRelease();
         | 
| 63 | 
            -
                    if (instanceVersion != getVersion().toMajorPart()) {
         | 
| 64 | 
            -
                        revert ErrorComponentServiceInstanceVersionMismatch(msg.sender, instanceVersion);
         | 
| 65 | 
            -
                    }
         | 
| 66 | 
            -
             | 
| 67 | 
            -
                    _;
         | 
| 68 | 
            -
                }
         | 
| 69 | 
            -
             | 
| 44 | 
            +
                IStaking private _staking;
         | 
| 70 45 |  | 
| 71 46 | 
             
                function _initialize(
         | 
| 72 47 | 
             
                    address owner, 
         | 
| @@ -85,63 +60,74 @@ contract ComponentService is | |
| 85 60 |  | 
| 86 61 | 
             
                    _accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
         | 
| 87 62 | 
             
                    _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 88 | 
            -
                     | 
| 63 | 
            +
                    _staking = IStakingService(_getServiceAddress(STAKING())).getStaking();
         | 
| 89 64 |  | 
| 90 65 | 
             
                    _registerInterface(type(IComponentService).interfaceId);
         | 
| 91 66 | 
             
                }
         | 
| 92 67 |  | 
| 93 68 | 
             
                //-------- component ----------------------------------------------------//
         | 
| 94 69 |  | 
| 95 | 
            -
                 | 
| 70 | 
            +
                /// @inheritdoc IComponentService
         | 
| 71 | 
            +
                function registerComponent(address componentAddress)
         | 
| 96 72 | 
             
                    external
         | 
| 97 73 | 
             
                    virtual
         | 
| 98 | 
            -
                     | 
| 74 | 
            +
                    restricted()
         | 
| 99 75 | 
             
                    returns (NftId componentNftId)
         | 
| 100 76 | 
             
                {
         | 
| 101 | 
            -
                    //  | 
| 102 | 
            -
                     | 
| 103 | 
            -
                     | 
| 104 | 
            -
                     | 
| 105 | 
            -
             | 
| 106 | 
            -
                    if (componentType == POOL()) {
         | 
| 107 | 
            -
                        return _registerPool(component, address(productComponent.getToken()));
         | 
| 108 | 
            -
                    }
         | 
| 109 | 
            -
                    if (componentType == DISTRIBUTION()) {
         | 
| 110 | 
            -
                        return _registerDistribution(component, address(productComponent.getToken()));
         | 
| 77 | 
            +
                    // checks
         | 
| 78 | 
            +
                    // check sender is registered product
         | 
| 79 | 
            +
                    IRegistry registry = getRegistry();
         | 
| 80 | 
            +
                    if (!registry.isObjectType(msg.sender, PRODUCT())) {
         | 
| 81 | 
            +
                        revert ErrorComponentServiceCallerNotProduct(msg.sender);
         | 
| 111 82 | 
             
                    }
         | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 83 | 
            +
             | 
| 84 | 
            +
                    // check provided address is product contract
         | 
| 85 | 
            +
                    if (!_isInstanceLinkedComponent(componentAddress)) {
         | 
| 86 | 
            +
                        revert ErrorComponentServiceNotComponent(componentAddress);
         | 
| 114 87 | 
             
                    }
         | 
| 115 88 |  | 
| 116 | 
            -
                     | 
| 117 | 
            -
                     | 
| 89 | 
            +
                    NftId productNftId = registry.getNftIdForAddress(msg.sender);
         | 
| 90 | 
            +
                    IInstance instance = IInstance(
         | 
| 91 | 
            +
                        registry.getObjectAddress(
         | 
| 92 | 
            +
                            registry.getParentNftId(productNftId)));
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                    componentNftId = _verifyAndRegister(
         | 
| 95 | 
            +
                        instance, 
         | 
| 96 | 
            +
                        componentAddress, 
         | 
| 97 | 
            +
                        productNftId, // product is parent of component to be registered
         | 
| 98 | 
            +
                        address(0)); // token will be inhereited from product
         | 
| 118 99 | 
             
                }
         | 
| 119 100 |  | 
| 101 | 
            +
             | 
| 102 | 
            +
                /// @inheritdoc IComponentService
         | 
| 120 103 | 
             
                function approveTokenHandler(
         | 
| 121 104 | 
             
                    IERC20Metadata token,
         | 
| 122 105 | 
             
                    Amount amount
         | 
| 123 106 | 
             
                )
         | 
| 124 107 | 
             
                    external
         | 
| 125 108 | 
             
                    virtual
         | 
| 109 | 
            +
                    restricted()
         | 
| 126 110 | 
             
                {
         | 
| 127 111 | 
             
                    // checks
         | 
| 128 | 
            -
                    (NftId componentNftId, IInstance instance) =  | 
| 129 | 
            -
                    TokenHandler tokenHandler = instance.getInstanceReader(). | 
| 130 | 
            -
                        componentNftId) | 
| 112 | 
            +
                    (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
         | 
| 113 | 
            +
                    TokenHandler tokenHandler = instance.getInstanceReader().getTokenHandler(
         | 
| 114 | 
            +
                        componentNftId);
         | 
| 131 115 |  | 
| 132 116 | 
             
                    // effects
         | 
| 133 117 | 
             
                    tokenHandler.approve(token, amount);
         | 
| 134 118 | 
             
                }
         | 
| 135 119 |  | 
| 136 120 |  | 
| 121 | 
            +
                /// @inheritdoc IComponentService
         | 
| 137 122 | 
             
                function setWallet(address newWallet)
         | 
| 138 123 | 
             
                    external
         | 
| 139 124 | 
             
                    virtual
         | 
| 125 | 
            +
                    restricted()
         | 
| 140 126 | 
             
                {
         | 
| 141 127 | 
             
                    // checks
         | 
| 142 | 
            -
                    (NftId componentNftId, IInstance instance) =  | 
| 143 | 
            -
                    TokenHandler tokenHandler = instance.getInstanceReader(). | 
| 144 | 
            -
                        componentNftId) | 
| 128 | 
            +
                    (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
         | 
| 129 | 
            +
                    TokenHandler tokenHandler = instance.getInstanceReader().getTokenHandler(
         | 
| 130 | 
            +
                        componentNftId);
         | 
| 145 131 |  | 
| 146 132 | 
             
                    // effects
         | 
| 147 133 | 
             
                    tokenHandler.setWallet(newWallet);
         | 
| @@ -156,11 +142,13 @@ contract ComponentService is | |
| 156 142 | 
             
                    (, IInstance instance) = _getAndVerifyComponent(COMPONENT(), false);
         | 
| 157 143 |  | 
| 158 144 | 
             
                    address component = msg.sender;
         | 
| 159 | 
            -
                    instance.getInstanceAdmin(). | 
| 145 | 
            +
                    instance.getInstanceAdmin().setContractLocked(
         | 
| 160 146 | 
             
                        component, 
         | 
| 161 147 | 
             
                        locked);
         | 
| 148 | 
            +
                    emit LogComponentServiceComponentLocked(component, locked);
         | 
| 162 149 | 
             
                }
         | 
| 163 150 |  | 
| 151 | 
            +
             | 
| 164 152 | 
             
                /// @inheritdoc IComponentService
         | 
| 165 153 | 
             
                function withdrawFees(Amount amount)
         | 
| 166 154 | 
             
                    external
         | 
| @@ -169,7 +157,7 @@ contract ComponentService is | |
| 169 157 | 
             
                    returns (Amount withdrawnAmount)
         | 
| 170 158 | 
             
                {
         | 
| 171 159 | 
             
                    // checks
         | 
| 172 | 
            -
                    (NftId componentNftId, IInstance instance) =  | 
| 160 | 
            +
                    (NftId componentNftId, IInstance instance) = _getAndVerifyComponent(COMPONENT(), true);
         | 
| 173 161 | 
             
                    InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 174 162 |  | 
| 175 163 | 
             
                    // determine withdrawn amount
         | 
| @@ -214,51 +202,70 @@ contract ComponentService is | |
| 214 202 |  | 
| 215 203 | 
             
                //-------- product ------------------------------------------------------//
         | 
| 216 204 |  | 
| 205 | 
            +
                /// @inheritdoc IComponentService
         | 
| 217 206 | 
             
                function registerProduct(address productAddress, address token)
         | 
| 218 207 | 
             
                    external
         | 
| 219 208 | 
             
                    virtual
         | 
| 209 | 
            +
                    restricted()
         | 
| 220 210 | 
             
                    nonReentrant()
         | 
| 221 | 
            -
                    onlyComponent(productAddress)
         | 
| 222 211 | 
             
                    returns (NftId productNftId)
         | 
| 223 212 | 
             
                {
         | 
| 224 | 
            -
                    //  | 
| 225 | 
            -
                     | 
| 226 | 
            -
                     | 
| 227 | 
            -
                    (,  | 
| 228 | 
            -
                         | 
| 229 | 
            -
             | 
| 213 | 
            +
                    // checks
         | 
| 214 | 
            +
                    // check sender is registered instance
         | 
| 215 | 
            +
                    IRegistry registry = getRegistry();
         | 
| 216 | 
            +
                    if (!registry.isObjectType(msg.sender, INSTANCE())) {
         | 
| 217 | 
            +
                        revert ErrorComponentServiceCallerNotInstance(msg.sender);
         | 
| 218 | 
            +
                    }
         | 
| 219 | 
            +
             | 
| 220 | 
            +
                    // check provided address is product contract
         | 
| 221 | 
            +
                    if (!_isProduct(productAddress)) {
         | 
| 222 | 
            +
                        revert ErrorComponentServiceNotProduct(productAddress);
         | 
| 223 | 
            +
                    }
         | 
| 224 | 
            +
             | 
| 225 | 
            +
                    IInstance instance = IInstance(msg.sender);
         | 
| 226 | 
            +
                    NftId instanceNftId = registry.getNftIdForAddress(msg.sender);
         | 
| 227 | 
            +
                    productNftId = _verifyAndRegister(
         | 
| 228 | 
            +
                        instance, 
         | 
| 229 | 
            +
                        productAddress, 
         | 
| 230 | 
            +
                        instanceNftId, // instance is parent of product to be registered 
         | 
| 230 231 | 
             
                        token);
         | 
| 231 232 |  | 
| 232 | 
            -
                    //  | 
| 233 | 
            -
                     | 
| 234 | 
            -
             | 
| 235 | 
            -
             | 
| 236 | 
            -
             | 
| 237 | 
            -
                    // ensure no components are linked upon initialization of the product
         | 
| 238 | 
            -
                    initialProductInfo.poolNftId = NftIdLib.zero();
         | 
| 239 | 
            -
                    initialProductInfo.distributionNftId = NftIdLib.zero();
         | 
| 240 | 
            -
                    initialProductInfo.oracleNftId = new NftId[](initialProductInfo.expectedNumberOfOracles);
         | 
| 233 | 
            +
                    // add product specific token for product to staking
         | 
| 234 | 
            +
                    _staking.addTargetToken(
         | 
| 235 | 
            +
                        instanceNftId, 
         | 
| 236 | 
            +
                        token);
         | 
| 237 | 
            +
                }
         | 
| 241 238 |  | 
| 242 | 
            -
                    // create info
         | 
| 243 | 
            -
                    instanceStore.createProduct(
         | 
| 244 | 
            -
                        productNftId, 
         | 
| 245 | 
            -
                        initialProductInfo);
         | 
| 246 239 |  | 
| 247 | 
            -
             | 
| 248 | 
            -
             | 
| 249 | 
            -
                         | 
| 240 | 
            +
                function _isProduct(address target) internal view virtual returns (bool) {
         | 
| 241 | 
            +
                    if (!_isInstanceLinkedComponent(target)) {
         | 
| 242 | 
            +
                        return false;
         | 
| 243 | 
            +
                    }
         | 
| 244 | 
            +
             | 
| 245 | 
            +
                    return IInstanceLinkedComponent(target).getInitialInfo().objectType == PRODUCT();
         | 
| 250 246 | 
             
                }
         | 
| 251 247 |  | 
| 252 248 |  | 
| 249 | 
            +
                function _isInstanceLinkedComponent(address target) internal view virtual returns (bool) {
         | 
| 250 | 
            +
                    if (!ContractLib.isContract(target)) {
         | 
| 251 | 
            +
                        return false;
         | 
| 252 | 
            +
                    }
         | 
| 253 | 
            +
             | 
| 254 | 
            +
                    return ContractLib.supportsInterface(target, type(IInstanceLinkedComponent).interfaceId);
         | 
| 255 | 
            +
                }
         | 
| 256 | 
            +
             | 
| 257 | 
            +
             | 
| 258 | 
            +
                /// @inheritdoc IComponentService
         | 
| 253 259 | 
             
                function setProductFees(
         | 
| 254 260 | 
             
                    Fee memory productFee, // product fee on net premium
         | 
| 255 261 | 
             
                    Fee memory processingFee // product fee on payout amounts        
         | 
| 256 262 | 
             
                )
         | 
| 257 263 | 
             
                    external
         | 
| 258 264 | 
             
                    virtual
         | 
| 265 | 
            +
                    restricted()
         | 
| 259 266 | 
             
                    nonReentrant()
         | 
| 260 267 | 
             
                {
         | 
| 261 | 
            -
                    (NftId productNftId, IInstance instance) =  | 
| 268 | 
            +
                    (NftId productNftId, IInstance instance) = _getAndVerifyComponent(PRODUCT(), true);
         | 
| 262 269 | 
             
                    IComponents.FeeInfo memory feeInfo = instance.getInstanceReader().getFeeInfo(productNftId);
         | 
| 263 270 | 
             
                    bool feesChanged = false;
         | 
| 264 271 |  | 
| @@ -277,32 +284,53 @@ contract ComponentService is | |
| 277 284 | 
             
                    }
         | 
| 278 285 |  | 
| 279 286 | 
             
                    if(feesChanged) {
         | 
| 280 | 
            -
                        instance. | 
| 287 | 
            +
                        instance.getProductStore().updateFee(productNftId, feeInfo);
         | 
| 281 288 | 
             
                        emit LogComponentServiceProductFeesUpdated(productNftId);
         | 
| 282 289 | 
             
                    }
         | 
| 283 290 | 
             
                }
         | 
| 284 291 |  | 
| 292 | 
            +
             | 
| 293 | 
            +
                function _createProduct(
         | 
| 294 | 
            +
                    ProductStore productStore,
         | 
| 295 | 
            +
                    NftId productNftId,
         | 
| 296 | 
            +
                    address productAddress
         | 
| 297 | 
            +
                )
         | 
| 298 | 
            +
                    internal
         | 
| 299 | 
            +
                    virtual
         | 
| 300 | 
            +
                {
         | 
| 301 | 
            +
                    // create product in instance instanceStore
         | 
| 302 | 
            +
                    IProductComponent product = IProductComponent(productAddress);
         | 
| 303 | 
            +
                    IComponents.ProductInfo memory initialProductInfo = product.getInitialProductInfo();
         | 
| 304 | 
            +
                    // force initialization of linked components with empty values to 
         | 
| 305 | 
            +
                    // ensure no components are linked upon initialization of the product
         | 
| 306 | 
            +
                    initialProductInfo.poolNftId = NftIdLib.zero();
         | 
| 307 | 
            +
                    initialProductInfo.distributionNftId = NftIdLib.zero();
         | 
| 308 | 
            +
                    initialProductInfo.oracleNftId = new NftId[](initialProductInfo.expectedNumberOfOracles);
         | 
| 309 | 
            +
             | 
| 310 | 
            +
                    // create info
         | 
| 311 | 
            +
                    productStore.createProduct(
         | 
| 312 | 
            +
                        productNftId, 
         | 
| 313 | 
            +
                        initialProductInfo);
         | 
| 314 | 
            +
             | 
| 315 | 
            +
                    productStore.createFee(
         | 
| 316 | 
            +
                        productNftId, 
         | 
| 317 | 
            +
                        product.getInitialFeeInfo());
         | 
| 318 | 
            +
                }
         | 
| 319 | 
            +
             | 
| 285 320 | 
             
                //-------- distribution -------------------------------------------------//
         | 
| 286 321 |  | 
| 287 322 | 
             
                /// @dev registers the sending component as a distribution component
         | 
| 288 | 
            -
                function  | 
| 323 | 
            +
                function _createDistribution(
         | 
| 324 | 
            +
                    ProductStore productStore,
         | 
| 325 | 
            +
                    NftId productNftId,
         | 
| 326 | 
            +
                    NftId distributionNftId,
         | 
| 327 | 
            +
                    IComponents.ProductInfo memory productInfo
         | 
| 328 | 
            +
                )
         | 
| 289 329 | 
             
                    internal
         | 
| 290 330 | 
             
                    virtual
         | 
| 291 331 | 
             
                    nonReentrant()
         | 
| 292 | 
            -
                    returns (NftId distributionNftId)
         | 
| 293 332 | 
             
                {
         | 
| 294 | 
            -
                    // register/create component info
         | 
| 295 | 
            -
                    InstanceReader instanceReader;
         | 
| 296 | 
            -
                    InstanceAdmin instanceAdmin;
         | 
| 297 | 
            -
                    InstanceStore instanceStore;
         | 
| 298 | 
            -
                    NftId productNftId;
         | 
| 299 | 
            -
                    (instanceReader, instanceAdmin, instanceStore, productNftId, distributionNftId) = _register(
         | 
| 300 | 
            -
                        distributioAddress,
         | 
| 301 | 
            -
                        DISTRIBUTION(),
         | 
| 302 | 
            -
                        token);
         | 
| 303 | 
            -
             | 
| 304 333 | 
             
                    // check product is still expecting a distribution registration
         | 
| 305 | 
            -
                    IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 306 334 | 
             
                    if (!productInfo.hasDistribution) {
         | 
| 307 335 | 
             
                        revert ErrorProductServiceNoDistributionExpected(productNftId);
         | 
| 308 336 | 
             
                    }
         | 
| @@ -312,7 +340,7 @@ contract ComponentService is | |
| 312 340 |  | 
| 313 341 | 
             
                    // set distribution in product info
         | 
| 314 342 | 
             
                    productInfo.distributionNftId = distributionNftId;
         | 
| 315 | 
            -
                     | 
| 343 | 
            +
                    productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
         | 
| 316 344 | 
             
                }
         | 
| 317 345 |  | 
| 318 346 |  | 
| @@ -322,8 +350,9 @@ contract ComponentService is | |
| 322 350 | 
             
                )
         | 
| 323 351 | 
             
                    external
         | 
| 324 352 | 
             
                    virtual
         | 
| 353 | 
            +
                    restricted()
         | 
| 325 354 | 
             
                {
         | 
| 326 | 
            -
                    (NftId distributionNftId, IInstance instance) =  | 
| 355 | 
            +
                    (NftId distributionNftId, IInstance instance) = _getAndVerifyComponent(DISTRIBUTION(), true);
         | 
| 327 356 | 
             
                    (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
         | 
| 328 357 | 
             
                        instance.getInstanceReader(), distributionNftId);
         | 
| 329 358 | 
             
                    bool feesChanged = false;
         | 
| @@ -343,31 +372,23 @@ contract ComponentService is | |
| 343 372 | 
             
                    }
         | 
| 344 373 |  | 
| 345 374 | 
             
                    if(feesChanged) {
         | 
| 346 | 
            -
                        instance. | 
| 375 | 
            +
                        instance.getProductStore().updateFee(productNftId, feeInfo);
         | 
| 347 376 | 
             
                        emit LogComponentServiceDistributionFeesUpdated(distributionNftId);
         | 
| 348 377 | 
             
                    }
         | 
| 349 378 | 
             
                }
         | 
| 350 379 |  | 
| 351 380 | 
             
                //-------- oracle -------------------------------------------------------//
         | 
| 352 381 |  | 
| 353 | 
            -
                function  | 
| 382 | 
            +
                function _createOracle(
         | 
| 383 | 
            +
                    ProductStore productStore,
         | 
| 384 | 
            +
                    NftId productNftId,
         | 
| 385 | 
            +
                    NftId oracleNftId,
         | 
| 386 | 
            +
                    IComponents.ProductInfo memory productInfo
         | 
| 387 | 
            +
                )
         | 
| 354 388 | 
             
                    internal
         | 
| 355 389 | 
             
                    virtual
         | 
| 356 | 
            -
                    returns (NftId oracleNftId)
         | 
| 357 390 | 
             
                {
         | 
| 358 | 
            -
                    // register/create component setup
         | 
| 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 | 
            -
                        token);
         | 
| 368 | 
            -
             | 
| 369 391 | 
             
                    // check product is still expecting an oracle registration
         | 
| 370 | 
            -
                    IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 371 392 | 
             
                    if (productInfo.expectedNumberOfOracles == 0) {
         | 
| 372 393 | 
             
                        revert ErrorProductServiceNoOraclesExpected(productNftId);
         | 
| 373 394 | 
             
                    }
         | 
| @@ -378,42 +399,37 @@ contract ComponentService is | |
| 378 399 | 
             
                    // update/add oracle to product info
         | 
| 379 400 | 
             
                    productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
         | 
| 380 401 | 
             
                    productInfo.numberOfOracles++;
         | 
| 381 | 
            -
                     | 
| 402 | 
            +
                    productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
         | 
| 382 403 | 
             
                }
         | 
| 383 404 |  | 
| 384 405 | 
             
                //-------- pool ---------------------------------------------------------//
         | 
| 385 406 |  | 
| 386 | 
            -
                function  | 
| 407 | 
            +
                function _createPool(
         | 
| 408 | 
            +
                    InstanceStore instanceStore,
         | 
| 409 | 
            +
                    ProductStore productStore,
         | 
| 410 | 
            +
                    NftId productNftId,
         | 
| 411 | 
            +
                    NftId poolNftId,
         | 
| 412 | 
            +
                    address componentAddress,
         | 
| 413 | 
            +
                    IComponents.ProductInfo memory productInfo
         | 
| 414 | 
            +
                )
         | 
| 387 415 | 
             
                    internal
         | 
| 388 416 | 
             
                    virtual
         | 
| 389 | 
            -
                    returns (NftId poolNftId)
         | 
| 390 417 | 
             
                {
         | 
| 391 | 
            -
                    // register/create component setup
         | 
| 392 | 
            -
                    InstanceReader instanceReader;
         | 
| 393 | 
            -
                    InstanceAdmin instanceAdmin;
         | 
| 394 | 
            -
                    InstanceStore instanceStore;
         | 
| 395 | 
            -
                    NftId productNftId;
         | 
| 396 | 
            -
             | 
| 397 | 
            -
                    (instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) = _register(
         | 
| 398 | 
            -
                        poolAddress,
         | 
| 399 | 
            -
                        POOL(),
         | 
| 400 | 
            -
                        token);
         | 
| 401 | 
            -
             | 
| 402 418 | 
             
                    // check product is still expecting a pool registration
         | 
| 403 | 
            -
                    IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 419 | 
            +
                    //IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 404 420 | 
             
                    if (productInfo.poolNftId.gtz()) {
         | 
| 405 421 | 
             
                        revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
         | 
| 406 422 | 
             
                    }
         | 
| 407 423 |  | 
| 408 424 | 
             
                    // create info
         | 
| 409 | 
            -
                    IPoolComponent pool = IPoolComponent( | 
| 425 | 
            +
                    IPoolComponent pool = IPoolComponent(componentAddress);
         | 
| 410 426 | 
             
                    instanceStore.createPool(
         | 
| 411 427 | 
             
                        poolNftId, 
         | 
| 412 428 | 
             
                        pool.getInitialPoolInfo());
         | 
| 413 429 |  | 
| 414 430 | 
             
                    // update pool in product info
         | 
| 415 431 | 
             
                    productInfo.poolNftId = poolNftId;
         | 
| 416 | 
            -
                     | 
| 432 | 
            +
                    productStore.updateProduct(productNftId, productInfo, KEEP_STATE());
         | 
| 417 433 | 
             
                }
         | 
| 418 434 |  | 
| 419 435 |  | 
| @@ -424,8 +440,9 @@ contract ComponentService is | |
| 424 440 | 
             
                )
         | 
| 425 441 | 
             
                    external
         | 
| 426 442 | 
             
                    virtual
         | 
| 443 | 
            +
                    restricted()
         | 
| 427 444 | 
             
                {
         | 
| 428 | 
            -
                    (NftId poolNftId, IInstance instance) =  | 
| 445 | 
            +
                    (NftId poolNftId, IInstance instance) = _getAndVerifyComponent(POOL(), true);
         | 
| 429 446 |  | 
| 430 447 | 
             
                    (NftId productNftId, IComponents.FeeInfo memory feeInfo) = _getLinkedFeeInfo(
         | 
| 431 448 | 
             
                        instance.getInstanceReader(), poolNftId);
         | 
| @@ -453,91 +470,116 @@ contract ComponentService is | |
| 453 470 | 
             
                    }
         | 
| 454 471 |  | 
| 455 472 | 
             
                    if(feesChanged) {
         | 
| 456 | 
            -
                        instance. | 
| 473 | 
            +
                        instance.getProductStore().updateFee(productNftId, feeInfo);
         | 
| 457 474 | 
             
                        emit LogComponentServicePoolFeesUpdated(poolNftId);
         | 
| 458 475 | 
             
                    }
         | 
| 459 476 | 
             
                }
         | 
| 460 477 |  | 
| 478 | 
            +
             | 
| 461 479 | 
             
                /// @dev Registers the component represented by the provided address.
         | 
| 462 | 
            -
                 | 
| 463 | 
            -
             | 
| 464 | 
            -
                     | 
| 480 | 
            +
                /// The caller must ensure componentAddress is IInstanceLinkedComponent.
         | 
| 481 | 
            +
                function _verifyAndRegister(
         | 
| 482 | 
            +
                    IInstance instance,
         | 
| 483 | 
            +
                    address componentAddress,
         | 
| 484 | 
            +
                    NftId parentNftId,
         | 
| 465 485 | 
             
                    address token
         | 
| 466 486 | 
             
                )
         | 
| 467 487 | 
             
                    internal
         | 
| 468 488 | 
             
                    virtual
         | 
| 469 | 
            -
                    returns (
         | 
| 470 | 
            -
                        InstanceReader instanceReader, 
         | 
| 471 | 
            -
                        InstanceAdmin instanceAdmin, 
         | 
| 472 | 
            -
                        InstanceStore instanceStore, 
         | 
| 473 | 
            -
                        NftId parentNftId,
         | 
| 474 | 
            -
                        NftId componentNftId
         | 
| 475 | 
            -
                    )
         | 
| 489 | 
            +
                    returns (NftId componentNftId)
         | 
| 476 490 | 
             
                {
         | 
| 477 | 
            -
                    NftId instanceNftId;
         | 
| 478 | 
            -
                    IInstance instance;
         | 
| 479 | 
            -
                    IInstanceLinkedComponent component;
         | 
| 480 | 
            -
                    address initialOwner;
         | 
| 481 | 
            -
             | 
| 482 491 | 
             
                    (
         | 
| 483 | 
            -
                         | 
| 484 | 
            -
                         | 
| 485 | 
            -
                        parentNftId, 
         | 
| 486 | 
            -
                        component, 
         | 
| 487 | 
            -
                        initialOwner
         | 
| 492 | 
            +
                        IInstanceLinkedComponent component,
         | 
| 493 | 
            +
                        IRegistry.ObjectInfo memory objectInfo // initial component info
         | 
| 488 494 | 
             
                    ) = _getAndVerifyRegisterableComponent(
         | 
| 489 | 
            -
                        getRegistry(),
         | 
| 490 495 | 
             
                        componentAddress,
         | 
| 491 | 
            -
                         | 
| 492 | 
            -
             | 
| 493 | 
            -
                    if (! instance.isTokenRegistryDisabled()) {
         | 
| 494 | 
            -
                        // check if provided token is whitelisted and active
         | 
| 495 | 
            -
                        if (!ContractLib.isActiveToken(
         | 
| 496 | 
            -
                            getRegistry().getTokenRegistryAddress(), 
         | 
| 497 | 
            -
                            token, 
         | 
| 498 | 
            -
                            block.chainid, 
         | 
| 499 | 
            -
                            AccessManagerCloneable(authority()).getRelease())
         | 
| 500 | 
            -
                        ) {
         | 
| 501 | 
            -
                            revert ErrorComponentServiceTokenInvalid(token);
         | 
| 502 | 
            -
                        }
         | 
| 503 | 
            -
                    }
         | 
| 496 | 
            +
                        parentNftId);
         | 
| 504 497 |  | 
| 505 | 
            -
                     | 
| 506 | 
            -
                     | 
| 507 | 
            -
                    instanceAdmin = instance.getInstanceAdmin();
         | 
| 508 | 
            -
                    instanceStore = instance.getInstanceStore();
         | 
| 498 | 
            +
                    InstanceStore instanceStore = instance.getInstanceStore();
         | 
| 499 | 
            +
                    ObjectType componentType = objectInfo.objectType;
         | 
| 509 500 |  | 
| 510 | 
            -
                     | 
| 511 | 
            -
             | 
| 501 | 
            +
                    if(componentType == PRODUCT()) {
         | 
| 502 | 
            +
                        // register product with registry
         | 
| 512 503 | 
             
                        componentNftId = _registryService.registerProduct(
         | 
| 513 | 
            -
                            component,  | 
| 504 | 
            +
                            component, 
         | 
| 505 | 
            +
                            objectInfo.initialOwner).nftId;
         | 
| 506 | 
            +
             | 
| 507 | 
            +
                        // create product info in instance store
         | 
| 508 | 
            +
                        _createProduct(instance.getProductStore(), componentNftId, componentAddress);
         | 
| 514 509 | 
             
                    } else {
         | 
| 510 | 
            +
                        // register non product component with registry
         | 
| 515 511 | 
             
                        componentNftId = _registryService.registerProductLinkedComponent(
         | 
| 516 | 
            -
                            component,  | 
| 512 | 
            +
                            component, 
         | 
| 513 | 
            +
                            objectInfo.objectType, 
         | 
| 514 | 
            +
                            objectInfo.initialOwner).nftId;
         | 
| 515 | 
            +
             | 
| 516 | 
            +
                        InstanceReader instanceReader = instance.getInstanceReader();
         | 
| 517 | 
            +
             | 
| 518 | 
            +
                        // create non product component info in instance store
         | 
| 519 | 
            +
                        NftId productNftId = parentNftId;
         | 
| 520 | 
            +
                        IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
         | 
| 521 | 
            +
                        if(componentType == POOL()) {
         | 
| 522 | 
            +
                            _createPool(instanceStore, instance.getProductStore(), productNftId, componentNftId, componentAddress, productInfo);
         | 
| 523 | 
            +
                        } else if(componentType == DISTRIBUTION()) {
         | 
| 524 | 
            +
                            _createDistribution(instance.getProductStore(), productNftId, componentNftId, productInfo);
         | 
| 525 | 
            +
                        } else if(componentType == ORACLE()) {
         | 
| 526 | 
            +
                            _createOracle(instance.getProductStore(), productNftId, componentNftId, productInfo);
         | 
| 527 | 
            +
                        } else {
         | 
| 528 | 
            +
                            revert ErrorComponentServiceComponentTypeNotSupported(componentAddress, componentType);
         | 
| 529 | 
            +
                        }
         | 
| 530 | 
            +
             | 
| 531 | 
            +
                        // get product's token
         | 
| 532 | 
            +
                        token = address(instanceReader.getTokenHandler(productNftId).TOKEN());
         | 
| 517 533 | 
             
                    }
         | 
| 518 534 |  | 
| 535 | 
            +
                    _checkToken(instance, token);
         | 
| 536 | 
            +
             | 
| 537 | 
            +
                    InstanceAdmin instanceAdmin = instance.getInstanceAdmin();
         | 
| 538 | 
            +
                    
         | 
| 519 539 | 
             
                    // deploy and wire token handler
         | 
| 520 | 
            -
                     | 
| 521 | 
            -
             | 
| 522 | 
            -
                         | 
| 523 | 
            -
             | 
| 524 | 
            -
             | 
| 525 | 
            -
             | 
| 526 | 
            -
             | 
| 527 | 
            -
             | 
| 528 | 
            -
             | 
| 529 | 
            -
                         | 
| 530 | 
            -
             | 
| 531 | 
            -
                            componentInfo);
         | 
| 532 | 
            -
                    }
         | 
| 540 | 
            +
                    IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
         | 
| 541 | 
            +
                    componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
         | 
| 542 | 
            +
                        address(getRegistry()),
         | 
| 543 | 
            +
                        address(component), // initially, component is its own wallet
         | 
| 544 | 
            +
                        token, 
         | 
| 545 | 
            +
                        instanceAdmin.authority());
         | 
| 546 | 
            +
                    
         | 
| 547 | 
            +
                    // register component with instance
         | 
| 548 | 
            +
                    instanceStore.createComponent(
         | 
| 549 | 
            +
                        componentNftId, 
         | 
| 550 | 
            +
                        componentInfo);
         | 
| 533 551 |  | 
| 534 552 | 
             
                    // link component contract to nft id
         | 
| 535 553 | 
             
                    component.linkToRegisteredNftId();
         | 
| 536 554 |  | 
| 537 555 | 
             
                    // authorize
         | 
| 538 | 
            -
                    instanceAdmin.initializeComponentAuthorization(componentAddress,  | 
| 556 | 
            +
                    instanceAdmin.initializeComponentAuthorization(componentAddress, componentType);
         | 
| 539 557 |  | 
| 540 | 
            -
                    emit LogComponentServiceRegistered( | 
| 558 | 
            +
                    emit LogComponentServiceRegistered(
         | 
| 559 | 
            +
                        instance.getNftId(),
         | 
| 560 | 
            +
                        componentNftId, 
         | 
| 561 | 
            +
                        componentType, 
         | 
| 562 | 
            +
                        address(component), 
         | 
| 563 | 
            +
                        token, 
         | 
| 564 | 
            +
                        objectInfo.initialOwner);
         | 
| 565 | 
            +
                }
         | 
| 566 | 
            +
             | 
| 567 | 
            +
             | 
| 568 | 
            +
                function _checkToken(IInstance instance, address token) 
         | 
| 569 | 
            +
                    internal
         | 
| 570 | 
            +
                    view
         | 
| 571 | 
            +
                {
         | 
| 572 | 
            +
                    if (! instance.isTokenRegistryDisabled()) {
         | 
| 573 | 
            +
                        // check if provided token is whitelisted and active
         | 
| 574 | 
            +
                        if (!ContractLib.isActiveToken(
         | 
| 575 | 
            +
                            getRegistry().getTokenRegistryAddress(), 
         | 
| 576 | 
            +
                            ChainIdLib.current(), 
         | 
| 577 | 
            +
                            token, 
         | 
| 578 | 
            +
                            AccessManagerCloneable(authority()).getRelease())
         | 
| 579 | 
            +
                        ) {
         | 
| 580 | 
            +
                            revert ErrorComponentServiceTokenInvalid(token);
         | 
| 581 | 
            +
                        }
         | 
| 582 | 
            +
                    }
         | 
| 541 583 | 
             
                }
         | 
| 542 584 |  | 
| 543 585 |  | 
| @@ -574,98 +616,44 @@ contract ComponentService is | |
| 574 616 |  | 
| 575 617 | 
             
                /// @dev Based on the provided component address required type the component 
         | 
| 576 618 | 
             
                /// and related instance contract this function reverts iff:
         | 
| 577 | 
            -
                /// - the  | 
| 578 | 
            -
                /// - the component  | 
| 579 | 
            -
                /// - the component type does not match with the required type
         | 
| 619 | 
            +
                /// - the component parent does not match with the required parent
         | 
| 620 | 
            +
                /// - the component release does not match with the service release
         | 
| 580 621 | 
             
                /// - the component has already been registered
         | 
| 581 622 | 
             
                function _getAndVerifyRegisterableComponent(
         | 
| 582 | 
            -
                    IRegistry registry,
         | 
| 583 623 | 
             
                    address componentAddress,
         | 
| 584 | 
            -
                     | 
| 624 | 
            +
                    NftId requiredParent
         | 
| 585 625 | 
             
                )
         | 
| 586 626 | 
             
                    internal
         | 
| 587 627 | 
             
                    view
         | 
| 588 628 | 
             
                    returns (
         | 
| 589 | 
            -
                        NftId instanceNftId,
         | 
| 590 | 
            -
                        IInstance instance,
         | 
| 591 | 
            -
                        NftId parentNftId,
         | 
| 592 629 | 
             
                        IInstanceLinkedComponent component,
         | 
| 593 | 
            -
                         | 
| 630 | 
            +
                        IRegistry.ObjectInfo memory info
         | 
| 594 631 | 
             
                    )
         | 
| 595 632 | 
             
                {
         | 
| 596 | 
            -
                    // check sender (instance or product) is registered
         | 
| 597 | 
            -
                    IRegistry.ObjectInfo memory senderInfo = registry.getObjectInfo(msg.sender);
         | 
| 598 | 
            -
                    if (senderInfo.nftId.eqz()) {
         | 
| 599 | 
            -
                        revert ErrorComponentServiceSenderNotRegistered(msg.sender);
         | 
| 600 | 
            -
                    }
         | 
| 601 | 
            -
             | 
| 602 | 
            -
                    // the sender is the parent of the component to be registered
         | 
| 603 | 
            -
                    // an instance caller wanting to register a product - or -
         | 
| 604 | 
            -
                    // a product caller wantint go register a distribution, oracle or pool
         | 
| 605 | 
            -
                    parentNftId = senderInfo.nftId;
         | 
| 606 | 
            -
             | 
| 607 | 
            -
                    // check component is of required type
         | 
| 608 633 | 
             
                    component = IInstanceLinkedComponent(componentAddress);
         | 
| 609 | 
            -
                     | 
| 610 | 
            -
                    if(info.objectType != requiredType) {
         | 
| 611 | 
            -
                        revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
         | 
| 612 | 
            -
                    }
         | 
| 634 | 
            +
                    info = component.getInitialInfo();
         | 
| 613 635 |  | 
| 614 | 
            -
                    // check component  | 
| 615 | 
            -
                    if | 
| 616 | 
            -
                        revert  | 
| 636 | 
            +
                    // check component parent
         | 
| 637 | 
            +
                    if(info.parentNftId != requiredParent) {
         | 
| 638 | 
            +
                        revert ErrorComponentServiceComponentParentInvalid(componentAddress, requiredParent, info.parentNftId);
         | 
| 617 639 | 
             
                    }
         | 
| 618 640 |  | 
| 619 | 
            -
                    // component release  | 
| 620 | 
            -
                     | 
| 621 | 
            -
             | 
| 622 | 
            -
                        revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), getRelease());
         | 
| 623 | 
            -
                    // component release matches parent release
         | 
| 624 | 
            -
                    } else if (component.getRelease() != IRegisterable(parentAddress).getRelease()){
         | 
| 625 | 
            -
                        revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), IRegisterable(parentAddress).getRelease());
         | 
| 641 | 
            +
                    // check component release (must match with service release)
         | 
| 642 | 
            +
                    if(component.getRelease() != getRelease()) {
         | 
| 643 | 
            +
                        revert ErrorComponentServiceComponentReleaseMismatch(componentAddress, getRelease(), component.getRelease());
         | 
| 626 644 | 
             
                    }
         | 
| 627 645 |  | 
| 628 | 
            -
                    // check component  | 
| 629 | 
            -
                     | 
| 630 | 
            -
             | 
| 631 | 
            -
                        revert ErrorComponentServiceSenderNotComponentParent(senderInfo.nftId, info.parentNftId);
         | 
| 632 | 
            -
                    }
         | 
| 633 | 
            -
             | 
| 634 | 
            -
                    // verify parent is registered instance
         | 
| 635 | 
            -
                    if (requiredType == PRODUCT()) {
         | 
| 636 | 
            -
                        if (senderInfo.objectType != INSTANCE()) {
         | 
| 637 | 
            -
                            revert ErrorComponentServiceParentNotInstance(senderInfo.nftId, senderInfo.objectType);
         | 
| 638 | 
            -
                        }
         | 
| 639 | 
            -
             | 
| 640 | 
            -
                        instanceNftId = senderInfo.nftId;
         | 
| 641 | 
            -
                    // verify parent is registered product
         | 
| 642 | 
            -
                    } else {
         | 
| 643 | 
            -
                        if (senderInfo.objectType != PRODUCT()) {
         | 
| 644 | 
            -
                            revert ErrorComponentServiceParentNotProduct(senderInfo.nftId, senderInfo.objectType);
         | 
| 645 | 
            -
                        }
         | 
| 646 | 
            -
             | 
| 647 | 
            -
                        instanceNftId = senderInfo.parentNftId;
         | 
| 646 | 
            +
                    // check component has not already been registered
         | 
| 647 | 
            +
                    if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
         | 
| 648 | 
            +
                        revert ErrorComponentServiceComponentAlreadyRegistered(componentAddress);
         | 
| 648 649 | 
             
                    }
         | 
| 649 | 
            -
             | 
| 650 | 
            -
                    // get initial owner and instance
         | 
| 651 | 
            -
                    initialOwner = info.initialOwner;
         | 
| 652 | 
            -
                    instance = IInstance(registry.getObjectAddress(instanceNftId));
         | 
| 653 650 | 
             
                }
         | 
| 654 651 |  | 
| 652 | 
            +
             | 
| 655 653 | 
             
                function _setLocked(InstanceAdmin instanceAdmin, address componentAddress, bool locked) internal {
         | 
| 656 654 | 
             
                    instanceAdmin.setTargetLocked(componentAddress, locked);
         | 
| 657 655 | 
             
                }
         | 
| 658 656 |  | 
| 659 | 
            -
                function _getAndVerifyActiveComponent(ObjectType expectedType) 
         | 
| 660 | 
            -
                    internal 
         | 
| 661 | 
            -
                    view 
         | 
| 662 | 
            -
                    returns (
         | 
| 663 | 
            -
                        NftId componentNftId,
         | 
| 664 | 
            -
                        IInstance instance
         | 
| 665 | 
            -
                    )
         | 
| 666 | 
            -
                {
         | 
| 667 | 
            -
                    return _getAndVerifyComponent(expectedType, true); // only active
         | 
| 668 | 
            -
                }
         | 
| 669 657 |  | 
| 670 658 | 
             
                function _getAndVerifyComponent(ObjectType expectedType, bool isActive) 
         | 
| 671 659 | 
             
                    internal 
         | 
| @@ -696,13 +684,8 @@ contract ComponentService is | |
| 696 684 | 
             
                    instance = IInstance(instanceAddress);
         | 
| 697 685 | 
             
                }
         | 
| 698 686 |  | 
| 687 | 
            +
             | 
| 699 688 | 
             
                function _getDomain() internal pure virtual override returns(ObjectType) {
         | 
| 700 689 | 
             
                    return COMPONENT();
         | 
| 701 690 | 
             
                }
         | 
| 702 | 
            -
             | 
| 703 | 
            -
                function _checkSupportsInterface(address component) internal view {
         | 
| 704 | 
            -
                    if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
         | 
| 705 | 
            -
                        revert ErrorComponentServiceNotInstanceLinkedComponent(component);
         | 
| 706 | 
            -
                    }
         | 
| 707 | 
            -
                }
         | 
| 708 691 | 
             
            }
         |