@etherisc/gif-next 0.0.2-f1e0c66-773 → 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 +7 -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 +63 -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 +21 -222
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +134 -286
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +84 -120
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +21 -37
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +49 -62
- 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 +1 -1
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +10 -99
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +145 -111
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -124
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +39 -146
- 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 -218
- 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 +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
- 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 +47 -232
- 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 +15 -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 +15 -216
- 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 +51 -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 +319 -188
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +130 -94
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +149 -23
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -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 +41 -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 +43 -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 +282 -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 +43 -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 +399 -327
- 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 +115 -267
- 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 +43 -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 +238 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +436 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +261 -143
- 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 +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +117 -215
- 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 +89 -212
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +96 -114
- 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/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +15 -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 +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +2 -22
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +15 -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 +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +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 +63 -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 +168 -127
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +54 -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 +32 -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 +2 -2
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/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 +2 -2
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +15 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +39 -70
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/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/Distribution.sol +1 -1
- package/contracts/distribution/DistributionService.sol +32 -33
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionService.sol +9 -5
- 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/IInstance.sol +7 -30
- package/contracts/instance/Instance.sol +10 -35
- package/contracts/instance/InstanceAdmin.sol +29 -7
- package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +63 -41
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +11 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +4 -7
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/Oracle.sol +2 -1
- package/contracts/oracle/OracleService.sol +11 -8
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +7 -5
- package/contracts/pool/BasicPoolAuthorization.sol +5 -2
- package/contracts/pool/BundleService.sol +166 -46
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +31 -8
- package/contracts/pool/IPoolComponent.sol +18 -8
- package/contracts/pool/IPoolService.sol +57 -36
- package/contracts/pool/Pool.sol +59 -34
- package/contracts/pool/PoolService.sol +231 -102
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +50 -29
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +1 -0
- package/contracts/product/ClaimService.sol +251 -87
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +31 -7
- package/contracts/product/IPolicyService.sol +34 -34
- package/contracts/product/IPricingService.sol +7 -7
- package/contracts/product/IProductComponent.sol +17 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +379 -192
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +46 -46
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +81 -50
- package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +65 -32
- package/contracts/registry/IRegistry.sol +51 -18
- package/contracts/registry/IRegistryService.sol +0 -9
- package/contracts/registry/Registry.sol +328 -197
- package/contracts/registry/RegistryAdmin.sol +134 -51
- package/contracts/registry/RegistryService.sol +55 -48
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +194 -183
- package/contracts/registry/ServiceAuthorizationV3.sol +8 -10
- package/contracts/shared/Component.sol +25 -29
- package/contracts/shared/ComponentService.sol +20 -30
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +2 -3
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +7 -4
- package/contracts/shared/IInstanceLinkedComponent.sol +8 -15
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +5 -6
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +13 -2
- package/contracts/shared/NftOwnable.sol +5 -5
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +4 -4
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +16 -11
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +2 -1
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +11 -29
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +10 -14
- package/contracts/staking/StakingServiceManager.sol +2 -2
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +15 -0
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/NftId.sol +1 -0
- package/contracts/type/ObjectType.sol +16 -11
- package/contracts/type/PayoutId.sol +10 -10
- 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 +4 -0
- package/contracts/upgradeability/ProxyManager.sol +67 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +2 -1
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
| @@ -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";
         | 
| @@ -46,13 +46,21 @@ abstract contract Component is | |
| 46 46 | 
             
                    _;
         | 
| 47 47 | 
             
                }
         | 
| 48 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 | 
            +
                }
         | 
| 56 | 
            +
             | 
| 49 57 | 
             
                function _getComponentStorage() private pure returns (ComponentStorage storage $) {
         | 
| 50 58 | 
             
                    assembly {
         | 
| 51 59 | 
             
                        $.slot := COMPONENT_LOCATION_V1
         | 
| 52 60 | 
             
                    }
         | 
| 53 61 | 
             
                }
         | 
