fix tests and lint
This commit is contained in:
@@ -17,6 +17,7 @@ package io.emeraldpay.dshackle.proxy
|
||||
|
||||
import com.google.protobuf.ByteString
|
||||
import io.emeraldpay.api.proto.BlockchainOuterClass
|
||||
import io.emeraldpay.api.proto.BlockchainOuterClass.Selector
|
||||
import io.emeraldpay.dshackle.Global
|
||||
import io.emeraldpay.dshackle.config.ProxyConfig
|
||||
import io.emeraldpay.dshackle.monitoring.accesslog.AccessHandlerHttp
|
||||
@@ -139,7 +140,7 @@ class WebsocketHandler(
|
||||
}
|
||||
// produce actual responses
|
||||
val responses = nativeSubscribe
|
||||
.subscribe(blockchain, methodParams.first, methodParams.second)
|
||||
.subscribe(blockchain, methodParams.first, methodParams.second, io.emeraldpay.dshackle.upstream.Selector.empty)
|
||||
.map { event ->
|
||||
WsSubscriptionResponse(params = WsSubscriptionData(event, subscriptionId))
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ open class NativeSubscribe(
|
||||
}
|
||||
}
|
||||
|
||||
open fun subscribe(chain: Chain, method: String, params: Any?, matcher: Selector.Matcher = Selector.empty): Flux<out Any> {
|
||||
open fun subscribe(chain: Chain, method: String, params: Any?, matcher: Selector.Matcher): Flux<out Any> {
|
||||
val up = multistreamHolder.getUpstream(chain) ?: return Flux.error(SilentException.UnsupportedBlockchain(chain))
|
||||
return (up as EthereumLikeMultistream)
|
||||
.getSubscribe()
|
||||
|
||||
@@ -20,6 +20,7 @@ import io.emeraldpay.api.proto.Common
|
||||
import io.emeraldpay.dshackle.SilentException
|
||||
import io.emeraldpay.dshackle.config.TokensConfig
|
||||
import io.emeraldpay.dshackle.upstream.MultistreamHolder
|
||||
import io.emeraldpay.dshackle.upstream.Selector
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.ERC20Balance
|
||||
import io.emeraldpay.dshackle.upstream.ethereum.EthereumMultistream
|
||||
import io.emeraldpay.etherjar.domain.Address
|
||||
@@ -89,7 +90,8 @@ class TrackERC20Address(
|
||||
.getSubscribe().logs
|
||||
.start(
|
||||
listOf(tokenDefinition.token.contract),
|
||||
listOf(EventId.fromSignature("Transfer", "address", "address", "uint256"))
|
||||
listOf(EventId.fromSignature("Transfer", "address", "address", "uint256")),
|
||||
Selector.empty
|
||||
)
|
||||
|
||||
return ethereumAddresses.extract(request.address)
|
||||
|
||||
@@ -163,7 +163,8 @@ open class EthereumMultistream(
|
||||
}
|
||||
}
|
||||
}
|
||||
}//TODO track unused heads and remove
|
||||
}
|
||||
//TODO track unused heads and remove
|
||||
|
||||
override fun getFeeEstimation(): ChainFees {
|
||||
return feeEstimation
|
||||
|
||||
@@ -27,10 +27,8 @@ import reactor.core.scheduler.Schedulers
|
||||
import java.time.Duration
|
||||
import java.util.LinkedList
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import java.util.concurrent.locks.ReentrantLock
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock
|
||||
import kotlin.concurrent.read
|
||||
import kotlin.concurrent.withLock
|
||||
import kotlin.concurrent.write
|
||||
|
||||
class ConnectBlockUpdates(
|
||||
@@ -50,6 +48,7 @@ class ConnectBlockUpdates(
|
||||
private val historyUpdateLock = ReentrantReadWriteLock()
|
||||
private val connected: MutableMap<String, Flux<Update>> = ConcurrentHashMap()
|
||||
|
||||
fun connect() = connect(Selector.empty)
|
||||
fun connect(matcher: Selector.Matcher): Flux<Update> {
|
||||
return connected.computeIfAbsent(matcher.describeInternal()) { key ->
|
||||
extract(upstream.getHead(matcher))
|
||||
|
||||
@@ -49,5 +49,4 @@ class ConnectNewHeads(
|
||||
connected.remove(key)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,11 +20,13 @@ import io.emeraldpay.dshackle.cache.Caches
|
||||
import io.emeraldpay.dshackle.config.UpstreamsConfig
|
||||
import io.emeraldpay.dshackle.reader.Reader
|
||||
import io.emeraldpay.dshackle.upstream.ChainFees
|
||||
import io.emeraldpay.dshackle.upstream.EmptyHead
|
||||
import io.emeraldpay.dshackle.upstream.Head
|
||||
import io.emeraldpay.dshackle.upstream.MergedHead
|
||||
import io.emeraldpay.dshackle.upstream.Multistream
|
||||
import io.emeraldpay.dshackle.upstream.Selector
|
||||
import io.emeraldpay.dshackle.upstream.Upstream
|
||||
import io.emeraldpay.dshackle.upstream.forkchoice.MostWorkForkChoice
|
||||
import io.emeraldpay.dshackle.upstream.forkchoice.PriorityForkChoice
|
||||
import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcRequest
|
||||
import io.emeraldpay.dshackle.upstream.rpcclient.JsonRpcResponse
|
||||
@@ -32,6 +34,7 @@ import io.emeraldpay.grpc.Chain
|
||||
import org.slf4j.LoggerFactory
|
||||
import org.springframework.context.Lifecycle
|
||||
import reactor.core.publisher.Mono
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
open class EthereumPosMultiStream(
|
||||
@@ -49,6 +52,7 @@ open class EthereumPosMultiStream(
|
||||
private val reader: EthereumReader = EthereumReader(this, this.caches, getMethodsFactory())
|
||||
private val feeEstimation = EthereumPriorityFees(this, reader, 256)
|
||||
private val subscribe = EthereumSubscribe(this)
|
||||
private val filteredHeads: MutableMap<String, Head> = ConcurrentHashMap()
|
||||
|
||||
init {
|
||||
this.init()
|
||||
@@ -69,6 +73,7 @@ open class EthereumPosMultiStream(
|
||||
override fun stop() {
|
||||
super.stop()
|
||||
reader.stop()
|
||||
filteredHeads.clear()
|
||||
}
|
||||
|
||||
override fun isRunning(): Boolean {
|
||||
@@ -138,7 +143,23 @@ open class EthereumPosMultiStream(
|
||||
}
|
||||
|
||||
override fun getHead(mather: Selector.Matcher): Head =
|
||||
getHead() //TODO
|
||||
filteredHeads.computeIfAbsent(mather.describeInternal()) { _ ->
|
||||
upstreams.filter { mather.matches(it) }
|
||||
.apply {
|
||||
log.debug("Found $size upstreams matching [${mather.describeInternal()}]")
|
||||
}
|
||||
.map { it.getHead() }
|
||||
.let {
|
||||
when (it.size) {
|
||||
0 -> EmptyHead()
|
||||
1 -> it.first()
|
||||
else -> MergedHead(it, MostWorkForkChoice()).apply {
|
||||
start()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO track unused heads and remove
|
||||
|
||||
override fun getFeeEstimation(): ChainFees {
|
||||
return feeEstimation
|
||||
|
||||
Reference in New Issue
Block a user