Fix ripple tx broadcast (#765)

This commit is contained in:
KirillPamPam
2025-12-24 14:24:08 +04:00
committed by GitHub
parent 9d4f4a185e
commit 6193499d58
2 changed files with 56 additions and 2 deletions

View File

@@ -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>(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"
}
}

View File

@@ -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()
}