@etherisc/gif-next 0.0.2-f18fb8b-243 → 0.0.2-f1f3b2c-994
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 +19 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +81 -63
- 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/IAccessAdmin.sol/IAccessAdmin.json +48 -30
- 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/IServiceAuthorization.sol/IServiceAuthorization.json +21 -2
- 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 +72 -9
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +106 -248
- 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 +64 -222
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +228 -217
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +93 -101
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +64 -37
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +120 -31
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1512 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1999 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1432 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1192 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1566 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2001 -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 +17 -106
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +146 -112
- 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 +437 -129
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +44 -151
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +61 -81
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +285 -228
- 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 +45 -4
- 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/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +74 -229
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
- 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 +45 -31
- 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 +42 -213
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +37 -144
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +60 -80
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +94 -274
- 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 +458 -161
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +154 -86
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +229 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +87 -88
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +360 -171
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +84 -270
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +492 -333
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +98 -82
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +36 -162
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +57 -89
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +62 -242
- 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 +263 -181
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +104 -100
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +147 -6
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +295 -119
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +62 -57
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +406 -321
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +104 -100
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +118 -265
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -120
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +62 -242
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +274 -22
- 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 +493 -80
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +263 -145
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -313
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +52 -72
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +46 -5
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1061 -0
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +70 -12
- 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/Component.sol/Component.json +15 -205
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +247 -161
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +105 -95
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +5 -112
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +15 -20
- 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 +34 -31
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +34 -216
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +41 -0
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +41 -0
- 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 +6 -57
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -97
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +5 -112
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +42 -21
- 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 +73 -93
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +100 -256
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +45 -4
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +77 -88
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +31 -138
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +56 -76
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +176 -130
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +61 -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 +28 -4
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +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 +19 -19
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
- 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/Seconds.sol/SecondsLib.json +50 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
- package/artifacts/contracts/type/UFixed.sol/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 +52 -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 +586 -0
- 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/authorization/AccessAdmin.sol +31 -24
- package/contracts/authorization/Authorization.sol +5 -2
- package/contracts/authorization/IAccessAdmin.sol +3 -2
- package/contracts/authorization/IServiceAuthorization.sol +4 -2
- package/contracts/authorization/ServiceAuthorization.sol +27 -11
- package/contracts/distribution/BasicDistribution.sol +4 -15
- package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
- package/contracts/distribution/Distribution.sol +23 -11
- package/contracts/distribution/DistributionService.sol +76 -42
- package/contracts/distribution/DistributionServiceManager.sol +8 -11
- package/contracts/distribution/IDistributionComponent.sol +8 -4
- package/contracts/distribution/IDistributionService.sol +18 -2
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +75 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
- package/contracts/examples/fire/FireProduct.sol +411 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
- package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
- package/contracts/instance/IInstance.sol +11 -34
- package/contracts/instance/IInstanceService.sol +5 -5
- package/contracts/instance/Instance.sol +13 -38
- package/contracts/instance/InstanceAdmin.sol +31 -9
- package/contracts/instance/InstanceAuthorizationV3.sol +16 -14
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +71 -49
- package/contracts/instance/InstanceServiceManager.sol +8 -13
- package/contracts/instance/InstanceStore.sol +12 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +5 -5
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +4 -8
- package/contracts/instance/module/IDistribution.sol +0 -1
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/IOracleComponent.sol +2 -1
- package/contracts/oracle/Oracle.sol +17 -7
- package/contracts/oracle/OracleService.sol +11 -8
- package/contracts/oracle/OracleServiceManager.sol +8 -11
- package/contracts/pool/BasicPool.sol +7 -5
- package/contracts/pool/BasicPoolAuthorization.sol +11 -2
- package/contracts/pool/BundleService.sol +221 -56
- package/contracts/pool/BundleServiceManager.sol +8 -11
- package/contracts/pool/IBundleService.sol +42 -5
- package/contracts/pool/IPoolComponent.sol +24 -8
- package/contracts/pool/IPoolService.sol +57 -36
- package/contracts/pool/Pool.sol +72 -30
- package/contracts/pool/PoolService.sol +240 -129
- package/contracts/pool/PoolServiceManager.sol +6 -9
- package/contracts/product/ApplicationService.sol +62 -65
- package/contracts/product/ApplicationServiceManager.sol +6 -6
- package/contracts/product/BasicProduct.sol +3 -32
- package/contracts/product/BasicProductAuthorization.sol +3 -0
- package/contracts/product/ClaimService.sol +254 -115
- package/contracts/product/ClaimServiceManager.sol +6 -6
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +31 -7
- package/contracts/product/IPolicyService.sol +34 -32
- package/contracts/product/IPricingService.sol +7 -7
- package/contracts/product/IProductComponent.sol +18 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +404 -193
- package/contracts/product/PolicyServiceManager.sol +6 -9
- package/contracts/product/PricingService.sol +46 -46
- package/contracts/product/PricingServiceManager.sol +5 -8
- package/contracts/product/Product.sol +90 -50
- package/contracts/product/{ProductService.sol → RiskService.sol} +13 -41
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +65 -32
- package/contracts/registry/IRegistry.sol +65 -19
- package/contracts/registry/IRegistryService.sol +0 -9
- package/contracts/registry/Registry.sol +340 -211
- package/contracts/registry/RegistryAdmin.sol +155 -72
- package/contracts/registry/RegistryService.sol +59 -66
- package/contracts/registry/RegistryServiceManager.sol +4 -4
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +496 -0
- package/contracts/registry/ServiceAuthorizationV3.sol +13 -15
- package/contracts/registry/TokenRegistry.sol +2 -2
- package/contracts/shared/Component.sol +38 -43
- package/contracts/shared/ComponentService.sol +88 -28
- package/contracts/shared/ComponentServiceManager.sol +10 -7
- package/contracts/shared/ComponentVerifyingService.sol +2 -3
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +7 -4
- package/contracts/shared/IComponentService.sol +15 -9
- package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IService.sol +1 -1
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
- package/contracts/shared/InstanceLinkedComponent.sol +26 -6
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +13 -2
- package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
- package/contracts/shared/NftOwnable.sol +7 -7
- package/contracts/shared/PolicyHolder.sol +17 -57
- package/contracts/shared/Registerable.sol +4 -4
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +19 -15
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +3 -3
- package/contracts/staking/IStakingService.sol +12 -5
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +27 -42
- package/contracts/staking/StakingManager.sol +10 -12
- package/contracts/staking/StakingReader.sol +23 -20
- package/contracts/staking/StakingService.sol +10 -14
- package/contracts/staking/StakingServiceManager.sol +4 -4
- package/contracts/staking/StakingStore.sol +12 -22
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +27 -5
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/NftId.sol +1 -0
- package/contracts/type/ObjectType.sol +19 -18
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/Referral.sol +1 -0
- package/contracts/type/RiskId.sol +15 -1
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +33 -10
- package/contracts/type/Version.sol +3 -1
- package/contracts/{shared → upgradeability}/ProxyManager.sol +70 -38
- package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
- package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
- package/package.json +2 -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/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- package/artifacts/contracts/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/ERC165.sol/ERC165.json +0 -73
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- 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/ProxyManager.sol/ProxyManager.json +0 -617
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
- package/contracts/product/ProductServiceManager.sol +0 -42
- package/contracts/registry/ReleaseManager.sol +0 -487
- package/contracts/shared/InitializableCustom.sol +0 -177
- /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
| @@ -6,7 +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 | 
            +
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 10 10 | 
             
            import {IComponent} from "./IComponent.sol";
         | 
