From d55c0b8b32ae15662b82ca9c186298f86d8c67a7 Mon Sep 17 00:00:00 2001 From: Anton Date: Wed, 18 Jun 2025 11:25:41 +0300 Subject: [PATCH] add disable-bound-validation option (#675) * add disable-bound-validation option * fix test --- .../kotlin/io/emeraldpay/dshackle/foundation/ChainOptions.kt | 4 ++++ .../io/emeraldpay/dshackle/foundation/ChainOptionsReader.kt | 3 +++ .../emeraldpay/dshackle/upstream/generic/GenericUpstream.kt | 4 +++- .../dshackle/config/UpstreamsConfigReaderSpec.groovy | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/foundation/src/main/kotlin/io/emeraldpay/dshackle/foundation/ChainOptions.kt b/foundation/src/main/kotlin/io/emeraldpay/dshackle/foundation/ChainOptions.kt index cd7492bf..64157d2a 100644 --- a/foundation/src/main/kotlin/io/emeraldpay/dshackle/foundation/ChainOptions.kt +++ b/foundation/src/main/kotlin/io/emeraldpay/dshackle/foundation/ChainOptions.kt @@ -17,6 +17,7 @@ class ChainOptions { val validateChain: Boolean, val callLimitSize: Int, val disableLivenessSubscriptionValidation: Boolean, + val disableBoundValidation: Boolean = false, ) data class DefaultOptions( @@ -38,6 +39,7 @@ class ChainOptions { var validateChain: Boolean? = null, var callLimitSize: Int? = null, var disableLivenessSubscriptionValidation: Boolean? = null, + var disableBoundValidation: Boolean? = null, ) { companion object { @JvmStatic @@ -67,6 +69,7 @@ class ChainOptions { overwrites.disableUpstreamValidation ?: this.disableUpstreamValidation copy.callLimitSize = overwrites.callLimitSize ?: this.callLimitSize copy.disableLivenessSubscriptionValidation = overwrites.disableLivenessSubscriptionValidation ?: this.disableLivenessSubscriptionValidation + copy.disableBoundValidation = overwrites.disableBoundValidation ?: this.disableBoundValidation return copy } @@ -85,6 +88,7 @@ class ChainOptions { this.validateChain ?: true, this.callLimitSize ?: 1_000_000, this.disableLivenessSubscriptionValidation ?: false, + this.disableBoundValidation ?: false, ) } } diff --git a/foundation/src/main/kotlin/io/emeraldpay/dshackle/foundation/ChainOptionsReader.kt b/foundation/src/main/kotlin/io/emeraldpay/dshackle/foundation/ChainOptionsReader.kt index 7266c88e..1fac61a6 100644 --- a/foundation/src/main/kotlin/io/emeraldpay/dshackle/foundation/ChainOptionsReader.kt +++ b/foundation/src/main/kotlin/io/emeraldpay/dshackle/foundation/ChainOptionsReader.kt @@ -55,6 +55,9 @@ class ChainOptionsReader : YamlConfigReader() { getValueAsBool(values, "disable-liveness-subscription-validation")?.let { options.disableLivenessSubscriptionValidation = it } + getValueAsBool(values, "disable-bound-validation")?.let { + options.disableBoundValidation = it + } return options } } diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/generic/GenericUpstream.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/generic/GenericUpstream.kt index be4a1a8a..bd53fc3a 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/generic/GenericUpstream.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/generic/GenericUpstream.kt @@ -343,7 +343,9 @@ open class GenericUpstream( } detectSettings() - detectLowerBlock() + if (!getOptions().disableBoundValidation) { + detectLowerBlock() + } detectFinalization() } diff --git a/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy b/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy index d138478b..434cc4a4 100644 --- a/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy +++ b/src/test/groovy/io/emeraldpay/dshackle/config/UpstreamsConfigReaderSpec.groovy @@ -636,7 +636,7 @@ class UpstreamsConfigReaderSpec extends Specification { def options = partialOptions.buildOptions() then: options == new ChainOptions.Options( - false, false, 30, Duration.ofSeconds(60), null, true, 1, true, true, true, true, 1_000_000, false + false, false, 30, Duration.ofSeconds(60), null, true, 1, true, true, true, true, 1_000_000, false, false ) } }