@etherisc/gif-next 0.0.2-f18fb8b-243 → 0.0.2-f1e0c66-773
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 +14 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +2 -2
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
- 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/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +69 -26
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +43 -0
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +237 -74
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +66 -38
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +43 -0
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +102 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +6 -6
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +5 -5
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +9 -9
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +73 -73
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +31 -31
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +54 -59
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +15 -15
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +6 -6
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +66 -76
- 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 +2 -2
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ObjectManager.sol/ObjectManager.json → ObjectSet.sol/ObjectSet.json} +6 -6
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +46 -16
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
- 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 +30 -0
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +30 -0
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +2 -2
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +2 -2
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +43 -0
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +221 -55
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +55 -23
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +102 -0
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +43 -0
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +43 -0
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +2 -2
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +2 -2
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +2 -2
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +2 -2
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +19 -0
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +2 -2
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +2 -2
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +13 -0
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +19 -0
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +64 -51
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +26 -26
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +7 -2
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +2 -2
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +19 -0
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +2 -2
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +2 -2
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +50 -2
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +95 -23
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +88 -88
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +2 -2
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +2 -2
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1159 -0
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +271 -62
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +60 -32
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +19 -0
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/{ERC165.sol/ERC165.json → InitializableERC165.sol/InitializableERC165.json} +4 -4
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +19 -0
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
- package/artifacts/contracts/shared/{NftIdSetManager.sol/NftIdSetManager.json → NftIdSet.sol/NftIdSet.json} +4 -4
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +12 -2
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +36 -36
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +19 -19
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +2 -2
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +2 -2
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +2 -2
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +20 -15
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +7 -2
- 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 +37 -8
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/ProxyManager.sol/ProxyManager.json +3 -3
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
- package/contracts/distribution/BasicDistribution.sol +4 -15
- package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
- package/contracts/distribution/Distribution.sol +22 -10
- package/contracts/distribution/DistributionService.sol +61 -26
- package/contracts/distribution/DistributionServiceManager.sol +2 -5
- package/contracts/distribution/IDistributionComponent.sol +8 -4
- package/contracts/distribution/IDistributionService.sol +12 -0
- package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
- package/contracts/instance/IInstance.sol +5 -5
- package/contracts/instance/IInstanceService.sol +5 -5
- package/contracts/instance/Instance.sol +4 -4
- package/contracts/instance/InstanceAdmin.sol +2 -2
- package/contracts/instance/InstanceAuthorizationV3.sol +13 -11
- package/contracts/instance/InstanceService.sol +10 -10
- package/contracts/instance/InstanceServiceManager.sol +2 -6
- package/contracts/instance/InstanceStore.sol +2 -1
- package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +5 -5
- package/contracts/instance/module/IComponents.sol +0 -1
- package/contracts/instance/module/IDistribution.sol +0 -1
- package/contracts/oracle/IOracleComponent.sol +2 -1
- package/contracts/oracle/Oracle.sol +15 -6
- package/contracts/oracle/OracleServiceManager.sol +2 -5
- package/contracts/pool/BasicPoolAuthorization.sol +6 -0
- package/contracts/pool/BundleService.sol +72 -27
- package/contracts/pool/BundleServiceManager.sol +2 -5
- package/contracts/pool/IBundleService.sol +14 -0
- package/contracts/pool/IPoolComponent.sol +6 -0
- package/contracts/pool/Pool.sol +18 -1
- package/contracts/pool/PoolService.sol +11 -29
- package/contracts/pool/PoolServiceManager.sol +2 -5
- package/contracts/product/ApplicationService.sol +12 -36
- package/contracts/product/ApplicationServiceManager.sol +2 -2
- package/contracts/product/BasicProduct.sol +3 -33
- package/contracts/product/BasicProductAuthorization.sol +3 -0
- package/contracts/product/ClaimService.sol +7 -32
- package/contracts/product/ClaimServiceManager.sol +2 -2
- package/contracts/product/IPolicyService.sol +2 -0
- package/contracts/product/IProductComponent.sol +1 -0
- package/contracts/product/PolicyService.sol +28 -4
- package/contracts/product/PolicyServiceManager.sol +2 -5
- package/contracts/product/PricingServiceManager.sol +2 -5
- package/contracts/product/Product.sol +10 -1
- package/contracts/product/ProductService.sol +7 -32
- package/contracts/product/ProductServiceManager.sol +2 -5
- package/contracts/registry/IRegistry.sol +26 -13
- package/contracts/registry/IRegistryService.sol +6 -6
- package/contracts/registry/Registry.sol +80 -82
- package/contracts/registry/RegistryAdmin.sol +23 -23
- package/contracts/registry/RegistryService.sol +4 -18
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/{ReleaseManager.sol → ReleaseRegistry.sol} +48 -50
- package/contracts/registry/ServiceAuthorizationV3.sol +5 -5
- package/contracts/registry/TokenRegistry.sol +2 -2
- package/contracts/shared/Component.sol +13 -14
- package/contracts/shared/ComponentService.sol +82 -12
- package/contracts/shared/ComponentServiceManager.sol +2 -2
- package/contracts/shared/IComponentService.sol +15 -9
- package/contracts/shared/IInstanceLinkedComponent.sol +6 -0
- package/contracts/shared/IService.sol +1 -1
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
- package/contracts/shared/InstanceLinkedComponent.sol +21 -0
- package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
- package/contracts/shared/NftOwnable.sol +2 -2
- package/contracts/shared/PolicyHolder.sol +2 -5
- package/contracts/shared/Service.sol +3 -4
- package/contracts/staking/IStaking.sol +1 -2
- package/contracts/staking/IStakingService.sol +12 -5
- package/contracts/staking/Staking.sol +20 -17
- package/contracts/staking/StakingManager.sol +2 -6
- package/contracts/staking/StakingReader.sol +12 -16
- package/contracts/staking/StakingServiceManager.sol +2 -2
- package/contracts/staking/StakingStore.sol +12 -22
- package/contracts/type/Amount.sol +12 -5
- package/contracts/type/ObjectType.sol +3 -7
- package/contracts/type/Referral.sol +1 -0
- package/contracts/type/UFixed.sol +29 -10
- package/contracts/type/Version.sol +3 -1
- package/contracts/{shared → upgradeability}/ProxyManager.sol +3 -4
- package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
- package/package.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -703
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1159
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
- package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
- /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
- /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
| @@ -32,9 +32,7 @@ import {Registry} from "./Registry.sol"; | |
| 32 32 | 
             
            import {TokenRegistry} from "./TokenRegistry.sol";
         | 