| 54 62 |  | 
| 55 | 
            -
                function  | 
| 63 | 
            +
                function _initializeComponent(
         | 
| 56 64 | 
             
                    address authority,
         | 
| 57 65 | 
             
                    address registry,
         | 
| 58 66 | 
             
                    NftId parentNftId,
         | 
| @@ -64,11 +72,11 @@ abstract contract Component is | |
| 64 72 | 
             
                    bytes memory registryData, // writeonly data that will saved in the object info record of the registry
         | 
| 65 73 | 
             
                    bytes memory componentData // other component specific data
         | 
| 66 74 | 
             
                )
         | 
| 67 | 
            -
                     | 
| 75 | 
            +
                    internal
         | 
| 68 76 | 
             
                    virtual
         | 
| 69 77 | 
             
                    onlyInitializing()
         | 
| 70 78 | 
             
                {
         | 
| 71 | 
            -
                     | 
| 79 | 
            +
                    _initializeRegisterable(registry, parentNftId, componentType, isInterceptor, initialOwner, registryData);
         | 
| 72 80 | 
             
                    __AccessManaged_init(authority);
         | 
| 73 81 |  | 
| 74 82 | 
             
                    if (token == address(0)) {
         | 
| @@ -87,8 +95,8 @@ abstract contract Component is | |
| 87 95 | 
             
                    $._isInterceptor = isInterceptor;
         | 
| 88 96 | 
             
                    $._data = componentData;
         | 
| 89 97 |  | 
| 90 | 
            -
                     | 
| 91 | 
            -
                     | 
| 98 | 
            +
                    _registerInterface(type(IAccessManaged).interfaceId);
         | 
| 99 | 
            +
                    _registerInterface(type(IComponent).interfaceId);
         | 
| 92 100 | 
             
                }
         | 
| 93 101 |  | 
| 94 102 |  | 
| @@ -109,11 +117,11 @@ abstract contract Component is | |
| 109 117 | 
             
                        revert ErrorComponentWalletNotComponent();
         | 
| 110 118 | 
             
                    }
         | 
| 111 119 |  | 
| 120 | 
            +
                    emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
         | 
| 121 | 
            +
             | 
| 112 122 | 
             
                    IERC20Metadata(token).approve(
         | 
| 113 123 | 
             
                        address(getTokenHandler()),
         | 
| 114 124 | 
             
                        spendingLimitAmount.toInt());
         | 
| 115 | 
            -
             | 
| 116 | 
            -
                    emit LogComponentTokenHandlerApproved(address(getTokenHandler()), spendingLimitAmount);
         | 
| 117 125 | 
             
                }
         | 
| 118 126 |  | 
| 119 127 | 
             
                function setWallet(address newWallet)
         | 
| @@ -124,34 +132,22 @@ abstract contract Component is | |
| 124 132 | 
             
                {
         | 
| 125 133 | 
             
                    // checks
         | 
| 126 134 | 
             
                    address currentWallet = getWallet();
         | 
| 127 | 
            -
                     | 
| 128 | 
            -
                    uint256 currentBalance = token.balanceOf(currentWallet);
         | 
| 129 | 
            -
             | 
| 130 | 
            -
                    if (currentBalance > 0) {
         | 
| 131 | 
            -
                        if (currentWallet == address(this)) {
         | 
| 132 | 
            -
                            // move tokens from component smart contract to external wallet
         | 
| 133 | 
            -
                        } else {
         | 
| 134 | 
            -
                            // move tokens from external wallet to component smart contract or another external wallet
         | 
| 135 | 
            -
                            uint256 allowance = token.allowance(currentWallet, address(this));
         | 
| 136 | 
            -
                            if (allowance < currentBalance) {
         | 
| 137 | 
            -
                                revert ErrorComponentWalletAllowanceTooSmall(currentWallet, newWallet, allowance, currentBalance);
         | 
| 138 | 
            -
                            }
         | 
| 139 | 
            -
                        }
         | 
| 140 | 
            -
                    }
         | 
| 135 | 
            +
                    uint256 currentBalance = getToken().balanceOf(currentWallet);
         | 
| 141 136 |  | 
| 142 137 | 
             
                    // effects
         | 
| 143 138 | 
             
                    _setWallet(newWallet);
         | 
| 144 139 |  | 
| 145 140 | 
             
                    // interactions
         | 
| 146 141 | 
             
                    if (currentBalance > 0) {
         | 
| 147 | 
            -
                        //  | 
| 142 | 
            +
                        // move tokens from old to new wallet 
         | 
| 143 | 
            +
                        emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
         | 
| 144 | 
            +
             | 
| 148 145 | 
             
                        if (currentWallet == address(this)) {
         | 
| 149 | 
            -
                            //  | 
| 150 | 
            -
                             | 
| 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));
         | 
| 151 150 | 
             
                        }
         | 