| 11 11 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 12 12 | 
             
            import {NftId, NftIdLib} from "../type/NftId.sol";
         | 
| @@ -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,20 @@ 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 | 
            +
                }
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                modifier onlyNftObjectType(NftId nftId, ObjectType expectedObjectType) {
         | 
| 50 | 
            +
                    ObjectType objectType = getRegistry().getObjectInfo(nftId).objectType;
         | 
| 51 | 
            +
                    if(!objectType.eq(expectedObjectType)) {
         | 
| 52 | 
            +
                        revert ErrorNftNotObjectType(nftId, objectType, expectedObjectType);
         | 
| 53 | 
            +
                    }
         | 
| 54 | 
            +
                    _;
         | 
| 55 | 
            +
                }
         | 
| 43 56 |  | 
| 44 57 | 
             
                function _getComponentStorage() private pure returns (ComponentStorage storage $) {
         | 
| 45 58 | 
             
                    assembly {
         | 
| @@ -47,7 +60,7 @@ abstract contract Component is | |
| 47 60 | 
             
                    }
         | 
| 48 61 | 
             
                }
         | 
| 49 62 |  | 
| 50 | 
            -
                function  | 
| 63 | 
            +
                function _initializeComponent(
         | 
| 51 64 | 
             
                    address authority,
         | 
| 52 65 | 
             
                    address registry,
         | 
| 53 66 | 
             
                    NftId parentNftId,
         | 
| @@ -59,11 +72,11 @@ abstract contract Component is | |
| 59 72 | 
             
                    bytes memory registryData, // writeonly data that will saved in the object info record of the registry
         | 
| 60 73 | 
             
                    bytes memory componentData // other component specific data
         | 
| 61 74 | 
             
                )
         | 
| 62 | 
            -
                     | 
| 75 | 
            +
                    internal
         | 
| 63 76 | 
             
                    virtual
         | 
| 64 77 | 
             
                    onlyInitializing()
         | 
