@etherisc/gif-next 0.0.2-f347f00-614 → 0.0.2-f36fd21-685
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 +30 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +1253 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +1206 -0
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +358 -0
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.json +10 -0
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
- package/artifacts/contracts/{shared → authorization}/IAccessAdmin.sol/IAccessAdmin.json +100 -252
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +258 -0
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +290 -0
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
- package/artifacts/contracts/{registry → authorization}/IServiceAuthorization.sol/IServiceAuthorization.json +29 -5
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +390 -0
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +190 -0
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +4 -0
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +1548 -0
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +410 -0
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +46 -228
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +269 -90
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +83 -55
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +100 -132
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +134 -16
- 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 -19
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +32 -44
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +35 -96
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +1208 -290
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +601 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +110 -81
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +65 -125
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +35 -59
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +84 -101
- 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 +4 -0
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +182 -0
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +181 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +4 -0
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +1185 -0
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +4 -0
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +418 -0
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +43 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +43 -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 +43 -96
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +32 -32
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +34 -34
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +4 -0
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +1520 -0
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +410 -0
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +220 -54
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +72 -40
- 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 -195
- 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 -296
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +36 -36
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +36 -36
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +32 -32
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +34 -34
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +4 -0
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +1318 -0
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +410 -0
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +72 -72
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +54 -54
- 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 +32 -42
- 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 +43 -43
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +63 -58
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +47 -47
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +32 -153
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +20 -20
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +28 -28
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +50 -46
- 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 +101 -73
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +239 -389
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +18 -18
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +27 -27
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +164 -0
- 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 +44 -12
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +271 -86
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +77 -61
- 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 +32 -0
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +11 -5
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +0 -5
- 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/InitializableERC165.sol/InitializableERC165.json +73 -0
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +32 -53
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +15 -89
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +4 -65
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +306 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -6
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +6 -6
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -8
- 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 +6 -6
- 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 +42 -32
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +44 -44
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +4 -0
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +164 -0
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +40 -40
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +26 -26
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +31 -31
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +146 -165
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +27 -22
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
- 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/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 +4 -4
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +17 -12
- 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 +4 -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 +55 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +4 -4
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +4 -4
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +4 -4
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +117 -14
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +2 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorLib.json +2 -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 +2 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/String.sol/StrLib.json +2 -2
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +4 -4
- 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 +58 -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/upgradeability/ProxyManager.sol/ProxyManager.json +617 -0
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
- package/contracts/{shared → authorization}/AccessAdmin.sol +135 -294
- package/contracts/authorization/AccessManagerCloneable.sol +16 -0
- package/contracts/authorization/Authorization.sol +218 -0
- package/contracts/authorization/IAccess.sol +48 -0
- package/contracts/{shared → authorization}/IAccessAdmin.sol +34 -60
- package/contracts/authorization/IAuthorization.sol +54 -0
- package/contracts/authorization/IModuleAuthorization.sol +21 -0
- package/contracts/{registry → authorization}/IServiceAuthorization.sol +7 -4
- package/contracts/authorization/ModuleAuthorization.sol +78 -0
- package/contracts/{registry → authorization}/ServiceAuthorization.sol +21 -14
- package/contracts/distribution/BasicDistribution.sol +138 -0
- package/contracts/distribution/BasicDistributionAuthorization.sol +47 -0
- package/contracts/distribution/Distribution.sol +144 -110
- package/contracts/distribution/DistributionService.sol +71 -31
- package/contracts/distribution/DistributionServiceManager.sol +2 -5
- package/contracts/distribution/IDistributionComponent.sol +25 -39
- package/contracts/distribution/IDistributionService.sol +17 -1
- package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
- package/contracts/instance/IInstance.sol +8 -9
- package/contracts/instance/IInstanceService.sol +13 -18
- package/contracts/instance/Instance.sol +61 -70
- package/contracts/instance/InstanceAdmin.sol +202 -267
- package/contracts/instance/InstanceAuthorizationV3.sol +204 -0
- package/contracts/instance/InstanceReader.sol +22 -9
- package/contracts/instance/InstanceService.sol +74 -70
- package/contracts/instance/InstanceServiceManager.sol +2 -6
- package/contracts/instance/InstanceStore.sol +13 -5
- package/contracts/instance/base/ObjectLifecycle.sol +106 -0
- package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +11 -12
- package/contracts/instance/module/IComponents.sol +0 -1
- package/contracts/instance/module/IDistribution.sol +0 -1
- package/contracts/oracle/BasicOracle.sol +48 -0
- package/contracts/oracle/BasicOracleAuthorization.sol +46 -0
- package/contracts/oracle/IOracle.sol +16 -0
- package/contracts/oracle/IOracleComponent.sol +2 -1
- package/contracts/oracle/Oracle.sol +72 -51
- package/contracts/oracle/OracleServiceManager.sol +2 -5
- package/contracts/pool/BasicPool.sol +164 -0
- package/contracts/pool/BasicPoolAuthorization.sol +55 -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 -60
- package/contracts/pool/Pool.sol +160 -131
- package/contracts/pool/PoolService.sol +12 -30
- 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 +52 -0
- package/contracts/product/BasicProductAuthorization.sol +43 -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 +7 -9
- 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 +112 -88
- package/contracts/product/ProductService.sol +7 -32
- package/contracts/product/ProductServiceManager.sol +2 -5
- package/contracts/registry/IRegistry.sol +26 -16
- package/contracts/registry/IRegistryService.sol +6 -6
- package/contracts/registry/Registry.sol +85 -85
- package/contracts/registry/RegistryAdmin.sol +118 -86
- package/contracts/registry/RegistryService.sol +4 -18
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseLifecycle.sol +27 -0
- package/contracts/registry/ReleaseRegistry.sol +485 -0
- package/contracts/registry/ServiceAuthorizationV3.sol +14 -14
- package/contracts/registry/TokenRegistry.sol +2 -2
- package/contracts/shared/Component.sol +13 -14
- package/contracts/shared/ComponentService.sol +102 -68
- package/contracts/shared/ComponentServiceManager.sol +2 -2
- package/contracts/shared/ComponentVerifyingService.sol +1 -1
- package/contracts/shared/IComponentService.sol +15 -9
- package/contracts/shared/IInstanceLinkedComponent.sol +10 -0
- package/contracts/shared/IKeyValueStore.sol +1 -0
- package/contracts/shared/ILifecycle.sol +1 -2
- package/contracts/shared/IService.sol +1 -1
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +1 -1
- package/contracts/shared/InstanceLinkedComponent.sol +47 -19
- package/contracts/shared/KeyValueStore.sol +6 -2
- package/contracts/shared/Lifecycle.sol +16 -69
- 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/StakingLifecycle.sol +23 -0
- 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 +15 -23
- package/contracts/type/Amount.sol +12 -5
- package/contracts/type/ObjectType.sol +37 -7
- package/contracts/type/Referral.sol +1 -0
- package/contracts/type/RoleId.sol +55 -82
- package/contracts/type/UFixed.sol +34 -9
- 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 +6 -3
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -709
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +0 -4
- package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +0 -228
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +0 -187
- package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +0 -4
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1218
- package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +0 -4
- package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +0 -166
- package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.json +0 -1554
- package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +0 -1193
- package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +0 -1747
- package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +0 -1760
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +0 -1838
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +0 -4
- package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +0 -1856
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
- package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +0 -4
- package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +0 -1562
- package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +0 -4
- package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +0 -1600
- 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/NftIdSetManager.sol/NftIdSetManager.json +0 -306
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +0 -129
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
- package/contracts/instance/InstanceAuthorizationsLib.sol +0 -377
- package/contracts/registry/ReleaseManager.sol +0 -521
- package/contracts/shared/AccessManagerCustom.sol +0 -741
- package/contracts/shared/AccessManagerExtended.sol +0 -481
- package/contracts/shared/AccessManagerExtendedInitializeable.sol +0 -13
- package/contracts/shared/AccessManagerExtendedWithDisable.sol +0 -137
- package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +0 -14
- package/contracts/shared/IAccessManagerExtended.sol +0 -74
- package/contracts/shared/IAccessManagerExtendedWithDisable.sol +0 -18
- /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
- /package/contracts/{shared → upgradeability}/Versionable.sol +0 -0
| @@ -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";
         | 