| 33 33 | 
             
            import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
         | 
| 34 34 |  | 
| 35 | 
            -
             | 
| 36 | 
            -
            // everywhere else *Manager points to an upgradeable contract
         | 
| 37 | 
            -
            contract ReleaseManager is 
         | 
| 35 | 
            +
            contract ReleaseRegistry is 
         | 
| 38 36 | 
             
                AccessManaged,
         | 
| 39 37 | 
             
                ReleaseLifecycle, 
         | 
| 40 38 | 
             
                IRegistryLinked
         | 
| @@ -49,45 +47,45 @@ contract ReleaseManager is | |
| 49 47 | 
             
                event LogReleaseEnabled(VersionPart version);
         | 
| 50 48 |  | 
| 51 49 | 
             
                // constructor
         | 
| 52 | 
            -
                error  | 
| 50 | 
            +
                error ErrorReleaseRegistryNotRegistry(Registry registry);
         | 
| 53 51 |  | 
| 54 52 | 
             
                // createNextRelease
         | 
| 55 | 
            -
                error  | 
| 53 | 
            +
                error ErrorReleaseRegistryReleaseCreationDisallowed(VersionPart version, StateId currentStateId);
         | 
| 56 54 |  | 
| 57 55 | 
             
                // prepareRelease
         | 
| 58 | 
            -
                error  | 
| 59 | 
            -
                error  | 
| 60 | 
            -
                error  | 
| 61 | 
            -
                error  | 
| 56 | 
            +
                error ErrorReleaseRegistryReleasePreparationDisallowed(VersionPart version, StateId currentStateId);
         | 
| 57 | 
            +
                error ErrorReleaseRegistryReleaseAlreadyPrepared(VersionPart version, StateId currentStateId);
         | 
| 58 | 
            +
                error ErrorReleaseRegistryVersionMismatch(VersionPart expected, VersionPart actual);
         | 
| 59 | 
            +
                error ErrorReleaseRegistryNoDomains(VersionPart version);
         | 
| 62 60 |  | 
| 63 61 | 
             
                // registerService
         | 
| 64 | 
            -
                error  | 
| 65 | 
            -
                error  | 
| 66 | 
            -
                error  | 
| 67 | 
            -
                error  | 
| 68 | 
            -
                error  | 
| 62 | 
            +
                error ErrorReleaseRegistryNoServiceRegistrationExpected();
         | 
| 63 | 
            +
                error ErrorReleaseRegistryServiceRegistrationDisallowed(StateId currentStateId);
         | 
| 64 | 
            +
                error ErrorReleaseRegistryServiceDomainMismatch(ObjectType expectedDomain, ObjectType actualDomain);
         | 
| 65 | 
            +
                error ErrorReleaseRegistryNotService(address notService);
         | 
| 66 | 
            +
                error ErrorReleaseRegistryServiceAddressMismatch(address expected, address actual);
         | 
| 69 67 |  | 
| 70 68 | 
             
                // activateNextRelease
         | 
| 71 | 
            -
                error  | 
| 72 | 
            -
                error  | 
| 73 | 
            -
                error  | 
| 74 | 
            -
                error  | 
| 69 | 
            +
                error ErrorReleaseRegistryReleaseActivationDisallowed(VersionPart releaseVersion, StateId currentStateId);
         | 
| 70 | 
            +
                error ErrorReleaseRegistryReleaseNotCreated(VersionPart releaseVersion);
         | 
| 71 | 
            +
                error ErrorReleaseRegistryReleaseRegistrationNotFinished(VersionPart releaseVersion, uint awaitingRegistration);
         | 
| 72 | 
            +
                error ErrorReleaseRegistryReleaseAlreadyActivated(VersionPart releaseVersion);
         | 
| 75 73 |  | 
| 76 74 | 
             
                // disableRelease
         | 
| 77 | 
            -
                error  | 
| 78 | 
            -
                error  | 
| 75 | 
            +
                error ErrorReleaseRegistryReleaseNotActivated(VersionPart releaseVersion);
         | 
| 76 | 
            +
                error ErrorReleaseRegistryReleaseAlreadyDisabled(VersionPart releaseVersion);
         | 
| 79 77 |  | 
| 80 78 | 
             
                // _verifyService
         | 
| 81 | 
            -
                error  | 
| 82 | 
            -
                error  | 
| 79 | 
            +
                error ErrorReleaseRegistryServiceReleaseAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
         | 
| 80 | 
            +
                error ErrorReleaseRegistryServiceReleaseVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
         | 
| 83 81 |  | 
| 84 82 | 
             
                // _verifyServiceInfo
         | 
| 85 | 
            -
                error  | 
| 86 | 
            -
                error  | 
| 87 | 
            -
                error  | 
| 88 | 
            -
                error  | 
| 89 | 
            -
                error  | 
| 90 | 
            -
                error  | 
| 83 | 
            +
                error ErrorReleaseRegistryServiceInfoAddressInvalid(IService service, address expected);
         | 
| 84 | 
            +
                error ErrorReleaseRegistryServiceInfoInterceptorInvalid(IService service, bool isInterceptor);
         | 
| 85 | 
            +
                error ErrorReleaseRegistryServiceInfoTypeInvalid(IService service, ObjectType expected, ObjectType found);
         | 
| 86 | 
            +
                error ErrorReleaseRegistryServiceInfoOwnerInvalid(IService service, address expected, address found);
         | 
| 87 | 
            +
                error ErrorReleaseRegistryServiceSelfRegistration(IService service);
         | 
| 88 | 
            +
                error ErrorReleaseRegistryServiceOwnerRegistered(IService service, address owner);
         | 