| 152 | 
            -
                        
         | 
| 153 | 
            -
                        SafeERC20.safeTransferFrom(token, currentWallet, newWallet, currentBalance);
         | 
| 154 | 
            -
                        emit LogComponentWalletTokensTransferred(currentWallet, newWallet, currentBalance);
         | 
| 155 151 | 
             
                    }
         | 
| 156 152 | 
             
                }
         | 
| 157 153 |  | 
| @@ -218,7 +214,7 @@ abstract contract Component is | |
| 218 214 |  | 
| 219 215 |  | 
| 220 216 | 
             
                function isRegistered() public virtual view returns (bool) {
         | 
| 221 | 
            -
                    return getRegistry(). | 
| 217 | 
            +
                    return getRegistry().getNftIdForAddress(address(this)).gtz();
         | 
| 222 218 | 
             
                }
         | 
| 223 219 |  | 
| 224 220 |  | 
| @@ -1,8 +1,6 @@ | |
| 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 | 
            -
             | 
| 6 4 | 
             
            import {Amount, AmountLib} from "../type/Amount.sol";
         | 
| 7 5 | 
             
            import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
         | 
| 8 6 | 
             
            import {Fee, FeeLib} from "../type/Fee.sol";
         | 
| @@ -21,7 +19,7 @@ import {KEEP_STATE} from "../type/StateId.sol"; | |
| 21 19 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 22 20 | 
             
            import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
         | 
| 23 21 | 
             
            import {RoleId, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE} from "../type/RoleId.sol";
         | 
| 24 | 
            -
            import { | 
| 22 | 
            +
            import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
         | 
| 25 23 |  | 
| 26 24 | 
             
            contract ComponentService is
         | 
| 27 25 | 
             
                ComponentVerifyingService,
         | 
| @@ -50,17 +48,17 @@ contract ComponentService is | |
| 50 48 | 
             
                    virtual override
         | 
| 51 49 | 
             
                    initializer()
         | 
| 52 50 | 
             
                {
         | 
| 53 | 
            -
                     | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
                     | 
| 51 | 
            +
                    (
         | 
| 52 | 
            +
                        address registryAddress,
         | 
| 53 | 
            +
                        address authority
         | 
| 54 | 
            +
                    ) = abi.decode(data, (address, address));
         | 
| 57 55 |  | 
| 58 | 
            -
                     | 
| 56 | 
            +
                    _initializeService(registryAddress, authority, owner);
         | 
| 59 57 |  | 
| 60 58 | 
             
                    _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
         | 
| 61 59 | 
             
                    _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
         | 
| 62 60 |  | 
| 63 | 
            -
                     | 
| 61 | 
            +
                    _registerInterface(type(IComponentService).interfaceId);
         | 
| 64 62 | 
             
                }
         | 
| 65 63 |  | 
| 66 64 | 
             
                //-------- component ----------------------------------------------------//
         | 
| @@ -115,23 +113,13 @@ contract ComponentService is | |
| 115 113 | 
             
                        }
         | 