| 65 78 | 
             
                {
         | 
| 66 | 
            -
                     | 
| 79 | 
            +
                    _initializeRegisterable(registry, parentNftId, componentType, isInterceptor, initialOwner, registryData);
         | 
| 67 80 | 
             
                    __AccessManaged_init(authority);
         | 
| 68 81 |  | 
| 69 82 | 
             
                    if (token == address(0)) {
         | 
| @@ -78,13 +91,12 @@ abstract contract Component is | |
| 78 91 | 
             
                    ComponentStorage storage $ = _getComponentStorage();
         | 
| 79 92 | 
             
                    $._name = name;
         | 
| 80 93 | 
             
                    $._token = IERC20Metadata(token);
         | 
| 81 | 
            -
                    $._tokenHandler = TokenHandler(address(0));
         | 
| 82 94 | 
             
                    $._wallet = address(this);
         | 
| 83 95 | 
             
                    $._isInterceptor = isInterceptor;
         | 
| 84 96 | 
             
                    $._data = componentData;
         | 
| 85 97 |  | 
| 86 | 
            -
                     | 
| 87 | 
            -
                     | 
| 98 | 
            +
                    _registerInterface(type(IAccessManaged).interfaceId);
         | 
| 99 | 
            +
                    _registerInterface(type(IComponent).interfaceId);
         | 
| 88 100 | 
             
                }
         | 
| 89 101 |  | 
| 90 102 |  | 
| @@ -105,11 +117,11 @@ abstract contract Component is | |
| 105 117 | 
             
                        revert ErrorComponentWalletNotComponent();
         | 
| 106 118 | 
             
                    }
         | 
| 107 119 |  | 
| 120 | 
            +
                    emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
         | 
| 121 | 
            +
             | 
| 108 122 | 
             
                    IERC20Metadata(token).approve(
         | 
| 109 123 | 
             
                        address(getTokenHandler()),
         | 
| 110 124 | 
             
                        spendingLimitAmount.toInt());
         | 
| 111 | 
            -
             | 
| 112 | 
            -
                    emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
         | 
| 113 125 | 
             
                }
         | 
| 114 126 |  | 
| 115 127 | 
             
                function setWallet(address newWallet)
         | 
| @@ -120,34 +132,22 @@ abstract contract Component is | |
| 120 132 | 
             
                {
         | 
| 121 133 | 
             
                    // checks
         | 
| 122 134 | 
             
                    address currentWallet = getWallet();
         | 
| 123 | 
            -
                     | 
| 124 | 
            -
                    uint256 currentBalance = token.balanceOf(currentWallet);
         | 
| 125 | 
            -
             | 
| 126 | 
            -
                    if (currentBalance > 0) {
         | 
| 127 | 
            -
                        if (currentWallet == address(this)) {
         | 
| 128 | 
            -
                            // move tokens from component smart contract to external wallet
         | 
| 129 | 
            -
                        } else {
         | 
| 130 | 
            -
                            // move tokens from external wallet to component smart contract or another external wallet
         | 
| 131 | 
            -
                            uint256 allowance = token.allowance(currentWallet, address(this));
         | 
| 132 | 
            -
                            if (allowance < currentBalance) {
         | 
| 133 | 
            -
                                revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
         | 
| 134 | 
            -
                            }
         | 
| 135 | 
            -
                        }
         | 
| 136 | 
            -
                    }
         | 
| 135 | 
            +
                    uint256 currentBalance = getToken().balanceOf(currentWallet);
         | 
| 137 136 |  | 
| 138 137 | 
             
                    // effects
         | 
| 139 138 | 
             
                    _setWallet(newWallet);
         | 
| 140 139 |  | 
| 141 140 | 
             
                    // interactions
         | 
| 142 141 | 
             
                    if (currentBalance > 0) {
         | 
| 143 | 
            -
                        //  | 
| 142 | 
            +
                        // move tokens from old to new wallet 
         | 
| 143 | 
            +
                        emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
         | 
| 144 | 
            +
             | 
| 144 145 | 
             
                        if (currentWallet == address(this)) {
         | 
| 145 | 
            -
                            //  | 
| 146 | 
            -
                             | 
| 146 | 
            +
                            // transfer from the component requires an allowance
         | 
| 147 | 
            +
                            getTokenHandler().distributeTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
         | 
| 148 | 
            +
                        } else {
         | 
| 149 | 
            +
                            getTokenHandler().collectTokens(currentWallet, newWallet, AmountLib.toAmount(currentBalance));
         | 
| 147 150 | 
             
                        }
         | 
| 148 | 
            -
                        
         | 
| 149 | 
            -
                        SafeERC20.safeTransferFrom(token, currentWallet, newWallet, currentBalance);
         | 
| 150 | 
            -
                        emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
         | 
| 151 151 | 
             
                    }
         | 
| 152 152 | 
             
                }
         | 
