diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/AvailableChains.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/AvailableChains.kt index 0b2ac871..3fcee018 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/AvailableChains.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/AvailableChains.kt @@ -19,12 +19,18 @@ class AvailableChains( private val callTargets = HashMap() fun add(chain: Chain) { + if (all.contains(chain)) { + return + } all.add(chain) bus.onNext(chain) } fun observe(): Flux { - return Flux.from(bus) + return Flux.merge( + Flux.fromIterable(all), + Flux.from(bus) + ) } fun supports(chain: Chain): Boolean { diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt index 747d9e3c..f916aade 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ConfiguredUpstreams.kt @@ -159,9 +159,9 @@ open class ConfiguredUpstreams( override fun getOrCreateUpstream(chain: Chain): ChainUpstreams { val current = chainMapping[chain] if (current == null) { + availableChains.add(chain) val created = ChainUpstreams(chain, ArrayList(), availableChains.targetFor(chain)) chainMapping[chain] = created - availableChains.add(chain) return created } return current