| 116 114 | 
             
                    }
         | 
| 117 115 |  | 
| 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 116 | 
             
                    // decrease fee counters by withdrawnAmount
         | 
| 127 117 | 
             
                    _changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
         | 
| 128 118 |  | 
| 129 119 | 
             
                    // transfer amount to component owner
         | 
| 130 120 | 
             
                    address componentOwner = getRegistry().ownerOf(componentNftId);
         | 
| 131 | 
            -
                     | 
| 132 | 
            -
                    tokenHandler. | 
| 133 | 
            -
             | 
| 134 | 
            -
                    emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(token), withdrawnAmount);
         | 
| 121 | 
            +
                    emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
         | 
| 122 | 
            +
                    info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
         | 
| 135 123 | 
             
                }
         | 
| 136 124 |  | 
| 137 125 |  | 
| @@ -152,7 +140,7 @@ contract ComponentService is | |
| 152 140 | 
             
                        contractAddress,
         | 
| 153 141 | 
             
                        PRODUCT(),
         | 
| 154 142 | 
             
                        PRODUCT_OWNER_ROLE());
         | 
| 155 | 
            -
             | 
| 143 | 
            +
                    
         | 
| 156 144 | 
             
                    // create product info
         | 
| 157 145 | 
             
                    IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
         | 
| 158 146 | 
             
                    instanceStore.createProduct(productNftId, productInfo);
         | 
| @@ -523,22 +511,24 @@ contract ComponentService is | |
| 523 511 |  | 
| 524 512 | 
             
                    component.linkToRegisteredNftId();
         | 
| 525 513 |  | 
| 526 | 
            -
                    // setup initial component authorization
         | 
| 527 | 
            -
                    _instanceService.initializeAuthorization(
         | 
| 528 | 
            -
                        instance.getNftId(),
         | 
| 529 | 
            -
                        component);
         | 
| 530 | 
            -
             | 
| 531 514 | 
             
                    // save amended component info with instance
         | 
| 532 515 | 
             
                    instanceReader = instance.getInstanceReader();
         | 
| 533 516 | 
             
                    instanceStore = instance.getInstanceStore();
         | 
| 534 517 |  | 
| 535 | 
            -
                    IComponents.ComponentInfo memory componentInfo = component. | 
| 536 | 
            -
                    componentInfo.tokenHandler =  | 
| 518 | 
            +
                    IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
         | 
| 519 | 
            +
                    componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
         | 
| 520 | 
            +
                        address(componentInfo.token), 
         | 
| 521 | 
            +
                        address(instance.getInstanceAdmin().authority()));
         | 
| 537 522 |  | 
| 538 523 | 
             
                    instanceStore.createComponent(
         | 
| 539 524 | 
             
                        component.getNftId(), 
         | 
| 540 525 | 
             
                        componentInfo);
         | 
| 541 526 |  | 
| 527 | 
            +
                    // setup initial component authorization
         | 
| 528 | 
            +
                    _instanceService.initializeAuthorization(
         | 
| 529 | 
            +
                        instance.getNftId(),
         | 
| 530 | 
            +
                        component);
         | 
| 531 | 
            +
             | 
| 542 532 | 
             
                    // TODO add logging
         | 
| 543 533 | 
             
                }
         | 
| 544 534 |  | 
| @@ -632,7 +622,7 @@ contract ComponentService is | |
| 632 622 | 
             
                    }
         | 
| 633 623 |  | 
| 634 624 | 
             
                    // check component has not already been registered
         | 
| 635 | 
            -
                    if (getRegistry(). | 
| 625 | 
            +
                    if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
         | 
| 636 626 | 
             
                        revert ErrorComponentServiceAlreadyRegistered(componentAddress);
         | 
| 637 627 | 
             
                    }
         | 