| 153 153 |  | 
| @@ -214,7 +214,7 @@ abstract contract Component is | |
| 214 214 |  | 
| 215 215 |  | 
| 216 216 | 
             
                function isRegistered() public virtual view returns (bool) {
         | 
| 217 | 
            -
                    return getRegistry(). | 
| 217 | 
            +
                    return getRegistry().getNftIdForAddress(address(this)).gtz();
         | 
| 218 218 | 
             
                }
         | 
| 219 219 |  | 
| 220 220 |  | 
| @@ -253,29 +253,24 @@ abstract contract Component is | |
| 253 253 | 
             
                }
         | 
| 254 254 |  | 
| 255 255 |  | 
| 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 256 | 
             
                /// @dev depending on the source of the component information this function needs to be overwritten. 
         | 
| 267 257 | 
             
                /// eg for instance linked components that externally store this information with the instance store contract
         | 
| 268 258 | 
             
                function _getComponentInfo() internal virtual view returns (IComponents.ComponentInfo memory info) {
         | 
| 269 259 | 
             
                    ComponentStorage storage $ = _getComponentStorage();
         | 
| 270 | 
            -
             | 
| 260 | 
            +
                    
         | 
| 271 261 | 
             
                    return IComponents.ComponentInfo({
         | 
| 272 262 | 
             
                        name: $._name,
         | 
| 273 263 | 
             
                        productNftId: NftIdLib.zero(),
         | 
| 274 264 | 
             
                        token: $._token,
         | 
| 275 | 
            -
                        tokenHandler:  | 
| 265 | 
            +
                        tokenHandler: TokenHandler(address(0)),
         | 
| 276 266 | 
             
                        wallet: $._wallet, // initial wallet address
         | 
| 277 267 | 
             
                        data: $._data // user specific component data
         | 
| 278 268 | 
             
                    });
         | 
| 279 269 | 
             
                }
         | 
| 280 270 |  | 
| 271 | 
            +
                function _approveTokenHandler(uint256 amount) internal {
         | 
| 272 | 
            +
                    ComponentStorage storage $ = _getComponentStorage();
         | 
| 273 | 
            +
                    $._token.approve(address(getComponentInfo().tokenHandler), amount);
         | 
| 274 | 
            +
                }
         | 
| 275 | 
            +
             | 
| 281 276 | 
             
            }
         | 
| @@ -4,30 +4,27 @@ pragma solidity ^0.8.20; | |
| 4 4 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 5 5 | 
             
            import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
         | 
| 6 6 | 
             
            import {Fee, FeeLib} from "../type/Fee.sol";
         | 
| 7 | 
            +
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 8 | 
            +
            import {IComponentService} from "./IComponentService.sol";
         | 
| 9 | 
            +
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 7 10 | 
             
            import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
         | 
| 11 | 
            +
            import {InstanceReader} from "../instance/InstanceReader.sol";
         | 
| 12 | 
            +
            import {InstanceStore} from "../instance/InstanceStore.sol";
         | 
| 13 | 
            +
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 14 | 
            +
            import {IPoolComponent} from "../pool/IPoolComponent.sol";
         | 
| 15 | 
            +
            import {IProductComponent} from "../product/IProductComponent.sol";
         | 
| 8 16 | 
             
            import {IRegistry} from "../registry/IRegistry.sol";
         | 
| 9 17 | 
             
            import {IRegistryService} from "../registry/IRegistryService.sol";
         | 
