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