| 91 89 |  | 
| 92 90 | 
             
                Seconds public constant MIN_DISABLE_DELAY = Seconds.wrap(60 * 24 * 365); // 1 year
         | 
| 93 91 |  | 
| @@ -115,7 +113,7 @@ contract ReleaseManager is | |
| 115 113 | 
             
                {
         | 
| 116 114 | 
             
                    // TODO move this part to RegistryLinked constructor
         | 
| 117 115 | 
             
                    if(!_isRegistry(address(registry))) {
         | 
| 118 | 
            -
                        revert  | 
| 116 | 
            +
                        revert ErrorReleaseRegistryNotRegistry(registry);
         | 
| 119 117 | 
             
                    }
         | 
| 120 118 |  | 
| 121 119 | 
             
                    setAuthority(registry.getAuthority());
         | 
| @@ -167,7 +165,7 @@ contract ReleaseManager is | |
| 167 165 |  | 
| 168 166 | 
             
                    // verify release in state SCHEDULED
         | 
| 169 167 | 
             
                    if (!isValidTransition(RELEASE(), _state[version], DEPLOYING())) {
         | 
| 170 | 
            -
                        revert  | 
| 168 | 
            +
                        revert ErrorReleaseRegistryReleasePreparationDisallowed(version, _state[version]);
         | 
| 171 169 | 
             
                    }
         | 
| 172 170 |  | 
| 173 171 | 
             
                    _state[version] = DEPLOYING();
         | 
| @@ -175,19 +173,19 @@ contract ReleaseManager is | |
| 175 173 | 
             
                    // verify authorizaion contract release matches with expected version
         | 
| 176 174 | 
             
                    VersionPart releaseVersion = serviceAuthorization.getRelease();
         | 
| 177 175 | 
             
                    if (releaseVersion != version) {
         | 
| 178 | 
            -
                        revert  | 
| 176 | 
            +
                        revert ErrorReleaseRegistryVersionMismatch(version, releaseVersion);
         | 
| 179 177 | 
             
                    }
         | 
| 180 178 |  | 
| 181 179 |  | 
| 182 180 | 
             
                    // sanity check to ensure service domain list is not empty
         | 
| 183 181 | 
             
                    uint256 serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
         | 
| 184 182 | 
             
                    if (serviceDomainsCount == 0) {
         | 
| 185 | 
            -
                        revert  | 
| 183 | 
            +
                        revert ErrorReleaseRegistryNoDomains(version);
         | 
| 186 184 | 
             
                    }
         | 
| 187 185 |  | 
| 188 186 | 
             
                    // verify prepareNextRelease is only called once per release
         | 
| 189 187 | 
             
                    if(_servicesToRegister > 0) {
         | 
| 190 | 
            -
                        revert  | 
| 188 | 
            +
                        revert ErrorReleaseRegistryReleaseAlreadyPrepared(version, _state[version]);
         | 
| 191 189 | 
             
                    }
         | 
| 192 190 |  | 
| 193 191 | 
             
                    _servicesToRegister = serviceDomainsCount;
         | 
| @@ -208,14 +206,14 @@ contract ReleaseManager is | |
| 208 206 | 
             
                    // verify release in state DEPLOYING
         | 
| 209 207 | 
             
                    if (!isValidTransition(RELEASE(), state, DEPLOYING())) {
         | 
| 210 208 | 
             
                        // TOOD name must represent failed state transition
         | 
| 211 | 
            -
                        revert  | 
| 209 | 
            +
                        revert ErrorReleaseRegistryServiceRegistrationDisallowed(state);
         | 
| 212 210 | 
             
                    }
         | 
| 213 211 |  | 
| 214 212 | 
             
                    _state[releaseVersion] = DEPLOYING();
         | 
| 215 213 |  | 
| 216 214 | 
             
                    // not all services are registered
         | 
| 217 215 | 
             
                    if (_servicesToRegister == _registeredServices) {
         | 
| 218 | 
            -
                        revert  | 
| 216 | 
            +
                        revert ErrorReleaseRegistryNoServiceRegistrationExpected();
         | 
| 219 217 | 
             
                    }
         | 
| 220 218 |  | 
| 221 219 | 
             
                    // service can work with release manager
         | 
| @@ -228,7 +226,7 @@ contract ReleaseManager is | |
| 228 226 | 
             
                    // service domain matches defined in release config
         | 
| 229 227 | 
             
                    ObjectType expectedDomain = _serviceAuthorization[releaseVersion].getServiceDomain(_registeredServices);
         | 
| 230 228 | 
             
                    if (serviceDomain != expectedDomain) {
         | 
| 231 | 
            -
                        revert  | 
| 229 | 
            +
                        revert ErrorReleaseRegistryServiceDomainMismatch(expectedDomain, serviceDomain);
         | 
| 232 230 | 
             
                    }
         | 
| 233 231 |  | 
| 234 232 | 
             
                    // register service with registry
         | 
| @@ -260,18 +258,18 @@ contract ReleaseManager is | |
| 260 258 |  | 
| 261 259 | 
             
                    // verify release in state DEPLOYING
         | 
| 262 260 | 
             
                    if (!isValidTransition(RELEASE(), state, newState)) {
         | 
| 263 | 
            -
                        revert  | 
| 261 | 
            +
                        revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
         | 
| 264 262 | 
             
                    }
         | 
| 265 263 |  | 
| 266 264 | 
             
                    // release fully deployed
         | 
| 267 265 | 
             
                    if(_registeredServices < _servicesToRegister) {
         | 
| 268 | 
            -
                        revert  | 
| 266 | 
            +
                        revert ErrorReleaseRegistryReleaseRegistrationNotFinished(version, _servicesToRegister - _registeredServices);
         | 
| 269 267 | 
             
                    }
         | 
| 270 268 |  | 
| 271 269 | 
             
                    // release exists, registry service MUST exist
         | 
| 272 270 | 
             
                    address service = _registry.getServiceAddress(REGISTRY(), version);
         | 
| 273 271 | 
             
                    if(service == address(0)) {
         | 
| 274 | 
            -
                        revert  | 
| 272 | 
            +
                        revert ErrorReleaseRegistryReleaseNotCreated(version);
         | 
| 275 273 | 
             
                    }
         | 
| 276 274 |  | 
| 277 275 | 
             
                    _latest = version;
         | 
| @@ -293,7 +291,7 @@ contract ReleaseManager is | |
| 293 291 |  | 
| 294 292 | 
             
                    // verify release in state ACTIVE
         | 
| 295 293 | 
             
                    if (!isValidTransition(RELEASE(), state, newState)) {
         | 
| 296 | 
            -
                        revert  | 
| 294 | 
            +
                        revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
         | 
| 297 295 | 
             
                    }
         | 
| 298 296 |  | 
| 299 297 | 
             
                    // TODO come up with a substitute
         | 
| @@ -316,7 +314,7 @@ contract ReleaseManager is | |
| 316 314 |  | 
| 317 315 | 
             
                    // verify release in state PAUSED
         | 
| 318 316 | 
             
                    if (!isValidTransition(RELEASE(), state, newState)) {
         | 
| 319 | 
            -
                        revert  | 
| 317 | 
            +
                        revert ErrorReleaseRegistryReleaseActivationDisallowed(version, state);
         | 
| 320 318 | 
             
                    }
         | 
| 321 319 |  | 
| 322 320 | 
             
                    // TODO come up with a substitute
         | 
| @@ -401,7 +399,7 @@ contract ReleaseManager is | |
| 401 399 | 
             
                    )
         | 
