Skip to content

Commit 2136ad0

Browse files
authored
fix: decode filtered logs in ws (backport: evmos#1781) (#251)
* fix decode logs in ws * add test * add change doc * decode in single loop * add ci timeout * reset max-tx-gas-wanted * fix rest filter api * test batch tx with exist sc * more filter tests
1 parent 0ea7b86 commit 2136ad0

File tree

9 files changed

+766
-71
lines changed

9 files changed

+766
-71
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ jobs:
105105

106106
integration_tests:
107107
runs-on: ubuntu-latest
108+
timeout-minutes: 60
108109
steps:
109110
- uses: actions/checkout@v2
110111
- uses: cachix/install-nix-action@v19

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
4444
* (rpc) [#1722](https://github.com/evmos/ethermint/pull/1722) Align revert response for `eth_estimateGas` and `eth_call` as Ethereum.
4545
* (rpc) [#1685](https://github.com/evmos/ethermint/pull/1685) Fix parse for websocket connID.
4646
* (rpc) [#1773](https://github.com/evmos/ethermint/pull/1773) Avoid channel get changed when concurrent subscribe happens.
47+
- (rpc) [#1781](https://github.com/evmos/ethermint/pull/1781) Fix decode log for multi topics in websocket subscribe.
4748

4849
### Features
4950

rpc/namespaces/ethereum/eth/filters/api.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -399,15 +399,12 @@ func (api *PublicFilterAPI) Logs(ctx context.Context, crit filters.FilterCriteri
399399
api.logger.Debug("event data type mismatch", "type", fmt.Sprintf("%T", ev.Data))
400400
continue
401401
}
402-
403-
txResponse, err := evmtypes.DecodeTxResponse(dataTx.TxResult.Result.Data)
402+
txLogs, err := evmtypes.DecodeTxLogsFromEvents(dataTx.TxResult.Result.Data)
404403
if err != nil {
405-
api.logger.Error("fail to decode tx response", "error", err)
404+
api.logger.Error("fail to decode tx response", "error", err.Error())
406405
return
407406
}
408-
409-
logs := FilterLogs(evmtypes.LogsToEthereum(txResponse.Logs), crit.FromBlock, crit.ToBlock, crit.Addresses, crit.Topics)
410-
407+
logs := FilterLogs(txLogs, crit.FromBlock, crit.ToBlock, crit.Addresses, crit.Topics)
411408
for _, log := range logs {
412409
_ = notifier.Notify(rpcSub.ID, log)
413410
}
@@ -482,14 +479,12 @@ func (api *PublicFilterAPI) NewFilter(criteria filters.FilterCriteria) (rpc.ID,
482479
api.logger.Debug("event data type mismatch", "type", fmt.Sprintf("%T", ev.Data))
483480
continue
484481
}
485-
486-
txResponse, err := evmtypes.DecodeTxResponse(dataTx.TxResult.Result.Data)
482+
txLogs, err := evmtypes.DecodeTxLogsFromEvents(dataTx.TxResult.Result.Data)
487483
if err != nil {
488-
api.logger.Error("fail to decode tx response", "error", err)
484+
api.logger.Error("fail to decode tx response", "error", err.Error())
489485
return
490486
}
491-
492-
logs := FilterLogs(evmtypes.LogsToEthereum(txResponse.Logs), criteria.FromBlock, criteria.ToBlock, criteria.Addresses, criteria.Topics)
487+
logs := FilterLogs(txLogs, criteria.FromBlock, criteria.ToBlock, criteria.Addresses, criteria.Topics)
493488

494489
api.filtersMu.Lock()
495490
if f, found := api.filters[filterID]; found {

rpc/websockets.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -574,14 +574,12 @@ func (api *pubSubAPI) subscribeLogs(wsConn *wsConn, subID rpc.ID, extra interfac
574574
api.logger.Debug("event data type mismatch", "type", fmt.Sprintf("%T", event.Data))
575575
continue
576576
}
577-
578-
txResponse, err := evmtypes.DecodeTxResponse(dataTx.TxResult.Result.Data)
577+
txLogs, err := evmtypes.DecodeTxLogsFromEvents(dataTx.TxResult.Result.Data)
579578
if err != nil {
580579
api.logger.Error("failed to decode tx response", "error", err.Error())
581580
return
582581
}
583-
584-
logs := rpcfilters.FilterLogs(evmtypes.LogsToEthereum(txResponse.Logs), crit.FromBlock, crit.ToBlock, crit.Addresses, crit.Topics)
582+
logs := rpcfilters.FilterLogs(txLogs, crit.FromBlock, crit.ToBlock, crit.Addresses, crit.Topics)
585583
if len(logs) == 0 {
586584
continue
587585
}

tests/integration_tests/network.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from web3.middleware import geth_poa_middleware
1010

1111
from .cosmoscli import CosmosCLI
12-
from .utils import wait_for_port
12+
from .utils import supervisorctl, wait_for_port
1313

1414
DEFAULT_CHAIN_BINARY = "ethermintd"
1515

@@ -62,6 +62,9 @@ def cosmos_cli(self, i=0):
6262
self.base_dir / f"node{i}", self.node_rpc(i), self.chain_binary
6363
)
6464

65+
def supervisorctl(self, *args):
66+
return supervisorctl(self.base_dir / "../tasks.ini", *args)
67+
6568

6669
class Geth:
6770
def __init__(self, w3):

0 commit comments

Comments
 (0)