@etherisc/gif-next 0.0.2-cfc7167-648 → 0.0.2-cff7366-494
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/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
- 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 -367
- 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 -291
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +227 -290
- 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 -31
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +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 +147 -42
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +116 -48
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +53 -101
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +141 -141
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +197 -139
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +58 -85
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +726 -133
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +118 -260
- 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 +337 -138
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
- package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +810 -0
- 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 -319
- 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 -279
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +147 -191
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +119 -83
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +106 -298
- 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 +146 -307
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +111 -119
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +48 -33
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +98 -149
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +283 -180
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +106 -309
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +382 -407
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +123 -99
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +119 -165
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +93 -85
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +149 -295
- 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 +282 -229
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +132 -108
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +63 -7
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +161 -7
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +179 -35
- 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 +281 -323
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +123 -119
- 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 -293
- 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 +76 -239
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +492 -335
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +143 -117
- 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 +488 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -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 -279
- 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 +674 -49
- 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 +193 -368
- 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 +117 -110
- 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/Key32Set.sol/LibKey32Set.dbg.json +4 -0
- package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +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 +99 -5
- 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 +83 -58
- 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 +97 -66
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +13 -8
- 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/BundleSet.sol +38 -34
- package/contracts/instance/IInstance.sol +16 -31
- package/contracts/instance/IInstanceService.sol +7 -29
- package/contracts/instance/Instance.sol +44 -59
- package/contracts/instance/InstanceAdmin.sol +58 -39
- package/contracts/instance/InstanceAuthorizationV3.sol +43 -29
- package/contracts/instance/InstanceReader.sol +190 -19
- package/contracts/instance/InstanceService.sol +61 -137
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/InstanceStore.sol +11 -1
- package/contracts/instance/RiskSet.sol +119 -0
- package/contracts/instance/base/ObjectLifecycle.sol +7 -1
- package/contracts/instance/base/ObjectSet.sol +24 -25
- package/contracts/instance/module/IComponents.sol +10 -6
- package/contracts/instance/module/IPolicy.sol +25 -24
- package/contracts/instance/module/IRisk.sol +1 -0
- 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 +112 -81
- package/contracts/oracle/OracleServiceManager.sol +6 -6
- package/contracts/pool/BasicPool.sol +33 -24
- package/contracts/pool/BasicPoolAuthorization.sol +12 -2
- package/contracts/pool/BundleService.sol +69 -83
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +3 -14
- package/contracts/pool/IPoolComponent.sol +19 -15
- package/contracts/pool/IPoolService.sol +48 -42
- package/contracts/pool/Pool.sol +144 -127
- package/contracts/pool/PoolService.sol +277 -189
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +34 -25
- 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 +312 -115
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +5 -2
- package/contracts/product/IClaimService.sol +30 -7
- package/contracts/product/IPolicyService.sol +31 -25
- 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 +399 -261
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +49 -53
- package/contracts/product/PricingServiceManager.sol +3 -3
- package/contracts/product/Product.sol +101 -87
- package/contracts/product/{ProductService.sol → RiskService.sol} +21 -13
- 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 +140 -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 +23 -47
- package/contracts/shared/Component.sol +60 -119
- package/contracts/shared/ComponentService.sol +393 -167
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +28 -17
- package/contracts/shared/ContractLib.sol +224 -0
- package/contracts/shared/IComponent.sol +10 -14
- package/contracts/shared/IComponentService.sol +44 -18
- package/contracts/shared/IInstanceLinkedComponent.sol +2 -28
- 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 +357 -30
- 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 +58 -25
- 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/Key32.sol +2 -2
- package/contracts/type/Key32Set.sol +62 -0
- package/contracts/type/NftId.sol +7 -0
- package/contracts/type/ObjectType.sol +18 -11
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +30 -4
- 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/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.dbg.json +0 -4
- package/artifacts/contracts/shared/TokenTransferLib.sol/TokenTransferLib.json +0 -42
- 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
- package/contracts/shared/TokenTransferLib.sol +0 -60
@@ -1,46 +1,75 @@
|
|
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
|
+
import {AccessAdmin} from "../authorization/AccessAdmin.sol";
|
4
7
|
import {Amount, AmountLib} from "../type/Amount.sol";
|
5
8
|
import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
|
9
|
+
import {ContractLib} from "../shared/ContractLib.sol";
|
6
10
|
import {Fee, FeeLib} from "../type/Fee.sol";
|
11
|
+
import {IComponent} from "../shared/IComponent.sol";
|
7
12
|
import {IComponents} from "../instance/module/IComponents.sol";
|
8
13
|
import {IComponentService} from "./IComponentService.sol";
|
9
14
|
import {IInstance} from "../instance/IInstance.sol";
|
10
15
|
import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
|
16
|
+
import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
|
11
17
|
import {InstanceReader} from "../instance/InstanceReader.sol";
|
12
18
|
import {InstanceStore} from "../instance/InstanceStore.sol";
|
13
19
|
import {IInstanceService} from "../instance/IInstanceService.sol";
|
14
20
|
import {IPoolComponent} from "../pool/IPoolComponent.sol";
|
15
21
|
import {IProductComponent} from "../product/IProductComponent.sol";
|
22
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
16
23
|
import {IRegistry} from "../registry/IRegistry.sol";
|
17
24
|
import {IRegistryService} from "../registry/IRegistryService.sol";
|
25
|
+
|
26
|
+
import {Amount, AmountLib} from "../type/Amount.sol";
|
27
|
+
import {ContractLib} from "../shared/ContractLib.sol";
|
28
|
+
import {Fee, FeeLib} from "../type/Fee.sol";
|
18
29
|
import {KEEP_STATE} from "../type/StateId.sol";
|
19
30
|
import {NftId} from "../type/NftId.sol";
|
20
|
-
import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
|
21
|
-
import {
|
22
|
-
import {TokenHandler} from "
|
23
|
-
import {
|
31
|
+
import {ObjectType, REGISTRY, BUNDLE, COMPONENT, DISTRIBUTION, DISTRIBUTOR, INSTANCE, ORACLE, POOL, PRODUCT, STAKING} from "../type/ObjectType.sol";
|
32
|
+
import {Service} from "../shared/Service.sol";
|
33
|
+
import {TokenHandler} from "../shared/TokenHandler.sol";
|
34
|
+
import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
|
35
|
+
import {VersionPart} from "../type/Version.sol";
|
36
|
+
|
24
37
|
|
25
38
|
contract ComponentService is
|
26
|
-
|
39
|
+
Service,
|
27
40
|
IComponentService
|
28
41
|
{
|
29
|
-
error ErrorComponentServiceAlreadyRegistered(address component);
|
30
|
-
error ErrorComponentServiceNotComponent(address component);
|
31
|
-
error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
|
32
|
-
error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
|
33
|
-
error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
|
34
|
-
error ErrorComponentServiceComponentLocked(address component);
|
35
|
-
error ErrorComponentServiceSenderNotService(address sender);
|
36
|
-
error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
|
37
|
-
|
38
42
|
bool private constant INCREASE = true;
|
39
43
|
bool private constant DECREASE = false;
|
40
44
|
|
41
45
|
IRegistryService private _registryService;
|
42
46
|
IInstanceService private _instanceService;
|
43
47
|
|
48
|
+
modifier onlyComponent(address component) {
|
49
|
+
_checkSupportsInterface(component);
|
50
|
+
_;
|
51
|
+
}
|
52
|
+
|
53
|
+
modifier onlyInstance() {
|
54
|
+
NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
|
55
|
+
if (instanceNftId.eqz()) {
|
56
|
+
revert ErrorComponentServiceNotRegistered(msg.sender);
|
57
|
+
}
|
58
|
+
|
59
|
+
ObjectType objectType = getRegistry().getObjectInfo(instanceNftId).objectType;
|
60
|
+
if (objectType != INSTANCE()) {
|
61
|
+
revert ErrorComponentServiceNotInstance(msg.sender, objectType);
|
62
|
+
}
|
63
|
+
|
64
|
+
VersionPart instanceVersion = IInstance(msg.sender).getRelease();
|
65
|
+
if (instanceVersion != getVersion().toMajorPart()) {
|
66
|
+
revert ErrorComponentServiceInstanceVersionMismatch(msg.sender, instanceVersion);
|
67
|
+
}
|
68
|
+
|
69
|
+
_;
|
70
|
+
}
|
71
|
+
|
72
|
+
|
44
73
|
function _initialize(
|
45
74
|
address owner,
|
46
75
|
bytes memory data
|
@@ -49,57 +78,121 @@ contract ComponentService is
|
|
49
78
|
virtual override
|
50
79
|
initializer()
|
51
80
|
{
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
81
|
+
(
|
82
|
+
address registryAddress,
|
83
|
+
address authority
|
84
|
+
) = abi.decode(data, (address, address));
|
56
85
|
|
57
|
-
|
86
|
+
_initializeService(registryAddress, authority, owner);
|
58
87
|
|
59
88
|
_registryService = IRegistryService(_getServiceAddress(REGISTRY()));
|
60
89
|
_instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
|
61
90
|
|
62
|
-
|
91
|
+
_registerInterface(type(IComponentService).interfaceId);
|
63
92
|
}
|
64
93
|
|
65
94
|
//-------- component ----------------------------------------------------//
|
66
95
|
|
67
|
-
function
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
96
|
+
function registerComponent(address component)
|
97
|
+
external
|
98
|
+
virtual
|
99
|
+
onlyComponent(component)
|
100
|
+
returns (NftId componentNftId)
|
101
|
+
{
|
102
|
+
// type specific registration
|
103
|
+
ObjectType componentType = IInstanceLinkedComponent(component).getInitialInfo().objectType;
|
104
|
+
if (componentType == POOL()) {
|
105
|
+
return _registerPool(component);
|
74
106
|
}
|
75
|
-
|
76
|
-
|
77
|
-
revert ErrorComponentServiceWalletAddressZero();
|
107
|
+
if (componentType == DISTRIBUTION()) {
|
108
|
+
return _registerDistribution(component);
|
78
109
|
}
|
79
|
-
|
80
|
-
|
81
|
-
revert ErrorComponentServiceWalletAddressIsSameAsCurrent();
|
110
|
+
if (componentType == ORACLE()) {
|
111
|
+
return _registerOracle(component);
|
82
112
|
}
|
83
113
|
|
84
|
-
|
85
|
-
|
86
|
-
emit LogComponentServiceWalletAddressChanged(componentNftId, currentWallet, newWallet);
|
114
|
+
// fail
|
115
|
+
revert ErrorComponentServiceTypeNotSupported(component, componentType);
|
87
116
|
}
|
88
117
|
|
89
|
-
|
90
|
-
|
118
|
+
function approveTokenHandler(
|
119
|
+
IERC20Metadata token,
|
120
|
+
Amount amount
|
121
|
+
)
|
122
|
+
external
|
123
|
+
virtual
|
124
|
+
{
|
125
|
+
// checks
|
126
|
+
(NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
|
127
|
+
TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
|
128
|
+
componentNftId).tokenHandler;
|
129
|
+
|
130
|
+
// effects
|
131
|
+
tokenHandler.approve(token, amount);
|
132
|
+
}
|
133
|
+
|
134
|
+
|
135
|
+
function approveStakingTokenHandler(
|
136
|
+
IERC20Metadata token,
|
137
|
+
Amount amount
|
138
|
+
)
|
139
|
+
external
|
140
|
+
virtual
|
141
|
+
{
|
142
|
+
// checks
|
143
|
+
ContractLib.getAndVerifyStaking(
|
144
|
+
getRegistry(),
|
145
|
+
msg.sender); // only active
|
146
|
+
|
147
|
+
// effects
|
148
|
+
TokenHandler tokenHandler = IComponent(msg.sender).getTokenHandler();
|
149
|
+
tokenHandler.approve(token, amount);
|
150
|
+
}
|
91
151
|
|
92
|
-
|
93
|
-
function
|
152
|
+
|
153
|
+
function setWallet(address newWallet)
|
154
|
+
external
|
155
|
+
virtual
|
156
|
+
{
|
157
|
+
// checks
|
158
|
+
(NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
|
159
|
+
TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
|
160
|
+
componentNftId).tokenHandler;
|
161
|
+
|
162
|
+
// effects
|
163
|
+
tokenHandler.setWallet(newWallet);
|
164
|
+
}
|
165
|
+
|
166
|
+
/// @inheritdoc IComponentService
|
167
|
+
function setLockedFromInstance(address componentAddress, bool locked)
|
168
|
+
external
|
169
|
+
virtual
|
170
|
+
onlyInstance()
|
171
|
+
{
|
172
|
+
address instanceAddress = msg.sender;
|
173
|
+
// NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
|
174
|
+
IInstance instance = IInstance(instanceAddress);
|
175
|
+
_setLocked(instance.getInstanceAdmin(), componentAddress, locked);
|
176
|
+
}
|
177
|
+
|
178
|
+
/// @inheritdoc IComponentService
|
179
|
+
function setLockedFromComponent(address componentAddress, bool locked)
|
180
|
+
external
|
181
|
+
virtual
|
182
|
+
onlyComponent(msg.sender)
|
183
|
+
{
|
184
|
+
(, IInstance instance) = _getAndVerifyComponent(COMPONENT(), false);
|
185
|
+
_setLocked(instance.getInstanceAdmin(), componentAddress, locked);
|
186
|
+
}
|
94
187
|
|
95
188
|
function withdrawFees(Amount amount)
|
96
189
|
external
|
97
190
|
virtual
|
98
191
|
returns (Amount withdrawnAmount)
|
99
192
|
{
|
100
|
-
(NftId componentNftId
|
193
|
+
(NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
|
101
194
|
IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
|
102
|
-
address componentWallet = info.
|
195
|
+
address componentWallet = info.tokenHandler.getWallet();
|
103
196
|
|
104
197
|
// determine withdrawn amount
|
105
198
|
withdrawnAmount = amount;
|
@@ -120,35 +213,35 @@ contract ComponentService is
|
|
120
213
|
// transfer amount to component owner
|
121
214
|
address componentOwner = getRegistry().ownerOf(componentNftId);
|
122
215
|
emit LogComponentServiceComponentFeesWithdrawn(componentNftId, componentOwner, address(info.token), withdrawnAmount);
|
123
|
-
|
216
|
+
info.tokenHandler.distributeTokens(componentWallet, componentOwner, withdrawnAmount);
|
124
217
|
}
|
125
218
|
|
126
219
|
|
127
220
|
//-------- product ------------------------------------------------------//
|
128
221
|
|
129
|
-
function registerProduct()
|
222
|
+
function registerProduct(address productAddress)
|
130
223
|
external
|
131
224
|
virtual
|
225
|
+
onlyComponent(productAddress)
|
226
|
+
returns (NftId productNftId)
|
132
227
|
{
|
133
|
-
address contractAddress = msg.sender;
|
134
|
-
|
135
228
|
// register/create component setup
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
// create
|
146
|
-
|
147
|
-
|
229
|
+
InstanceAdmin instanceAdmin;
|
230
|
+
InstanceStore instanceStore;
|
231
|
+
(, instanceAdmin, instanceStore,, productNftId) = _register(
|
232
|
+
productAddress,
|
233
|
+
PRODUCT());
|
234
|
+
|
235
|
+
// get product
|
236
|
+
IProductComponent product = IProductComponent(productAddress);
|
237
|
+
|
238
|
+
// create info
|
239
|
+
instanceStore.createProduct(
|
240
|
+
productNftId,
|
241
|
+
product.getInitialProductInfo());
|
148
242
|
|
149
|
-
//
|
150
|
-
|
151
|
-
_linkToProduct(instanceReader, instanceStore, productInfo.poolNftId, productNftId);
|
243
|
+
// authorize
|
244
|
+
instanceAdmin.initializeComponentAuthorization(product);
|
152
245
|
}
|
153
246
|
|
154
247
|
|
@@ -159,7 +252,7 @@ contract ComponentService is
|
|
159
252
|
external
|
160
253
|
virtual
|
161
254
|
{
|
162
|
-
(NftId productNftId
|
255
|
+
(NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
|
163
256
|
IComponents.ProductInfo memory productInfo = instance.getInstanceReader().getProductInfo(productNftId);
|
164
257
|
bool feesChanged = false;
|
165
258
|
|
@@ -193,6 +286,7 @@ contract ComponentService is
|
|
193
286
|
// TODO re-enable once role granting is stable and fixed
|
194
287
|
// restricted()
|
195
288
|
{
|
289
|
+
_checkNftType(productNftId, PRODUCT());
|
196
290
|
_changeTargetBalance(INCREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
|
197
291
|
}
|
198
292
|
|
@@ -203,23 +297,43 @@ contract ComponentService is
|
|
203
297
|
// TODO re-enable once role granting is stable and fixed
|
204
298
|
// restricted()
|
205
299
|
{
|
300
|
+
_checkNftType(productNftId, PRODUCT());
|
206
301
|
_changeTargetBalance(DECREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
|
207
302
|
}
|
208
303
|
|
209
304
|
//-------- distribution -------------------------------------------------//
|
210
305
|
|
211
306
|
/// @dev registers the sending component as a distribution component
|
212
|
-
function
|
213
|
-
|
307
|
+
function _registerDistribution(address distributioAddress)
|
308
|
+
internal
|
214
309
|
virtual
|
310
|
+
returns (NftId distributionNftId)
|
215
311
|
{
|
216
|
-
address contractAddress = msg.sender;
|
217
|
-
|
218
312
|
// register/create component info
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
313
|
+
InstanceReader instanceReader;
|
314
|
+
InstanceAdmin instanceAdmin;
|
315
|
+
InstanceStore instanceStore;
|
316
|
+
NftId productNftId;
|
317
|
+
(instanceReader, instanceAdmin, instanceStore, productNftId, distributionNftId) = _register(
|
318
|
+
distributioAddress,
|
319
|
+
DISTRIBUTION());
|
320
|
+
|
321
|
+
// check product is still expecting a distribution registration
|
322
|
+
IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
|
323
|
+
if (!productInfo.hasDistribution) {
|
324
|
+
revert ErrorProductServiceNoDistributionExpected(productNftId);
|
325
|
+
}
|
326
|
+
if (productInfo.distributionNftId.gtz()) {
|
327
|
+
revert ErrorProductServiceDistributionAlreadyRegistered(productNftId, productInfo.distributionNftId);
|
328
|
+
}
|
329
|
+
|
330
|
+
// set distribution in product info
|
331
|
+
productInfo.distributionNftId = distributionNftId;
|
332
|
+
instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
333
|
+
|
334
|
+
// authorize
|
335
|
+
instanceAdmin.initializeComponentAuthorization(
|
336
|
+
IInstanceLinkedComponent(distributioAddress));
|
223
337
|
}
|
224
338
|
|
225
339
|
|
@@ -230,7 +344,7 @@ contract ComponentService is
|
|
230
344
|
external
|
231
345
|
virtual
|
232
346
|
{
|
233
|
-
(NftId distributionNftId
|
347
|
+
(NftId distributionNftId, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
|
234
348
|
(NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
|
235
349
|
instance.getInstanceReader(), distributionNftId);
|
236
350
|
bool feesChanged = false;
|
@@ -266,6 +380,7 @@ contract ComponentService is
|
|
266
380
|
// TODO re-enable once role granting is stable and fixed
|
267
381
|
// restricted()
|
268
382
|
{
|
383
|
+
_checkNftType(distributionNftId, DISTRIBUTION());
|
269
384
|
_changeTargetBalance(INCREASE, instanceStore, distributionNftId, amount, feeAmount);
|
270
385
|
}
|
271
386
|
|
@@ -281,6 +396,7 @@ contract ComponentService is
|
|
281
396
|
// TODO re-enable once role granting is stable and fixed
|
282
397
|
// restricted()
|
283
398
|
{
|
399
|
+
_checkNftType(distributionNftId, DISTRIBUTION());
|
284
400
|
_changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
|
285
401
|
}
|
286
402
|
|
@@ -297,6 +413,7 @@ contract ComponentService is
|
|
297
413
|
// TODO re-enable once role granting is stable and fixed
|
298
414
|
// restricted()
|
299
415
|
{
|
416
|
+
_checkNftType(distributorNftId, DISTRIBUTOR());
|
300
417
|
_changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
|
301
418
|
}
|
302
419
|
|
@@ -311,51 +428,81 @@ contract ComponentService is
|
|
311
428
|
// TODO re-enable once role granting is stable and fixed
|
312
429
|
// restricted()
|
313
430
|
{
|
431
|
+
_checkNftType(distributorNftId, DISTRIBUTOR());
|
314
432
|
_changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
|
315
433
|
}
|
316
434
|
|
317
435
|
//-------- oracle -------------------------------------------------------//
|
318
436
|
|
319
|
-
function
|
320
|
-
|
437
|
+
function _registerOracle(address oracleAddress)
|
438
|
+
internal
|
321
439
|
virtual
|
440
|
+
returns (NftId oracleNftId)
|
322
441
|
{
|
323
|
-
address contractAddress = msg.sender;
|
324
|
-
|
325
442
|
// register/create component setup
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
443
|
+
InstanceReader instanceReader;
|
444
|
+
InstanceAdmin instanceAdmin;
|
445
|
+
InstanceStore instanceStore;
|
446
|
+
NftId productNftId;
|
447
|
+
|
448
|
+
(instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) = _register(
|
449
|
+
oracleAddress,
|
450
|
+
ORACLE());
|
451
|
+
|
452
|
+
// check product is still expecting an oracle registration
|
453
|
+
IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
|
454
|
+
if (productInfo.expectedNumberOfOracles == 0) {
|
455
|
+
revert ErrorProductServiceNoOraclesExpected(productNftId);
|
456
|
+
}
|
457
|
+
if (productInfo.numberOfOracles == productInfo.expectedNumberOfOracles) {
|
458
|
+
revert ErrorProductServiceOraclesAlreadyRegistered(productNftId, productInfo.expectedNumberOfOracles);
|
459
|
+
}
|
460
|
+
|
461
|
+
// update/add oracle to product info
|
462
|
+
productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
|
463
|
+
productInfo.numberOfOracles++;
|
464
|
+
instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
465
|
+
|
466
|
+
// authorize
|
467
|
+
instanceAdmin.initializeComponentAuthorization(
|
468
|
+
IInstanceLinkedComponent(oracleAddress));
|
334
469
|
}
|
335
470
|
|
336
471
|
//-------- pool ---------------------------------------------------------//
|
337
472
|
|
338
|
-
function
|
339
|
-
|
473
|
+
function _registerPool(address poolAddress)
|
474
|
+
internal
|
340
475
|
virtual
|
476
|
+
returns (NftId poolNftId)
|
341
477
|
{
|
342
|
-
address contractAddress = msg.sender;
|
343
|
-
|
344
478
|
// register/create component setup
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
479
|
+
InstanceReader instanceReader;
|
480
|
+
InstanceAdmin instanceAdmin;
|
481
|
+
InstanceStore instanceStore;
|
482
|
+
NftId productNftId;
|
483
|
+
|
484
|
+
(instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) = _register(
|
485
|
+
poolAddress,
|
486
|
+
POOL());
|
487
|
+
|
488
|
+
// check product is still expecting a pool registration
|
489
|
+
IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
|
490
|
+
if (productInfo.poolNftId.gtz()) {
|
491
|
+
revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
|
492
|
+
}
|
353
493
|
|
354
494
|
// create info
|
495
|
+
IPoolComponent pool = IPoolComponent(poolAddress);
|
355
496
|
instanceStore.createPool(
|
356
|
-
|
357
|
-
|
358
|
-
|
497
|
+
poolNftId,
|
498
|
+
pool.getInitialPoolInfo());
|
499
|
+
|
500
|
+
// update pool in product info
|
501
|
+
productInfo.poolNftId = poolNftId;
|
502
|
+
instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
503
|
+
|
504
|
+
// authorize
|
505
|
+
instanceAdmin.initializeComponentAuthorization(pool);
|
359
506
|
}
|
360
507
|
|
361
508
|
|
@@ -367,7 +514,8 @@ contract ComponentService is
|
|
367
514
|
external
|
368
515
|
virtual
|
369
516
|
{
|
370
|
-
(NftId poolNftId
|
517
|
+
(NftId poolNftId, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
518
|
+
|
371
519
|
(NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
|
372
520
|
instance.getInstanceReader(), poolNftId);
|
373
521
|
bool feesChanged = false;
|
@@ -410,6 +558,7 @@ contract ComponentService is
|
|
410
558
|
// TODO re-enable once role granting is stable and fixed
|
411
559
|
// restricted()
|
412
560
|
{
|
561
|
+
_checkNftType(poolNftId, POOL());
|
413
562
|
_changeTargetBalance(INCREASE, instanceStore, poolNftId, amount, feeAmount);
|
414
563
|
}
|
415
564
|
|
@@ -424,6 +573,7 @@ contract ComponentService is
|
|
424
573
|
// TODO re-enable once role granting is stable and fixed
|
425
574
|
// restricted()
|
426
575
|
{
|
576
|
+
_checkNftType(poolNftId, POOL());
|
427
577
|
_changeTargetBalance(DECREASE, instanceStore, poolNftId, amount, feeAmount);
|
428
578
|
}
|
429
579
|
|
@@ -440,6 +590,7 @@ contract ComponentService is
|
|
440
590
|
// TODO re-enable once role granting is stable and fixed
|
441
591
|
// restricted()
|
442
592
|
{
|
593
|
+
_checkNftType(bundleNftId, BUNDLE());
|
443
594
|
_changeTargetBalance(INCREASE, instanceStore, bundleNftId, amount, feeAmount);
|
444
595
|
}
|
445
596
|
|
@@ -454,6 +605,7 @@ contract ComponentService is
|
|
454
605
|
// TODO re-enable once role granting is stable and fixed
|
455
606
|
// restricted()
|
456
607
|
{
|
608
|
+
_checkNftType(bundleNftId, BUNDLE());
|
457
609
|
_changeTargetBalance(DECREASE, instanceStore, bundleNftId, amount, feeAmount);
|
458
610
|
}
|
459
611
|
|
@@ -481,74 +633,72 @@ contract ComponentService is
|
|
481
633
|
}
|
482
634
|
}
|
483
635
|
|
484
|
-
/// @dev
|
636
|
+
/// @dev Registers the component represented by the provided address.
|
485
637
|
function _register(
|
486
638
|
address componentAddress, // address of component to register
|
487
|
-
ObjectType requiredType
|
488
|
-
RoleId requiredRole // role required for comonent owner for registration
|
639
|
+
ObjectType requiredType // required type for component for registration
|
489
640
|
)
|
490
641
|
internal
|
491
642
|
virtual
|
492
643
|
returns (
|
493
644
|
InstanceReader instanceReader,
|
645
|
+
InstanceAdmin instanceAdmin,
|
494
646
|
InstanceStore instanceStore,
|
647
|
+
NftId parentNftId,
|
495
648
|
NftId componentNftId
|
496
649
|
)
|
497
650
|
{
|
651
|
+
NftId instanceNftId;
|
652
|
+
IInstance instance;
|
653
|
+
IInstanceLinkedComponent component;
|
654
|
+
address initialOwner;
|
655
|
+
|
498
656
|
(
|
499
|
-
|
500
|
-
|
501
|
-
|
657
|
+
instanceNftId,
|
658
|
+
instance,
|
659
|
+
parentNftId,
|
660
|
+
component,
|
661
|
+
initialOwner
|
502
662
|
) = _getAndVerifyRegisterableComponent(
|
663
|
+
getRegistry(),
|
503
664
|
componentAddress,
|
504
|
-
requiredType
|
505
|
-
requiredRole);
|
506
|
-
|
507
|
-
// register component with registry
|
508
|
-
componentNftId = _registryService.registerComponent(
|
509
|
-
component,
|
510
|
-
requiredType,
|
511
|
-
owner).nftId;
|
512
|
-
|
513
|
-
component.linkToRegisteredNftId();
|
665
|
+
requiredType);
|
514
666
|
|
515
|
-
//
|
516
|
-
_instanceService.initializeAuthorization(
|
517
|
-
instance.getNftId(),
|
518
|
-
component);
|
519
|
-
|
520
|
-
// save amended component info with instance
|
667
|
+
// get instance supporting contracts (as function return values)
|
521
668
|
instanceReader = instance.getInstanceReader();
|
669
|
+
instanceAdmin = instance.getInstanceAdmin();
|
522
670
|
instanceStore = instance.getInstanceStore();
|
523
671
|
|
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
|
+
}
|
680
|
+
|
681
|
+
// deploy and wire token handler
|
524
682
|
IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
|
525
|
-
|
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());
|
526
692
|
|
693
|
+
// register component with instance
|
527
694
|
instanceStore.createComponent(
|
528
|
-
|
695
|
+
componentNftId,
|
529
696
|
componentInfo);
|
530
697
|
|
531
|
-
//
|
532
|
-
|
533
|
-
|
698
|
+
// link component contract to nft id
|
699
|
+
component.linkToRegisteredNftId();
|
534
700
|
|
535
|
-
|
536
|
-
function _linkToProduct(
|
537
|
-
InstanceReader instanceReader,
|
538
|
-
InstanceStore instanceStore,
|
539
|
-
NftId componentNftId,
|
540
|
-
NftId productNftId
|
541
|
-
)
|
542
|
-
internal
|
543
|
-
{
|
544
|
-
// only link components that are registered
|
545
|
-
if(componentNftId.eqz()) {
|
546
|
-
return;
|
547
|
-
}
|
548
|
-
|
549
|
-
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(componentNftId);
|
550
|
-
componentInfo.productNftId = productNftId;
|
551
|
-
instanceStore.updateComponent(componentNftId, componentInfo, KEEP_STATE());
|
701
|
+
emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, address(component), address(token), initialOwner);
|
552
702
|
}
|
553
703
|
|
554
704
|
|
@@ -567,12 +717,6 @@ contract ComponentService is
|
|
567
717
|
}
|
568
718
|
|
569
719
|
|
570
|
-
function _createSelectors(bytes4 selector) internal pure returns (bytes4[] memory selectors) {
|
571
|
-
selectors = new bytes4[](1);
|
572
|
-
selectors[0] = selector;
|
573
|
-
}
|
574
|
-
|
575
|
-
|
576
720
|
function _getLinkedProductInfo(
|
577
721
|
InstanceReader instanceReader,
|
578
722
|
NftId componentNftId
|
@@ -584,57 +728,139 @@ contract ComponentService is
|
|
584
728
|
IComponents.ProductInfo memory info
|
585
729
|
)
|
586
730
|
{
|
587
|
-
productNftId =
|
731
|
+
productNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
|
588
732
|
info = instanceReader.getProductInfo(productNftId);
|
589
733
|
}
|
590
734
|
|
591
735
|
|
592
|
-
/// @dev
|
593
|
-
///
|
594
|
-
/// - 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
|
595
739
|
/// - the component contract does not support IInstanceLinkedComponent
|
596
740
|
/// - the component type does not match with the required type
|
597
|
-
/// - the
|
741
|
+
/// - the component has already been registered
|
598
742
|
function _getAndVerifyRegisterableComponent(
|
743
|
+
IRegistry registry,
|
599
744
|
address componentAddress,
|
600
|
-
ObjectType requiredType
|
601
|
-
RoleId requiredRole
|
745
|
+
ObjectType requiredType
|
602
746
|
)
|
603
747
|
internal
|
604
748
|
view
|
605
749
|
returns (
|
750
|
+
NftId instanceNftId,
|
606
751
|
IInstance instance,
|
752
|
+
NftId parentNftId,
|
607
753
|
IInstanceLinkedComponent component,
|
608
|
-
address
|
754
|
+
address initialOwner
|
609
755
|
)
|
610
756
|
{
|
611
|
-
// check
|
612
|
-
|
613
|
-
if(
|
614
|
-
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);
|
615
761
|
}
|
616
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
|
+
|
617
768
|
// check component is of required type
|
769
|
+
component = IInstanceLinkedComponent(componentAddress);
|
618
770
|
IRegistry.ObjectInfo memory info = component.getInitialInfo();
|
619
771
|
if(info.objectType != requiredType) {
|
620
772
|
revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
|
621
773
|
}
|
622
774
|
|
623
775
|
// check component has not already been registered
|
624
|
-
if (getRegistry().
|
776
|
+
if (getRegistry().getNftIdForAddress(componentAddress).gtz()) {
|
625
777
|
revert ErrorComponentServiceAlreadyRegistered(componentAddress);
|
626
778
|
}
|
627
779
|
|
628
|
-
// check
|
629
|
-
|
630
|
-
|
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
|
+
}
|
804
|
+
|
805
|
+
instanceNftId = senderInfo.parentNftId;
|
806
|
+
}
|
807
|
+
|
808
|
+
// get initial owner and instance
|
809
|
+
initialOwner = info.initialOwner;
|
810
|
+
instance = IInstance(registry.getObjectAddress(instanceNftId));
|
811
|
+
}
|
812
|
+
|
813
|
+
function _setLocked(InstanceAdmin instanceAdmin, address componentAddress, bool locked) internal {
|
814
|
+
instanceAdmin.setTargetLocked(componentAddress, locked);
|
815
|
+
}
|
816
|
+
|
817
|
+
function _getAndVerifyActiveComponent(ObjectType expectedType)
|
818
|
+
internal
|
819
|
+
view
|
820
|
+
returns (
|
821
|
+
NftId componentNftId,
|
822
|
+
IInstance instance
|
823
|
+
)
|
824
|
+
{
|
825
|
+
return _getAndVerifyComponent(expectedType, true); // only active
|
826
|
+
}
|
631
827
|
|
632
|
-
|
633
|
-
|
828
|
+
function _getAndVerifyComponent(ObjectType expectedType, bool isActive)
|
829
|
+
internal
|
830
|
+
view
|
831
|
+
returns (
|
832
|
+
NftId componentNftId,
|
833
|
+
IInstance instance
|
834
|
+
)
|
835
|
+
{
|
836
|
+
IRegistry.ObjectInfo memory info;
|
837
|
+
address instanceAddress;
|
838
|
+
|
839
|
+
if (expectedType != COMPONENT()) {
|
840
|
+
(info, instanceAddress) = ContractLib.getAndVerifyComponent(
|
841
|
+
getRegistry(),
|
842
|
+
msg.sender, // caller
|
843
|
+
expectedType,
|
844
|
+
isActive);
|
845
|
+
} else {
|
846
|
+
(info, instanceAddress) = ContractLib.getAndVerifyAnyComponent(
|
847
|
+
getRegistry(),
|
848
|
+
msg.sender,
|
849
|
+
isActive);
|
634
850
|
}
|
851
|
+
|
852
|
+
// get component nft id and instance
|
853
|
+
componentNftId = info.nftId;
|
854
|
+
instance = IInstance(instanceAddress);
|
635
855
|
}
|
636
856
|
|
637
857
|
function _getDomain() internal pure virtual override returns(ObjectType) {
|
638
858
|
return COMPONENT();
|
639
859
|
}
|
860
|
+
|
861
|
+
function _checkSupportsInterface(address component) internal view {
|
862
|
+
if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
|
863
|
+
revert ErrorComponentServiceNotInstanceLinkedComponent(component);
|
864
|
+
}
|
865
|
+
}
|
640
866
|
}
|