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