optimise default getBlockByNumber - skip processing requests of tx bodies
This commit is contained in:
@@ -136,6 +136,11 @@ class LocalCallRouter(
|
|||||||
throw RpcException(RpcResponseError.CODE_INVALID_METHOD_PARAMS, "Must provide 2 parameters")
|
throw RpcException(RpcResponseError.CODE_INVALID_METHOD_PARAMS, "Must provide 2 parameters")
|
||||||
}
|
}
|
||||||
val number: Long
|
val number: Long
|
||||||
|
val withTx = params[1].toString().toBoolean()
|
||||||
|
if (withTx) {
|
||||||
|
// with Tx request much more efficient in remote call
|
||||||
|
return null
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
val blockRef = params[0].toString()
|
val blockRef = params[0].toString()
|
||||||
when {
|
when {
|
||||||
@@ -165,16 +170,8 @@ class LocalCallRouter(
|
|||||||
} catch (e: IllegalArgumentException) {
|
} catch (e: IllegalArgumentException) {
|
||||||
throw RpcException(RpcResponseError.CODE_INVALID_METHOD_PARAMS, "[0] must be a block number")
|
throw RpcException(RpcResponseError.CODE_INVALID_METHOD_PARAMS, "[0] must be a block number")
|
||||||
}
|
}
|
||||||
val withTx = params[1].toString().toBoolean()
|
|
||||||
var block = reader.blocksByHeightAsCont()
|
return reader.blocksByHeightAsCont()
|
||||||
.read(number)
|
.read(number).map { it.json!! }
|
||||||
block = if (withTx) {
|
|
||||||
block.flatMap {
|
|
||||||
fullBlocksReader.read(it.hash)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
block
|
|
||||||
}
|
|
||||||
return block.map { it.json!! }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -138,4 +138,22 @@ class LocalCallRouterSpec extends Specification {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def "getBlockByNumber skips requests with tx bodies"() {
|
||||||
|
setup:
|
||||||
|
def head = Mock(Head)
|
||||||
|
def reader = Mock(EthereumCachingReader) {
|
||||||
|
_ * blocksByIdAsCont() >> new EmptyReader<>()
|
||||||
|
_ * txByHashAsCont() >> new EmptyReader<>()
|
||||||
|
_ * blocksByHeightAsCont() >> new EmptyReader<>()
|
||||||
|
}
|
||||||
|
def methods = new DefaultEthereumMethods(Chain.ETHEREUM)
|
||||||
|
def router = new LocalCallRouter(reader, methods, head, true)
|
||||||
|
|
||||||
|
when:
|
||||||
|
def act = router.getBlockByNumber(["0x0", true])
|
||||||
|
|
||||||
|
then:
|
||||||
|
act == null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user