| 402 400 | 
             
                {
         | 
| 403 401 | 
             
                    if(!service.supportsInterface(type(IService).interfaceId)) {
         | 
| 404 | 
            -
                        revert  | 
| 402 | 
            +
                        revert ErrorReleaseRegistryNotService(address(service));
         | 
| 405 403 | 
             
                    }
         | 
| 406 404 |  | 
| 407 405 | 
             
                    address owner = msg.sender;
         | 
| @@ -417,14 +415,14 @@ contract ReleaseManager is | |
| 417 415 |  | 
| 418 416 | 
             
                    // IMPORTANT: can not guarantee service access is actually controlled by authority
         | 
| 419 417 | 
             
                    if(serviceAuthority != expectedAuthority) {
         | 
| 420 | 
            -
                        revert  | 
| 418 | 
            +
                        revert ErrorReleaseRegistryServiceReleaseAuthorityMismatch(
         | 
| 421 419 | 
             
                            service,
         | 
| 422 420 | 
             
                            serviceAuthority,
         | 
| 423 421 | 
             
                            expectedAuthority);
         | 
| 424 422 | 
             
                    }
         | 
| 425 423 |  | 
| 426 424 | 
             
                    if(serviceVersion != releaseVersion) {
         | 
| 427 | 
            -
                        revert  | 
| 425 | 
            +
                        revert ErrorReleaseRegistryServiceReleaseVersionMismatch(
         | 
| 428 426 | 
             
                            service,
         | 
| 429 427 | 
             
                            serviceVersion,
         | 
| 430 428 | 
             
                            releaseVersion);            
         | 
| @@ -441,29 +439,29 @@ contract ReleaseManager is | |
| 441 439 | 
             
                    view
         | 
| 442 440 | 
             
                {
         | 
| 443 441 | 
             
                    if(info.objectAddress != address(service)) {
         | 
| 444 | 
            -
                        revert  | 
| 442 | 
            +
                        revert ErrorReleaseRegistryServiceInfoAddressInvalid(service, address(service));
         | 
| 445 443 | 
             
                    }
         | 
| 446 444 |  | 
| 447 445 | 
             
                    if(info.isInterceptor != false) { // service is never interceptor
         | 
| 448 | 
            -
                        revert  | 
| 446 | 
            +
                        revert ErrorReleaseRegistryServiceInfoInterceptorInvalid(service, info.isInterceptor);
         | 
| 449 447 | 
             
                    }
         | 
| 450 448 |  | 
| 451 449 | 
             
                    if(info.objectType != SERVICE()) {
         | 
| 452 | 
            -
                        revert  | 
| 450 | 
            +
                        revert ErrorReleaseRegistryServiceInfoTypeInvalid(service, SERVICE(), info.objectType);
         | 
| 453 451 | 
             
                    }
         | 
| 454 452 |  | 
| 455 453 | 
             
                    address owner = info.initialOwner;
         | 
| 456 454 |  | 
| 457 455 | 
             
                    if(owner != expectedOwner) { // registerable owner protection
         | 
| 458 | 
            -
                        revert  | 
| 456 | 
            +
                        revert ErrorReleaseRegistryServiceInfoOwnerInvalid(service, expectedOwner, owner); 
         | 
| 459 457 | 
             
                    }
         | 
| 460 458 |  | 
| 461 459 | 
             
                    if(owner == address(service)) {
         | 
| 462 | 
            -
                        revert  | 
| 460 | 
            +
                        revert ErrorReleaseRegistryServiceSelfRegistration(service);
         | 
| 463 461 | 
             
                    }
         | 
| 464 462 |  | 
| 465 463 | 
             
                    if(_registry.isRegistered(owner)) { 
         | 
| 466 | 
            -
                        revert  | 
| 464 | 
            +
                        revert ErrorReleaseRegistryServiceOwnerRegistered(service, owner);
         | 
| 467 465 | 
             
                    }
         | 
| 468 466 | 
             
                }
         | 
| 469 467 |  | 
| @@ -69,14 +69,14 @@ contract ServiceAuthorizationV3 | |
| 69 69 | 
             
                      functions = _authorizeForService(REGISTRY(), APPLICATION());
         | 
| 70 70 | 
             
                      _authorize(functions, IRegistryService.registerPolicy.selector, "registerPolicy");
         | 
| 71 71 |  | 
| 72 | 
            -
                      functions = _authorizeForService(REGISTRY(), POOL());
         | 
| 73 | 
            -
                      _authorize(functions, IRegistryService.registerPool.selector, "registerPool");
         | 
| 72 | 
            +
                      // functions = _authorizeForService(REGISTRY(), POOL());
         | 
| 73 | 
            +
                      // _authorize(functions, IRegistryService.registerPool.selector, "registerPool");
         | 
| 74 74 |  | 
| 75 75 | 
             
                      functions = _authorizeForService(REGISTRY(), BUNDLE());
         | 
| 76 76 | 
             
                      _authorize(functions, IRegistryService.registerBundle.selector, "registerBundle");
         | 
| 77 77 |  | 
| 78 78 | 
             
                      functions = _authorizeForService(REGISTRY(), DISTRIBUTION());
         | 
| 79 | 
            -
                      _authorize(functions, IRegistryService.registerDistribution.selector, "registerDistribution");
         | 
| 79 | 
            +
                      // _authorize(functions, IRegistryService.registerDistribution.selector, "registerDistribution");
         | 
| 80 80 | 
             
                      _authorize(functions, IRegistryService.registerDistributor.selector, "registerDistributor");
         | 
| 81 81 |  | 
| 82 82 | 
             
                      functions = _authorizeForService(REGISTRY(), COMPONENT());
         | 
| @@ -88,8 +88,8 @@ contract ServiceAuthorizationV3 | |
| 88 88 | 
             
                      functions = _authorizeForService(REGISTRY(), STAKING());
         | 
| 89 89 | 
             
                      _authorize(functions, IRegistryService.registerStake.selector, "registerStake");
         | 
| 90 90 |  | 
| 91 | 
            -
                      functions = _authorizeForService(REGISTRY(), PRODUCT());
         | 
| 92 | 
            -
                      _authorize(functions, IRegistryService.registerProduct.selector, "registerProduct");
         | 
| 91 | 
            +
                      // functions = _authorizeForService(REGISTRY(), PRODUCT());
         | 
| 92 | 
            +
                      // _authorize(functions, IRegistryService.registerProduct.selector, "registerProduct");
         | 
| 93 93 | 
             
                 }
         | 
| 94 94 |  | 
| 95 95 |  | 
| @@ -12,7 +12,7 @@ import {IRegisterable} from "../shared/IRegisterable.sol"; | |
| 12 12 |  | 
| 13 13 | 
             
            import {IRegistry} from "./IRegistry.sol";
         | 
| 14 14 | 
             
            import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
         | 
| 15 | 
            -
            import { | 
| 15 | 
            +
            import {ReleaseRegistry} from "./ReleaseRegistry.sol";
         | 
| 16 16 | 
             
            import {RegistryAdmin} from "./RegistryAdmin.sol";
         | 
| 17 17 |  | 
| 18 18 |  | 
| @@ -49,7 +49,7 @@ contract TokenRegistry is | |
| 49 49 | 
             
                TokenInfo [] internal _token;
         | 
| 50 50 |  | 
| 51 51 | 
             
                IRegistry internal _registry;
         | 
| 52 | 
            -
                 | 
| 52 | 
            +
                ReleaseRegistry internal _releaseRegistry;
         | 
| 53 53 | 
             
                IERC20Metadata internal _dipToken;
         | 
| 54 54 |  | 
| 55 55 | 
             
                /// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
         | 
| @@ -26,7 +26,6 @@ abstract contract Component is | |
| 26 26 | 
             
                struct ComponentStorage {
         | 
| 27 27 | 
             
                    string _name; // unique (per instance) component name
         | 
| 28 28 | 
             
                    IERC20Metadata _token; // token for this component
         | 
| 29 | 
            -
                    TokenHandler _tokenHandler;
         | 
| 30 29 | 
             
                    address _wallet;
         | 
| 31 30 | 
             
                    bool _isInterceptor;
         | 
| 32 31 | 
             
                    bytes _data;
         | 
| @@ -40,6 +39,12 @@ abstract contract Component is | |
| 40 39 | 
             
                    _;
         | 
| 41 40 | 
             
                }
         | 
| 42 41 |  | 
| 42 | 
            +
                modifier onlyNftOwner(NftId nftId) {
         | 
| 43 | 
            +
                    if(msg.sender != getRegistry().ownerOf(nftId)) {
         | 
| 44 | 
            +
                        revert ErrorNftOwnableNotOwner(msg.sender);
         | 
| 45 | 
            +
                    }
         | 
| 46 | 
            +
                    _;
         | 
| 47 | 
            +
                }
         | 
| 43 48 |  | 
| 44 49 | 
             
                function _getComponentStorage() private pure returns (ComponentStorage storage $) {
         | 
| 45 50 | 
             
                    assembly {
         | 
| @@ -78,7 +83,6 @@ abstract contract Component is | |
| 78 83 | 
             
                    ComponentStorage storage $ = _getComponentStorage();
         | 
| 79 84 | 
             
                    $._name = name;
         | 
| 80 85 | 
             
                    $._token = IERC20Metadata(token);
         | 
| 81 | 
            -
                    $._tokenHandler = TokenHandler(address(0));
         | 
| 82 86 | 
             
                    $._wallet = address(this);
         | 
| 83 87 | 
             
                    $._isInterceptor = isInterceptor;
         | 
| 84 88 | 
             
                    $._data = componentData;
         | 
| @@ -253,29 +257,24 @@ abstract contract Component is | |
| 253 257 | 
             
                }
         | 
| 254 258 |  | 
| 255 259 |  | 
| 256 | 
            -
                /// @dev for component contracts that hold its own component information 
         | 
| 257 | 
            -
                /// this function creates and sets a token hanlder for the components tokens
         | 
| 258 | 
            -
                function _createAndSetTokenHandler()
         | 
| 259 | 
            -
                    internal
         | 
| 260 | 
            -
                {
         | 
| 261 | 
            -
                    ComponentStorage storage $ = _getComponentStorage();
         | 
| 262 | 
            -
                    $._tokenHandler = new TokenHandler(address($._token));
         | 
| 263 | 
            -
                }
         | 
| 264 | 
            -
             | 
| 265 | 
            -
             | 
| 266 260 | 
             
                /// @dev depending on the source of the component information this function needs to be overwritten. 
         | 
| 267 261 | 
             
                /// eg for instance linked components that externally store this information with the instance store contract
         | 
| 268 262 | 
             
                function _getComponentInfo() internal virtual view returns (IComponents.ComponentInfo memory info) {
         | 
| 269 263 | 
             
                    ComponentStorage storage $ = _getComponentStorage();
         | 
| 270 | 
            -
             | 
| 264 | 
            +
                    
         | 
| 271 265 | 
             
                    return IComponents.ComponentInfo({
         | 
| 272 266 | 
             
                        name: $._name,
         | 
| 273 267 | 
             
                        productNftId: NftIdLib.zero(),
         | 
| 274 268 | 
             
                        token: $._token,
         | 
| 275 | 
            -
                        tokenHandler:  | 
| 269 | 
            +
                        tokenHandler: TokenHandler(address(0)),
         | 
| 276 270 | 
             
                        wallet: $._wallet, // initial wallet address
         | 
| 277 271 | 
             
                        data: $._data // user specific component data
         | 
| 278 272 | 
             
                    });
         | 
| 279 273 | 
             
                }
         | 
| 280 274 |  | 
| 275 | 
            +
                function _approveTokenHandler(uint256 amount) internal {
         | 
| 276 | 
            +
                    ComponentStorage storage $ = _getComponentStorage();
         | 
| 277 | 
            +
                    $._token.approve(address(getComponentInfo().tokenHandler), amount);
         | 
| 278 | 
            +
                }
         | 
| 279 | 
            +
             | 
| 281 280 | 
             
            }
         | 
| @@ -1,33 +1,32 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            +
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 5 | 
            +
             | 
| 4 6 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 5 7 | 
             
            import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
         | 
| 6 8 | 
             
            import {Fee, FeeLib} from "../type/Fee.sol";
         | 
| 9 | 
            +
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 10 | 
            +
            import {IComponentService} from "./IComponentService.sol";
         | 
| 11 | 
            +
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 7 12 | 
             
            import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
         | 
| 13 | 
            +
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 14 | 
            +
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 15 | 
            +
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 16 | 
            +
            import {IPoolComponent} from "../pool/IPoolComponent.sol";
         | 
| 17 | 
            +
            import {IProductComponent} from "../product/IProductComponent.sol";
         | 
| 8 18 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 9 19 | 
             
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 10 | 
            -
            import { | 
| 11 | 
            -
            import {IAccess} from "../instance/module/IAccess.sol";
         | 
| 20 | 
            +
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 12 21 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 13 22 | 
             
            import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
         | 
| 14 23 | 
             
            import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
         | 
| 15 | 
            -
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 16 | 
            -
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 17 | 
            -
            import {IComponentService} from "./IComponentService.sol";
         | 
| 18 | 
            -
            import {IDistributionComponent} from "../distribution/IDistributionComponent.sol";
         | 
| 19 | 
            -
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 20 | 
            -
            import {IPoolComponent} from "../pool/IPoolComponent.sol";
         | 
| 21 | 
            -
            import {IProductComponent} from "../product/IProductComponent.sol";
         | 
| 22 | 
            -
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 23 | 
            -
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 24 24 | 
             
            import {TokenHandler} from "./TokenHandler.sol";
         | 
| 25 25 |  | 
| 26 26 | 
             
            contract ComponentService is
         | 
| 27 27 | 
             
                ComponentVerifyingService,
         | 
| 28 28 | 
             
                IComponentService
         | 
| 29 29 | 
             
            {
         | 
| 30 | 
            -
             | 
| 31 30 | 
             
                error ErrorComponentServiceAlreadyRegistered(address component);
         | 
| 32 31 | 
             
                error ErrorComponentServiceNotComponent(address component);
         | 
| 33 32 | 
             
                error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
         | 
| @@ -94,6 +93,47 @@ contract ComponentService is | |
| 94 93 | 
             
                // TODO implement
         | 
| 95 94 | 
             
                function unlock() external virtual {}
         | 
| 96 95 |  | 
| 96 | 
            +
                function withdrawFees(Amount amount)
         | 
| 97 | 
            +
                    external
         | 
| 98 | 
            +
                    virtual
         | 
| 99 | 
            +
                    returns (Amount withdrawnAmount)
         | 
| 100 | 
            +
                {
         | 
| 101 | 
            +
                    (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
         | 
| 102 | 
            +
                    IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
         | 
| 103 | 
            +
                    address componentWallet = info.wallet;
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                    // determine withdrawn amount
         | 
| 106 | 
            +
                    withdrawnAmount = amount;
         | 
| 107 | 
            +
                    if (withdrawnAmount.gte(AmountLib.max())) {
         | 
| 108 | 
            +
                        withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
         | 
| 109 | 
            +
                    } else if (withdrawnAmount.eqz()) {
         | 
| 110 | 
            +
                        revert ErrorComponentServiceWithdrawAmountIsZero();
         | 
| 111 | 
            +
                    } else {
         | 
| 112 | 
            +
                        Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
         | 
| 113 | 
            +
                        if (withdrawnAmount.gt(withdrawLimit)) {
         | 
| 114 | 
            +
                            revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
         | 
| 115 | 
            +
                        }
         | 
| 116 | 
            +
                    }
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                    // check allowance
         | 
| 119 | 
            +
                    TokenHandler tokenHandler = info.tokenHandler;
         | 
| 120 | 
            +
                    IERC20Metadata token = IERC20Metadata(info.token);
         | 
| 121 | 
            +
                    uint256 tokenAllowance = token.allowance(componentWallet, address(tokenHandler));
         | 
| 122 | 
            +
                    if (tokenAllowance < withdrawnAmount.toInt()) {
         | 
| 123 | 
            +
                        revert ErrorComponentServiceWalletAllowanceTooSmall(componentWallet, address(tokenHandler), tokenAllowance, withdrawnAmount.toInt());
         | 
| 124 | 
            +
                    }
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                    // decrease fee counters by withdrawnAmount
         | 
| 127 | 
            +
                    _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
         | 
| 128 | 
            +
                    
         | 
| 129 | 
            +
                    // transfer amount to component owner
         | 
| 130 | 
            +
                    address componentOwner = getRegistry().ownerOf(componentNftId);
         | 
| 131 | 
            +
                    // TODO: centralize token handling (issue #471)
         | 
| 132 | 
            +
                    tokenHandler.transfer(componentWallet, componentOwner, withdrawnAmount);
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                    emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(token), withdrawnAmount);
         | 
| 135 | 
            +
                }
         | 
| 136 | 
            +
             | 
| 97 137 |  | 
| 98 138 | 
             
                //-------- product ------------------------------------------------------//
         | 
| 99 139 |  | 
| @@ -255,6 +295,36 @@ contract ComponentService is | |
| 255 295 | 
             
                    _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
         | 
| 256 296 | 
             
                }
         | 
| 257 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 | 
            +
             | 
| 258 328 | 
             
                //-------- oracle -------------------------------------------------------//
         | 
| 259 329 |  | 
| 260 330 | 
             
                function registerOracle()
         | 
| @@ -1,9 +1,9 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {IVersionable} from "./IVersionable.sol";
         | 
| 5 | 
            -
            import {ProxyManager} from "./ProxyManager.sol";
         | 
| 6 4 | 
             
            import {ComponentService} from "./ComponentService.sol";
         | 
| 5 | 
            +
            import {IVersionable} from "../upgradeability/IVersionable.sol";
         | 
| 6 | 
            +
            import {ProxyManager} from "../upgradeability/ProxyManager.sol";
         | 
| 7 7 |  | 
| 8 8 | 
             
            contract ComponentServiceManager is ProxyManager {
         | 
| 9 9 |  | 
| @@ -1,21 +1,12 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
         | 
| 5 | 
            -
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 6 4 |  | 
| 7 5 | 
             
            import {Amount} from "../type/Amount.sol";
         | 
| 8 6 | 
             
            import {Fee} from "../type/Fee.sol";
         | 
| 9 | 
            -
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 10 | 
            -
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 11 | 
            -
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 12 7 | 
             
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 13 | 
            -
            import {IProductService} from "../product/IProductService.sol";
         | 
| 14 | 
            -
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 15 8 | 
             
            import {IService} from "../shared/IService.sol";
         | 
| 16 9 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 17 | 
            -
            import {ObjectType} from "../type/ObjectType.sol";
         | 
| 18 | 
            -
            import {TokenHandler} from "../shared/TokenHandler.sol";
         | 
| 19 10 | 
             
            import {UFixed} from "../type/UFixed.sol";
         | 
| 20 11 |  | 
| 21 12 | 
             
            /// @dev component base class
         | 
| @@ -27,7 +18,12 @@ interface IComponentService is | |
| 27 18 | 
             
                error ErrorComponentServiceWalletAddressZero();
         | 
| 28 19 | 
             
                error ErrorComponentServiceWalletAddressIsSameAsCurrent();
         | 
| 29 20 |  | 
| 21 | 
            +
                error ErrorComponentServiceWithdrawAmountIsZero();
         | 
| 22 | 
            +
                error ErrorComponentServiceWithdrawAmountExceedsLimit(Amount withdrawnAmount, Amount withdrawLimit);
         | 
| 23 | 
            +
                error ErrorComponentServiceWalletAllowanceTooSmall(address wallet, address spender, uint256 allowance, uint256 amount);
         | 
| 24 | 
            +
             | 
| 30 25 | 
             
                event LogComponentServiceWalletAddressChanged(NftId componentNftId, address currentWallet, address newWallet);
         | 
| 26 | 
            +
                event LogComponentServiceComponentFeesWithdrawn(NftId componentNftId, address recipient, address token, Amount withdrawnAmount);
         | 
| 31 27 | 
             
                event LogComponentServiceProductFeesUpdated(NftId productNftId);
         | 
| 32 28 | 
             
                event LogComponentServiceDistributionFeesUpdated(NftId distributionNftId);
         | 
| 33 29 | 
             
                event LogComponentServicePoolFeesUpdated(NftId poolNftId);
         | 
| @@ -51,6 +47,11 @@ interface IComponentService is | |
| 51 47 | 
             
                /// @dev unlocks the component associated with the caller
         | 
| 52 48 | 
             
                function unlock() external;
         | 
| 53 49 |  | 
| 50 | 
            +
                /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
         | 
| 51 | 
            +
                /// @param withdrawAmount the amount to withdraw
         | 
| 52 | 
            +
                /// @return withdrawnAmount the amount that was actually withdrawn
         | 
| 53 | 
            +
                function withdrawFees(Amount withdrawAmount) external returns (Amount withdrawnAmount);
         | 
| 54 | 
            +
             | 
| 54 55 | 
             
                //-------- product ------------------------------------------------------//
         | 
| 55 56 |  | 
| 56 57 | 
             
                /// @dev registers the sending component as a product component
         | 
| @@ -77,6 +78,10 @@ interface IComponentService is | |
| 77 78 | 
             
                function increaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
         | 
| 78 79 | 
             
                function decreaseDistributionBalance(InstanceStore instanceStore, NftId distributionNftId, Amount amount, Amount feeAmount) external;
         | 
| 79 80 |  | 
| 81 | 
            +
                //-------- distributor --------------------------------------------------//
         | 
| 82 | 
            +
                function increaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
         | 
| 83 | 
            +
                function decreaseDistributorBalance(InstanceStore instanceStore, NftId distributorNftId, Amount amount, Amount feeAmount) external;
         | 
| 84 | 
            +
             | 
| 80 85 | 
             
                //-------- oracle -------------------------------------------------------//
         | 
| 81 86 |  | 
| 82 87 | 
             
                /// @dev registers the sending component as an oracle component
         | 
| @@ -99,4 +104,5 @@ interface IComponentService is | |
| 99 104 | 
             
                //-------- bundle -------------------------------------------------------//
         | 
| 100 105 | 
             
                function increaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
         | 
| 101 106 | 
             
                function decreaseBundleBalance(InstanceStore instanceStore, NftId bundleNftId, Amount amount, Amount feeAmount) external;
         | 
| 107 | 
            +
             | 
| 102 108 | 
             
            }
         | 
| @@ -4,6 +4,7 @@ pragma solidity ^0.8.20; | |
| 4 4 | 
             
            import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
         | 
| 5 5 | 
             
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 6 6 |  | 
| 7 | 
            +
            import {Amount} from "../type/Amount.sol";
         | 
| 7 8 | 
             
            import {IComponent} from "../shared/IComponent.sol";
         | 
| 8 9 | 
             
            import {IAuthorization} from "../authorization/IAuthorization.sol";
         | 
| 9 10 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| @@ -47,4 +48,9 @@ interface IInstanceLinkedComponent is | |
| 47 48 | 
             
                /// @dev returns the initial component authorization specification.
         | 
| 48 49 | 
             
                function getAuthorization() external view returns (IAuthorization authorization);
         | 
| 49 50 |  | 
| 51 | 
            +
                /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
         | 
| 52 | 
            +
                /// @param amount the amount to withdraw
         | 
| 53 | 
            +
                /// @return withdrawnAmount the amount that was actually withdrawn
         | 
| 54 | 
            +
                function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
         | 
| 55 | 
            +
             | 
| 50 56 | 
             
            }
         | 
| @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; | |
| 4 4 | 
             
            import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
         | 
| 5 5 |  | 
| 6 6 | 
             
            import {IRegisterable} from "./IRegisterable.sol";
         | 
| 7 | 
            -
            import {IVersionable} from " | 
| 7 | 
            +
            import {IVersionable} from "../upgradeability/IVersionable.sol";
         | 
| 8 8 | 
             
            import {ObjectType} from "../type/ObjectType.sol";
         | 
| 9 9 | 
             
            import {RoleId} from "../type/RoleId.sol";
         | 
| 10 10 |  | 
| @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; | |
| 4 4 | 
             
            import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
         | 
| 5 5 | 
             
            import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; 
         | 
| 6 6 |  | 
| 7 | 
            -
            contract  | 
| 7 | 
            +
            contract InitializableERC165 is
         | 
| 8 8 | 
             
                Initializable,
         | 
| 9 9 | 
             
                IERC165
         | 
| 10 10 | 
             
            {
         | 
| @@ -6,6 +6,7 @@ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessMana | |
| 6 6 | 
             
            import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
         | 
| 7 7 | 
             
            import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
         | 
| 8 8 |  | 
| 9 | 
            +
            import {Amount} from "../type/Amount.sol";
         | 
| 9 10 | 
             
            import {Component} from "./Component.sol";
         | 
| 10 11 | 
             
            import {IComponentService} from "./IComponentService.sol";
         | 
| 11 12 | 
             
            import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
         | 
| @@ -36,6 +37,7 @@ abstract contract InstanceLinkedComponent is | |
| 36 37 | 
             
                    IInstance _instance; // instance for this component
         | 
| 37 38 | 
             
                    InstanceReader _instanceReader; // instance reader for this component
         | 
| 38 39 | 
             
                    IAuthorization _initialAuthorization;
         | 
| 40 | 
            +
                    IComponentService _componentService;
         | 
| 39 41 | 
             
                }
         | 
| 40 42 |  | 
| 41 43 | 
             
                function lock() external onlyOwner {
         | 
| @@ -58,6 +60,17 @@ abstract contract InstanceLinkedComponent is | |
| 58 60 | 
             
                    return _getInstanceLinkedComponentStorage()._initialAuthorization;
         | 
| 59 61 | 
             
                }
         | 
| 60 62 |  | 
| 63 | 
            +
                /// @inheritdoc IInstanceLinkedComponent
         | 
| 64 | 
            +
                function withdrawFees(Amount amount)
         | 
| 65 | 
            +
                    external
         | 
| 66 | 
            +
                    virtual
         | 
| 67 | 
            +
                    onlyOwner()
         | 
| 68 | 
            +
                    restricted()
         | 
| 69 | 
            +
                    returns (Amount withdrawnAmount)
         | 
| 70 | 
            +
                {
         | 
| 71 | 
            +
                    return _withdrawFees(amount);
         | 
| 72 | 
            +
                }
         | 
| 73 | 
            +
             | 
| 61 74 | 
             
                function _getInstanceLinkedComponentStorage() private pure returns (InstanceLinkedComponentStorage storage $) {
         | 
| 62 75 | 
             
                    assembly {
         | 
| 63 76 | 
             
                        $.slot := INSTANCE_LINKED_COMPONENT_LOCATION_V1
         | 
| @@ -105,6 +118,7 @@ abstract contract InstanceLinkedComponent is | |
| 105 118 | 
             
                    // set component state
         | 
| 106 119 | 
             
                    $._instanceReader = $._instance.getInstanceReader();
         | 
| 107 120 | 
             
                    $._initialAuthorization = authorization;
         | 
| 121 | 
            +
                    $._componentService = IComponentService(_getServiceAddress(COMPONENT())); 
         | 
| 108 122 |  | 
| 109 123 | 
             
                    registerInterface(type(IAccessManaged).interfaceId);
         | 
| 110 124 | 
             
                    registerInterface(type(IInstanceLinkedComponent).interfaceId);
         | 
| @@ -141,6 +155,13 @@ abstract contract InstanceLinkedComponent is | |
| 141 155 | 
             
                    return _getInstanceLinkedComponentStorage()._instanceReader;
         | 
| 142 156 | 
             
                }
         | 
| 143 157 |  | 
| 158 | 
            +
                function _withdrawFees(Amount amount)
         | 
| 159 | 
            +
                    internal
         | 
| 160 | 
            +
                    returns (Amount withdrawnAmount)
         | 
| 161 | 
            +
                {
         | 
| 162 | 
            +
                    return _getInstanceLinkedComponentStorage()._componentService.withdrawFees(amount);
         | 
| 163 | 
            +
                }
         | 
| 164 | 
            +
             | 
| 144 165 |  | 
| 145 166 | 
             
                /// @dev returns the service address for the specified domain
         | 
| 146 167 | 
             
                /// gets address via lookup from registry using the major version form the linked instance
         |