update logs oracle (#379)

This commit is contained in:
Nikolay G
2024-01-10 01:43:28 +00:00
committed by GitHub
parent 919e45d0bc
commit 973a4967e3
3 changed files with 20 additions and 4 deletions

View File

@@ -33,12 +33,24 @@ class LogsOracle(
}
fun estimate(
limit: Long?,
fromBlock: Long,
toBlock: Long,
address: List<String>,
topics: List<List<String>>,
): Mono<Long> {
return Mono.fromCallable { db.Query(fromBlock, toBlock, address, topics) }
): Mono<String> {
return Mono.fromCallable {
try {
val estimate = db.Query(limit, fromBlock, toBlock, address, topics)
"{\"total\":$estimate,\"overflow\":false}"
} catch (e: org.drpc.logsoracle.LogsOracle.LogsOracleException) {
if (e.isQueryOverflow()) {
"{\"total\":\"-1\",\"overflow\":true}"
} else {
throw e
}
}
}
.subscribeOn(scheduler)
}
}

View File

@@ -183,6 +183,10 @@ class EthereumLocalReader(
val req = params[0] as LinkedHashMap<String, Any?>
val limit = try { req.get("limit") as Integer? } catch (_: IllegalArgumentException) {
throw RpcException(RpcResponseError.CODE_INVALID_METHOD_PARAMS, "Invalid 'limit' parameter")
}
val fromBlock = try { parseBlockRef(req.get("fromBlock") as String?) } catch (_: IllegalArgumentException) {
throw RpcException(RpcResponseError.CODE_INVALID_METHOD_PARAMS, "Invalid 'fromBlock' parameter")
}
@@ -217,8 +221,8 @@ class EthereumLocalReader(
throw RpcException(RpcResponseError.CODE_INVALID_METHOD_PARAMS, "Invalid 'topics' parameter")
}
return logsOracle.estimate(fromBlock, toBlock, address, topics)
.map { "{\"result\":$it}".toByteArray() to null }
return logsOracle.estimate(limit?.toLong() ?: null, fromBlock, toBlock, address, topics)
.map { it.toByteArray() to null }
}
private fun parseBlockRef(blockRef: String?): Long {

Binary file not shown.