send original json of ws subscription heads (#413)

This commit is contained in:
a10zn8
2024-02-02 14:56:02 +03:00
committed by GitHub
parent 46bb122f1b
commit 5e94e521a3
2 changed files with 32 additions and 27 deletions

View File

@@ -18,7 +18,6 @@ package io.emeraldpay.dshackle.upstream.ethereum.subscribe
import io.emeraldpay.dshackle.upstream.Multistream import io.emeraldpay.dshackle.upstream.Multistream
import io.emeraldpay.dshackle.upstream.Selector import io.emeraldpay.dshackle.upstream.Selector
import io.emeraldpay.dshackle.upstream.SubscriptionConnect import io.emeraldpay.dshackle.upstream.SubscriptionConnect
import io.emeraldpay.dshackle.upstream.ethereum.subscribe.json.NewHeadMessage
import reactor.core.publisher.Flux import reactor.core.publisher.Flux
import reactor.core.scheduler.Scheduler import reactor.core.scheduler.Scheduler
import java.time.Duration import java.time.Duration
@@ -30,11 +29,11 @@ import java.util.concurrent.ConcurrentHashMap
class ConnectNewHeads( class ConnectNewHeads(
private val upstream: Multistream, private val upstream: Multistream,
private val scheduler: Scheduler, private val scheduler: Scheduler,
) : SubscriptionConnect<NewHeadMessage> { ) : SubscriptionConnect<ByteArray> {
private val connected: MutableMap<String, Flux<NewHeadMessage>> = ConcurrentHashMap() private val connected: MutableMap<String, Flux<ByteArray>> = ConcurrentHashMap()
override fun connect(matcher: Selector.Matcher): Flux<NewHeadMessage> = override fun connect(matcher: Selector.Matcher): Flux<ByteArray> =
connected.computeIfAbsent(matcher.describeInternal()) { key -> connected.computeIfAbsent(matcher.describeInternal()) { key ->
ProduceNewHeads(upstream.getHead(matcher)) ProduceNewHeads(upstream.getHead(matcher))
.start() .start()

View File

@@ -15,6 +15,7 @@
*/ */
package io.emeraldpay.dshackle.upstream.ethereum.subscribe package io.emeraldpay.dshackle.upstream.ethereum.subscribe
import io.emeraldpay.dshackle.Global
import io.emeraldpay.dshackle.upstream.Head import io.emeraldpay.dshackle.upstream.Head
import io.emeraldpay.dshackle.upstream.ethereum.subscribe.json.NewHeadMessage import io.emeraldpay.dshackle.upstream.ethereum.subscribe.json.NewHeadMessage
import io.emeraldpay.etherjar.hex.HexData import io.emeraldpay.etherjar.hex.HexData
@@ -29,11 +30,12 @@ class ProduceNewHeads(
val head: Head, val head: Head,
) { ) {
fun start(): Flux<NewHeadMessage> { fun start(): Flux<ByteArray> {
return head.getFlux() return head.getFlux()
.map { .map {
if (it.full || it.json == null) {
val block = it.toBlock() val block = it.toBlock()
NewHeadMessage( val msg = NewHeadMessage(
block.number, block.number,
block.hash, block.hash,
block.parentHash, block.parentHash,
@@ -54,6 +56,10 @@ class ProduceNewHeads(
block.withdrawalsRoot, block.withdrawalsRoot,
it.upstreamId, it.upstreamId,
) )
Global.objectMapper.writeValueAsBytes(msg)
} else {
it.json
}
} }
} }
} }