@etherisc/gif-next 0.0.2-a714036-117 → 0.0.2-a78920e-322
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 +32 -8
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +105 -65
- 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 +67 -11
- 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 +60 -32
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +40 -3
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +19 -0
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +4 -0
- package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +1196 -0
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +68 -5
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +159 -397
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +82 -22
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +99 -329
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +229 -292
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +125 -117
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +89 -129
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +101 -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 +1415 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +502 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1965 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +470 -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 +1429 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1163 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1592 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2267 -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/IInstance.sol/IInstance.json +71 -49
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +31 -99
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +90 -141
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +184 -139
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +57 -97
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +467 -88
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +96 -258
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +99 -87
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +339 -140
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +46 -5
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +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/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +111 -349
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +84 -24
- 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 +77 -117
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +43 -9
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +87 -317
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +107 -159
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +99 -83
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +110 -340
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +114 -22
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +209 -274
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +127 -119
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +84 -47
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +99 -150
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +277 -205
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +107 -348
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +371 -388
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +112 -100
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +92 -168
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +90 -86
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +149 -333
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +82 -22
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +311 -187
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +139 -103
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +34 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +176 -6
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +267 -141
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +114 -85
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +136 -130
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +31 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +365 -349
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +119 -99
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +215 -309
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +117 -117
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +147 -331
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +638 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +718 -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 +310 -34
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +114 -35
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +5 -18
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +516 -95
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +296 -143
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +94 -284
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +91 -75
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +47 -6
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +131 -223
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +66 -8
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +73 -274
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +503 -283
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +140 -114
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +47 -112
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +111 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +66 -77
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +467 -33
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +77 -117
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +16 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +29 -0
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +29 -0
- 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 +87 -317
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +42 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +42 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +22 -57
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +58 -89
- 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 +47 -112
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +697 -25
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +395 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +172 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +111 -114
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +29 -21
- 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 +190 -379
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +46 -5
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +118 -99
- 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 +87 -165
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +95 -79
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +169 -128
- 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/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 +26 -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 +2 -2
- 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 +71 -70
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/authorization/AccessAdmin.sol +64 -59
- package/contracts/authorization/Authorization.sol +111 -40
- package/contracts/authorization/IAccess.sol +1 -0
- package/contracts/authorization/IAccessAdmin.sol +4 -3
- package/contracts/authorization/IAuthorization.sol +13 -7
- package/contracts/authorization/IServiceAuthorization.sol +3 -1
- package/contracts/authorization/ReleaseAccessManager.sol +38 -0
- package/contracts/authorization/ServiceAuthorization.sol +26 -10
- package/contracts/distribution/BasicDistribution.sol +4 -3
- package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
- package/contracts/distribution/Distribution.sol +12 -23
- package/contracts/distribution/DistributionService.sol +99 -82
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +14 -11
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +86 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
- package/contracts/examples/fire/FireProduct.sol +431 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +44 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +65 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +108 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +345 -0
- package/contracts/instance/IInstance.sol +10 -31
- package/contracts/instance/IInstanceService.sol +2 -28
- package/contracts/instance/Instance.sol +30 -54
- package/contracts/instance/InstanceAdmin.sol +55 -38
- package/contracts/instance/InstanceAuthorizationV3.sol +11 -21
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +79 -142
- 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/IComponents.sol +11 -8
- package/contracts/instance/module/IPolicy.sol +26 -25
- package/contracts/oracle/BasicOracle.sol +0 -1
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +6 -16
- package/contracts/oracle/OracleService.sol +56 -42
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +35 -26
- package/contracts/pool/BasicPoolAuthorization.sol +14 -4
- package/contracts/pool/BundleService.sol +126 -79
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +17 -10
- package/contracts/pool/IPoolComponent.sol +19 -15
- package/contracts/pool/IPoolService.sol +66 -43
- package/contracts/pool/Pool.sol +145 -128
- package/contracts/pool/PoolService.sol +287 -195
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +59 -30
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +9 -12
- package/contracts/product/BasicProductAuthorization.sol +0 -1
- package/contracts/product/ClaimService.sol +315 -118
- 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 -36
- package/contracts/product/IPricingService.sol +10 -10
- package/contracts/product/IProductComponent.sol +23 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +383 -217
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +54 -54
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +110 -89
- package/contracts/product/{ProductService.sol → RiskService.sol} +7 -10
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +68 -38
- package/contracts/registry/IRegistry.sol +57 -18
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +350 -201
- package/contracts/registry/RegistryAdmin.sol +151 -54
- package/contracts/registry/RegistryService.sol +35 -46
- package/contracts/registry/RegistryServiceManager.sol +2 -2
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +204 -204
- package/contracts/registry/ServiceAuthorizationV3.sol +27 -23
- package/contracts/shared/Component.sol +69 -115
- package/contracts/shared/ComponentService.sol +345 -170
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +28 -17
- package/contracts/shared/ContractLib.sol +54 -0
- package/contracts/shared/IComponent.sol +10 -13
- package/contracts/shared/IComponentService.sol +44 -18
- package/contracts/shared/IInstanceLinkedComponent.sol +6 -32
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IRegisterable.sol +11 -0
- package/contracts/shared/InitializableERC165.sol +2 -2
- package/contracts/shared/InstanceLinkedComponent.sol +71 -46
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +27 -7
- package/contracts/shared/PolicyHolder.sol +15 -52
- package/contracts/shared/Registerable.sol +19 -11
- package/contracts/shared/RegistryLinked.sol +9 -14
- package/contracts/shared/Service.sol +20 -18
- package/contracts/shared/TokenHandler.sol +366 -27
- package/contracts/shared/TokenHandlerDeployerLib.sol +20 -0
- package/contracts/staking/IStaking.sol +11 -5
- package/contracts/staking/IStakingService.sol +0 -3
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +39 -50
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +77 -35
- package/contracts/staking/StakingServiceManager.sol +2 -2
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +15 -0
- 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 +16 -2
- package/contracts/type/RoleId.sol +0 -12
- package/contracts/type/Seconds.sol +8 -0
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/UFixed.sol +4 -0
- package/contracts/upgradeability/ProxyManager.sol +68 -34
- package/contracts/upgradeability/Versionable.sol +2 -2
- package/package.json +4 -3
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.json +0 -290
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +0 -4
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +0 -390
- package/artifacts/contracts/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/authorization/IModuleAuthorization.sol +0 -21
- package/contracts/authorization/ModuleAuthorization.sol +0 -78
- package/contracts/product/ProductServiceManager.sol +0 -39
- package/contracts/shared/InitializableCustom.sol +0 -177
@@ -3,38 +3,36 @@ pragma solidity ^0.8.20;
|
|
3
3
|
|
4
4
|
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
|
6
|
+
import {AccessAdmin} from "../authorization/AccessAdmin.sol";
|
6
7
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
7
8
|
import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
|
9
|
+
import {ContractLib} from "../shared/ContractLib.sol";
|
8
10
|
import {Fee, FeeLib} from "../type/Fee.sol";
|
11
|
+
import {IComponent} from "../shared/IComponent.sol";
|
9
12
|
import {IComponents} from "../instance/module/IComponents.sol";
|
10
13
|
import {IComponentService} from "./IComponentService.sol";
|
11
14
|
import {IInstance} from "../instance/IInstance.sol";
|
12
15
|
import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
|
16
|
+
import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
|
13
17
|
import {InstanceReader} from "../instance/InstanceReader.sol";
|
14
18
|
import {InstanceStore} from "../instance/InstanceStore.sol";
|
15
19
|
import {IInstanceService} from "../instance/IInstanceService.sol";
|
20
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
16
21
|
import {IPoolComponent} from "../pool/IPoolComponent.sol";
|
17
22
|
import {IProductComponent} from "../product/IProductComponent.sol";
|
18
23
|
import {IRegistry} from "../registry/IRegistry.sol";
|
19
24
|
import {IRegistryService} from "../registry/IRegistryService.sol";
|
20
25
|
import {KEEP_STATE} from "../type/StateId.sol";
|
21
26
|
import {NftId} from "../type/NftId.sol";
|
22
|
-
import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
|
23
|
-
import {
|
24
|
-
import {
|
27
|
+
import {ObjectType, REGISTRY, BUNDLE, COMPONENT, DISTRIBUTION, DISTRIBUTOR, INSTANCE, ORACLE, POOL, PRODUCT, STAKING} from "../type/ObjectType.sol";
|
28
|
+
import {TokenHandler} from "../shared/TokenHandler.sol";
|
29
|
+
import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
|
30
|
+
import {VersionPart} from "../type/Version.sol";
|
25
31
|
|
26
32
|
contract ComponentService is
|
27
33
|
ComponentVerifyingService,
|
28
34
|
IComponentService
|
29
35
|
{
|
30
|
-
error ErrorComponentServiceAlreadyRegistered(address component);
|
31
|
-
error ErrorComponentServiceNotComponent(address component);
|
32
|
-
error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
|
33
|
-
error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
|
34
|
-
error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
|
35
|
-
error ErrorComponentServiceComponentLocked(address component);
|
36
|
-
error ErrorComponentServiceSenderNotService(address sender);
|
37
|
-
error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
|
38
36
|
|
39
37
|
bool private constant INCREASE = true;
|
40
38
|
bool private constant DECREASE = false;
|
@@ -42,6 +40,31 @@ contract ComponentService is
|
|
42
40
|
IRegistryService private _registryService;
|
43
41
|
IInstanceService private _instanceService;
|
44
42
|
|
43
|
+
modifier onlyComponent(address component) {
|
44
|
+
_checkSupportsInterface(component);
|
45
|
+
_;
|
46
|
+
}
|
47
|
+
|
48
|
+
modifier onlyInstance() {
|
49
|
+
NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
|
50
|
+
if (instanceNftId.eqz()) {
|
51
|
+
revert ErrorComponentServiceNotRegistered(msg.sender);
|
52
|
+
}
|
53
|
+
|
54
|
+
ObjectType objectType = getRegistry().getObjectInfo(instanceNftId).objectType;
|
55
|
+
if (objectType != INSTANCE()) {
|
56
|
+
revert ErrorComponentServiceNotInstance(msg.sender, objectType);
|
57
|
+
}
|
58
|
+
|
59
|
+
VersionPart instanceVersion = IInstance(msg.sender).getRelease();
|
60
|
+
if (instanceVersion != getVersion().toMajorPart()) {
|
61
|
+
revert ErrorComponentServiceInstanceVersionMismatch(msg.sender, instanceVersion);
|
62
|
+
}
|
63
|
+
|
64
|
+
_;
|
65
|
+
}
|
66
|
+
|
67
|
+
|
45
68
|
function _initialize(
|
46
69
|
address owner,
|
47
70
|
bytes memory data
|
@@ -50,48 +73,118 @@ contract ComponentService is
|
|
50
73
|
virtual override
|
51
74
|
initializer()
|
52
75
|
{
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
76
|
+
(
|
77
|
+
address registryAddress,
|
78
|
+
address authority
|
79
|
+
) = abi.decode(data, (address, address));
|
57
80
|
|
58
|
-
|
81
|
+
_initializeService(registryAddress, authority, owner);
|
59
82
|
|
60
83
|
_registryService = IRegistryService(_getServiceAddress(REGISTRY()));
|
61
84
|
_instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
|
62
85
|
|
63
|
-
|
86
|
+
_registerInterface(type(IComponentService).interfaceId);
|
64
87
|
}
|
65
88
|
|
66
89
|
//-------- component ----------------------------------------------------//
|
67
90
|
|
68
|
-
function
|
91
|
+
function registerComponent(address component)
|
92
|
+
external
|
93
|
+
virtual
|
94
|
+
onlyComponent(component)
|
95
|
+
returns (NftId componentNftId)
|
96
|
+
{
|
97
|
+
// type specific registration
|
98
|
+
ObjectType componentType = IInstanceLinkedComponent(component).getInitialInfo().objectType;
|
99
|
+
if (componentType == POOL()) {
|
100
|
+
return _registerPool(component);
|
101
|
+
}
|
102
|
+
if (componentType == DISTRIBUTION()) {
|
103
|
+
return _registerDistribution(component);
|
104
|
+
}
|
105
|
+
if (componentType == ORACLE()) {
|
106
|
+
return _registerOracle(component);
|
107
|
+
}
|
108
|
+
|
109
|
+
// fail
|
110
|
+
revert ErrorComponentServiceTypeNotSupported(component, componentType);
|
111
|
+
}
|
112
|
+
|
113
|
+
function approveTokenHandler(
|
114
|
+
IERC20Metadata token,
|
115
|
+
Amount amount
|
116
|
+
)
|
117
|
+
external
|
118
|
+
virtual
|
119
|
+
{
|
120
|
+
// checks
|
69
121
|
(NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
|
70
|
-
|
71
|
-
|
122
|
+
TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
|
123
|
+
componentNftId).tokenHandler;
|
72
124
|
|
73
|
-
|
74
|
-
|
75
|
-
|
125
|
+
// effects
|
126
|
+
tokenHandler.approve(token, amount);
|
127
|
+
}
|
76
128
|
|
77
|
-
if (currentWallet == address(0)) {
|
78
|
-
revert ErrorComponentServiceWalletAddressZero();
|
79
|
-
}
|
80
129
|
|
81
|
-
|
82
|
-
|
83
|
-
|
130
|
+
function approveStakingTokenHandler(
|
131
|
+
IERC20Metadata token,
|
132
|
+
Amount amount
|
133
|
+
)
|
134
|
+
external
|
135
|
+
virtual
|
136
|
+
{
|
137
|
+
// checks
|
138
|
+
NftId stakingNftId = getRegistry().getNftIdForAddress(msg.sender);
|
139
|
+
(IRegistry.ObjectInfo memory objectInfo,) = _getAndVerifyComponentInfo(
|
140
|
+
stakingNftId,
|
141
|
+
STAKING(),
|
142
|
+
true);
|
143
|
+
|
144
|
+
// effects
|
145
|
+
TokenHandler tokenHandler = IComponent(msg.sender).getTokenHandler();
|
146
|
+
tokenHandler.approve(token, amount);
|
147
|
+
}
|
148
|
+
|
84
149
|
|
85
|
-
|
86
|
-
|
87
|
-
|
150
|
+
function setWallet(address newWallet)
|
151
|
+
external
|
152
|
+
virtual
|
153
|
+
{
|
154
|
+
// checks
|
155
|
+
(NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
|
156
|
+
TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
|
157
|
+
componentNftId).tokenHandler;
|
158
|
+
|
159
|
+
// effects
|
160
|
+
tokenHandler.setWallet(newWallet);
|
88
161
|
}
|
89
162
|
|
90
|
-
|
91
|
-
function
|
163
|
+
/// @inheritdoc IComponentService
|
164
|
+
function setLockedFromInstance(address componentAddress, bool locked)
|
165
|
+
external
|
166
|
+
virtual
|
167
|
+
onlyInstance()
|
168
|
+
{
|
169
|
+
address instanceAddress = msg.sender;
|
170
|
+
// NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
|
171
|
+
IInstance instance = IInstance(instanceAddress);
|
172
|
+
_setLocked(instance.getInstanceAdmin(), componentAddress, locked);
|
173
|
+
}
|
174
|
+
|
175
|
+
/// @inheritdoc IComponentService
|
176
|
+
function setLockedFromComponent(address componentAddress, bool locked)
|
177
|
+
external
|
178
|
+
virtual
|
179
|
+
onlyComponent(msg.sender)
|
180
|
+
{
|
181
|
+
(, IInstance instance) = _getAndVerifyComponentInfo(
|
182
|
+
getRegistry().getNftIdForAddress(msg.sender),
|
183
|
+
COMPONENT(),
|
184
|
+
false); // only active
|
92
185
|
|
93
|
-
|
94
|
-
|
186
|
+
_setLocked(instance.getInstanceAdmin(), componentAddress, locked);
|
187
|
+
}
|
95
188
|
|
96
189
|
function withdrawFees(Amount amount)
|
97
190
|
external
|
@@ -100,7 +193,7 @@ contract ComponentService is
|
|
100
193
|
{
|
101
194
|
(NftId componentNftId,, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
|
102
195
|
IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
|
103
|
-
address componentWallet = info.
|
196
|
+
address componentWallet = info.tokenHandler.getWallet();
|
104
197
|
|
105
198
|
// determine withdrawn amount
|
106
199
|
withdrawnAmount = amount;
|
@@ -115,51 +208,41 @@ contract ComponentService is
|
|
115
208
|
}
|
116
209
|
}
|
117
210
|
|
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
211
|
// decrease fee counters by withdrawnAmount
|
127
212
|
_changeTargetBalance(DECREASE, instance.getInstanceStore(), componentNftId, AmountLib.zero(), withdrawnAmount);
|
128
213
|
|
129
214
|
// transfer amount to component owner
|
130
215
|
address componentOwner = getRegistry().ownerOf(componentNftId);
|
131
|
-
|
132
|
-
tokenHandler.
|
133
|
-
|
134
|
-
emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(token), withdrawnAmount);
|
216
|
+
emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
|
217
|
+
info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
|
135
218
|
}
|
136
219
|
|
137
220
|
|
138
221
|
//-------- product ------------------------------------------------------//
|
139
222
|
|
140
|
-
function registerProduct()
|
223
|
+
function registerProduct(address productAddress)
|
141
224
|
external
|
142
225
|
virtual
|
226
|
+
onlyComponent(productAddress)
|
227
|
+
returns (NftId productNftId)
|
143
228
|
{
|
144
|
-
address contractAddress = msg.sender;
|
145
|
-
|
146
229
|
// register/create component setup
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
230
|
+
InstanceAdmin instanceAdmin;
|
231
|
+
InstanceStore instanceStore;
|
232
|
+
(, instanceAdmin, instanceStore,, productNftId) = _register(
|
233
|
+
productAddress,
|
234
|
+
PRODUCT());
|
235
|
+
|
236
|
+
// get product
|
237
|
+
IProductComponent product = IProductComponent(productAddress);
|
155
238
|
|
156
|
-
// create
|
157
|
-
|
158
|
-
|
239
|
+
// create info
|
240
|
+
instanceStore.createProduct(
|
241
|
+
productNftId,
|
242
|
+
product.getInitialProductInfo());
|
159
243
|
|
160
|
-
//
|
161
|
-
|
162
|
-
_linkToProduct(instanceReader, instanceStore, productInfo.poolNftId, productNftId);
|
244
|
+
// authorize
|
245
|
+
instanceAdmin.initializeComponentAuthorization(product);
|
163
246
|
}
|
164
247
|
|
165
248
|
|
@@ -204,6 +287,7 @@ contract ComponentService is
|
|
204
287
|
// TODO re-enable once role granting is stable and fixed
|
205
288
|
// restricted()
|
206
289
|
{
|
290
|
+
_checkNftType(productNftId, PRODUCT());
|
207
291
|
_changeTargetBalance(INCREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
|
208
292
|
}
|
209
293
|
|
@@ -214,23 +298,43 @@ contract ComponentService is
|
|
214
298
|
// TODO re-enable once role granting is stable and fixed
|
215
299
|
// restricted()
|
216
300
|
{
|
301
|
+
_checkNftType(productNftId, PRODUCT());
|
217
302
|
_changeTargetBalance(DECREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
|
218
303
|
}
|
219
304
|
|
220
305
|
//-------- distribution -------------------------------------------------//
|
221
306
|
|
222
307
|
/// @dev registers the sending component as a distribution component
|
223
|
-
function
|
224
|
-
|
308
|
+
function _registerDistribution(address distributioAddress)
|
309
|
+
internal
|
225
310
|
virtual
|
311
|
+
returns (NftId distributionNftId)
|
226
312
|
{
|
227
|
-
address contractAddress = msg.sender;
|
228
|
-
|
229
313
|
// register/create component info
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
314
|
+
InstanceReader instanceReader;
|
315
|
+
InstanceAdmin instanceAdmin;
|
316
|
+
InstanceStore instanceStore;
|
317
|
+
NftId productNftId;
|
318
|
+
(instanceReader, instanceAdmin, instanceStore, productNftId, distributionNftId) = _register(
|
319
|
+
distributioAddress,
|
320
|
+
DISTRIBUTION());
|
321
|
+
|
322
|
+
// check product is still expecting a distribution registration
|
323
|
+
IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
|
324
|
+
if (!productInfo.hasDistribution) {
|
325
|
+
revert ErrorProductServiceNoDistributionExpected(productNftId);
|
326
|
+
}
|
327
|
+
if (productInfo.distributionNftId.gtz()) {
|
328
|
+
revert ErrorProductServiceDistributionAlreadyRegistered(productNftId, productInfo.distributionNftId);
|
329
|
+
}
|
330
|
+
|
331
|
+
// set distribution in product info
|
332
|
+
productInfo.distributionNftId = distributionNftId;
|
333
|
+
instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
334
|
+
|
335
|
+
// authorize
|
336
|
+
instanceAdmin.initializeComponentAuthorization(
|
337
|
+
IInstanceLinkedComponent(distributioAddress));
|
234
338
|
}
|
235
339
|
|
236
340
|
|
@@ -277,6 +381,7 @@ contract ComponentService is
|
|
277
381
|
// TODO re-enable once role granting is stable and fixed
|
278
382
|
// restricted()
|
279
383
|
{
|
384
|
+
_checkNftType(distributionNftId, DISTRIBUTION());
|
280
385
|
_changeTargetBalance(INCREASE, instanceStore, distributionNftId, amount, feeAmount);
|
281
386
|
}
|
282
387
|
|
@@ -292,6 +397,7 @@ contract ComponentService is
|
|
292
397
|
// TODO re-enable once role granting is stable and fixed
|
293
398
|
// restricted()
|
294
399
|
{
|
400
|
+
_checkNftType(distributionNftId, DISTRIBUTION());
|
295
401
|
_changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
|
296
402
|
}
|
297
403
|
|
@@ -308,6 +414,7 @@ contract ComponentService is
|
|
308
414
|
// TODO re-enable once role granting is stable and fixed
|
309
415
|
// restricted()
|
310
416
|
{
|
417
|
+
_checkNftType(distributorNftId, DISTRIBUTOR());
|
311
418
|
_changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
|
312
419
|
}
|
313
420
|
|
@@ -322,51 +429,81 @@ contract ComponentService is
|
|
322
429
|
// TODO re-enable once role granting is stable and fixed
|
323
430
|
// restricted()
|
324
431
|
{
|
432
|
+
_checkNftType(distributorNftId, DISTRIBUTOR());
|
325
433
|
_changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
|
326
434
|
}
|
327
435
|
|
328
436
|
//-------- oracle -------------------------------------------------------//
|
329
437
|
|
330
|
-
function
|
331
|
-
|
438
|
+
function _registerOracle(address oracleAddress)
|
439
|
+
internal
|
332
440
|
virtual
|
441
|
+
returns (NftId oracleNftId)
|
333
442
|
{
|
334
|
-
address contractAddress = msg.sender;
|
335
|
-
|
336
443
|
// register/create component setup
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
444
|
+
InstanceReader instanceReader;
|
445
|
+
InstanceAdmin instanceAdmin;
|
446
|
+
InstanceStore instanceStore;
|
447
|
+
NftId productNftId;
|
448
|
+
|
449
|
+
(instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) =_register(
|
450
|
+
oracleAddress,
|
451
|
+
ORACLE());
|
452
|
+
|
453
|
+
// check product is still expecting an oracle registration
|
454
|
+
IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
|
455
|
+
if (productInfo.expectedNumberOfOracles == 0) {
|
456
|
+
revert ErrorProductServiceNoOraclesExpected(productNftId);
|
457
|
+
}
|
458
|
+
if (productInfo.numberOfOracles == productInfo.expectedNumberOfOracles) {
|
459
|
+
revert ErrorProductServiceOraclesAlreadyRegistered(productNftId, productInfo.expectedNumberOfOracles);
|
460
|
+
}
|
461
|
+
|
462
|
+
// update/add oracle to product info
|
463
|
+
productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
|
464
|
+
productInfo.numberOfOracles++;
|
465
|
+
instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
466
|
+
|
467
|
+
// authorize
|
468
|
+
instanceAdmin.initializeComponentAuthorization(
|
469
|
+
IInstanceLinkedComponent(oracleAddress));
|
345
470
|
}
|
346
471
|
|
347
472
|
//-------- pool ---------------------------------------------------------//
|
348
473
|
|
349
|
-
function
|
350
|
-
|
474
|
+
function _registerPool(address poolAddress)
|
475
|
+
internal
|
351
476
|
virtual
|
477
|
+
returns (NftId poolNftId)
|
352
478
|
{
|
353
|
-
address contractAddress = msg.sender;
|
354
|
-
|
355
479
|
// register/create component setup
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
480
|
+
InstanceReader instanceReader;
|
481
|
+
InstanceAdmin instanceAdmin;
|
482
|
+
InstanceStore instanceStore;
|
483
|
+
NftId productNftId;
|
484
|
+
|
485
|
+
(instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) =_register(
|
486
|
+
poolAddress,
|
487
|
+
POOL());
|
488
|
+
|
489
|
+
// check product is still expecting a pool registration
|
490
|
+
IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
|
491
|
+
if (productInfo.poolNftId.gtz()) {
|
492
|
+
revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
|
493
|
+
}
|
364
494
|
|
365
495
|
// create info
|
496
|
+
IPoolComponent pool = IPoolComponent(poolAddress);
|
366
497
|
instanceStore.createPool(
|
367
|
-
|
368
|
-
|
369
|
-
|
498
|
+
poolNftId,
|
499
|
+
pool.getInitialPoolInfo());
|
500
|
+
|
501
|
+
// update pool in product info
|
502
|
+
productInfo.poolNftId = poolNftId;
|
503
|
+
instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
504
|
+
|
505
|
+
// authorize
|
506
|
+
instanceAdmin.initializeComponentAuthorization(pool);
|
370
507
|
}
|
371
508
|
|
372
509
|
|
@@ -421,6 +558,7 @@ contract ComponentService is
|
|
421
558
|
// TODO re-enable once role granting is stable and fixed
|
422
559
|
// restricted()
|
423
560
|
{
|
561
|
+
_checkNftType(poolNftId, POOL());
|
424
562
|
_changeTargetBalance(INCREASE, instanceStore, poolNftId, amount, feeAmount);
|
425
563
|
}
|
426
564
|
|
@@ -435,6 +573,7 @@ contract ComponentService is
|
|
435
573
|
// TODO re-enable once role granting is stable and fixed
|
436
574
|
// restricted()
|
437
575
|
{
|
576
|
+
_checkNftType(poolNftId, POOL());
|
438
577
|
_changeTargetBalance(DECREASE, instanceStore, poolNftId, amount, feeAmount);
|
439
578
|
}
|
440
579
|
|
@@ -451,6 +590,7 @@ contract ComponentService is
|
|
451
590
|
// TODO re-enable once role granting is stable and fixed
|
452
591
|
// restricted()
|
453
592
|
{
|
593
|
+
_checkNftType(bundleNftId, BUNDLE());
|
454
594
|
_changeTargetBalance(INCREASE, instanceStore, bundleNftId, amount, feeAmount);
|
455
595
|
}
|
456
596
|
|
@@ -465,6 +605,7 @@ contract ComponentService is
|
|
465
605
|
// TODO re-enable once role granting is stable and fixed
|
466
606
|
// restricted()
|
467
607
|
{
|
608
|
+
_checkNftType(bundleNftId, BUNDLE());
|
468
609
|
_changeTargetBalance(DECREASE, instanceStore, bundleNftId, amount, feeAmount);
|
469
610
|
}
|
470
611
|
|
@@ -492,74 +633,72 @@ contract ComponentService is
|
|
492
633
|
}
|
493
634
|
}
|
494
635
|
|
495
|
-
/// @dev
|
636
|
+
/// @dev Registers the component represented by the provided address.
|
496
637
|
function _register(
|
497
638
|
address componentAddress, // address of component to register
|
498
|
-
ObjectType requiredType
|
499
|
-
RoleId requiredRole // role required for comonent owner for registration
|
639
|
+
ObjectType requiredType // required type for component for registration
|
500
640
|
)
|
501
641
|
internal
|
502
642
|
virtual
|
503
643
|
returns (
|
504
644
|
InstanceReader instanceReader,
|
645
|
+
InstanceAdmin instanceAdmin,
|
505
646
|
InstanceStore instanceStore,
|
647
|
+
NftId parentNftId,
|
506
648
|
NftId componentNftId
|
507
649
|
)
|
508
650
|
{
|
651
|
+
NftId instanceNftId;
|
652
|
+
IInstance instance;
|
653
|
+
IInstanceLinkedComponent component;
|
654
|
+
address initialOwner;
|
655
|
+
|
509
656
|
(
|
510
|
-
|
511
|
-
|
512
|
-
|
657
|
+
instanceNftId,
|
658
|
+
instance,
|
659
|
+
parentNftId,
|
660
|
+
component,
|
661
|
+
initialOwner
|
513
662
|
) = _getAndVerifyRegisterableComponent(
|
663
|
+
getRegistry(),
|
514
664
|
componentAddress,
|
515
|
-
requiredType
|
516
|
-
requiredRole);
|
665
|
+
requiredType);
|
517
666
|
|
518
|
-
//
|
519
|
-
componentNftId = _registryService.registerComponent(
|
520
|
-
component,
|
521
|
-
requiredType,
|
522
|
-
owner).nftId;
|
523
|
-
|
524
|
-
component.linkToRegisteredNftId();
|
525
|
-
|
526
|
-
// setup initial component authorization
|
527
|
-
_instanceService.initializeAuthorization(
|
528
|
-
instance.getNftId(),
|
529
|
-
component);
|
530
|
-
|
531
|
-
// save amended component info with instance
|
667
|
+
// get instance supporting contracts (as function return values)
|
532
668
|
instanceReader = instance.getInstanceReader();
|
669
|
+
instanceAdmin = instance.getInstanceAdmin();
|
533
670
|
instanceStore = instance.getInstanceStore();
|
534
671
|
|
535
|
-
|
536
|
-
|
672
|
+
// register with registry
|
673
|
+
if (requiredType == PRODUCT()) {
|
674
|
+
componentNftId = _registryService.registerProduct(
|
675
|
+
component, initialOwner).nftId;
|
676
|
+
} else {
|
677
|
+
componentNftId = _registryService.registerProductLinkedComponent(
|
678
|
+
component, requiredType, initialOwner).nftId;
|
679
|
+
}
|
537
680
|
|
681
|
+
// deploy and wire token handler
|
682
|
+
IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
|
683
|
+
IERC20Metadata token = componentInfo.token;
|
684
|
+
componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
|
685
|
+
address(getRegistry()),
|
686
|
+
address(component), // initially, component is its own wallet
|
687
|
+
address(token),
|
688
|
+
address(instanceAdmin.authority()));
|
689
|
+
|
690
|
+
// set token handler allowance to max
|
691
|
+
// componentInfo.tokenHandler.approve(token, AmountLib.max());
|
692
|
+
|
693
|
+
// register component with instance
|
538
694
|
instanceStore.createComponent(
|
539
|
-
|
695
|
+
componentNftId,
|
540
696
|
componentInfo);
|
541
697
|
|
542
|
-
//
|
543
|
-
|
544
|
-
|
698
|
+
// link component contract to nft id
|
699
|
+
component.linkToRegisteredNftId();
|
545
700
|
|
546
|
-
|
547
|
-
function _linkToProduct(
|
548
|
-
InstanceReader instanceReader,
|
549
|
-
InstanceStore instanceStore,
|
550
|
-
NftId componentNftId,
|
551
|
-
NftId productNftId
|
552
|
-
)
|
553
|
-
internal
|
554
|
-
{
|
555
|
-
// only link components that are registered
|
556
|
-
if(componentNftId.eqz()) {
|
557
|
-
return;
|
558
|
-
}
|
559
|
-
|
560
|
-
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(componentNftId);
|
561
|
-
componentInfo.productNftId = productNftId;
|
562
|
-
instanceStore.updateComponent(componentNftId, componentInfo, KEEP_STATE());
|
701
|
+
emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, address(component), address(token), initialOwner);
|
563
702
|
}
|
564
703
|
|
565
704
|
|
@@ -578,12 +717,6 @@ contract ComponentService is
|
|
578
717
|
}
|
579
718
|
|
580
719
|
|
581
|
-
function _createSelectors(bytes4 selector) internal pure returns (bytes4[] memory selectors) {
|
582
|
-
selectors = new bytes4[](1);
|
583
|
-
selectors[0] = selector;
|
584
|
-
}
|
585
|
-
|
586
|
-
|
587
720
|
function _getLinkedProductInfo(
|
588
721
|
InstanceReader instanceReader,
|
589
722
|
NftId componentNftId
|
@@ -595,57 +728,99 @@ contract ComponentService is
|
|
595
728
|
IComponents.ProductInfo memory info
|
596
729
|
)
|
597
730
|
{
|
598
|
-
productNftId =
|
731
|
+
productNftId = _getProductNftId(componentNftId);
|
599
732
|
info = instanceReader.getProductInfo(productNftId);
|
600
733
|
}
|
601
734
|
|
602
735
|
|
603
|
-
/// @dev
|
604
|
-
///
|
605
|
-
/// - the
|
736
|
+
/// @dev Based on the provided component address required type the component
|
737
|
+
/// and related instance contract this function reverts iff:
|
738
|
+
/// - the sender is not registered
|
606
739
|
/// - the component contract does not support IInstanceLinkedComponent
|
607
740
|
/// - the component type does not match with the required type
|
608
|
-
/// - the
|
741
|
+
/// - the component has already been registered
|
609
742
|
function _getAndVerifyRegisterableComponent(
|
743
|
+
IRegistry registry,
|
610
744
|
address componentAddress,
|
611
|
-
ObjectType requiredType
|
612
|
-
RoleId requiredRole
|
745
|
+
ObjectType requiredType
|
613
746
|
)
|
614
747
|
internal
|
615
748
|
view
|
616
749
|
returns (
|
750
|
+
NftId instanceNftId,
|
617
751
|
IInstance instance,
|
752
|
+
NftId parentNftId,
|
618
753
|
IInstanceLinkedComponent component,
|
619
|
-
address
|
754
|
+
address initialOwner
|
620
755
|
)
|
621
756
|
{
|
622
|
-
// check
|
623
|
-
|
624
|
-
if(
|
625
|
-
revert
|
757
|
+
// check sender (instance or product) is registered
|
758
|
+
IRegistry.ObjectInfo memory senderInfo = registry.getObjectInfo(msg.sender);
|
759
|
+
if (senderInfo.nftId.eqz()) {
|
760
|
+
revert ErrorComponentServiceSenderNotRegistered(msg.sender);
|
626
761
|
}
|
627
762
|
|
763
|
+
// the sender is the parent of the component to be registered
|
764
|
+
// an instance caller wanting to register a product - or -
|
765
|
+
// a product caller wantint go register a distribution, oracle or pool
|
766
|
+
parentNftId = senderInfo.nftId;
|
767
|
+
|
628
768
|
// check component is of required type
|
769
|
+
component = IInstanceLinkedComponent(componentAddress);
|
629
770
|
IRegistry.ObjectInfo memory info = component.getInitialInfo();
|
630
771
|
if(info.objectType != requiredType) {
|
631
772
|
revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
|
632
773
|
}
|
633
774
|
|
634
775
|
// check component has not already been registered
|
635
|
-
if (getRegistry().
|
776
|
+
if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
|
636
777
|
revert ErrorComponentServiceAlreadyRegistered(componentAddress);
|
637
778
|
}
|
638
779
|
|
639
|
-
// check
|
640
|
-
|
641
|
-
|
780
|
+
// check release matches
|
781
|
+
address parentAddress = registry.getObjectAddress(parentNftId);
|
782
|
+
if (component.getRelease() != IRegisterable(parentAddress).getRelease()) {
|
783
|
+
revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), IRegisterable(parentAddress).getRelease());
|
784
|
+
}
|
785
|
+
|
786
|
+
// check component belongs to same product cluster
|
787
|
+
// parent of product must be instance, parent of other componet types must be product
|
788
|
+
if (info.parentNftId != senderInfo.nftId) {
|
789
|
+
revert ErrorComponentServiceSenderNotComponentParent(senderInfo.nftId, info.parentNftId);
|
790
|
+
}
|
791
|
+
|
792
|
+
// verify parent is registered instance
|
793
|
+
if (requiredType == PRODUCT()) {
|
794
|
+
if (senderInfo.objectType != INSTANCE()) {
|
795
|
+
revert ErrorComponentServiceParentNotInstance(senderInfo.nftId, senderInfo.objectType);
|
796
|
+
}
|
797
|
+
|
798
|
+
instanceNftId = senderInfo.nftId;
|
799
|
+
// verify parent is registered product
|
800
|
+
} else {
|
801
|
+
if (senderInfo.objectType != PRODUCT()) {
|
802
|
+
revert ErrorComponentServiceParentNotProduct(senderInfo.nftId, senderInfo.objectType);
|
803
|
+
}
|
642
804
|
|
643
|
-
|
644
|
-
revert ErrorComponentServiceExpectedRoleMissing(info.parentNftId, requiredRole, owner);
|
805
|
+
instanceNftId = senderInfo.parentNftId;
|
645
806
|
}
|
807
|
+
|
808
|
+
// get initial owner and instance
|
809
|
+
initialOwner = info.initialOwner;
|
810
|
+
instance = _getInstance(registry, instanceNftId);
|
811
|
+
}
|
812
|
+
|
813
|
+
function _setLocked(InstanceAdmin instanceAdmin, address componentAddress, bool locked) internal {
|
814
|
+
instanceAdmin.setTargetLocked(componentAddress, locked);
|
646
815
|
}
|
647
816
|
|
648
817
|
function _getDomain() internal pure virtual override returns(ObjectType) {
|
649
818
|
return COMPONENT();
|
650
819
|
}
|
820
|
+
|
821
|
+
function _checkSupportsInterface(address component) internal view {
|
822
|
+
if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
|
823
|
+
revert ErrorComponentServiceNotInstanceLinkedComponent(component);
|
824
|
+
}
|
825
|
+
}
|
651
826
|
}
|