@@ -8,27 +8,41 @@ data class ChainsConfig(private val chains: Map<Chain, RawChainConfig>, val curr
|
||||
fun default(): ChainsConfig = ChainsConfig(emptyMap(), RawChainConfig.default())
|
||||
}
|
||||
|
||||
data class RawChainConfig(val syncingLagSize: Int?, val laggingLagSize: Int?) {
|
||||
data class RawChainConfig(
|
||||
var syncingLagSize: Int? = null,
|
||||
var laggingLagSize: Int? = null,
|
||||
var options: UpstreamsConfig.PartialOptions? = null
|
||||
) {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun default() = RawChainConfig(6, 1)
|
||||
fun default() = RawChainConfig(
|
||||
syncingLagSize = 6,
|
||||
laggingLagSize = 1
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
data class ChainConfig(val syncingLagSize: Int, val laggingLagSize: Int) {
|
||||
data class ChainConfig(
|
||||
val syncingLagSize: Int,
|
||||
val laggingLagSize: Int,
|
||||
val options: UpstreamsConfig.PartialOptions
|
||||
) {
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun default() = ChainConfig(6, 1)
|
||||
fun default() = ChainConfig(6, 1, UpstreamsConfig.PartialOptions())
|
||||
}
|
||||
}
|
||||
|
||||
fun resolve(chain: Chain): ChainConfig {
|
||||
val default = currentDefault ?: panic()
|
||||
val raw = chains[chain] ?: default
|
||||
val options = default.options?.merge(raw.options) ?: raw.options ?: UpstreamsConfig.PartialOptions()
|
||||
|
||||
return ChainConfig(
|
||||
laggingLagSize = raw.laggingLagSize ?: default.laggingLagSize ?: panic(),
|
||||
syncingLagSize = raw.syncingLagSize ?: default.syncingLagSize ?: panic(),
|
||||
options = options
|
||||
)
|
||||
}
|
||||
|
||||
@@ -42,7 +56,8 @@ data class ChainsConfig(private val chains: Map<Chain, RawChainConfig>, val curr
|
||||
patch: RawChainConfig?
|
||||
) = RawChainConfig(
|
||||
syncingLagSize = patch?.syncingLagSize ?: current.syncingLagSize,
|
||||
laggingLagSize = patch?.laggingLagSize ?: current.laggingLagSize
|
||||
laggingLagSize = patch?.laggingLagSize ?: current.laggingLagSize,
|
||||
options = patch?.options ?: current.options
|
||||
)
|
||||
|
||||
private fun merge(
|
||||
|
||||
@@ -5,7 +5,9 @@ import org.yaml.snakeyaml.nodes.CollectionNode
|
||||
import org.yaml.snakeyaml.nodes.MappingNode
|
||||
import java.io.InputStream
|
||||
|
||||
class ChainsConfigReader : YamlConfigReader<ChainsConfig>() {
|
||||
class ChainsConfigReader(
|
||||
private val upstreamsConfigReader: UpstreamsConfigReader
|
||||
) : YamlConfigReader<ChainsConfig>() {
|
||||
|
||||
private val defaultConfig = this::class.java.getResourceAsStream("/chains.yaml")!!
|
||||
|
||||
@@ -41,12 +43,20 @@ class ChainsConfigReader : YamlConfigReader<ChainsConfig>() {
|
||||
}
|
||||
|
||||
private fun readChain(node: MappingNode): ChainsConfig.RawChainConfig? {
|
||||
return getMapping(node, "lags")?.let {
|
||||
return ChainsConfig.RawChainConfig(
|
||||
getValueAsInt(it, "syncing"),
|
||||
getValueAsInt(it, "lagging")
|
||||
)
|
||||
val rawConfig = ChainsConfig.RawChainConfig()
|
||||
getMapping(node, "lags")?.let { lagConfig ->
|
||||
getValueAsInt(lagConfig, "syncing")?.let {
|
||||
rawConfig.syncingLagSize = it
|
||||
}
|
||||
getValueAsInt(lagConfig, "lagging")?.let {
|
||||
rawConfig.laggingLagSize = it
|
||||
}
|
||||
}
|
||||
upstreamsConfigReader.tryReadOptions(node)?.let {
|
||||
rawConfig.options = it
|
||||
}
|
||||
|
||||
return rawConfig
|
||||
}
|
||||
|
||||
private fun readChains(node: CollectionNode<MappingNode>): List<Pair<String, ChainsConfig.RawChainConfig>> {
|
||||
|
||||
@@ -32,7 +32,7 @@ class MainConfigReader(
|
||||
private val healthConfigReader = HealthConfigReader()
|
||||
private val signatureConfigReader = SignatureConfigReader(fileResolver)
|
||||
private val compressionConfigReader = CompressionConfigReader()
|
||||
private val chainsConfigReader = ChainsConfigReader()
|
||||
private val chainsConfigReader = ChainsConfigReader(upstreamsConfigReader)
|
||||
|
||||
override fun read(input: MappingNode?): MainConfig {
|
||||
val config = MainConfig()
|
||||
|
||||
@@ -102,7 +102,9 @@ open class ConfiguredUpstreams(
|
||||
log.error("Chain is unknown: ${up.chain}")
|
||||
return@forEach
|
||||
}
|
||||
val options = (defaultOptions[chain] ?: UpstreamsConfig.PartialOptions.getDefaults())
|
||||
val chainConfig = chainsConfig.resolve(chain)
|
||||
val options = chainConfig.options
|
||||
.merge(defaultOptions[chain] ?: UpstreamsConfig.PartialOptions.getDefaults())
|
||||
.merge(up.options ?: UpstreamsConfig.PartialOptions())
|
||||
.buildOptions()
|
||||
val upstream = when (BlockchainType.from(chain)) {
|
||||
@@ -112,7 +114,7 @@ open class ConfiguredUpstreams(
|
||||
up.cast(UpstreamsConfig.EthereumPosConnection::class.java),
|
||||
chain,
|
||||
options,
|
||||
chainsConfig.resolve(chain)
|
||||
chainConfig
|
||||
)
|
||||
}
|
||||
BlockchainType.EVM_POW -> {
|
||||
@@ -121,7 +123,7 @@ open class ConfiguredUpstreams(
|
||||
up.cast(UpstreamsConfig.EthereumConnection::class.java),
|
||||
chain,
|
||||
options,
|
||||
chainsConfig.resolve(chain)
|
||||
chainConfig
|
||||
)
|
||||
}
|
||||
BlockchainType.BITCOIN -> {
|
||||
@@ -129,7 +131,7 @@ open class ConfiguredUpstreams(
|
||||
up.cast(UpstreamsConfig.BitcoinConnection::class.java),
|
||||
chain,
|
||||
options,
|
||||
chainsConfig.resolve(chain)
|
||||
chainConfig
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,18 +15,26 @@ chain-settings:
|
||||
syncing: 20
|
||||
lagging: 10
|
||||
- id: arbitrum
|
||||
options:
|
||||
validate-peers: false
|
||||
lags:
|
||||
syncing: 20
|
||||
lagging: 10
|
||||
- id: arbitrum-testnet
|
||||
options:
|
||||
validate-peers: false
|
||||
lags:
|
||||
syncing: 20
|
||||
lagging: 10
|
||||
- id: optimism
|
||||
options:
|
||||
validate-peers: false
|
||||
lags:
|
||||
syncing: 20
|
||||
lagging: 10
|
||||
- id: optimism-testnet
|
||||
options:
|
||||
validate-peers: false
|
||||
lags:
|
||||
syncing: 20
|
||||
lagging: 10
|
||||
|
||||
Reference in New Issue
Block a user