| 7 | 
            -
            import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
         | 
| 8 | 
            -
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 9 | 
            -
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 10 | 
            -
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 11 | 
            -
            import {IAccess} from "../instance/module/IAccess.sol";
         | 
| 12 | 
            -
            import {NftId} from "../type/NftId.sol";
         | 
| 13 | 
            -
            import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
         | 
| 14 | 
            -
            import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, POLICY_SERVICE_ROLE, PRODUCT_SERVICE_ROLE} from "../type/RoleId.sol";
         | 
| 15 | 
            -
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 16 9 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 17 10 | 
             
            import {IComponentService} from "./IComponentService.sol";
         | 
| 18 | 
            -
            import { | 
| 11 | 
            +
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 12 | 
            +
            import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
         | 
| 13 | 
            +
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 14 | 
            +
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 19 15 | 
             
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 20 16 | 
             
            import {IPoolComponent} from "../pool/IPoolComponent.sol";
         | 
| 21 17 | 
             
            import {IProductComponent} from "../product/IProductComponent.sol";
         | 
| 22 | 
            -
            import { | 
| 23 | 
            -
            import { | 
| 18 | 
            +
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 19 | 
            +
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 20 | 
            +
            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 {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.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 |  | 
| @@ -102,12 +142,6 @@ contract ComponentService is | |
| 102 142 | 
             
                    virtual
         | 
| 103 143 | 
             
                {
         | 
| 104 144 | 
             
                    address contractAddress = msg.sender;
         | 
| 105 | 
            -
                    RoleId[] memory roles = new RoleId[](1);
         | 
| 106 | 
            -
                    bytes4[][] memory selectors = new bytes4[][](1);
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                    // authorizaion for distribution owner
         | 
| 109 | 
            -
                    roles[0] = PRODUCT_OWNER_ROLE();
         | 
| 110 | 
            -
                    selectors[0] = _createSelectors(IProductComponent.setFees.selector);
         | 
| 111 145 |  | 
| 112 146 | 
             
                    // register/create component setup
         | 
| 113 147 | 
             
                    (
         | 
| @@ -117,9 +151,7 @@ contract ComponentService is | |
| 117 151 | 
             
                    ) = _register(
         | 
| 118 152 | 
             
                        contractAddress,
         | 
| 119 153 | 
             
                        PRODUCT(),
         | 
| 120 | 
            -
                        PRODUCT_OWNER_ROLE() | 
| 121 | 
            -
                        roles,
         | 
| 122 | 
            -
                        selectors);
         | 
| 154 | 
            +
                        PRODUCT_OWNER_ROLE());
         | 
| 123 155 |  | 
| 124 156 | 
             
                    // create product info
         | 
| 125 157 | 
             
                    IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
         | 
| @@ -193,24 +225,12 @@ contract ComponentService is | |
| 193 225 | 
             
                    virtual
         | 
| 194 226 | 
             
                {
         | 
| 195 227 | 
             
                    address contractAddress = msg.sender;
         | 
| 196 | 
            -
                    RoleId[] memory roles = new RoleId[](2);
         | 
| 197 | 
            -
                    bytes4[][] memory selectors = new bytes4[][](2);
         | 
| 198 | 
            -
             | 
| 199 | 
            -
                    // authorizaion for distribution owner
         | 
| 200 | 
            -
                    roles[0] = DISTRIBUTION_OWNER_ROLE();
         | 
| 201 | 
            -
                    selectors[0] = _createSelectors(IDistributionComponent.setFees.selector);
         | 
| 202 | 
            -
             | 
| 203 | 
            -
                    // authorizaion for product service
         | 
| 204 | 
            -
                    roles[1] = PRODUCT_SERVICE_ROLE();
         | 
| 205 | 
            -
                    selectors[1] = _createSelectors(IDistributionComponent.processRenewal.selector);
         | 
| 206 228 |  | 
| 207 229 | 
             
                    // register/create component info
         | 
| 208 230 | 
             
                    _register(
         | 
| 209 231 | 
             
                        contractAddress,
         | 
| 210 232 | 
             
                        DISTRIBUTION(),
         | 
| 211 | 
            -
                        DISTRIBUTION_OWNER_ROLE() | 
| 212 | 
            -
                        roles,
         | 
| 213 | 
            -
                        selectors);
         | 
| 233 | 
            +
                        DISTRIBUTION_OWNER_ROLE());
         | 
| 214 234 | 
             
                }
         | 
| 215 235 |  | 
| 216 236 |  | 
| @@ -275,6 +295,36 @@ contract ComponentService is | |
| 275 295 | 
             
                    _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
         | 
| 276 296 | 
             
                }
         | 
| 277 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 | 
            +
             | 
| 278 328 | 
             
                //-------- oracle -------------------------------------------------------//
         | 
| 279 329 |  | 
| 280 330 | 
             
                function registerOracle()
         | 
| @@ -282,8 +332,6 @@ contract ComponentService is | |
| 282 332 | 
             
                    virtual
         | 
| 283 333 | 
             
                {
         | 
| 284 334 | 
             
                    address contractAddress = msg.sender;
         | 
| 285 | 
            -
                    RoleId[] memory roles = new RoleId[](0);
         | 
| 286 | 
            -
                    bytes4[][] memory selectors = new bytes4[][](0);
         | 
| 287 335 |  | 
| 288 336 | 
             
                    // register/create component setup
         | 
| 289 337 | 
             
                    (
         | 
| @@ -293,9 +341,7 @@ contract ComponentService is | |
| 293 341 | 
             
                    ) = _register(
         | 
| 294 342 | 
             
                        contractAddress,
         | 
| 295 343 | 
             
                        ORACLE(),
         | 
| 296 | 
            -
                        ORACLE_OWNER_ROLE() | 
| 297 | 
            -
                        roles,
         | 
| 298 | 
            -
                        selectors);            
         | 
| 344 | 
            +
                        ORACLE_OWNER_ROLE());            
         | 
| 299 345 | 
             
                }
         | 
| 300 346 |  | 
| 301 347 | 
             
                //-------- pool ---------------------------------------------------------//
         | 
| @@ -305,16 +351,6 @@ contract ComponentService is | |
| 305 351 | 
             
                    virtual
         | 
| 306 352 | 
             
                {
         | 
| 307 353 | 
             
                    address contractAddress = msg.sender;
         | 
| 308 | 
            -
                    RoleId[] memory roles = new RoleId[](2);
         | 
| 309 | 
            -
                    bytes4[][] memory selectors = new bytes4[][](2);
         | 
| 310 | 
            -
             | 
| 311 | 
            -
                    // authorizaion for pool owner
         | 
| 312 | 
            -
                    roles[0] = POOL_OWNER_ROLE();
         | 
| 313 | 
            -
                    selectors[0] = _createSelectors(IPoolComponent.setFees.selector);
         | 
| 314 | 
            -
             | 
| 315 | 
            -
                    // authorizaion for product service
         | 
| 316 | 
            -
                    roles[1] = POLICY_SERVICE_ROLE();
         | 
| 317 | 
            -
                    selectors[1] = _createSelectors(IPoolComponent.verifyApplication.selector);
         | 
| 318 354 |  | 
| 319 355 | 
             
                    // register/create component setup
         | 
| 320 356 | 
             
                    (
         | 
| @@ -324,14 +360,13 @@ contract ComponentService is | |
| 324 360 | 
             
                    ) = _register(
         | 
| 325 361 | 
             
                        contractAddress,
         | 
| 326 362 | 
             
                        POOL(),
         | 
| 327 | 
            -
                        POOL_OWNER_ROLE() | 
| 328 | 
            -
                        roles,
         | 
| 329 | 
            -
                        selectors);            
         | 
| 363 | 
            +
                        POOL_OWNER_ROLE());            
         | 
| 330 364 |  | 
| 331 365 | 
             
                    // create info
         | 
| 332 366 | 
             
                    instanceStore.createPool(
         | 
| 333 367 | 
             
                        componentNftId, 
         | 
| 334 | 
            -
                        IPoolComponent( | 
| 368 | 
            +
                        IPoolComponent(
         | 
| 369 | 
            +
                            contractAddress).getInitialPoolInfo());
         | 
| 335 370 | 
             
                }
         | 
| 336 371 |  | 
| 337 372 |  | 
| @@ -461,9 +496,7 @@ contract ComponentService is | |
| 461 496 | 
             
                function _register(
         | 
| 462 497 | 
             
                    address componentAddress, // address of component to register
         | 
| 463 498 | 
             
                    ObjectType requiredType, // required type for component for registration
         | 
| 464 | 
            -
                    RoleId requiredRole | 
| 465 | 
            -
                    RoleId[] memory roles, // roles with write access to component
         | 
| 466 | 
            -
                    bytes4[][] memory selectors // authorized functions per role with write access
         | 
| 499 | 
            +
                    RoleId requiredRole // role required for comonent owner for registration
         | 
| 467 500 | 
             
                )
         | 
| 468 501 | 
             
                    internal
         | 
| 469 502 | 
             
                    virtual
         | 
| @@ -490,21 +523,23 @@ contract ComponentService is | |
| 490 523 |  | 
| 491 524 | 
             
                    component.linkToRegisteredNftId();
         | 
| 492 525 |  | 
| 526 | 
            +
                    // setup initial component authorization
         | 
| 527 | 
            +
                    _instanceService.initializeAuthorization(
         | 
| 528 | 
            +
                        instance.getNftId(),
         | 
| 529 | 
            +
                        component);
         | 
| 530 | 
            +
             | 
| 493 531 | 
             
                    // save amended component info with instance
         | 
| 494 532 | 
             
                    instanceReader = instance.getInstanceReader();
         | 
| 495 533 | 
             
                    instanceStore = instance.getInstanceStore();
         | 
| 496 534 |  | 
| 497 535 | 
             
                    IComponents.ComponentInfo memory componentInfo = component.getComponentInfo();
         | 
| 498 536 | 
             
                    componentInfo.tokenHandler = new TokenHandler(address(componentInfo.token));
         | 
| 499 | 
            -
             | 
| 500 | 
            -
             | 
| 501 | 
            -
             | 
| 502 | 
            -
             | 
| 503 | 
            -
             | 
| 504 | 
            -
             | 
| 505 | 
            -
                        component.getName(), 
         | 
| 506 | 
            -
                        selectors, 
         | 
| 507 | 
            -
                        roles);
         | 
