eth_getLogs call selector supports blockHash parameter (#279)

This commit is contained in:
Vyacheslav
2023-08-12 11:15:56 +03:00
committed by GitHub
parent 6766779ddd
commit 6ff75f0e7c
2 changed files with 9 additions and 8 deletions

View File

@@ -116,12 +116,8 @@ class EthereumCallSelector(
return if (blockTag.startsWith("{") && list[pos] is Map<*, *>) { return if (blockTag.startsWith("{") && list[pos] is Map<*, *>) {
val obj = list[pos] as Map<*, *> val obj = list[pos] as Map<*, *>
when { when {
paramName != null -> { paramName != null && obj.containsKey(paramName) -> {
return if (obj.containsKey(paramName)) { return blockSelectorByTag(obj[paramName].toString(), head)
blockSelectorByTag(obj[paramName].toString(), head)
} else {
Mono.empty()
}
} }
obj.containsKey("blockNumber") -> { obj.containsKey("blockNumber") -> {
return blockSelectorByTag(obj["blockNumber"].toString(), head) return blockSelectorByTag(obj["blockNumber"].toString(), head)
@@ -143,7 +139,7 @@ class EthereumCallSelector(
val minHeight: Long? = when (tag) { val minHeight: Long? = when (tag) {
"latest" -> head.getCurrentHeight() "latest" -> head.getCurrentHeight()
"pending" -> null "pending" -> null
"earliest" -> 0L // for earliest it doesn't nothing, we expect to have 0 block "earliest" -> 0L // for earliest it does nothing, we expect to have 0 block
else -> if (tag.startsWith("0x") || tag.toLongOrNull() != null) { else -> if (tag.startsWith("0x") || tag.toLongOrNull() != null) {
return if (tag.length == 66) { // 32-byte hash is represented as 0x + 64 characters return if (tag.length == 66) { // 32-byte hash is represented as 0x + 64 characters
blockByHash(tag) blockByHash(tag)

View File

@@ -341,7 +341,11 @@ class EthereumCallSelectorSpec extends Specification {
def "Get height matcher for getLogs and eth_newFilter method"() { def "Get height matcher for getLogs and eth_newFilter method"() {
setup: setup:
def cache = Stub(Caches) def cache = Mock(Caches) { caches ->
caches.getLastHeightByHash() >> Mock(HeightByHashMemCache) { memCache ->
memCache.read(BlockId.from("0xa29ddfc1b37d0b6d0c4a670fa54778656e890d8bbc1b3a6f7d913bc9eb5e03a1")) >> Mono.just(46208179L)
}
}
def callSelector = new EthereumCallSelector(cache) def callSelector = new EthereumCallSelector(cache)
def head = Mock(Head) { def head = Mock(Head) {
_ * getCurrentHeight() >> 17654321L _ * getCurrentHeight() >> 17654321L
@@ -361,6 +365,7 @@ class EthereumCallSelectorSpec extends Specification {
"eth_getLogs" | '[{"toBlock":"0xfbfe3b"}]' | 16514619L "eth_getLogs" | '[{"toBlock":"0xfbfe3b"}]' | 16514619L
"eth_getLogs" | '[{"toBlock":"latest"}]' | 17654321L "eth_getLogs" | '[{"toBlock":"latest"}]' | 17654321L
"eth_getLogs" | '[{"toBlock":"earliest"}]' | 0L "eth_getLogs" | '[{"toBlock":"earliest"}]' | 0L
"eth_getLogs" | '[{"blockHash":"0xa29ddfc1b37d0b6d0c4a670fa54778656e890d8bbc1b3a6f7d913bc9eb5e03a1"}]' | 46208179L
"eth_newFilter" | '[{"toBlock":"0xfbfe2b", "toBlock":"0xfbfe3b"}]' | 16514619L "eth_newFilter" | '[{"toBlock":"0xfbfe2b", "toBlock":"0xfbfe3b"}]' | 16514619L
"eth_newFilter" | '[{"toBlock":"0xfbfe3b", "toBlock":"latest"}]' | 17654321L "eth_newFilter" | '[{"toBlock":"0xfbfe3b", "toBlock":"latest"}]' | 17654321L
"eth_newFilter" | '[{"toBlock":"0xfbfe3b", "toBlock":"earliest"}]' | 0L "eth_newFilter" | '[{"toBlock":"0xfbfe3b", "toBlock":"earliest"}]' | 0L