| 10 | 
            -
            import { | 
| 11 | 
            -
            import {IAccess} from "../instance/module/IAccess.sol";
         | 
| 18 | 
            +
            import {KEEP_STATE} from "../type/StateId.sol";
         | 
| 12 19 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 13 20 | 
             
            import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
         | 
| 14 21 | 
             
            import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
         | 
| 15 | 
            -
            import { | 
| 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 | 
            -
            import {TokenHandler} from "./TokenHandler.sol";
         | 
| 22 | 
            +
            import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
         | 
| 25 23 |  | 
| 26 24 | 
             
            contract ComponentService is
         | 
| 27 25 | 
             
                ComponentVerifyingService,
         | 
| 28 26 | 
             
                IComponentService
         | 
| 29 27 | 
             
            {
         | 
| 30 | 
            -
             | 
| 31 28 | 
             
                error ErrorComponentServiceAlreadyRegistered(address component);
         | 
| 32 29 | 
             
                error ErrorComponentServiceNotComponent(address component);
         | 
| 33 30 | 
             
                error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
         | 
| @@ -51,17 +48,17 @@ contract ComponentService is | |
| 51 48 | 
             
                    virtual override
         | 
| 52 49 | 
             
                    initializer()
         | 
| 53 50 | 
             
                {
         | 
| 54 | 
            -
                     | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
                     | 
| 51 | 
            +
                    (
         | 
| 52 | 
            +
                        address registryAddress,
         | 
| 53 | 
            +
                        address authority
         | 
| 54 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 58 55 |  | 
| 59 | 
            -
                     | 
| 56 | 
            +
                    _initializeService(registryAddress, authority, owner);
         | 
| 60 57 |  | 
| 61 58 | 
             
                    _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 62 59 | 
             
                    _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
         | 
| 63 60 |  | 
| 64 | 
            -
                     | 
| 61 | 
            +
                    _registerInterface(type(IComponentService).interfaceId);
         | 
| 65 62 | 
             
                }
         | 
| 66 63 |  | 
| 67 64 | 
             
                //-------- component ----------------------------------------------------//
         | 
| @@ -94,6 +91,37 @@ contract ComponentService is | |
| 94 91 | 
             
                // TODO implement
         | 
| 95 92 | 
             
                function unlock() external virtual {}
         | 
| 96 93 |  | 
| 94 | 
            +
                function withdrawFees(Amount amount)
         | 
| 95 | 
            +
                    external
         | 
| 96 | 
            +
                    virtual
         | 
| 97 | 
            +
                    returns (Amount withdrawnAmount)
         | 
| 98 | 
            +
                {
         | 
| 99 | 
            +
                    (NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
         | 
| 100 | 
            +
                    IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
         | 
| 101 | 
            +
                    address componentWallet = info.wallet;
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                    // determine withdrawn amount
         | 
| 104 | 
            +
                    withdrawnAmount = amount;
         | 
| 105 | 
            +
                    if (withdrawnAmount.gte(AmountLib.max())) {
         | 
| 106 | 
            +
                        withdrawnAmount = instance.getInstanceReader().getFeeAmount(componentNftId);
         | 
| 107 | 
            +
                    } else if (withdrawnAmount.eqz()) {
         | 
| 108 | 
            +
                        revert ErrorComponentServiceWithdrawAmountIsZero();
         | 
| 109 | 
            +
                    } else {
         | 
| 110 | 
            +
                        Amount withdrawLimit = instance.getInstanceReader().getFeeAmount(componentNftId);
         | 
| 111 | 
            +
                        if (withdrawnAmount.gt(withdrawLimit)) {
         | 
| 112 | 
            +
                            revert ErrorComponentServiceWithdrawAmountExceedsLimit(withdrawnAmount, withdrawLimit);
         | 
| 113 | 
            +
                        }
         | 
| 114 | 
            +
                    }
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                    // decrease fee counters by withdrawnAmount
         | 
| 117 | 
            +
                    _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
         | 
| 118 | 
            +
                    
         | 
| 119 | 
            +
                    // transfer amount to component owner
         | 
| 120 | 
            +
                    address componentOwner = getRegistry().ownerOf(componentNftId);
         | 
| 121 | 
            +
                    emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
         | 
| 122 | 
            +
                    info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
         | 
| 123 | 
            +
                }
         | 
| 124 | 
            +
             | 
| 97 125 |  | 
| 98 126 | 
             
                //-------- product ------------------------------------------------------//
         | 
| 99 127 |  | 
| @@ -112,7 +140,7 @@ contract ComponentService is | |
| 112 140 | 
             
                        contractAddress,
         | 
| 113 141 | 
             
                        PRODUCT(),
         | 
| 114 142 | 
             
                        PRODUCT_OWNER_ROLE());
         | 
| 115 | 
            -
             | 
| 143 | 
            +
                    
         | 
| 116 144 | 
             
                    // create product info
         | 
| 117 145 | 
             
                    IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
         | 
| 118 146 | 
             
                    instanceStore.createProduct(productNftId, productInfo);
         | 
| @@ -255,6 +283,36 @@ contract ComponentService is | |
| 255 283 | 
             
                    _changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
         | 
| 256 284 | 
             
                }
         | 
| 257 285 |  | 
| 286 | 
            +
                //-------- distributor -------------------------------------------------------//
         | 
| 287 | 
            +
             | 
| 288 | 
            +
                function increaseDistributorBalance(
         | 
| 289 | 
            +
                    InstanceStore instanceStore, 
         | 
| 290 | 
            +
                    NftId distributorNftId, 
         | 
| 291 | 
            +
                    Amount amount, 
         | 
| 292 | 
            +
                    Amount feeAmount
         | 
| 293 | 
            +
                )
         | 
| 294 | 
            +
                    external
         | 
| 295 | 
            +
                    virtual
         | 
| 296 | 
            +
                    // TODO re-enable once role granting is stable and fixed
         | 
| 297 | 
            +
                    // restricted()
         | 
| 298 | 
            +
                {
         | 
| 299 | 
            +
                    _changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
         | 
| 300 | 
            +
                }
         | 
| 301 | 
            +
             | 
| 302 | 
            +
                function decreaseDistributorBalance(
         | 
| 303 | 
            +
                    InstanceStore instanceStore, 
         | 
| 304 | 
            +
                    NftId distributorNftId, 
         | 
| 305 | 
            +
                    Amount amount, 
         | 
| 306 | 
            +
                    Amount feeAmount
         | 
| 307 | 
            +
                )
         | 
| 308 | 
            +
                    external
         | 
| 309 | 
            +
                    virtual
         | 
| 310 | 
            +
                    // TODO re-enable once role granting is stable and fixed
         | 
| 311 | 
            +
                    // restricted()
         | 
| 312 | 
            +
                {
         | 
| 313 | 
            +
                    _changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
         | 
| 314 | 
            +
                }
         | 
| 315 | 
            +
             | 
| 258 316 | 
             
                //-------- oracle -------------------------------------------------------//
         | 
| 259 317 |  | 
| 260 318 | 
             
                function registerOracle()
         | 
| @@ -453,22 +511,24 @@ contract ComponentService is | |
| 453 511 |  | 
| 454 512 | 
             
                    component.linkToRegisteredNftId();
         | 
| 455 513 |  | 
| 456 | 
            -
                    // setup initial component authorization
         | 
| 457 | 
            -
                    _instanceService.initializeAuthorization(
         | 
| 458 | 
            -
                        instance.getNftId(),
         | 
| 459 | 
            -
                        component);
         | 
| 460 | 
            -
             | 
| 461 514 | 
             
                    // save amended component info with instance
         | 
| 462 515 | 
             
                    instanceReader = instance.getInstanceReader();
         | 
| 463 516 | 
             
                    instanceStore = instance.getInstanceStore();
         | 
| 464 517 |  | 
| 465 | 
            -
                    IComponents.ComponentInfo memory componentInfo = component. | 
| 466 | 
            -
                    componentInfo.tokenHandler =  | 
| 518 | 
            +
                    IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
         | 
| 519 | 
            +
                    componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
         | 
| 520 | 
            +
                        address(componentInfo.token), 
         | 
| 521 | 
            +
                        address(instance.getInstanceAdmin().authority()));
         | 
| 467 522 |  | 
| 468 523 | 
             
                    instanceStore.createComponent(
         | 
| 469 524 | 
             
                        component.getNftId(), 
         | 
| 470 525 | 
             
                        componentInfo);
         | 
| 471 526 |  | 
| 527 | 
            +
                    // setup initial component authorization
         | 
| 528 | 
            +
                    _instanceService.initializeAuthorization(
         | 
| 529 | 
            +
                        instance.getNftId(),
         | 
| 530 | 
            +
                        component);
         | 
| 531 | 
            +
             | 
| 472 532 | 
             
                    // TODO add logging
         | 
| 473 533 | 
             
                }
         | 
| 474 534 |  | 
| @@ -562,7 +622,7 @@ contract ComponentService is | |
| 562 622 | 
             
                    }
         | 
