From 6193499d582c5425b5fb205f5cec3db3c2b69c3d Mon Sep 17 00:00:00 2001 From: KirillPamPam Date: Wed, 24 Dec 2025 14:24:08 +0400 Subject: [PATCH] Fix ripple tx broadcast (#765) --- .../dshackle/quorum/JsonBroadcastQuorum.kt | 54 +++++++++++++++++++ .../upstream/calls/DefaultRippleMethods.kt | 4 +- 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/io/emeraldpay/dshackle/quorum/JsonBroadcastQuorum.kt diff --git a/src/main/kotlin/io/emeraldpay/dshackle/quorum/JsonBroadcastQuorum.kt b/src/main/kotlin/io/emeraldpay/dshackle/quorum/JsonBroadcastQuorum.kt new file mode 100644 index 00000000..31a50fc1 --- /dev/null +++ b/src/main/kotlin/io/emeraldpay/dshackle/quorum/JsonBroadcastQuorum.kt @@ -0,0 +1,54 @@ +package io.emeraldpay.dshackle.quorum + +import com.fasterxml.jackson.databind.JsonNode +import io.emeraldpay.dshackle.upstream.ChainResponse +import io.emeraldpay.dshackle.upstream.Upstream +import io.emeraldpay.dshackle.upstream.signature.ResponseSigner + +open class JsonBroadcastQuorum() : CallQuorum, ValueAwareQuorum(JsonNode::class.java) { + + private var result: ChainResponse? = null + private var txResponse: JsonNode? = null + private var sig: ResponseSigner.Signature? = null + + override fun isResolved(): Boolean { + return result != null + } + + override fun isFailed(): Boolean { + return result == null + } + + override fun getResponse(): ChainResponse? { + return result + } + + override fun getSignature(): ResponseSigner.Signature? { + return sig + } + + override fun recordValue( + response: ChainResponse, + responseValue: JsonNode?, + signature: ResponseSigner.Signature?, + upstream: Upstream, + ) { + if (txResponse == null && responseValue != null) { + txResponse = responseValue + sig = signature + result = response + } + } + + override fun recordError( + errorMessage: String?, + signature: ResponseSigner.Signature?, + upstream: Upstream, + ) { + resolvers.add(upstream) + } + + override fun toString(): String { + return "Quorum: Json Broadcast to upstreams" + } +} diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultRippleMethods.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultRippleMethods.kt index abbb5747..ed294770 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultRippleMethods.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/calls/DefaultRippleMethods.kt @@ -1,8 +1,8 @@ package io.emeraldpay.dshackle.upstream.calls import io.emeraldpay.dshackle.quorum.AlwaysQuorum -import io.emeraldpay.dshackle.quorum.BroadcastQuorum import io.emeraldpay.dshackle.quorum.CallQuorum +import io.emeraldpay.dshackle.quorum.JsonBroadcastQuorum import io.emeraldpay.dshackle.upstream.ethereum.rpc.RpcException class DefaultRippleMethods : CallMethods { @@ -66,7 +66,7 @@ class DefaultRippleMethods : CallMethods { override fun createQuorumFor(method: String): CallQuorum { if (add.contains(method)) { - return BroadcastQuorum() + return JsonBroadcastQuorum() } return AlwaysQuorum() }