diff --git a/feature-staking-impl/src/main/java/jp/co/soramitsu/staking/impl/data/network/blockhain/updaters/Common.kt b/feature-staking-impl/src/main/java/jp/co/soramitsu/staking/impl/data/network/blockhain/updaters/Common.kt index 41ea3948fd..f90ac1c82d 100644 --- a/feature-staking-impl/src/main/java/jp/co/soramitsu/staking/impl/data/network/blockhain/updaters/Common.kt +++ b/feature-staking-impl/src/main/java/jp/co/soramitsu/staking/impl/data/network/blockhain/updaters/Common.kt @@ -12,16 +12,18 @@ import jp.co.soramitsu.shared_utils.runtime.metadata.storage import jp.co.soramitsu.shared_utils.runtime.metadata.storageKey import jp.co.soramitsu.shared_utils.wsrpc.SocketService import jp.co.soramitsu.staking.impl.data.network.blockhain.bindings.bindActiveEra -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.map import java.math.BigInteger +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.mapNotNull fun RuntimeMetadata.activeEraStorageKeyOrNull() = moduleOrNull(Modules.STAKING)?.storage("ActiveEra")?.storageKey() fun RuntimeMetadata.stakingRoundKey() = parachainStaking().storage("Round").storageKey() suspend fun StorageCache.observeActiveEraIndex(runtime: RuntimeSnapshot, chainId: String): Flow { return observeEntry(runtime.metadata.activeEraStorageKeyOrNull(), chainId) - .map { bindActiveEra(it.content!!, runtime) } + .mapNotNull { entry -> + entry.content?.let { bindActiveEra(it, runtime) } + } } suspend fun BulkRetriever.fetchValuesToCache( diff --git a/feature-staking-impl/src/main/java/jp/co/soramitsu/staking/impl/scenarios/relaychain/StakingRelayChainScenarioRepository.kt b/feature-staking-impl/src/main/java/jp/co/soramitsu/staking/impl/scenarios/relaychain/StakingRelayChainScenarioRepository.kt index 2a6fe1c188..133cc22f47 100644 --- a/feature-staking-impl/src/main/java/jp/co/soramitsu/staking/impl/scenarios/relaychain/StakingRelayChainScenarioRepository.kt +++ b/feature-staking-impl/src/main/java/jp/co/soramitsu/staking/impl/scenarios/relaychain/StakingRelayChainScenarioRepository.kt @@ -27,7 +27,6 @@ import jp.co.soramitsu.runtime.multiNetwork.ChainRegistry import jp.co.soramitsu.runtime.multiNetwork.chain.model.Chain import jp.co.soramitsu.runtime.multiNetwork.chain.model.ChainId import jp.co.soramitsu.runtime.storage.source.StorageDataSource -import jp.co.soramitsu.runtime.storage.source.observeNonNull import jp.co.soramitsu.runtime.storage.source.queryNonNull import jp.co.soramitsu.shared_utils.extensions.fromHex import jp.co.soramitsu.shared_utils.extensions.toHexString @@ -197,11 +196,11 @@ class StakingRelayChainScenarioRepository( } fun observeActiveEraIndex(chainId: String): Flow { - return localStorage.observeNonNull( + return localStorage.observe( chainId = chainId, keyBuilder = { it.metadata.activeEraStorageKeyOrNull() }, - binding = { scale, runtime -> bindActiveEra(scale, runtime) } - ) + binder = { scale, runtime -> scale?.let { bindActiveEra(it, runtime) } } + ).filterNotNull() } @OptIn(ExperimentalCoroutinesApi::class) diff --git a/runtime/src/main/java/jp/co/soramitsu/runtime/multiNetwork/configurator/ChainEnvironmentConfigurator.kt b/runtime/src/main/java/jp/co/soramitsu/runtime/multiNetwork/configurator/ChainEnvironmentConfigurator.kt index 75c7a7140d..2789e037ac 100644 --- a/runtime/src/main/java/jp/co/soramitsu/runtime/multiNetwork/configurator/ChainEnvironmentConfigurator.kt +++ b/runtime/src/main/java/jp/co/soramitsu/runtime/multiNetwork/configurator/ChainEnvironmentConfigurator.kt @@ -22,22 +22,23 @@ class ChainEnvironmentConfiguratorProvider( private val ethereumConnectionPool: EthereumConnectionPool ) { fun provide(chain: Chain): ChainEnvironmentConfigurator { - return when (chain.ecosystem) { - Ecosystem.Substrate, - Ecosystem.EthereumBased -> SubstrateEnvironmentConfigurator( + return when { + chain.isEthereumChain -> EthereumEnvironmentConfigurator( + ethereumConnectionPool, + chainsRepository + ) + chain.ecosystem == Ecosystem.Ethereum -> EthereumEnvironmentConfigurator( + ethereumConnectionPool, + chainsRepository + ) + chain.ecosystem == Ecosystem.Ton -> TonEnvironmentConfigurator() + else -> SubstrateEnvironmentConfigurator( connectionPool, runtimeProviderPool, runtimeSyncService, runtimeSubscriptionPool, chainsRepository ) - - Ecosystem.Ethereum -> EthereumEnvironmentConfigurator( - ethereumConnectionPool, - chainsRepository - ) - - Ecosystem.Ton -> TonEnvironmentConfigurator() } } -} \ No newline at end of file +}