| 563 623 |  | 
| 564 624 | 
             
                    // check component has not already been registered
         | 
| 565 | 
            -
                    if (getRegistry(). | 
| 625 | 
            +
                    if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
         | 
| 566 626 | 
             
                        revert ErrorComponentServiceAlreadyRegistered(componentAddress);
         | 
| 567 627 | 
             
                    }
         | 
| 568 628 |  | 
| @@ -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 |  | 
| @@ -11,15 +11,18 @@ contract ComponentServiceManager is ProxyManager { | |
| 11 11 |  | 
| 12 12 | 
             
                /// @dev initializes proxy manager with service implementation 
         | 
| 13 13 | 
             
                constructor(
         | 
| 14 | 
            -
                    address  | 
| 14 | 
            +
                    address authority, 
         | 
| 15 | 
            +
                    address registry,
         | 
| 16 | 
            +
                    bytes32 salt
         | 
| 15 17 | 
             
                )
         | 
| 16 | 
            -
                    ProxyManager(registryAddress)
         | 
| 17 18 | 
             
                {
         | 
| 18 19 | 
             
                    ComponentService svc = new ComponentService();
         | 
| 19 | 
            -
                    bytes memory data = abi.encode( | 
| 20 | 
            -
                    IVersionable versionable =  | 
| 20 | 
            +
                    bytes memory data = abi.encode(registry, authority);
         | 
| 21 | 
            +
                    IVersionable versionable = initialize(
         | 
| 22 | 
            +
                        registry,
         | 
| 21 23 | 
             
                        address(svc), 
         | 
| 22 | 
            -
                        data | 
| 24 | 
            +
                        data,
         | 
| 25 | 
            +
                        salt);
         | 
| 23 26 |  | 
| 24 27 | 
             
                    _componentService = ComponentService(address(versionable));
         | 
| 25 28 | 
             
                }
         | 
| @@ -32,7 +32,7 @@ abstract contract ComponentVerifyingService is | |
| 32 32 | 
             
                        IInstance instance
         | 
| 33 33 | 
             
                    )
         | 
| 34 34 | 
             
                {
         | 
| 35 | 
            -
                    componentNftId = getRegistry(). | 
| 35 | 
            +
                    componentNftId = getRegistry().getNftIdForAddress(msg.sender);
         | 
| 36 36 | 
             
                    (componentInfo, instance) = _getAndVerifyComponentInfo(
         | 
| 37 37 | 
             
                        componentNftId, 
         | 
| 38 38 | 
             
                        expectedType,
         | 
| @@ -111,7 +111,6 @@ abstract contract ComponentVerifyingService is | |
| 111 111 | 
             
                /// @dev returns an IInstance contract reference for the specified instance nft id
         | 
| 112 112 | 
             
                function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
         | 
| 113 113 | 
             
                    return IInstance(
         | 
| 114 | 
            -
                        getRegistry(). | 
| 115 | 
            -
                            instanceNftId).objectAddress);
         | 
| 114 | 
            +
                        getRegistry().getObjectAddress(instanceNftId));
         | 
| 116 115 | 
             
                }
         | 