| 638 628 |  | 
| @@ -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
         | 
| @@ -7,21 +7,14 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER | |
| 7 7 | 
             
            import {Amount} from "../type/Amount.sol";
         | 
| 8 8 | 
             
            import {IComponent} from "../shared/IComponent.sol";
         | 
| 9 9 | 
             
            import {IAuthorization} from "../authorization/IAuthorization.sol";
         | 
| 10 | 
            -
            import {IComponents} from "../instance/module/IComponents.sol";
         | 
| 11 10 | 
             
            import {IInstance} from "../instance/IInstance.sol";
         | 
| 12 | 
            -
            import {IInstanceService} from "../instance/IInstanceService.sol";
         | 
| 13 | 
            -
            import {IProductService} from "../product/IProductService.sol";
         | 
| 14 | 
            -
            import {IRegisterable} from "../shared/IRegisterable.sol";
         | 
| 15 11 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 16 | 
            -
            import {ObjectType} from "../type/ObjectType.sol";
         | 
| 17 | 
            -
            import {TokenHandler} from "../shared/TokenHandler.sol";
         | 
| 18 12 |  | 
| 19 13 | 
             
            /// @dev component base class
         | 
| 20 14 | 
             
            /// component examples are product, distribution, pool and oracle
         | 
| 21 15 | 
             
            interface IInstanceLinkedComponent is 
         | 
| 22 16 | 
             
                IComponent
         | 
