@etherisc/gif-next 0.0.2-d437d8d-974 → 0.0.2-d43ca2d-657
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 +27 -6
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
- package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
- package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +166 -59
- 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/AccessManagerCloneable.sol/AccessManagerCloneable.json +233 -5
- 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 +97 -18
- 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/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 +192 -212
- 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 +132 -128
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +196 -95
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +142 -69
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +119 -110
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +78 -2
- 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 +1475 -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 +2025 -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 +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +232 -164
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +470 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +175 -151
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +321 -183
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +502 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +632 -231
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProductAuthorization.sol/SimpleProductAuthorization.json +470 -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 +130 -61
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +105 -103
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +182 -85
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +312 -135
- 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 +525 -84
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +134 -157
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +110 -49
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +207 -116
- 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 +151 -171
- 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 +113 -104
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +69 -11
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +127 -123
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +156 -81
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +130 -45
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +146 -142
- 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 +161 -156
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +124 -75
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +74 -35
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +133 -135
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +298 -187
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +146 -153
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +421 -264
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +146 -49
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +135 -54
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +106 -45
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +186 -136
- 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 +328 -131
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +146 -69
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +89 -9
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +206 -10
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +154 -21
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +105 -52
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +172 -117
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +55 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +264 -130
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +140 -63
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +185 -115
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +123 -54
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +182 -132
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +117 -63
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +115 -42
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +98 -17
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +144 -41
- package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
- package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
- 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 +142 -53
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +257 -254
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +112 -183
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +102 -37
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1795 -0
- 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 +406 -250
- 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 +3 -3
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +105 -83
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +493 -480
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +139 -76
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +60 -2
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +454 -5
- 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/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +92 -65
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +448 -260
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +113 -104
- 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 +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +148 -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 +55 -2
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +126 -122
- 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 +18 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +3 -3
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +152 -38
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +60 -2
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +388 -35
- 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 +1 -1
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +88 -24
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +110 -101
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +55 -23
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +3 -3
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +192 -171
- 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 +127 -53
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +7 -12
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +103 -62
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +106 -41
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +145 -104
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +3 -3
- 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 +33 -9
- 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 +3 -3
- 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 +118 -5
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +3 -3
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- 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/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +16 -3
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +47 -2
- 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 +79 -27
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
- package/contracts/accounting/AccountingService.sol +262 -0
- package/contracts/accounting/AccountingServiceManager.sol +38 -0
- package/contracts/accounting/IAccountingService.sol +45 -0
- package/contracts/authorization/AccessAdmin.sol +195 -128
- package/contracts/authorization/AccessManagerCloneable.sol +136 -3
- package/contracts/authorization/Authorization.sol +111 -39
- package/contracts/authorization/IAccess.sol +1 -0
- package/contracts/authorization/IAccessAdmin.sol +10 -5
- package/contracts/authorization/IAuthorization.sol +13 -7
- package/contracts/authorization/IServiceAuthorization.sol +3 -1
- package/contracts/authorization/ServiceAuthorization.sol +26 -10
- package/contracts/distribution/BasicDistribution.sol +8 -7
- package/contracts/distribution/BasicDistributionAuthorization.sol +1 -1
- package/contracts/distribution/Distribution.sol +32 -40
- package/contracts/distribution/DistributionService.sol +86 -65
- package/contracts/distribution/DistributionServiceManager.sol +6 -6
- package/contracts/distribution/IDistributionComponent.sol +1 -1
- package/contracts/distribution/IDistributionService.sol +5 -6
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +90 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +35 -0
- package/contracts/examples/fire/FireProduct.sol +436 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +11 -4
- package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +4 -4
- package/contracts/examples/unpermissioned/SimplePool.sol +37 -6
- package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +38 -23
- package/contracts/examples/unpermissioned/SimpleProductAuthorization.sol +28 -0
- package/contracts/instance/BundleSet.sol +38 -34
- package/contracts/instance/IInstance.sol +12 -9
- package/contracts/instance/IInstanceService.sol +9 -29
- package/contracts/instance/Instance.sol +40 -34
- package/contracts/instance/InstanceAdmin.sol +114 -73
- package/contracts/instance/InstanceAuthorizationV3.sol +51 -32
- package/contracts/instance/InstanceReader.sol +171 -20
- package/contracts/instance/InstanceService.sol +86 -149
- package/contracts/instance/InstanceServiceManager.sol +6 -7
- package/contracts/instance/RiskSet.sol +117 -0
- package/contracts/instance/base/ObjectCounter.sol +1 -2
- package/contracts/instance/base/ObjectLifecycle.sol +2 -1
- package/contracts/instance/base/ObjectSet.sol +24 -25
- package/contracts/instance/module/IComponents.sol +10 -6
- package/contracts/instance/module/IPolicy.sol +4 -3
- package/contracts/instance/module/IRisk.sol +3 -0
- package/contracts/oracle/BasicOracle.sol +0 -1
- package/contracts/oracle/IOracleService.sol +2 -1
- package/contracts/oracle/Oracle.sol +5 -16
- package/contracts/oracle/OracleService.sol +110 -80
- 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 +74 -87
- package/contracts/pool/BundleServiceManager.sol +6 -6
- package/contracts/pool/IBundleService.sol +2 -15
- package/contracts/pool/IPoolComponent.sol +19 -15
- package/contracts/pool/IPoolService.sol +30 -37
- package/contracts/pool/Pool.sol +141 -122
- package/contracts/pool/PoolService.sol +265 -159
- package/contracts/pool/PoolServiceManager.sol +4 -4
- package/contracts/product/ApplicationService.sol +32 -21
- package/contracts/product/ApplicationServiceManager.sol +4 -4
- package/contracts/product/BasicProduct.sol +8 -12
- package/contracts/product/BasicProductAuthorization.sol +1 -3
- package/contracts/product/ClaimService.sol +298 -127
- package/contracts/product/ClaimServiceManager.sol +4 -4
- package/contracts/product/IApplicationService.sol +5 -2
- package/contracts/product/IClaimService.sol +16 -2
- package/contracts/product/IPolicyService.sol +25 -10
- package/contracts/product/IPricingService.sol +9 -9
- package/contracts/product/IProductComponent.sol +23 -3
- package/contracts/product/PolicyService.sol +296 -198
- package/contracts/product/PolicyServiceManager.sol +4 -4
- package/contracts/product/PricingService.sol +14 -14
- package/contracts/product/PricingServiceManager.sol +4 -4
- package/contracts/product/Product.sol +100 -74
- package/contracts/product/RiskService.sol +79 -25
- package/contracts/product/RiskServiceManager.sol +4 -4
- package/contracts/registry/ChainNft.sol +10 -11
- package/contracts/registry/IRegistry.sol +14 -18
- package/contracts/registry/IRegistryService.sol +5 -12
- package/contracts/registry/IRelease.sol +26 -0
- package/contracts/registry/ITransferInterceptor.sol +1 -2
- package/contracts/registry/Registry.sol +32 -8
- package/contracts/registry/RegistryAdmin.sol +121 -241
- package/contracts/registry/RegistryService.sol +36 -47
- package/contracts/registry/RegistryServiceManager.sol +3 -3
- package/contracts/registry/ReleaseAdmin.sol +245 -0
- package/contracts/registry/ReleaseLifecycle.sol +8 -3
- package/contracts/registry/ReleaseRegistry.sol +257 -237
- package/contracts/registry/ServiceAuthorizationV3.sol +93 -50
- package/contracts/registry/TokenRegistry.sol +5 -7
- package/contracts/shared/Component.sol +67 -109
- package/contracts/shared/ComponentService.sol +381 -332
- package/contracts/shared/ComponentServiceManager.sol +8 -5
- package/contracts/shared/ComponentVerifyingService.sol +27 -16
- package/contracts/shared/ContractLib.sol +223 -9
- package/contracts/shared/IComponent.sol +8 -17
- package/contracts/shared/IComponentService.sol +45 -37
- package/contracts/shared/IInstanceLinkedComponent.sol +3 -22
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/INftOwnable.sol +2 -0
- package/contracts/shared/IRegisterable.sol +23 -1
- package/contracts/shared/IService.sol +3 -5
- package/contracts/shared/InstanceLinkedComponent.sol +68 -43
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +15 -4
- package/contracts/shared/NftOwnable.sol +26 -6
- package/contracts/shared/PolicyHolder.sol +5 -1
- package/contracts/shared/Registerable.sol +53 -19
- package/contracts/shared/RegistryLinked.sol +7 -13
- package/contracts/shared/Service.sol +13 -30
- package/contracts/shared/TokenHandler.sol +316 -66
- package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
- package/contracts/staking/IStaking.sol +9 -4
- package/contracts/staking/IStakingService.sol +0 -3
- package/contracts/staking/Staking.sol +64 -36
- package/contracts/staking/StakingManager.sol +8 -6
- package/contracts/staking/StakingReader.sol +12 -5
- package/contracts/staking/StakingService.sol +56 -24
- package/contracts/staking/StakingServiceManager.sol +2 -2
- 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 +11 -0
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/RiskId.sol +35 -4
- package/contracts/type/RoleId.sol +4 -13
- package/contracts/type/StateId.sol +14 -1
- package/contracts/type/Timestamp.sol +0 -5
- package/contracts/type/UFixed.sol +13 -119
- package/contracts/type/Version.sol +15 -5
- 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/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
- package/contracts/authorization/IModuleAuthorization.sol +0 -21
- package/contracts/authorization/ModuleAuthorization.sol +0 -78
- package/contracts/shared/InitializableCustom.sol +0 -177
@@ -1,45 +1,72 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
5
|
-
|
6
|
-
import {
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
|
6
|
+
import {IAccountingService} from "../accounting/IAccountingService.sol";
|
7
|
+
import {IComponent} from "../shared/IComponent.sol";
|
7
8
|
import {IComponents} from "../instance/module/IComponents.sol";
|
8
9
|
import {IComponentService} from "./IComponentService.sol";
|
9
10
|
import {IInstance} from "../instance/IInstance.sol";
|
10
11
|
import {IInstanceLinkedComponent} from "./IInstanceLinkedComponent.sol";
|
12
|
+
import {InstanceAdmin} from "../instance/InstanceAdmin.sol";
|
11
13
|
import {InstanceReader} from "../instance/InstanceReader.sol";
|
12
14
|
import {InstanceStore} from "../instance/InstanceStore.sol";
|
13
15
|
import {IInstanceService} from "../instance/IInstanceService.sol";
|
14
16
|
import {IPoolComponent} from "../pool/IPoolComponent.sol";
|
15
17
|
import {IProductComponent} from "../product/IProductComponent.sol";
|
18
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
16
19
|
import {IRegistry} from "../registry/IRegistry.sol";
|
17
20
|
import {IRegistryService} from "../registry/IRegistryService.sol";
|
21
|
+
|
22
|
+
import {Amount, AmountLib} from "../type/Amount.sol";
|
23
|
+
import {ContractLib} from "../shared/ContractLib.sol";
|
24
|
+
import {Fee, FeeLib} from "../type/Fee.sol";
|
18
25
|
import {KEEP_STATE} from "../type/StateId.sol";
|
19
26
|
import {NftId} from "../type/NftId.sol";
|
20
|
-
import {ObjectType, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
|
21
|
-
import {
|
27
|
+
import {ObjectType, ACCOUNTING, REGISTRY, COMPONENT, DISTRIBUTION, INSTANCE, ORACLE, POOL, PRODUCT} from "../type/ObjectType.sol";
|
28
|
+
import {Service} from "../shared/Service.sol";
|
29
|
+
import {TokenHandler} from "../shared/TokenHandler.sol";
|
22
30
|
import {TokenHandlerDeployerLib} from "../shared/TokenHandlerDeployerLib.sol";
|
31
|
+
import {VersionPart} from "../type/Version.sol";
|
32
|
+
|
23
33
|
|
24
34
|
contract ComponentService is
|
25
|
-
|
35
|
+
Service,
|
26
36
|
IComponentService
|
27
37
|
{
|
28
|
-
error ErrorComponentServiceAlreadyRegistered(address component);
|
29
|
-
error ErrorComponentServiceNotComponent(address component);
|
30
|
-
error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
|
31
|
-
error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
|
32
|
-
error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
|
33
|
-
error ErrorComponentServiceComponentLocked(address component);
|
34
|
-
error ErrorComponentServiceSenderNotService(address sender);
|
35
|
-
error ErrorComponentServiceComponentTypeInvalid(address component, ObjectType expectedType, ObjectType foundType);
|
36
|
-
|
37
38
|
bool private constant INCREASE = true;
|
38
39
|
bool private constant DECREASE = false;
|
39
40
|
|
41
|
+
IAccountingService private _accountingService;
|
40
42
|
IRegistryService private _registryService;
|
41
43
|
IInstanceService private _instanceService;
|
42
44
|
|
45
|
+
modifier onlyComponent(address component) {
|
46
|
+
_checkSupportsInterface(component);
|
47
|
+
_;
|
48
|
+
}
|
49
|
+
|
50
|
+
modifier onlyInstance() {
|
51
|
+
NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
|
52
|
+
if (instanceNftId.eqz()) {
|
53
|
+
revert ErrorComponentServiceNotRegistered(msg.sender);
|
54
|
+
}
|
55
|
+
|
56
|
+
ObjectType objectType = getRegistry().getObjectInfo(instanceNftId).objectType;
|
57
|
+
if (objectType != INSTANCE()) {
|
58
|
+
revert ErrorComponentServiceNotInstance(msg.sender, objectType);
|
59
|
+
}
|
60
|
+
|
61
|
+
VersionPart instanceVersion = IInstance(msg.sender).getRelease();
|
62
|
+
if (instanceVersion != getVersion().toMajorPart()) {
|
63
|
+
revert ErrorComponentServiceInstanceVersionMismatch(msg.sender, instanceVersion);
|
64
|
+
}
|
65
|
+
|
66
|
+
_;
|
67
|
+
}
|
68
|
+
|
69
|
+
|
43
70
|
function _initialize(
|
44
71
|
address owner,
|
45
72
|
bytes memory data
|
@@ -48,13 +75,14 @@ contract ComponentService is
|
|
48
75
|
virtual override
|
49
76
|
initializer()
|
50
77
|
{
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
78
|
+
(
|
79
|
+
address authority,
|
80
|
+
address registry
|
81
|
+
) = abi.decode(data, (address, address));
|
55
82
|
|
56
|
-
|
83
|
+
__Service_init(authority, registry, owner);
|
57
84
|
|
85
|
+
_accountingService = IAccountingService(_getServiceAddress(ACCOUNTING()));
|
58
86
|
_registryService = IRegistryService(_getServiceAddress(REGISTRY()));
|
59
87
|
_instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
|
60
88
|
|
@@ -63,42 +91,106 @@ contract ComponentService is
|
|
63
91
|
|
64
92
|
//-------- component ----------------------------------------------------//
|
65
93
|
|
66
|
-
function
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
94
|
+
function registerComponent(address component)
|
95
|
+
external
|
96
|
+
virtual
|
97
|
+
onlyComponent(component)
|
98
|
+
returns (NftId componentNftId)
|
99
|
+
{
|
100
|
+
// type specific registration
|
101
|
+
ObjectType componentType = IInstanceLinkedComponent(component).getInitialInfo().objectType;
|
102
|
+
if (componentType == POOL()) {
|
103
|
+
return _registerPool(component);
|
73
104
|
}
|
74
|
-
|
75
|
-
|
76
|
-
revert ErrorComponentServiceWalletAddressZero();
|
105
|
+
if (componentType == DISTRIBUTION()) {
|
106
|
+
return _registerDistribution(component);
|
77
107
|
}
|
78
|
-
|
79
|
-
|
80
|
-
revert ErrorComponentServiceWalletAddressIsSameAsCurrent();
|
108
|
+
if (componentType == ORACLE()) {
|
109
|
+
return _registerOracle(component);
|
81
110
|
}
|
82
111
|
|
83
|
-
|
84
|
-
|
85
|
-
|
112
|
+
// fail
|
113
|
+
revert ErrorComponentServiceTypeNotSupported(component, componentType);
|
114
|
+
}
|
115
|
+
|
116
|
+
function approveTokenHandler(
|
117
|
+
IERC20Metadata token,
|
118
|
+
Amount amount
|
119
|
+
)
|
120
|
+
external
|
121
|
+
virtual
|
122
|
+
{
|
123
|
+
// checks
|
124
|
+
(NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
|
125
|
+
TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
|
126
|
+
componentNftId).tokenHandler;
|
127
|
+
|
128
|
+
// effects
|
129
|
+
tokenHandler.approve(token, amount);
|
130
|
+
}
|
131
|
+
|
132
|
+
|
133
|
+
function approveStakingTokenHandler(
|
134
|
+
IERC20Metadata token,
|
135
|
+
Amount amount
|
136
|
+
)
|
137
|
+
external
|
138
|
+
virtual
|
139
|
+
{
|
140
|
+
// checks
|
141
|
+
ContractLib.getAndVerifyStaking(
|
142
|
+
getRegistry(),
|
143
|
+
msg.sender); // only active
|
144
|
+
|
145
|
+
// effects
|
146
|
+
TokenHandler tokenHandler = IComponent(msg.sender).getTokenHandler();
|
147
|
+
tokenHandler.approve(token, amount);
|
86
148
|
}
|
87
149
|
|
88
|
-
// TODO implement
|
89
|
-
function lock() external virtual {}
|
90
150
|
|
91
|
-
|
92
|
-
|
151
|
+
function setWallet(address newWallet)
|
152
|
+
external
|
153
|
+
virtual
|
154
|
+
{
|
155
|
+
// checks
|
156
|
+
(NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
|
157
|
+
TokenHandler tokenHandler = instance.getInstanceReader().getComponentInfo(
|
158
|
+
componentNftId).tokenHandler;
|
159
|
+
|
160
|
+
// effects
|
161
|
+
tokenHandler.setWallet(newWallet);
|
162
|
+
}
|
163
|
+
|
164
|
+
/// @inheritdoc IComponentService
|
165
|
+
function setLockedFromInstance(address componentAddress, bool locked)
|
166
|
+
external
|
167
|
+
virtual
|
168
|
+
onlyInstance()
|
169
|
+
{
|
170
|
+
address instanceAddress = msg.sender;
|
171
|
+
// NftId instanceNftId = getRegistry().getNftIdForAddress(msg.sender);
|
172
|
+
IInstance instance = IInstance(instanceAddress);
|
173
|
+
_setLocked(instance.getInstanceAdmin(), componentAddress, locked);
|
174
|
+
}
|
175
|
+
|
176
|
+
/// @inheritdoc IComponentService
|
177
|
+
function setLockedFromComponent(address componentAddress, bool locked)
|
178
|
+
external
|
179
|
+
virtual
|
180
|
+
onlyComponent(msg.sender)
|
181
|
+
{
|
182
|
+
(, IInstance instance) = _getAndVerifyComponent(COMPONENT(), false);
|
183
|
+
_setLocked(instance.getInstanceAdmin(), componentAddress, locked);
|
184
|
+
}
|
93
185
|
|
94
186
|
function withdrawFees(Amount amount)
|
95
187
|
external
|
96
188
|
virtual
|
97
189
|
returns (Amount withdrawnAmount)
|
98
190
|
{
|
99
|
-
(NftId componentNftId
|
191
|
+
(NftId componentNftId, IInstance instance) = _getAndVerifyActiveComponent(COMPONENT());
|
100
192
|
IComponents.ComponentInfo memory info = instance.getInstanceReader().getComponentInfo(componentNftId);
|
101
|
-
address componentWallet = info.
|
193
|
+
address componentWallet = info.tokenHandler.getWallet();
|
102
194
|
|
103
195
|
// determine withdrawn amount
|
104
196
|
withdrawnAmount = amount;
|
@@ -114,7 +206,7 @@ contract ComponentService is
|
|
114
206
|
}
|
115
207
|
|
116
208
|
// decrease fee counters by withdrawnAmount
|
117
|
-
|
209
|
+
_accountingService.decreaseComponentFees(instance.getInstanceStore(), componentNftId, withdrawnAmount);
|
118
210
|
|
119
211
|
// transfer amount to component owner
|
120
212
|
address componentOwner = getRegistry().ownerOf(componentNftId);
|
@@ -125,29 +217,30 @@ contract ComponentService is
|
|
125
217
|
|
126
218
|
//-------- product ------------------------------------------------------//
|
127
219
|
|
128
|
-
function registerProduct()
|
220
|
+
function registerProduct(address productAddress)
|
129
221
|
external
|
130
222
|
virtual
|
223
|
+
nonReentrant()
|
224
|
+
onlyComponent(productAddress)
|
225
|
+
returns (NftId productNftId)
|
131
226
|
{
|
132
|
-
address contractAddress = msg.sender;
|
133
|
-
|
134
227
|
// register/create component setup
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
// create product info
|
145
|
-
IComponents.ProductInfo memory productInfo = IProductComponent(contractAddress).getInitialProductInfo();
|
146
|
-
instanceStore.createProduct(productNftId, productInfo);
|
228
|
+
InstanceAdmin instanceAdmin;
|
229
|
+
InstanceStore instanceStore;
|
230
|
+
(, instanceAdmin, instanceStore,, productNftId) = _register(
|
231
|
+
productAddress,
|
232
|
+
PRODUCT());
|
233
|
+
|
234
|
+
// get product
|
235
|
+
IProductComponent product = IProductComponent(productAddress);
|
147
236
|
|
148
|
-
//
|
149
|
-
|
150
|
-
|
237
|
+
// create info
|
238
|
+
instanceStore.createProduct(
|
239
|
+
productNftId,
|
240
|
+
product.getInitialProductInfo());
|
241
|
+
|
242
|
+
// authorize
|
243
|
+
instanceAdmin.initializeComponentAuthorization(product);
|
151
244
|
}
|
152
245
|
|
153
246
|
|
@@ -157,8 +250,9 @@ contract ComponentService is
|
|
157
250
|
)
|
158
251
|
external
|
159
252
|
virtual
|
253
|
+
nonReentrant()
|
160
254
|
{
|
161
|
-
(NftId productNftId
|
255
|
+
(NftId productNftId, IInstance instance) = _getAndVerifyActiveComponent(PRODUCT());
|
162
256
|
IComponents.ProductInfo memory productInfo = instance.getInstanceReader().getProductInfo(productNftId);
|
163
257
|
bool feesChanged = false;
|
164
258
|
|
@@ -182,43 +276,40 @@ contract ComponentService is
|
|
182
276
|
}
|
183
277
|
}
|
184
278
|
|
185
|
-
function increaseProductFees(
|
186
|
-
InstanceStore instanceStore,
|
187
|
-
NftId productNftId,
|
188
|
-
Amount feeAmount
|
189
|
-
)
|
190
|
-
external
|
191
|
-
virtual
|
192
|
-
// TODO re-enable once role granting is stable and fixed
|
193
|
-
// restricted()
|
194
|
-
{
|
195
|
-
_changeTargetBalance(INCREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
|
196
|
-
}
|
197
|
-
|
198
|
-
|
199
|
-
function decreaseProductFees(InstanceStore instanceStore, NftId productNftId, Amount feeAmount)
|
200
|
-
external
|
201
|
-
virtual
|
202
|
-
// TODO re-enable once role granting is stable and fixed
|
203
|
-
// restricted()
|
204
|
-
{
|
205
|
-
_changeTargetBalance(DECREASE, instanceStore, productNftId, AmountLib.zero(), feeAmount);
|
206
|
-
}
|
207
|
-
|
208
279
|
//-------- distribution -------------------------------------------------//
|
209
280
|
|
210
281
|
/// @dev registers the sending component as a distribution component
|
211
|
-
function
|
212
|
-
|
282
|
+
function _registerDistribution(address distributioAddress)
|
283
|
+
internal
|
213
284
|
virtual
|
285
|
+
nonReentrant()
|
286
|
+
returns (NftId distributionNftId)
|
214
287
|
{
|
215
|
-
address contractAddress = msg.sender;
|
216
|
-
|
217
288
|
// register/create component info
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
289
|
+
InstanceReader instanceReader;
|
290
|
+
InstanceAdmin instanceAdmin;
|
291
|
+
InstanceStore instanceStore;
|
292
|
+
NftId productNftId;
|
293
|
+
(instanceReader, instanceAdmin, instanceStore, productNftId, distributionNftId) = _register(
|
294
|
+
distributioAddress,
|
295
|
+
DISTRIBUTION());
|
296
|
+
|
297
|
+
// check product is still expecting a distribution registration
|
298
|
+
IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
|
299
|
+
if (!productInfo.hasDistribution) {
|
300
|
+
revert ErrorProductServiceNoDistributionExpected(productNftId);
|
301
|
+
}
|
302
|
+
if (productInfo.distributionNftId.gtz()) {
|
303
|
+
revert ErrorProductServiceDistributionAlreadyRegistered(productNftId, productInfo.distributionNftId);
|
304
|
+
}
|
305
|
+
|
306
|
+
// set distribution in product info
|
307
|
+
productInfo.distributionNftId = distributionNftId;
|
308
|
+
instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
309
|
+
|
310
|
+
// authorize
|
311
|
+
instanceAdmin.initializeComponentAuthorization(
|
312
|
+
IInstanceLinkedComponent(distributioAddress));
|
222
313
|
}
|
223
314
|
|
224
315
|
|
@@ -229,7 +320,7 @@ contract ComponentService is
|
|
229
320
|
external
|
230
321
|
virtual
|
231
322
|
{
|
232
|
-
(NftId distributionNftId
|
323
|
+
(NftId distributionNftId, IInstance instance) = _getAndVerifyActiveComponent(DISTRIBUTION());
|
233
324
|
(NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
|
234
325
|
instance.getInstanceReader(), distributionNftId);
|
235
326
|
bool feesChanged = false;
|
@@ -254,107 +345,77 @@ contract ComponentService is
|
|
254
345
|
}
|
255
346
|
}
|
256
347
|
|
257
|
-
function increaseDistributionBalance(
|
258
|
-
InstanceStore instanceStore,
|
259
|
-
NftId distributionNftId,
|
260
|
-
Amount amount,
|
261
|
-
Amount feeAmount
|
262
|
-
)
|
263
|
-
external
|
264
|
-
virtual
|
265
|
-
// TODO re-enable once role granting is stable and fixed
|
266
|
-
// restricted()
|
267
|
-
{
|
268
|
-
_changeTargetBalance(INCREASE, instanceStore, distributionNftId, amount, feeAmount);
|
269
|
-
}
|
270
|
-
|
271
|
-
|
272
|
-
function decreaseDistributionBalance(
|
273
|
-
InstanceStore instanceStore,
|
274
|
-
NftId distributionNftId,
|
275
|
-
Amount amount,
|
276
|
-
Amount feeAmount
|
277
|
-
)
|
278
|
-
external
|
279
|
-
virtual
|
280
|
-
// TODO re-enable once role granting is stable and fixed
|
281
|
-
// restricted()
|
282
|
-
{
|
283
|
-
_changeTargetBalance(DECREASE, instanceStore, distributionNftId, amount, feeAmount);
|
284
|
-
}
|
285
|
-
|
286
|
-
//-------- distributor -------------------------------------------------------//
|
287
|
-
|
288
|
-
function increaseDistributorBalance(
|
289
|
-
InstanceStore instanceStore,
|
290
|
-
NftId distributorNftId,
|
291
|
-
Amount amount,
|
292
|
-
Amount feeAmount
|
293
|
-
)
|
294
|
-
external
|
295
|
-
virtual
|
296
|
-
// TODO re-enable once role granting is stable and fixed
|
297
|
-
// restricted()
|
298
|
-
{
|
299
|
-
_changeTargetBalance(INCREASE, instanceStore, distributorNftId, amount, feeAmount);
|
300
|
-
}
|
301
|
-
|
302
|
-
function decreaseDistributorBalance(
|
303
|
-
InstanceStore instanceStore,
|
304
|
-
NftId distributorNftId,
|
305
|
-
Amount amount,
|
306
|
-
Amount feeAmount
|
307
|
-
)
|
308
|
-
external
|
309
|
-
virtual
|
310
|
-
// TODO re-enable once role granting is stable and fixed
|
311
|
-
// restricted()
|
312
|
-
{
|
313
|
-
_changeTargetBalance(DECREASE, instanceStore, distributorNftId, amount, feeAmount);
|
314
|
-
}
|
315
|
-
|
316
348
|
//-------- oracle -------------------------------------------------------//
|
317
349
|
|
318
|
-
function
|
319
|
-
|
350
|
+
function _registerOracle(address oracleAddress)
|
351
|
+
internal
|
320
352
|
virtual
|
353
|
+
returns (NftId oracleNftId)
|
321
354
|
{
|
322
|
-
address contractAddress = msg.sender;
|
323
|
-
|
324
355
|
// register/create component setup
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
356
|
+
InstanceReader instanceReader;
|
357
|
+
InstanceAdmin instanceAdmin;
|
358
|
+
InstanceStore instanceStore;
|
359
|
+
NftId productNftId;
|
360
|
+
|
361
|
+
(instanceReader, instanceAdmin, instanceStore, productNftId, oracleNftId) = _register(
|
362
|
+
oracleAddress,
|
363
|
+
ORACLE());
|
364
|
+
|
365
|
+
// check product is still expecting an oracle registration
|
366
|
+
IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
|
367
|
+
if (productInfo.expectedNumberOfOracles == 0) {
|
368
|
+
revert ErrorProductServiceNoOraclesExpected(productNftId);
|
369
|
+
}
|
370
|
+
if (productInfo.numberOfOracles == productInfo.expectedNumberOfOracles) {
|
371
|
+
revert ErrorProductServiceOraclesAlreadyRegistered(productNftId, productInfo.expectedNumberOfOracles);
|
372
|
+
}
|
373
|
+
|
374
|
+
// update/add oracle to product info
|
375
|
+
productInfo.oracleNftId[productInfo.numberOfOracles] = oracleNftId;
|
376
|
+
productInfo.numberOfOracles++;
|
377
|
+
instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
378
|
+
|
379
|
+
// authorize
|
380
|
+
instanceAdmin.initializeComponentAuthorization(
|
381
|
+
IInstanceLinkedComponent(oracleAddress));
|
333
382
|
}
|
334
383
|
|
335
384
|
//-------- pool ---------------------------------------------------------//
|
336
385
|
|
337
|
-
function
|
338
|
-
|
386
|
+
function _registerPool(address poolAddress)
|
387
|
+
internal
|
339
388
|
virtual
|
389
|
+
returns (NftId poolNftId)
|
340
390
|
{
|
341
|
-
address contractAddress = msg.sender;
|
342
|
-
|
343
391
|
// register/create component setup
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
392
|
+
InstanceReader instanceReader;
|
393
|
+
InstanceAdmin instanceAdmin;
|
394
|
+
InstanceStore instanceStore;
|
395
|
+
NftId productNftId;
|
396
|
+
|
397
|
+
(instanceReader, instanceAdmin, instanceStore, productNftId, poolNftId) = _register(
|
398
|
+
poolAddress,
|
399
|
+
POOL());
|
400
|
+
|
401
|
+
// check product is still expecting a pool registration
|
402
|
+
IComponents.ProductInfo memory productInfo = instanceReader.getProductInfo(productNftId);
|
403
|
+
if (productInfo.poolNftId.gtz()) {
|
404
|
+
revert ErrorProductServicePoolAlreadyRegistered(productNftId, productInfo.poolNftId);
|
405
|
+
}
|
352
406
|
|
353
407
|
// create info
|
408
|
+
IPoolComponent pool = IPoolComponent(poolAddress);
|
354
409
|
instanceStore.createPool(
|
355
|
-
|
356
|
-
|
357
|
-
|
410
|
+
poolNftId,
|
411
|
+
pool.getInitialPoolInfo());
|
412
|
+
|
413
|
+
// update pool in product info
|
414
|
+
productInfo.poolNftId = poolNftId;
|
415
|
+
instanceStore.updateProduct(productNftId, productInfo, KEEP_STATE());
|
416
|
+
|
417
|
+
// authorize
|
418
|
+
instanceAdmin.initializeComponentAuthorization(pool);
|
358
419
|
}
|
359
420
|
|
360
421
|
|
@@ -366,7 +427,8 @@ contract ComponentService is
|
|
366
427
|
external
|
367
428
|
virtual
|
368
429
|
{
|
369
|
-
(NftId poolNftId
|
430
|
+
(NftId poolNftId, IInstance instance) = _getAndVerifyActiveComponent(POOL());
|
431
|
+
|
370
432
|
(NftId productNftId, IComponents.ProductInfo memory productInfo) = _getLinkedProductInfo(
|
371
433
|
instance.getInstanceReader(), poolNftId);
|
372
434
|
bool feesChanged = false;
|
@@ -398,158 +460,69 @@ contract ComponentService is
|
|
398
460
|
}
|
399
461
|
}
|
400
462
|
|
401
|
-
|
402
|
-
InstanceStore instanceStore,
|
403
|
-
NftId poolNftId,
|
404
|
-
Amount amount,
|
405
|
-
Amount feeAmount
|
406
|
-
)
|
407
|
-
public
|
408
|
-
virtual
|
409
|
-
// TODO re-enable once role granting is stable and fixed
|
410
|
-
// restricted()
|
411
|
-
{
|
412
|
-
_changeTargetBalance(INCREASE, instanceStore, poolNftId, amount, feeAmount);
|
413
|
-
}
|
414
|
-
|
415
|
-
function decreasePoolBalance(
|
416
|
-
InstanceStore instanceStore,
|
417
|
-
NftId poolNftId,
|
418
|
-
Amount amount,
|
419
|
-
Amount feeAmount
|
420
|
-
)
|
421
|
-
public
|
422
|
-
virtual
|
423
|
-
// TODO re-enable once role granting is stable and fixed
|
424
|
-
// restricted()
|
425
|
-
{
|
426
|
-
_changeTargetBalance(DECREASE, instanceStore, poolNftId, amount, feeAmount);
|
427
|
-
}
|
428
|
-
|
429
|
-
//-------- bundle -------------------------------------------------------//
|
430
|
-
|
431
|
-
function increaseBundleBalance(
|
432
|
-
InstanceStore instanceStore,
|
433
|
-
NftId bundleNftId,
|
434
|
-
Amount amount,
|
435
|
-
Amount feeAmount
|
436
|
-
)
|
437
|
-
external
|
438
|
-
virtual
|
439
|
-
// TODO re-enable once role granting is stable and fixed
|
440
|
-
// restricted()
|
441
|
-
{
|
442
|
-
_changeTargetBalance(INCREASE, instanceStore, bundleNftId, amount, feeAmount);
|
443
|
-
}
|
444
|
-
|
445
|
-
function decreaseBundleBalance(
|
446
|
-
InstanceStore instanceStore,
|
447
|
-
NftId bundleNftId,
|
448
|
-
Amount amount,
|
449
|
-
Amount feeAmount
|
450
|
-
)
|
451
|
-
external
|
452
|
-
virtual
|
453
|
-
// TODO re-enable once role granting is stable and fixed
|
454
|
-
// restricted()
|
455
|
-
{
|
456
|
-
_changeTargetBalance(DECREASE, instanceStore, bundleNftId, amount, feeAmount);
|
457
|
-
}
|
458
|
-
|
459
|
-
|
460
|
-
//-------- internal functions ------------------------------------------//
|
461
|
-
|
462
|
-
function _changeTargetBalance(
|
463
|
-
bool increase,
|
464
|
-
InstanceStore instanceStore,
|
465
|
-
NftId targetNftId,
|
466
|
-
Amount amount,
|
467
|
-
Amount feeAmount
|
468
|
-
)
|
469
|
-
internal
|
470
|
-
virtual
|
471
|
-
{
|
472
|
-
Amount totalAmount = amount + feeAmount;
|
473
|
-
|
474
|
-
if(increase) {
|
475
|
-
if(totalAmount.gtz()) { instanceStore.increaseBalance(targetNftId, totalAmount); }
|
476
|
-
if(feeAmount.gtz()) { instanceStore.increaseFees(targetNftId, feeAmount); }
|
477
|
-
} else {
|
478
|
-
if(totalAmount.gtz()) { instanceStore.decreaseBalance(targetNftId, totalAmount); }
|
479
|
-
if(feeAmount.gtz()) { instanceStore.decreaseFees(targetNftId, feeAmount); }
|
480
|
-
}
|
481
|
-
}
|
482
|
-
|
483
|
-
/// @dev registers the component represented by the provided address
|
463
|
+
/// @dev Registers the component represented by the provided address.
|
484
464
|
function _register(
|
485
465
|
address componentAddress, // address of component to register
|
486
|
-
ObjectType requiredType
|
487
|
-
RoleId requiredRole // role required for comonent owner for registration
|
466
|
+
ObjectType requiredType // required type for component for registration
|
488
467
|
)
|
489
468
|
internal
|
490
469
|
virtual
|
491
470
|
returns (
|
492
471
|
InstanceReader instanceReader,
|
472
|
+
InstanceAdmin instanceAdmin,
|
493
473
|
InstanceStore instanceStore,
|
474
|
+
NftId parentNftId,
|
494
475
|
NftId componentNftId
|
495
476
|
)
|
496
477
|
{
|
478
|
+
NftId instanceNftId;
|
479
|
+
IInstance instance;
|
480
|
+
IInstanceLinkedComponent component;
|
481
|
+
address initialOwner;
|
482
|
+
|
497
483
|
(
|
498
|
-
|
499
|
-
|
500
|
-
|
484
|
+
instanceNftId,
|
485
|
+
instance,
|
486
|
+
parentNftId,
|
487
|
+
component,
|
488
|
+
initialOwner
|
501
489
|
) = _getAndVerifyRegisterableComponent(
|
490
|
+
getRegistry(),
|
502
491
|
componentAddress,
|
503
|
-
requiredType
|
504
|
-
requiredRole);
|
492
|
+
requiredType);
|
505
493
|
|
506
|
-
//
|
507
|
-
componentNftId = _registryService.registerComponent(
|
508
|
-
component,
|
509
|
-
requiredType,
|
510
|
-
owner).nftId;
|
511
|
-
|
512
|
-
component.linkToRegisteredNftId();
|
513
|
-
|
514
|
-
// save amended component info with instance
|
494
|
+
// get instance supporting contracts (as function return values)
|
515
495
|
instanceReader = instance.getInstanceReader();
|
496
|
+
instanceAdmin = instance.getInstanceAdmin();
|
516
497
|
instanceStore = instance.getInstanceStore();
|
517
498
|
|
499
|
+
// register with registry
|
500
|
+
if (requiredType == PRODUCT()) {
|
501
|
+
componentNftId = _registryService.registerProduct(
|
502
|
+
component, initialOwner).nftId;
|
503
|
+
} else {
|
504
|
+
componentNftId = _registryService.registerProductLinkedComponent(
|
505
|
+
component, requiredType, initialOwner).nftId;
|
506
|
+
}
|
507
|
+
|
508
|
+
// deploy and wire token handler
|
518
509
|
IComponents.ComponentInfo memory componentInfo = component.getInitialComponentInfo();
|
510
|
+
IERC20Metadata token = componentInfo.token;
|
519
511
|
componentInfo.tokenHandler = TokenHandlerDeployerLib.deployTokenHandler(
|
520
|
-
address(
|
521
|
-
address(
|
522
|
-
|
512
|
+
address(getRegistry()),
|
513
|
+
address(component), // initially, component is its own wallet
|
514
|
+
address(token),
|
515
|
+
address(instanceAdmin.authority()));
|
516
|
+
|
517
|
+
// register component with instance
|
523
518
|
instanceStore.createComponent(
|
524
|
-
|
519
|
+
componentNftId,
|
525
520
|
componentInfo);
|
526
521
|
|
527
|
-
//
|
528
|
-
|
529
|
-
instance.getNftId(),
|
530
|
-
component);
|
531
|
-
|
532
|
-
// TODO add logging
|
533
|
-
}
|
534
|
-
|
522
|
+
// link component contract to nft id
|
523
|
+
component.linkToRegisteredNftId();
|
535
524
|
|
536
|
-
|
537
|
-
function _linkToProduct(
|
538
|
-
InstanceReader instanceReader,
|
539
|
-
InstanceStore instanceStore,
|
540
|
-
NftId componentNftId,
|
541
|
-
NftId productNftId
|
542
|
-
)
|
543
|
-
internal
|
544
|
-
{
|
545
|
-
// only link components that are registered
|
546
|
-
if(componentNftId.eqz()) {
|
547
|
-
return;
|
548
|
-
}
|
549
|
-
|
550
|
-
IComponents.ComponentInfo memory componentInfo = instanceReader.getComponentInfo(componentNftId);
|
551
|
-
componentInfo.productNftId = productNftId;
|
552
|
-
instanceStore.updateComponent(componentNftId, componentInfo, KEEP_STATE());
|
525
|
+
emit LogComponentServiceRegistered(instanceNftId, componentNftId, requiredType, address(component), address(token), initialOwner);
|
553
526
|
}
|
554
527
|
|
555
528
|
|
@@ -568,12 +541,6 @@ contract ComponentService is
|
|
568
541
|
}
|
569
542
|
|
570
543
|
|
571
|
-
function _createSelectors(bytes4 selector) internal pure returns (bytes4[] memory selectors) {
|
572
|
-
selectors = new bytes4[](1);
|
573
|
-
selectors[0] = selector;
|
574
|
-
}
|
575
|
-
|
576
|
-
|
577
544
|
function _getLinkedProductInfo(
|
578
545
|
InstanceReader instanceReader,
|
579
546
|
NftId componentNftId
|
@@ -585,37 +552,45 @@ contract ComponentService is
|
|
585
552
|
IComponents.ProductInfo memory info
|
586
553
|
)
|
587
554
|
{
|
588
|
-
productNftId =
|
555
|
+
productNftId = getRegistry().getObjectInfo(componentNftId).parentNftId;
|
589
556
|
info = instanceReader.getProductInfo(productNftId);
|
590
557
|
}
|
591
558
|
|
592
559
|
|
593
|
-
/// @dev
|
594
|
-
///
|
595
|
-
/// - the
|
560
|
+
/// @dev Based on the provided component address required type the component
|
561
|
+
/// and related instance contract this function reverts iff:
|
562
|
+
/// - the sender is not registered
|
596
563
|
/// - the component contract does not support IInstanceLinkedComponent
|
597
564
|
/// - the component type does not match with the required type
|
598
|
-
/// - the
|
565
|
+
/// - the component has already been registered
|
599
566
|
function _getAndVerifyRegisterableComponent(
|
567
|
+
IRegistry registry,
|
600
568
|
address componentAddress,
|
601
|
-
ObjectType requiredType
|
602
|
-
RoleId requiredRole
|
569
|
+
ObjectType requiredType
|
603
570
|
)
|
604
571
|
internal
|
605
572
|
view
|
606
573
|
returns (
|
574
|
+
NftId instanceNftId,
|
607
575
|
IInstance instance,
|
576
|
+
NftId parentNftId,
|
608
577
|
IInstanceLinkedComponent component,
|
609
|
-
address
|
578
|
+
address initialOwner
|
610
579
|
)
|
611
580
|
{
|
612
|
-
// check
|
613
|
-
|
614
|
-
if(
|
615
|
-
revert
|
581
|
+
// check sender (instance or product) is registered
|
582
|
+
IRegistry.ObjectInfo memory senderInfo = registry.getObjectInfo(msg.sender);
|
583
|
+
if (senderInfo.nftId.eqz()) {
|
584
|
+
revert ErrorComponentServiceSenderNotRegistered(msg.sender);
|
616
585
|
}
|
617
586
|
|
587
|
+
// the sender is the parent of the component to be registered
|
588
|
+
// an instance caller wanting to register a product - or -
|
589
|
+
// a product caller wantint go register a distribution, oracle or pool
|
590
|
+
parentNftId = senderInfo.nftId;
|
591
|
+
|
618
592
|
// check component is of required type
|
593
|
+
component = IInstanceLinkedComponent(componentAddress);
|
619
594
|
IRegistry.ObjectInfo memory info = component.getInitialInfo();
|
620
595
|
if(info.objectType != requiredType) {
|
621
596
|
revert ErrorComponentServiceInvalidType(componentAddress, requiredType, info.objectType);
|
@@ -626,16 +601,90 @@ contract ComponentService is
|
|
626
601
|
revert ErrorComponentServiceAlreadyRegistered(componentAddress);
|
627
602
|
}
|
628
603
|
|
629
|
-
// check
|
630
|
-
|
631
|
-
|
604
|
+
// check release matches
|
605
|
+
address parentAddress = registry.getObjectAddress(parentNftId);
|
606
|
+
if (component.getRelease() != IRegisterable(parentAddress).getRelease()) {
|
607
|
+
revert ErrorComponentServiceReleaseMismatch(componentAddress, component.getRelease(), IRegisterable(parentAddress).getRelease());
|
608
|
+
}
|
632
609
|
|
633
|
-
|
634
|
-
|
610
|
+
// check component belongs to same product cluster
|
611
|
+
// parent of product must be instance, parent of other componet types must be product
|
612
|
+
if (info.parentNftId != senderInfo.nftId) {
|
613
|
+
revert ErrorComponentServiceSenderNotComponentParent(senderInfo.nftId, info.parentNftId);
|
635
614
|
}
|
615
|
+
|
616
|
+
// verify parent is registered instance
|
617
|
+
if (requiredType == PRODUCT()) {
|
618
|
+
if (senderInfo.objectType != INSTANCE()) {
|
619
|
+
revert ErrorComponentServiceParentNotInstance(senderInfo.nftId, senderInfo.objectType);
|
620
|
+
}
|
621
|
+
|
622
|
+
instanceNftId = senderInfo.nftId;
|
623
|
+
// verify parent is registered product
|
624
|
+
} else {
|
625
|
+
if (senderInfo.objectType != PRODUCT()) {
|
626
|
+
revert ErrorComponentServiceParentNotProduct(senderInfo.nftId, senderInfo.objectType);
|
627
|
+
}
|
628
|
+
|
629
|
+
instanceNftId = senderInfo.parentNftId;
|
630
|
+
}
|
631
|
+
|
632
|
+
// get initial owner and instance
|
633
|
+
initialOwner = info.initialOwner;
|
634
|
+
instance = IInstance(registry.getObjectAddress(instanceNftId));
|
635
|
+
}
|
636
|
+
|
637
|
+
function _setLocked(InstanceAdmin instanceAdmin, address componentAddress, bool locked) internal {
|
638
|
+
instanceAdmin.setTargetLocked(componentAddress, locked);
|
639
|
+
}
|
640
|
+
|
641
|
+
function _getAndVerifyActiveComponent(ObjectType expectedType)
|
642
|
+
internal
|
643
|
+
view
|
644
|
+
returns (
|
645
|
+
NftId componentNftId,
|
646
|
+
IInstance instance
|
647
|
+
)
|
648
|
+
{
|
649
|
+
return _getAndVerifyComponent(expectedType, true); // only active
|
650
|
+
}
|
651
|
+
|
652
|
+
function _getAndVerifyComponent(ObjectType expectedType, bool isActive)
|
653
|
+
internal
|
654
|
+
view
|
655
|
+
returns (
|
656
|
+
NftId componentNftId,
|
657
|
+
IInstance instance
|
658
|
+
)
|
659
|
+
{
|
660
|
+
IRegistry.ObjectInfo memory info;
|
661
|
+
address instanceAddress;
|
662
|
+
|
663
|
+
if (expectedType != COMPONENT()) {
|
664
|
+
(info, instanceAddress) = ContractLib.getAndVerifyComponent(
|
665
|
+
getRegistry(),
|
666
|
+
msg.sender, // caller
|
667
|
+
expectedType,
|
668
|
+
isActive);
|
669
|
+
} else {
|
670
|
+
(info, instanceAddress) = ContractLib.getAndVerifyAnyComponent(
|
671
|
+
getRegistry(),
|
672
|
+
msg.sender,
|
673
|
+
isActive);
|
674
|
+
}
|
675
|
+
|
676
|
+
// get component nft id and instance
|
677
|
+
componentNftId = info.nftId;
|
678
|
+
instance = IInstance(instanceAddress);
|
636
679
|
}
|
637
680
|
|
638
681
|
function _getDomain() internal pure virtual override returns(ObjectType) {
|
639
682
|
return COMPONENT();
|
640
683
|
}
|
684
|
+
|
685
|
+
function _checkSupportsInterface(address component) internal view {
|
686
|
+
if (!ContractLib.supportsInterface(component, type(IInstanceLinkedComponent).interfaceId)) {
|
687
|
+
revert ErrorComponentServiceNotInstanceLinkedComponent(component);
|
688
|
+
}
|
689
|
+
}
|
641
690
|
}
|