| 117 116 | 
             
            }
         | 
| @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            // SPDX-License-Identifier: Apache-2.0
         | 
| 2 | 
            +
            pragma solidity ^0.8.20;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            import {ERC165Checker} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
         | 
| 5 | 
            +
            import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            import {IPolicyHolder} from "./IPolicyHolder.sol";
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            library ContractLib {
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                function isPolicyHolder(address target) external view returns (bool) {
         | 
| 12 | 
            +
                    return ERC165Checker.supportsInterface(target, type(IPolicyHolder).interfaceId);
         | 
| 13 | 
            +
                }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                function isAccessManaged(address target) external view returns (bool) {
         | 
| 16 | 
            +
                    if (!isContract(target)) {
         | 
| 17 | 
            +
                        return false;
         | 
| 18 | 
            +
                    }
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    (bool success, ) = target.staticcall(
         | 
| 21 | 
            +
                        abi.encodeWithSelector(
         | 
| 22 | 
            +
                            IAccessManaged.authority.selector));
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    return success;
         | 
| 25 | 
            +
                }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                function isContract(address target) public view returns (bool) {
         | 
| 28 | 
            +
                    uint256 size;
         | 
| 29 | 
            +
                    assembly {
         | 
| 30 | 
            +
                        size := extcodesize(target)
         | 
| 31 | 
            +
                    }
         | 
| 32 | 
            +
                    return size > 0;
         | 
| 33 | 
            +
                }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                function supportsInterface(address target, bytes4 interfaceId)  external view returns (bool) {
         | 
| 36 | 
            +
                    return ERC165Checker.supportsInterface(target, interfaceId);
         | 
| 37 | 
            +
                }
         | 
| 38 | 
            +
            }
         | 
| @@ -8,6 +8,8 @@ import {Amount} from "../type/Amount.sol"; | |
| 8 8 | 
             
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 9 9 | 
             
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 10 10 | 
             
            import {ITransferInterceptor} from "../registry/ITransferInterceptor.sol";
         | 
| 11 | 
            +
            import {NftId} from "../type/NftId.sol";
         | 
| 12 | 
            +
            import {ObjectType} from "../type/ObjectType.sol";
         | 
| 11 13 | 
             
            import {TokenHandler} from "../shared/TokenHandler.sol";
         | 
| 12 14 |  | 
| 13 15 | 
             
            /// @dev component base class
         | 
| @@ -18,12 +20,12 @@ interface IComponent is | |
| 18 20 | 
             
                ITransferInterceptor
         | 