| 23 17 | 
             
            {
         | 
| 24 | 
            -
                error ErrorComponentNotProductService(address caller);
         | 
| 25 18 | 
             
                error ErrorComponentNotInstance(NftId instanceNftId);
         | 
| 26 19 | 
             
                error ErrorComponentProductNftAlreadySet();
         | 
| 27 20 |  | 
| @@ -38,19 +31,19 @@ interface IInstanceLinkedComponent is | |
| 38 31 | 
             
                /// only component owner (nft holder) is authorizes to call this function
         | 
| 39 32 | 
             
                function unlock() external;
         | 
| 40 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 | 
            +
             | 
| 41 39 | 
             
                /// @dev defines the instance to which this component is linked to
         | 
| 42 40 | 
             
                function getInstance() external view returns (IInstance instance);
         | 
| 43 41 |  | 
| 44 | 
            -
                /// @dev defines the product to which this component is linked to
         | 
| 45 | 
            -
                /// this is only relevant for pool and distribution components
         | 
| 46 | 
            -
                function getProductNftId() external view returns (NftId productNftId);
         | 
| 47 | 
            -
             | 
| 48 42 | 
             
                /// @dev returns the initial component authorization specification.
         | 
| 49 43 | 
             
                function getAuthorization() external view returns (IAuthorization authorization);
         | 
| 50 44 |  | 
| 51 | 
            -
                /// @dev  | 
| 52 | 
            -
                ///  | 
| 53 | 
            -
                 | 
| 54 | 
            -
                function withdrawFees(Amount amount) external returns (Amount withdrawnAmount);
         | 
| 45 | 
            +
                /// @dev defines the product to which this component is linked to
         | 
| 46 | 
            +
                /// this is only relevant for pool and distribution components
         | 
| 47 | 
            +
                function getProductNftId() external view returns (NftId productNftId);
         | 
| 55 48 |  | 
| 56 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
         | 
| @@ -9,37 +9,27 @@ import {ClaimId} from "../type/ClaimId.sol"; | |
| 9 9 | 
             
            import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
         | 
| 10 10 | 
             
            import {NftId} from "../type/NftId.sol";
         | 
| 11 11 | 
             
            import {PayoutId} from "../type/PayoutId.sol";
         | 
| 12 | 
            +
            import {Timestamp} from "../type/Timestamp.sol";
         | 
| 12 13 |  | 
| 13 | 
            -
            /// @dev  | 
| 14 | 
            -
            ///  | 
| 14 | 
            +
            /// @dev Generic interface for contracts that need to hold policies and receive payouts.
         | 
| 15 | 
            +
            /// The framework notifies policy holder contracts for policy creation/expiry, claim confirmation and payout execution
         | 
| 15 16 | 
             
            interface IPolicyHolder is
         | 
| 16 17 | 
             
                IERC165,
         | 
| 17 18 | 
             
                IERC721Receiver,
         | 
| 18 19 | 
             
                IRegistryLinked
         | 
| 19 20 | 
             
            {
         | 
| 20 21 |  | 
| 21 | 
            -
                /// @dev  | 
| 22 | 
            -
                ///  | 
| 23 | 
            -
                function policyActivated(NftId policyNftId) external;
         | 
| 22 | 
            +
                /// @dev Callback function that will be called after successful policy activation.
         | 
| 23 | 
            +
                /// Active policies may open claims under the activated policy.
         | 
| 24 | 
            +
                function policyActivated(NftId policyNftId, Timestamp activatedAt) external;
         | 
| 24 25 |  | 
| 25 | 
            -
                /// @dev  | 
| 26 | 
            -
                /// expired policies  | 
| 27 | 
            -
                 | 
| 28 | 
            -
                function policyExpired(NftId policyNftId) external;
         | 
| 26 | 
            +
                /// @dev Callback function to indicate the specified policy has expired.
         | 
| 27 | 
            +
                /// expired policies no longer accept new claims.
         | 
| 28 | 
            +
                function policyExpired(NftId policyNftId, Timestamp expiredAt) external;
         | 
| 29 29 |  | 
| 30 | 
            -
                /// @dev  | 
| 31 | 
            -
                /// the contract implements its use case specific handling for such requests.
         | 
| 32 | 
            -
                /// eg. creation of a pending payout, a corresponding claim against one of the policies held by the IPolicyHolder
         | 
| 33 | 
            -
                function requestPayout(NftId requestingPolicyNftId, Amount requestedPayoutAmount) external;
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                /// @dev callback function to notify the confirmation of the specified claim
         | 
| 36 | 
            -
                /// active policies may open claims under the activated policy
         | 
| 30 | 
            +
                /// @dev Callback function to notify the confirmation of the specified claim.
         | 
| 37 31 | 
             
                function claimConfirmed(NftId policyNftId, ClaimId claimId, Amount amount) external;
         | 
| 38 32 |  | 
| 39 | 
            -
                /// @dev  | 
| 40 | 
            -
                function payoutExecuted(NftId policyNftId, PayoutId payoutId,  | 
| 41 | 
            -
             | 
| 42 | 
            -
                /// @dev determines policy and claim specific beneficiary address
         | 
| 43 | 
            -
                /// returned address will override GIF default where the policy nft holder is treated as beneficiary
         | 
| 44 | 
            -
                function getBeneficiary(NftId policyNftId, PayoutId payoutId) external view returns (address beneficiary);
         | 
| 33 | 
            +
                /// @dev Callback function to notify the successful payout.
         | 
| 34 | 
            +
                function payoutExecuted(NftId policyNftId, PayoutId payoutId, Amount amount, address beneficiary) external;
         | 
| 45 35 | 
             
            }
         | 
| @@ -11,13 +11,13 @@ contract InitializableERC165 is | |
| 11 11 | 
             
                mapping(bytes4 => bool) private _isSupported;
         | 
| 12 12 |  | 
| 13 13 | 
             
                // @dev initializes with support for ERC165
         | 
| 14 | 
            -
                function  | 
| 14 | 
            +
                function _initializeERC165() internal onlyInitializing() {
         | 
| 15 15 | 
             
                    _isSupported[type(IERC165).interfaceId] = true;
         | 
| 16 16 | 
             
                }
         | 
| 17 17 |  | 
| 18 18 | 
             
                // @dev register support for provided interfaceId
         | 
| 19 19 | 
             
                // includes initialization for ERC165_ID if not yet done
         | 
| 20 | 
            -
                function  | 
| 20 | 
            +
                function _registerInterface(bytes4 interfaceId) internal onlyInitializing() {
         | 
| 21 21 | 
             
                    _isSupported[interfaceId] = true;
         | 
| 22 22 | 
             
                }
         | 
| 23 23 |  | 
| @@ -96,14 +96,13 @@ abstract contract InstanceLinkedComponent is | |
| 96 96 | 
             
                    // set and check linked instance
         | 
| 97 97 | 
             
                    InstanceLinkedComponentStorage storage $ = _getInstanceLinkedComponentStorage();
         | 
| 98 98 | 
             
                    $._instance = IInstance(
         | 
| 99 | 
            -
                        IRegistry(registry). | 
| 100 | 
            -
                            instanceNftId).objectAddress);
         | 
| 99 | 
            +
                        IRegistry(registry).getObjectAddress(instanceNftId));
         | 
