send original json of ws subscription heads (#413)
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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,31 +30,36 @@ class ProduceNewHeads(
|
|||||||
val head: Head,
|
val head: Head,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
fun start(): Flux<NewHeadMessage> {
|
fun start(): Flux<ByteArray> {
|
||||||
return head.getFlux()
|
return head.getFlux()
|
||||||
.map {
|
.map {
|
||||||
val block = it.toBlock()
|
if (it.full || it.json == null) {
|
||||||
NewHeadMessage(
|
val block = it.toBlock()
|
||||||
block.number,
|
val msg = NewHeadMessage(
|
||||||
block.hash,
|
block.number,
|
||||||
block.parentHash,
|
block.hash,
|
||||||
block.timestamp,
|
block.parentHash,
|
||||||
block.difficulty,
|
block.timestamp,
|
||||||
block.gasLimit,
|
block.difficulty,
|
||||||
block.gasUsed,
|
block.gasLimit,
|
||||||
block.logsBloom,
|
block.gasUsed,
|
||||||
block.miner,
|
block.logsBloom,
|
||||||
block.baseFeePerGas?.amount,
|
block.miner,
|
||||||
block.extraData ?: HexData.empty(),
|
block.baseFeePerGas?.amount,
|
||||||
block.mixHash,
|
block.extraData ?: HexData.empty(),
|
||||||
block.nonce,
|
block.mixHash,
|
||||||
block.receiptsRoot,
|
block.nonce,
|
||||||
block.sha3Uncles,
|
block.receiptsRoot,
|
||||||
block.stateRoot,
|
block.sha3Uncles,
|
||||||
block.transactionsRoot,
|
block.stateRoot,
|
||||||
block.withdrawalsRoot,
|
block.transactionsRoot,
|
||||||
it.upstreamId,
|
block.withdrawalsRoot,
|
||||||
)
|
it.upstreamId,
|
||||||
|
)
|
||||||
|
Global.objectMapper.writeValueAsBytes(msg)
|
||||||
|
} else {
|
||||||
|
it.json
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user