| 19 21 | 
             
            {
         | 
| 20 22 | 
             
                error ErrorComponentNotChainNft(address caller);
         | 
| 23 | 
            +
                error ErrorNftNotObjectType(NftId nftId, ObjectType objectType, ObjectType expectedObjectType);
         | 
| 21 24 |  | 
| 22 25 | 
             
                error ErrorComponentTokenAddressZero();
         | 
| 23 26 | 
             
                error ErrorComponentNameLengthZero();
         | 
| 24 27 | 
             
                error ErrorComponentWalletAddressZero();
         | 
| 25 28 | 
             
                error ErrorComponentWalletAddressIsSameAsCurrent();
         | 
| 26 | 
            -
                error ErrorComponentWalletAllowanceTooSmall(address oldWallet, address newWallet, uint256 allowance, uint256 balance);
         | 
| 27 29 | 
             
                error ErrorComponentWalletNotComponent();
         | 
| 28 30 |  | 
| 29 31 | 
             
                event LogComponentWalletAddressChanged(address oldWallet, address newWallet);
         | 
| @@ -35,10 +37,11 @@ interface IComponent is | |
| 35 37 | 
             
                /// only component owner (nft holder) is authorizes to call this function
         | 
| 36 38 | 
             
                function approveTokenHandler(Amount spendingLimitAmount) external;
         | 
| 37 39 |  | 
| 38 | 
            -
                /// @dev sets the wallet address for the component
         | 
| 39 | 
            -
                /// if the current wallet has tokens, these will be transferred
         | 
| 40 | 
            +
                /// @dev sets the wallet address for the component.
         | 
| 41 | 
            +
                /// if the current wallet has tokens, these will be transferred.
         | 
| 40 42 | 
             
                /// if the new wallet address is externally owned, an approval from the 
         | 
| 41 | 
            -
                /// owner of the external wallet  | 
| 43 | 
            +
                /// owner of the external wallet to the tokenhandler of the component that 
         | 
| 44 | 
            +
                /// covers the current component balance must exist
         | 
| 42 45 | 
             
                function setWallet(address walletAddress) external;
         | 
| 43 46 |  | 
| 44 47 | 
             
                /// @dev returns the name of this component
         | 
| @@ -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,23 +4,17 @@ 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 | 
            -
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 10 10 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 11 | 
            -
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 12 | 
            -
            import {IProductService} from "../product/IProductService.sol";
         | 
| 13 | 
            -
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 14 11 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 15 | 
            -
            import {ObjectType} from "../type/ObjectType.sol";
         | 
| 16 | 
            -
            import {TokenHandler} from "../shared/TokenHandler.sol";
         | 
| 17 12 |  | 
| 18 13 | 
             
            /// @dev component base class
         | 
| 19 14 | 
             
            /// component examples are product, distribution, pool and oracle
         | 
| 20 15 | 
             
            interface IInstanceLinkedComponent is 
         | 
| 21 16 | 
             
                IComponent
         | 
| 22 17 | 
             
            {
         | 
| 23 | 
            -
                error ErrorComponentNotProductService(address caller);
         | 
| 24 18 | 
             
                error ErrorComponentNotInstance(NftId instanceNftId);
         | 
| 25 19 | 
             
                error ErrorComponentProductNftAlreadySet();
         | 
| 26 20 |  | 
| @@ -37,14 +31,19 @@ interface IInstanceLinkedComponent is | |
| 37 31 | 
             
                /// only component owner (nft holder) is authorizes to call this function
         | 
| 38 32 | 
             
                function unlock() external;
         | 
| 39 33 |  | 
| 34 | 
            +
                /// @dev Withdraw fees from the distribution component. Only component owner is allowed to withdraw fees.
         | 
| 35 | 
            +
                /// @param amount the amount to withdraw
         | 
| 36 | 
            +
                /// @return withdrawnAmount the amount that was actually withdrawn
         | 
| 37 | 
            +
                function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
         | 
| 38 | 
            +
             | 
| 40 39 | 
             
                /// @dev defines the instance to which this component is linked to
         | 
| 41 40 | 
             
                function getInstance() external view returns (IInstance instance);
         | 
| 42 41 |  | 
| 42 | 
            +
                /// @dev returns the initial component authorization specification.
         | 
| 43 | 
            +
                function getAuthorization() external view returns (IAuthorization authorization);
         | 
| 44 | 
            +
             | 
| 43 45 | 
             
                /// @dev defines the product to which this component is linked to
         | 
| 44 46 | 
             
                /// this is only relevant for pool and distribution components
         | 
| 45 47 | 
             
                function getProductNftId() external view returns (NftId productNftId);
         | 
| 46 48 |  | 
| 47 | 
            -
                /// @dev returns the initial component authorization specification.
         | 
| 48 | 
            -
                function getAuthorization() external view returns (IAuthorization authorization);
         | 
| 49 | 
            -
             | 
| 50 49 | 
             
            }
         | 
| @@ -6,8 +6,10 @@ import {StateId} from "../type/StateId.sol"; | |
| 6 6 |  | 
| 7 7 | 
             
            interface ILifecycle {
         | 
| 8 8 |  | 
| 9 | 
            -
                error ErrorNoLifecycle(ObjectType objectType);
         | 
| 9 | 
            +
                error ErrorNoLifecycle(address contractAddress, ObjectType objectType);
         | 
| 10 | 
            +
                error ErrorFromStateMissmatch(address contractAddress, ObjectType objectType, StateId actual, StateId required);
         | 
| 10 11 | 
             
                error ErrorInvalidStateTransition(
         | 
| 12 | 
            +
                    address contractAddress,
         | 
| 11 13 | 
             
                    ObjectType objectType,
         | 
| 12 14 | 
             
                    StateId fromStateId,
         | 
| 13 15 | 
             
                    StateId toStateId
         |