| 101 100 |  | 
| 102 101 | 
             
                    if(!$._instance.supportsInterface(type(IInstance).interfaceId)) {
         | 
| 103 102 | 
             
                        revert ErrorComponentNotInstance(instanceNftId);
         | 
| 104 103 | 
             
                    }
         | 
| 105 104 |  | 
| 106 | 
            -
                     | 
| 105 | 
            +
                    _initializeComponent(
         | 
| 107 106 | 
             
                        $._instance.authority(), 
         | 
| 108 107 | 
             
                        registry, 
         | 
| 109 108 | 
             
                        instanceNftId, 
         | 
| @@ -120,8 +119,8 @@ abstract contract InstanceLinkedComponent is | |
| 120 119 | 
             
                    $._initialAuthorization = authorization;
         | 
| 121 120 | 
             
                    $._componentService = IComponentService(_getServiceAddress(COMPONENT())); 
         | 
| 122 121 |  | 
| 123 | 
            -
                     | 
| 124 | 
            -
                     | 
| 122 | 
            +
                    _registerInterface(type(IAccessManaged).interfaceId);
         | 
| 123 | 
            +
                    _registerInterface(type(IInstanceLinkedComponent).interfaceId);
         | 
| 125 124 | 
             
                }
         | 
| 126 125 |  | 
| 127 126 | 
             
                /// @dev for instance linked components the wallet address stored in the instance store.
         | 
