In case empty selector in SubscribeNative we should use default dynamic merged head. (#172)

This commit is contained in:
a10zn8
2023-03-19 16:07:14 +03:00
committed by GitHub
parent 064a3e40c6
commit a47607d03d

View File

@@ -158,21 +158,29 @@ open class EthereumPosMultiStream(
} }
override fun getHead(mather: Selector.Matcher): Head = override fun getHead(mather: Selector.Matcher): Head =
filteredHeads.computeIfAbsent(mather.describeInternal().intern()) { _ -> if (mather == Selector.empty) {
upstreams.filter { mather.matches(it) } head
.apply { } else {
log.debug("Found $size upstreams matching [${mather.describeInternal()}]") filteredHeads.computeIfAbsent(mather.describeInternal().intern()) { _ ->
} upstreams.filter { mather.matches(it) }
.let { .apply {
val selected = it.map { it.getHead() } log.debug("Found $size upstreams matching [${mather.describeInternal()}]")
when (it.size) { }
0 -> EmptyHead() .let {
1 -> selected.first() val selected = it.map { it.getHead() }
else -> MergedHead(selected, PriorityForkChoice(), "ETH head for ${it.map { it.getId() }}").apply { when (it.size) {
start() 0 -> EmptyHead()
1 -> selected.first()
else -> MergedHead(
selected,
PriorityForkChoice(),
"ETH head for ${it.map { it.getId() }}"
).apply {
start()
}
} }
} }
} }
} }
override fun getFeeEstimation(): ChainFees { override fun getFeeEstimation(): ChainFees {