eth_getLogs call selector supports blockHash parameter (#279)
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user