| @@ -132,7 +131,7 @@ abstract contract InstanceLinkedComponent is | |
| 132 131 |  | 
| 133 132 |  | 
| 134 133 | 
             
                function _getComponentInfo() internal virtual override view returns (IComponents.ComponentInfo memory info) {
         | 
| 135 | 
            -
                    NftId componentNftId = getRegistry(). | 
| 134 | 
            +
                    NftId componentNftId = getRegistry().getNftIdForAddress(address(this));
         | 
| 136 135 |  | 
| 137 136 | 
             
                    // if registered, attempt to return component info via instance reader
         | 
| 138 137 | 
             
                    if (componentNftId.gtz()) {
         | 
| @@ -94,7 +94,7 @@ abstract contract KeyValueStore is | |
| 94 94 |  | 
| 95 95 | 
             
                    // update state 
         | 
| 96 96 | 
             
                    if(state != KEEP_STATE()) {
         | 
| 97 | 
            -
                        checkTransition(metadata.objectType, stateOld, state);
         | 
| 97 | 
            +
                        checkTransition(stateOld, metadata.objectType, stateOld, state);
         | 
| 98 98 | 
             
                        metadata.state = state;
         | 
| 99 99 |  | 
| 100 100 | 
             
                        // solhint-disable-next-line avoid-tx-origin
         | 
| @@ -49,6 +49,7 @@ abstract contract Lifecycle is | |
| 49 49 | 
             
                }
         | 
| 50 50 |  | 
| 51 51 | 
             
                function checkTransition(
         | 
| 52 | 
            +
                    StateId stateId,
         | 
| 52 53 | 
             
                    ObjectType objectType,
         | 
| 53 54 | 
             
                    StateId fromId,
         | 
| 54 55 | 
             
                    StateId toId
         | 
| @@ -58,12 +59,22 @@ abstract contract Lifecycle is | |
| 58 59 | 
             
                {
         | 
| 59 60 | 
             
                    // revert if no life cycle support
         | 
| 60 61 | 
             
                    if (_initialState[objectType].eqz()) {
         | 
| 61 | 
            -
                        revert ErrorNoLifecycle(objectType);
         | 
| 62 | 
            +
                        revert ErrorNoLifecycle(address(this), objectType);
         | 
| 62 63 | 
             
                    }
         | 
| 63 64 |  | 
| 65 | 
            +
                    // revert if current state is not `from` state
         | 
| 66 | 
            +
                    if(stateId != fromId) {
         | 
| 67 | 
            +
                        revert ErrorFromStateMissmatch(address(this), objectType, stateId, fromId);
         | 
| 68 | 
            +
                    }
         | 
| 69 | 
            +
                    // TODO consider assert instead of error -> each child must check only for valid transitions
         | 
| 64 70 | 
             
                    // enforce valid state transition
         | 
| 65 71 | 
             
                    if (!_isValidTransition[objectType][fromId][toId]) {
         | 
| 66 | 
            -
                        revert ErrorInvalidStateTransition( | 
| 72 | 
            +
                        revert ErrorInvalidStateTransition(
         | 
| 73 | 
            +
                            address(this),
         | 
| 74 | 
            +
                            objectType, 
         | 
| 75 | 
            +
                            fromId, 
         | 
| 76 | 
            +
                            toId
         | 
| 77 | 
            +
                        );
         | 
| 67 78 | 
             
                    }
         | 
| 68 79 | 
             
                }
         | 
| 69 80 |  | 
| @@ -30,16 +30,16 @@ contract NftOwnable is | |
| 30 30 |  | 
| 31 31 | 
             
                /// @dev initialization for upgradable contracts
         | 
| 32 32 | 
             
                // used in _initializeRegisterable
         | 
| 33 | 
            -
                function  | 
| 33 | 
            +
                function _initializeNftOwnable(
         | 
| 34 34 | 
             
                    address initialOwner,
         | 
| 35 35 | 
             
                    address registryAddress
         | 
| 36 36 | 
             
                )
         | 
| 37 | 
            -
                     | 
| 37 | 
            +
                    internal
         | 
| 38 38 | 
             
                    virtual
         | 
| 39 39 | 
             
                    onlyInitializing()
         | 
| 40 40 | 
             
                {
         | 
| 41 | 
            -
                     | 
| 42 | 
            -
                     | 
| 41 | 
            +
                    _initializeRegistryLinked(registryAddress);
         | 
| 42 | 
            +
                    _initializeERC165();
         | 
| 43 43 |  | 
| 44 44 | 
             
                    if(initialOwner == address(0)) {
         | 
| 45 45 | 
             
                        revert ErrorNftOwnableInitialOwnerZero();
         | 
| @@ -93,7 +93,7 @@ contract NftOwnable is | |
| 93 93 | 
             
                        revert ErrorNftOwnableContractNotRegistered(nftOwnableAddress);
         | 
| 94 94 | 
             
                    }
         | 
| 95 95 |  | 
| 96 | 
            -
                    $._nftId = getRegistry(). | 
| 96 | 
            +
                    $._nftId = getRegistry().getNftIdForAddress(nftOwnableAddress);
         | 
| 97 97 |  | 
| 98 98 | 
             
                    return $._nftId;
         | 
| 99 99 | 
             
                }
         |