| 537 | 
            +
             | 
| 538 | 
            +
                    instanceStore.createComponent(
         | 
| 539 | 
            +
                        component.getNftId(), 
         | 
| 540 | 
            +
                        componentInfo);
         | 
| 541 | 
            +
             | 
| 542 | 
            +
                    // TODO add logging
         | 
| 508 543 | 
             
                }
         | 
| 509 544 |  | 
| 510 545 |  | 
| @@ -605,8 +640,7 @@ contract ComponentService is | |
| 605 640 | 
             
                    instance = _getInstance(info.parentNftId);
         | 
| 606 641 | 
             
                    owner = info.initialOwner;
         | 
| 607 642 |  | 
| 608 | 
            -
                    ( | 
| 609 | 
            -
                    if(!hasRole) {
         | 
| 643 | 
            +
                    if(!instance.getInstanceAdmin().hasRole(owner, requiredRole)) {
         | 
| 610 644 | 
             
                        revert ErrorComponentServiceExpectedRoleMissing(info.parentNftId, requiredRole, owner);
         | 
| 611 645 | 
             
                    }
         | 
| 612 646 | 
             
                }
         | 
| @@ -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 |  | 
| @@ -87,7 +87,7 @@ abstract contract ComponentVerifyingService is | |
| 87 87 |  | 
| 88 88 | 
             
                    // ensure component is not locked
         | 
| 89 89 | 
             
                    if (onlyActive) {
         | 
| 90 | 
            -
                        if (instance. | 
| 90 | 
            +
                        if (instance.getInstanceAdmin().isTargetLocked(info.objectAddress)) {
         | 
| 91 91 | 
             
                            revert ErrorComponentVerifyingServiceComponentIsLocked(componentNftId);
         | 
| 92 92 | 
             
                        }
         | 
| 93 93 | 
             
                    }
         | 
| @@ -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,7 +4,9 @@ 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";
         | 
| 9 | 
            +
            import {IAuthorization} from "../authorization/IAuthorization.sol";
         | 
| 8 10 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 9 11 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 10 12 | 
             
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| @@ -43,4 +45,12 @@ interface IInstanceLinkedComponent is | |
| 43 45 | 
             
                /// this is only relevant for pool and distribution components
         | 
| 44 46 | 
             
                function getProductNftId() external view returns (NftId productNftId);
         | 
| 45 47 |  | 
| 48 | 
            +
                /// @dev returns the initial component authorization specification.
         | 
| 49 | 
            +
                function getAuthorization() external view returns (IAuthorization authorization);
         | 
| 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 | 
            +
             | 
| 46 56 | 
             
            }
         | 
| @@ -13,6 +13,7 @@ interface IKeyValueStore is ILifecycle { | |
| 13 13 |  | 
| 14 14 | 
             
                error ErrorKeyValueStoreTypeUndefined(ObjectType objectType);
         | 
| 15 15 | 
             
                error ErrorKeyValueStoreAlreadyCreated(Key32 key, ObjectType objectType);
         | 
| 16 | 
            +
                error ErrorKeyValueStoreNoLifecycle(ObjectType objectType);
         | 
| 16 17 | 
             
                error ErrorKeyValueStoreStateZero(Key32 key);
         | 
| 17 18 | 
             
                error ErrorKeyValueStoreNotExisting(Key32 key);
         | 
| 18 19 |  | 
| @@ -1,13 +1,12 @@ | |
| 1 1 | 
             
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 2 | 
             
            pragma solidity ^0.8.20;
         | 
| 3 3 |  | 
| 4 | 
            -
            import {NftId} from "../type/NftId.sol";
         | 
| 5 4 | 
             
            import {ObjectType} from "../type/ObjectType.sol";
         | 
| 6 5 | 
             
            import {StateId} from "../type/StateId.sol";
         | 
| 7 6 |  | 
| 8 7 | 
             
            interface ILifecycle {
         | 
| 9 8 |  | 
| 10 | 
            -
                error ErrorNoLifecycle( | 
| 9 | 
            +
                error ErrorNoLifecycle(ObjectType objectType);
         | 
| 11 10 | 
             
                error ErrorInvalidStateTransition(
         | 
| 12 11 | 
             
                    ObjectType objectType,
         | 
| 13 12 | 
             
                    StateId fromStateId,
         | 
| @@ -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,13 +6,14 @@ 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";
         | 
| 13 | 
            +
            import {IAuthorization} from "../authorization/IAuthorization.sol";
         | 
| 12 14 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 13 15 | 
             
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 14 16 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 15 | 
            -
            import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
         | 
| 16 17 | 
             
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 17 18 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 18 19 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| @@ -35,6 +36,39 @@ abstract contract InstanceLinkedComponent is | |
| 35 36 | 
             
                struct InstanceLinkedComponentStorage {
         | 
| 36 37 | 
             
                    IInstance _instance; // instance for this component
         | 
| 37 38 | 
             
                    InstanceReader _instanceReader; // instance reader for this component
         | 
| 39 | 
            +
                    IAuthorization _initialAuthorization;
         | 
| 40 | 
            +
                    IComponentService _componentService;
         | 
| 41 | 
            +
                }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                function lock() external onlyOwner {
         | 
| 44 | 
            +
                    IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
         | 
| 45 | 
            +
                }
         | 
| 46 | 
            +
                
         | 
| 47 | 
            +
                function unlock() external onlyOwner {
         | 
| 48 | 
            +
                    IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
         | 
| 49 | 
            +
                }
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                function getInstance() public view override returns (IInstance instance) {
         | 
| 52 | 
            +
                    return _getInstanceLinkedComponentStorage()._instance;
         | 
| 53 | 
            +
                }
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                function getProductNftId() public view override returns (NftId productNftId) {
         | 
| 56 | 
            +
                    return getComponentInfo().productNftId;
         | 
| 57 | 
            +
                }
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                function getAuthorization() external view returns (IAuthorization authorization) {
         | 
| 60 | 
            +
                    return _getInstanceLinkedComponentStorage()._initialAuthorization;
         | 
| 61 | 
            +
                }
         | 
| 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);
         | 
| 38 72 | 
             
                }
         | 
| 39 73 |  | 
| 40 74 | 
             
                function _getInstanceLinkedComponentStorage() private pure returns (InstanceLinkedComponentStorage storage $) {
         | 
| @@ -43,18 +77,19 @@ abstract contract InstanceLinkedComponent is | |
| 43 77 | 
             
                    }
         | 
| 44 78 | 
             
                }
         | 
| 45 79 |  | 
| 46 | 
            -
                function  | 
| 80 | 
            +
                function _initializeInstanceLinkedComponent(
         | 
| 47 81 | 
             
                    address registry,
         | 
| 48 82 | 
             
                    NftId instanceNftId,
         | 
| 49 83 | 
             
                    string memory name,
         | 
| 50 84 | 
             
                    address token,
         | 
| 51 85 | 
             
                    ObjectType componentType,
         | 
| 86 | 
            +
                    IAuthorization authorization,
         | 
| 52 87 | 
             
                    bool isInterceptor,
         | 
| 53 88 | 
             
                    address initialOwner,
         | 
| 54 89 | 
             
                    bytes memory registryData, // writeonly data that will saved in the object info record of the registry
         | 
| 55 90 | 
             
                    bytes memory componentData // data that will saved with the component info in the instance store
         | 
| 56 91 | 
             
                )
         | 
| 57 | 
            -
                     | 
| 92 | 
            +
                    internal
         | 
| 58 93 | 
             
                    virtual
         | 
| 59 94 | 
             
                    onlyInitializing()
         | 
| 60 95 | 
             
                {
         | 
| @@ -82,6 +117,8 @@ abstract contract InstanceLinkedComponent is | |
| 82 117 |  | 
| 83 118 | 
             
                    // set component state
         | 
| 84 119 | 
             
                    $._instanceReader = $._instance.getInstanceReader();
         | 
| 120 | 
            +
                    $._initialAuthorization = authorization;
         | 
| 121 | 
            +
                    $._componentService = IComponentService(_getServiceAddress(COMPONENT())); 
         | 
| 85 122 |  | 
| 86 123 | 
             
                    registerInterface(type(IAccessManaged).interfaceId);
         | 
| 87 124 | 
             
                    registerInterface(type(IInstanceLinkedComponent).interfaceId);
         | 
| @@ -93,22 +130,6 @@ abstract contract InstanceLinkedComponent is | |
| 93 130 | 
             
                    IComponentService(_getServiceAddress(COMPONENT())).setWallet(newWallet);
         | 
| 94 131 | 
             
                }
         | 
| 95 132 |  | 
| 96 | 
            -
                function lock() external onlyOwner {
         | 
| 97 | 
            -
                    IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(true);
         | 
| 98 | 
            -
                }
         | 
| 99 | 
            -
                
         | 
| 100 | 
            -
                function unlock() external onlyOwner {
         | 
| 101 | 
            -
                    IInstanceService(_getServiceAddress(INSTANCE())).setComponentLocked(false);
         | 
| 102 | 
            -
                }
         | 
| 103 | 
            -
             | 
| 104 | 
            -
                function getInstance() public view override returns (IInstance instance) {
         | 
| 105 | 
            -
                    return _getInstanceLinkedComponentStorage()._instance;
         | 
| 106 | 
            -
                }
         | 
| 107 | 
            -
             | 
| 108 | 
            -
                function getProductNftId() public view override returns (NftId productNftId) {
         | 
| 109 | 
            -
                    return getComponentInfo().productNftId;
         | 
| 110 | 
            -
                }
         | 
| 111 | 
            -
             | 
| 112 133 |  | 
| 113 134 | 
             
                function _getComponentInfo() internal virtual override view returns (IComponents.ComponentInfo memory info) {
         | 
| 114 135 | 
             
                    NftId componentNftId = getRegistry().getNftId(address(this));
         | 
| @@ -134,6 +155,13 @@ abstract contract InstanceLinkedComponent is | |
| 134 155 | 
             
                    return _getInstanceLinkedComponentStorage()._instanceReader;
         | 
| 135 156 | 
             
                }
         | 
| 136 157 |  | 
| 158 | 
            +
                function _withdrawFees(Amount amount)
         | 
| 159 | 
            +
                    internal
         | 
| 160 | 
            +
                    returns (Amount withdrawnAmount)
         | 
| 161 | 
            +
                {
         | 
| 162 | 
            +
                    return _getInstanceLinkedComponentStorage()._componentService.withdrawFees(amount);
         | 
| 163 | 
            +
                }
         | 
| 164 | 
            +
             | 
| 137 165 |  | 
| 138 166 | 
             
                /// @dev returns the service address for the specified domain
         | 
| 139 167 | 
             
                /// gets address via lookup from registry using the major version form the linked instance
         | 
| @@ -11,7 +11,7 @@ import {Timestamp, TimestampLib} from "../type/Timestamp.sol"; | |
| 11 11 | 
             
            import {Lifecycle} from "./Lifecycle.sol";
         | 
| 12 12 | 
             
            import {IKeyValueStore} from "./IKeyValueStore.sol";
         | 
| 13 13 |  | 
| 14 | 
            -
            contract KeyValueStore is
         | 
| 14 | 
            +
            abstract contract KeyValueStore is
         | 
| 15 15 | 
             
                Lifecycle, 
         | 
| 16 16 | 
             
                IKeyValueStore
         | 
| 17 17 | 
             
            {
         | 
| @@ -34,8 +34,12 @@ contract KeyValueStore is | |
| 34 34 | 
             
                        revert ErrorKeyValueStoreAlreadyCreated(key32, objectType);
         | 
| 35 35 | 
             
                    }
         | 
| 36 36 |  | 
| 37 | 
            +
                    if(!hasLifecycle(objectType)) {
         | 
| 38 | 
            +
                        revert ErrorKeyValueStoreNoLifecycle(objectType);
         | 
| 39 | 
            +
                    }
         | 
| 40 | 
            +
             | 
| 37 41 | 
             
                    Blocknumber blocknumber = blockBlocknumber();
         | 
| 38 | 
            -
                    StateId initialState =  | 
| 42 | 
            +
                    StateId initialState = getInitialState(objectType);
         | 
| 39 43 |  | 
| 40 44 | 
             
                    // set metadata
         | 
| 41 45 | 
             
                    metadata.objectType = objectType;
         |