Skip to content

Commit 2c8e710

Browse files
committed
Fix filter middleware to mimic proper RPC response
1 parent 5826bc2 commit 2c8e710

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

web3/middleware/filter.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,10 @@ async def async_block_hashes_in_range(
589589
AsyncFilter = Union[AsyncRequestLogs, AsyncRequestBlocks]
590590

591591

592+
def _simulate_rpc_response_with_result(filter_id: str) -> "RPCResponse":
593+
return {"jsonrpc": "2.0", "id": -1, "result": filter_id}
594+
595+
592596
class LocalFilterMiddleware(Web3Middleware):
593597
def __init__(self, w3: Union["Web3", "AsyncWeb3"]):
594598
self.filters: Dict[str, SyncFilter] = {}
@@ -615,7 +619,7 @@ def middleware(method: "RPCEndpoint", params: Any) -> "RPCResponse":
615619
raise NotImplementedError(method)
616620

617621
self.filters[filter_id] = _filter
618-
return {"result": filter_id}
622+
return _simulate_rpc_response_with_result(filter_id)
619623

620624
elif method in FILTER_CHANGES_METHODS:
621625
_filter_id = params[0]
@@ -626,12 +630,16 @@ def middleware(method: "RPCEndpoint", params: Any) -> "RPCResponse":
626630

627631
_filter = self.filters[_filter_id]
628632
if method == RPC.eth_getFilterChanges:
629-
return {"result": next(_filter.filter_changes)}
633+
return _simulate_rpc_response_with_result(
634+
next(_filter.filter_changes) # type: ignore
635+
)
630636

631637
elif method == RPC.eth_getFilterLogs:
632638
# type ignored b/c logic prevents RequestBlocks which
633639
# doesn't implement get_logs
634-
return {"result": _filter.get_logs()} # type: ignore
640+
return _simulate_rpc_response_with_result(
641+
_filter.get_logs() # type: ignore
642+
)
635643
else:
636644
raise NotImplementedError(method)
637645
else:
@@ -663,7 +671,7 @@ async def middleware(method: "RPCEndpoint", params: Any) -> "RPCResponse":
663671
raise NotImplementedError(method)
664672

665673
self.async_filters[filter_id] = _filter
666-
return {"result": filter_id}
674+
return _simulate_rpc_response_with_result(filter_id)
667675

668676
elif method in FILTER_CHANGES_METHODS:
669677
_filter_id = params[0]
@@ -674,12 +682,16 @@ async def middleware(method: "RPCEndpoint", params: Any) -> "RPCResponse":
674682

675683
_filter = self.async_filters[_filter_id]
676684
if method == RPC.eth_getFilterChanges:
677-
return {"result": await _filter.filter_changes.__anext__()}
685+
return _simulate_rpc_response_with_result(
686+
await _filter.filter_changes.__anext__() # type: ignore
687+
)
678688

679689
elif method == RPC.eth_getFilterLogs:
680690
# type ignored b/c logic prevents RequestBlocks which
681691
# doesn't implement get_logs
682-
return {"result": await _filter.get_logs()} # type: ignore
692+
return _simulate_rpc_response_with_result(
693+
await _filter.get_logs() # type: ignore
694+
)
683695
else:
684696
raise NotImplementedError(method)
685697
else:

0 commit comments

Comments
 (0)