diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..20447e6f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,3 @@ +FROM eclipse-temurin:20 + +RUN apt-get update -y && apt-get install -y libcurl4-openssl-dev libjansson-dev diff --git a/Makefile b/Makefile index 55c87646..5b41a429 100644 --- a/Makefile +++ b/Makefile @@ -9,11 +9,13 @@ build-main: test: build-foundation ./gradlew check +local-docker: Dockerfile + docker build -t drpc-dshackle . -jib: build-foundation +jib: build-foundation local-docker ./gradlew jib -Pdocker=drpcorg -jib-docker: build-foundation +jib-docker: build-foundation local-docker ./gradlew jibDockerBuild -Pdocker=drpcorg distZip: build-foundation @@ -21,4 +23,4 @@ distZip: build-foundation clean: ./gradlew clean; - cd foundation && ../gradlew clean \ No newline at end of file + cd foundation && ../gradlew clean diff --git a/build.gradle b/build.gradle index 76d750de..2de8b799 100644 --- a/build.gradle +++ b/build.gradle @@ -169,7 +169,7 @@ application { jib { from { - image = 'openjdk:20' + image = 'docker://drpc-dshackle' } to { // by default publish as: @@ -192,7 +192,7 @@ jib { } } container { - jvmFlags = ['-XX:+UseG1GC', '-XX:+ExitOnOutOfMemoryError', '-Xms1024M', '-XX:+UnlockDiagnosticVMOptions', '-XX:GCLockerRetryAllocationCount=10'] + jvmFlags = ['-XX:+UseG1GC', '-XX:+ExitOnOutOfMemoryError', '-Xms1024M', '-XX:+UnlockDiagnosticVMOptions', '-XX:GCLockerRetryAllocationCount=10', '--enable-preview'] mainClass = 'io.emeraldpay.dshackle.StarterKt' args = [] ports = ['2448', '2449', '8545'] diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/LogsOracle.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/LogsOracle.kt index 5a14f9d3..26623baa 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/LogsOracle.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/LogsOracle.kt @@ -15,12 +15,14 @@ class LogsOracle( private val log = LoggerFactory.getLogger(LogsOracle::class.java) private var subscription: Disposable? = null - private val db = org.drpc.logsoracle.LogsOracle(config.store, config.store, config.ram_limit ?: 0L) + private val db = org.drpc.logsoracle.LogsOracle(config.store, config.ram_limit ?: 0L) fun start() { + db.SetUpstream(config.rpc) + subscription = upstream.getHead().getFlux() .doOnError { t -> log.warn("Failed to subscribe head for oracle", t) } - .subscribe { println(it.height); db.UpdateHeight(it.height) } + .subscribe { db.UpdateHeight(it.height) } } fun stop() { @@ -31,8 +33,8 @@ class LogsOracle( } fun estimate( - fromBlock: Long?, - toBlock: Long?, + fromBlock: Long, + toBlock: Long, address: List, topics: List>, ): Mono { diff --git a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/EthereumLocalReader.kt b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/EthereumLocalReader.kt index 24c4a2cb..8fc1b0d2 100644 --- a/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/EthereumLocalReader.kt +++ b/src/main/kotlin/io/emeraldpay/dshackle/upstream/ethereum/EthereumLocalReader.kt @@ -218,22 +218,16 @@ class EthereumLocalReader( } return logsOracle.estimate(fromBlock, toBlock, address, topics) - .map { it.toString().toByteArray() to null } + .map { "{\"result\":$it}".toByteArray() to null } } - private fun parseBlockRef(blockRef: String?): Long? { + private fun parseBlockRef(blockRef: String?): Long { when { - blockRef == null -> { - return null - } - blockRef == "latest" -> { - return head.getCurrentHeight() ?: return null - } blockRef == "earliest" -> { return 0 } - blockRef == "finalized" || blockRef == "safe" || blockRef == "pending" -> { - return null + blockRef == null || blockRef == "finalized" || blockRef == "safe" || blockRef == "pending" || blockRef == "latest" -> { + return head.getCurrentHeight() ?: throw Exception("couldn't get current head") } blockRef.startsWith("0x") -> { val quantity = HexQuantity.from(blockRef) ?: throw IllegalArgumentException() diff --git a/src/main/resources/LogsOracle.jar b/src/main/resources/LogsOracle.jar index 7194f50d..e953d87b 100644 Binary files a/src/main/resources/LogsOracle.jar and b/src/main/resources/LogsOracle.jar differ