From def2457b1c77f17f1f99a4b72fdca96244bed805 Mon Sep 17 00:00:00 2001 From: lupin012 <58134934+lupin012@users.noreply.github.com> Date: Thu, 16 Nov 2023 10:21:21 +0100 Subject: [PATCH] rpctest: add option to requestAndCompare to permit to save only success tx (#8726) --- cmd/rpctest/rpctest/bench_debugTraceBlockByNumber.go | 2 +- cmd/rpctest/rpctest/bench_debugtracecall.go | 3 ++- cmd/rpctest/rpctest/bench_ethcall.go | 6 +++++- cmd/rpctest/rpctest/bench_ethgetblockbyhash.go | 3 ++- cmd/rpctest/rpctest/bench_ethgetblockbynumber.go | 3 ++- cmd/rpctest/rpctest/bench_ethgetlogs.go | 9 ++++++--- cmd/rpctest/rpctest/bench_gettransactionbyhash.go | 3 ++- cmd/rpctest/rpctest/bench_traceblock.go | 2 +- cmd/rpctest/rpctest/bench_tracecall.go | 2 +- cmd/rpctest/rpctest/bench_tracecallmany.go | 2 +- cmd/rpctest/rpctest/bench_tracefilter.go | 12 ++++++------ cmd/rpctest/rpctest/bench_tracereplaytransaction.go | 3 ++- cmd/rpctest/rpctest/bench_tracetransaction.go | 6 ++++-- cmd/rpctest/rpctest/bench_txreceipts.go | 3 ++- cmd/rpctest/rpctest/utils.go | 12 ++++++++---- 15 files changed, 45 insertions(+), 26 deletions(-) diff --git a/cmd/rpctest/rpctest/bench_debugTraceBlockByNumber.go b/cmd/rpctest/rpctest/bench_debugTraceBlockByNumber.go index 39b92bd1d79..6ab0a999390 100644 --- a/cmd/rpctest/rpctest/bench_debugTraceBlockByNumber.go +++ b/cmd/rpctest/rpctest/bench_debugTraceBlockByNumber.go @@ -50,7 +50,7 @@ func BenchDebugTraceBlockByNumber(erigonUrl, gethUrl string, needCompare bool, b reqGen.reqID++ request := reqGen.debugTraceBlockByNumber(bn) errCtx := fmt.Sprintf("block %d", bn) - if err := requestAndCompare(request, "debug_traceBlockByNumber", errCtx, reqGen, needCompare, rec, errs, resultsCh); err != nil { + if err := requestAndCompare(request, "debug_traceBlockByNumber", errCtx, reqGen, needCompare, rec, errs, resultsCh /* insertOnlyIfSuccess */, false); err != nil { return err } } diff --git a/cmd/rpctest/rpctest/bench_debugtracecall.go b/cmd/rpctest/rpctest/bench_debugtracecall.go index 4492da33f7b..38cbb4afbd3 100644 --- a/cmd/rpctest/rpctest/bench_debugtracecall.go +++ b/cmd/rpctest/rpctest/bench_debugtracecall.go @@ -93,7 +93,8 @@ func BenchDebugTraceCall(erigonURL, gethURL string, needCompare bool, blockFrom request := reqGen.debugTraceCall(tx.From, tx.To, &tx.Gas, &tx.GasPrice, &tx.Value, tx.Input, bn-1) errCtx := fmt.Sprintf("block %d tx %s", bn, tx.Hash) - if err := requestAndCompare(request, "debug_traceCall", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "debug_traceCall", errCtx, reqGen, needCompare, rec, errs, nil, + /* insertOnlyIfSuccess*/ false); err != nil { fmt.Println(err) return } diff --git a/cmd/rpctest/rpctest/bench_ethcall.go b/cmd/rpctest/rpctest/bench_ethcall.go index 8d0bda1b113..206792a4bd3 100644 --- a/cmd/rpctest/rpctest/bench_ethcall.go +++ b/cmd/rpctest/rpctest/bench_ethcall.go @@ -98,14 +98,18 @@ func BenchEthCall(erigonURL, gethURL string, needCompare, latest bool, blockFrom nTransactions = nTransactions + 1 var request string + var insertedOnlyIfSuccess bool if latest { request = reqGen.ethCallLatest(tx.From, tx.To, &tx.Gas, &tx.GasPrice, &tx.Value, tx.Input) + insertedOnlyIfSuccess = true } else { request = reqGen.ethCall(tx.From, tx.To, &tx.Gas, &tx.GasPrice, &tx.Value, tx.Input, bn-1) + insertedOnlyIfSuccess = false } errCtx := fmt.Sprintf(" bn=%d hash=%s", bn, tx.Hash) - if err := requestAndCompare(request, "eth_call", errCtx, reqGen, needCompare, rec, errs, resultsCh); err != nil { + if err := requestAndCompare(request, "eth_call", errCtx, reqGen, needCompare, rec, errs, resultsCh, + insertedOnlyIfSuccess); err != nil { return err } } diff --git a/cmd/rpctest/rpctest/bench_ethgetblockbyhash.go b/cmd/rpctest/rpctest/bench_ethgetblockbyhash.go index 6a079a8268a..f6a6d2af90a 100644 --- a/cmd/rpctest/rpctest/bench_ethgetblockbyhash.go +++ b/cmd/rpctest/rpctest/bench_ethgetblockbyhash.go @@ -99,7 +99,8 @@ func BenchEthGetBlockByHash(erigonURL, gethURL string, needCompare, latest bool, request = reqGen.getBlockByHash(b.Result.Hash, true) errCtx := fmt.Sprintf(" bn=%d hash=%s", bn, b.Result.Hash) - if err := requestAndCompare(request, "eth_getBlockByHash", errCtx, reqGen, needCompare, rec, errs, resultsCh); err != nil { + if err := requestAndCompare(request, "eth_getBlockByHash", errCtx, reqGen, needCompare, rec, errs, resultsCh, + /* insertOnlyIfSuccess */ false); err != nil { return err } diff --git a/cmd/rpctest/rpctest/bench_ethgetblockbynumber.go b/cmd/rpctest/rpctest/bench_ethgetblockbynumber.go index 28988042f6e..8279c19f325 100644 --- a/cmd/rpctest/rpctest/bench_ethgetblockbynumber.go +++ b/cmd/rpctest/rpctest/bench_ethgetblockbynumber.go @@ -98,7 +98,8 @@ func BenchEthGetBlockByNumber2(erigonURL, gethURL string, needCompare, latest bo request = reqGen.getBlockByNumber(bn, true) errCtx := fmt.Sprintf(" bn=%d ", bn) - if err := requestAndCompare(request, "eth_getBlockByNumber", errCtx, reqGen, needCompare, rec, errs, resultsCh); err != nil { + if err := requestAndCompare(request, "eth_getBlockByNumber", errCtx, reqGen, needCompare, rec, errs, resultsCh, + /* insertOnlyIfSuccess */ false); err != nil { return err } diff --git a/cmd/rpctest/rpctest/bench_ethgetlogs.go b/cmd/rpctest/rpctest/bench_ethgetlogs.go index 61c921bf36f..f570eb17ed7 100644 --- a/cmd/rpctest/rpctest/bench_ethgetlogs.go +++ b/cmd/rpctest/rpctest/bench_ethgetlogs.go @@ -93,7 +93,8 @@ func BenchEthGetLogs(erigonURL, gethURL string, needCompare bool, blockFrom uint reqGen.reqID++ request := reqGen.getLogs(prevBn, bn, account) errCtx := fmt.Sprintf("account %x blocks %d-%d", account, prevBn, bn) - if err := requestAndCompare(request, "eth_getLogs", errCtx, reqGen, needCompare, rec, errs, resultsCh); err != nil { + if err := requestAndCompare(request, "eth_getLogs", errCtx, reqGen, needCompare, rec, errs, resultsCh, + /* insertOnlyIfSuccess */ false); err != nil { fmt.Println(err) return } @@ -103,7 +104,8 @@ func BenchEthGetLogs(erigonURL, gethURL string, needCompare bool, blockFrom uint reqGen.reqID++ request = reqGen.getLogs1(prevBn, bn+10000, account, topic) errCtx := fmt.Sprintf("account %x topic %x blocks %d-%d", account, topic, prevBn, bn) - if err := requestAndCompare(request, "eth_getLogs", errCtx, reqGen, needCompare, rec, errs, resultsCh); err != nil { + if err := requestAndCompare(request, "eth_getLogs", errCtx, reqGen, needCompare, rec, errs, resultsCh, + /* insertOnlyIfSuccess */ false); err != nil { fmt.Println(err) return } @@ -118,7 +120,8 @@ func BenchEthGetLogs(erigonURL, gethURL string, needCompare bool, blockFrom uint reqGen.reqID++ request = reqGen.getLogs2(prevBn, bn+100000, account, topics[idx1], topics[idx2]) errCtx := fmt.Sprintf("account %x topic1 %x topic2 %x blocks %d-%d", account, topics[idx1], topics[idx2], prevBn, bn) - if err := requestAndCompare(request, "eth_getLogs", errCtx, reqGen, needCompare, rec, errs, resultsCh); err != nil { + if err := requestAndCompare(request, "eth_getLogs", errCtx, reqGen, needCompare, rec, errs, resultsCh, + /* insertOnlyIfSuccess */ false); err != nil { fmt.Println(err) return } diff --git a/cmd/rpctest/rpctest/bench_gettransactionbyhash.go b/cmd/rpctest/rpctest/bench_gettransactionbyhash.go index 2d5d479d1e4..b33ba9dfd18 100644 --- a/cmd/rpctest/rpctest/bench_gettransactionbyhash.go +++ b/cmd/rpctest/rpctest/bench_gettransactionbyhash.go @@ -103,7 +103,8 @@ func BenchEthGetTransactionByHash(erigonURL, gethURL string, needCompare bool, b request = reqGen.getTransactionByHash(tx.Hash) errCtx := fmt.Sprintf(" bn=%d hash=%s", bn, tx.Hash) - if err := requestAndCompare(request, "eth_getTransactionByHash", errCtx, reqGen, needCompare, rec, errs, resultsCh); err != nil { + if err := requestAndCompare(request, "eth_getTransactionByHash", errCtx, reqGen, needCompare, rec, errs, resultsCh, + /* insertOnlyIfSuccess */ false); err != nil { return err } } diff --git a/cmd/rpctest/rpctest/bench_traceblock.go b/cmd/rpctest/rpctest/bench_traceblock.go index 6e6105be1db..1389be49c43 100644 --- a/cmd/rpctest/rpctest/bench_traceblock.go +++ b/cmd/rpctest/rpctest/bench_traceblock.go @@ -73,7 +73,7 @@ func BenchTraceBlock(erigonURL, oeURL string, needCompare bool, blockFrom uint64 reqGen.reqID++ request := reqGen.traceBlock(bn) errCtx := fmt.Sprintf("block %d", bn) - if err := requestAndCompare(request, "trace_block", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "trace_block", errCtx, reqGen, needCompare, rec, errs, nil /* insertOnlyIfSuccess */, false); err != nil { fmt.Println(err) return } diff --git a/cmd/rpctest/rpctest/bench_tracecall.go b/cmd/rpctest/rpctest/bench_tracecall.go index 1a1202b9873..37dca8a9602 100644 --- a/cmd/rpctest/rpctest/bench_tracecall.go +++ b/cmd/rpctest/rpctest/bench_tracecall.go @@ -75,7 +75,7 @@ func BenchTraceCall(erigonURL, oeURL string, needCompare bool, blockFrom uint64, reqGen.reqID++ request := reqGen.traceCall(tx.From, tx.To, &tx.Gas, &tx.GasPrice, &tx.Value, tx.Input, bn-1) errCtx := fmt.Sprintf("block %d, tx %s", bn, tx.Hash) - if err := requestAndCompare(request, "trace_call", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "trace_call", errCtx, reqGen, needCompare, rec, errs, nil /* insertOnlyIfSuccess */, false); err != nil { return } } diff --git a/cmd/rpctest/rpctest/bench_tracecallmany.go b/cmd/rpctest/rpctest/bench_tracecallmany.go index ba2294e9e6d..61d03b0c3c5 100644 --- a/cmd/rpctest/rpctest/bench_tracecallmany.go +++ b/cmd/rpctest/rpctest/bench_tracecallmany.go @@ -95,7 +95,7 @@ func BenchTraceCallMany(erigonURL, oeURL string, needCompare bool, blockFrom uin request := reqGen.traceCallMany(from, to, gas, gasPrice, value, data, bn-1) errCtx := fmt.Sprintf("block %d", bn) - if err := requestAndCompare(request, "trace_callMany", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "trace_callMany", errCtx, reqGen, needCompare, rec, errs, nil /* insertOnlyIfSuccess */, false); err != nil { fmt.Println(err) return } diff --git a/cmd/rpctest/rpctest/bench_tracefilter.go b/cmd/rpctest/rpctest/bench_tracefilter.go index 9d907c2c559..c3597a65bf5 100644 --- a/cmd/rpctest/rpctest/bench_tracefilter.go +++ b/cmd/rpctest/rpctest/bench_tracefilter.go @@ -95,14 +95,14 @@ func BenchTraceFilter(erigonURL, oeURL string, needCompare bool, blockFrom uint6 reqGen.reqID++ request := reqGen.traceFilterFrom(prevBn, bn, account) errCtx := fmt.Sprintf("traceFilterFrom fromBlock %d, toBlock %d, fromAddress %x", prevBn, bn, account) - if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil /* insertOnlyIfSuccess */, false); err != nil { fmt.Println(err) return } reqGen.reqID++ request = reqGen.traceFilterTo(prevBn, bn, account) errCtx = fmt.Sprintf("traceFilterTo fromBlock %d, toBlock %d, fromAddress %x", prevBn, bn, account) - if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil /* insertOnlyIfSuccess */, false); err != nil { fmt.Println(err) return } @@ -114,28 +114,28 @@ func BenchTraceFilter(erigonURL, oeURL string, needCompare bool, blockFrom uint6 reqGen.reqID++ request := reqGen.traceFilterUnion(prevBn, bn, from, to) errCtx := fmt.Sprintf("traceFilterUnion fromBlock %d, toBlock %d, fromAddress %x, toAddress %x", prevBn, bn, from, to) - if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil, false); err != nil { fmt.Println(err) return } reqGen.reqID++ request = reqGen.traceFilterAfter(prevBn, bn, 1) errCtx = fmt.Sprintf("traceFilterAfter fromBlock %d, toBlock %d, after %x", prevBn, bn, 1) - if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil, false); err != nil { fmt.Println(err) return } reqGen.reqID++ request = reqGen.traceFilterCount(prevBn, bn, 1) errCtx = fmt.Sprintf("traceFilterCount fromBlock %d, toBlock %d, count %x", prevBn, bn, 1) - if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil, false); err != nil { fmt.Println(err) return } reqGen.reqID++ request = reqGen.traceFilterCountAfter(prevBn, bn, 1, 1) errCtx = fmt.Sprintf("traceFilterCountAfter fromBlock %d, toBlock %d, count %x, after %x", prevBn, bn, 1, 1) - if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "trace_filter", errCtx, reqGen, needCompare, rec, errs, nil, false); err != nil { fmt.Println(err) return } diff --git a/cmd/rpctest/rpctest/bench_tracereplaytransaction.go b/cmd/rpctest/rpctest/bench_tracereplaytransaction.go index 82e8854f5de..f1326740877 100644 --- a/cmd/rpctest/rpctest/bench_tracereplaytransaction.go +++ b/cmd/rpctest/rpctest/bench_tracereplaytransaction.go @@ -59,7 +59,8 @@ func BenchTraceReplayTransaction(erigonUrl, gethUrl string, needCompare bool, bl reqGen.reqID++ request := reqGen.traceReplayTransaction(tx.Hash) errCtx := fmt.Sprintf("block %d, tx %s", bn, tx.Hash) - if err := requestAndCompare(request, "trace_replayTransaction", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "trace_replayTransaction", errCtx, reqGen, needCompare, rec, errs, nil, + /* insertOnlyIfSuccess */ false); err != nil { fmt.Println(err) return } diff --git a/cmd/rpctest/rpctest/bench_tracetransaction.go b/cmd/rpctest/rpctest/bench_tracetransaction.go index 36c4d50092f..2f83cf48f26 100644 --- a/cmd/rpctest/rpctest/bench_tracetransaction.go +++ b/cmd/rpctest/rpctest/bench_tracetransaction.go @@ -58,7 +58,8 @@ func BenchTraceBlockByHash(erigonUrl, gethUrl string, needCompare bool, blockFro reqGen.reqID++ request := reqGen.traceBlockByHash(b.Result.Hash.Hex()) errCtx := fmt.Sprintf("block %d, tx %s", bn, b.Result.Hash.Hex()) - if err := requestAndCompare(request, "debug_traceBlockByHash", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "debug_traceBlockByHash", errCtx, reqGen, needCompare, rec, errs, nil, + /* insertOnlyIfSuccess */ false); err != nil { fmt.Println(err) return } @@ -116,7 +117,8 @@ func BenchTraceTransaction(erigonUrl, gethUrl string, needCompare bool, blockFro reqGen.reqID++ request := reqGen.traceTransaction(tx.Hash) errCtx := fmt.Sprintf("block %d, tx %s", bn, tx.Hash) - if err := requestAndCompare(request, "debug_traceTransaction", errCtx, reqGen, needCompare, rec, errs, nil); err != nil { + if err := requestAndCompare(request, "debug_traceTransaction", errCtx, reqGen, needCompare, rec, errs, nil, + /* insertOnlyIfSuccess */ false); err != nil { fmt.Println(err) return } diff --git a/cmd/rpctest/rpctest/bench_txreceipts.go b/cmd/rpctest/rpctest/bench_txreceipts.go index 5469bb77526..8b677976a44 100644 --- a/cmd/rpctest/rpctest/bench_txreceipts.go +++ b/cmd/rpctest/rpctest/bench_txreceipts.go @@ -77,7 +77,8 @@ func BenchTxReceipt(erigonURL, gethURL string, needCompare bool, blockFrom uint6 reqGen.reqID++ request := reqGen.getTransactionReceipt(tx.Hash) errCtx := fmt.Sprintf("block %d, tx %s", bn, tx.Hash) - if err := requestAndCompare(request, "eth_getTransactionReceipt", errCtx, reqGen, needCompare, rec, errs, resultsCh); err != nil { + if err := requestAndCompare(request, "eth_getTransactionReceipt", errCtx, reqGen, needCompare, rec, errs, resultsCh, + /* insertOnlyIfSuccess */ false); err != nil { return err } } diff --git a/cmd/rpctest/rpctest/utils.go b/cmd/rpctest/rpctest/utils.go index 95d21dbb8a7..fbfcc8e1ce2 100644 --- a/cmd/rpctest/rpctest/utils.go +++ b/cmd/rpctest/rpctest/utils.go @@ -231,7 +231,7 @@ func compareErrors(errVal *fastjson.Value, errValg *fastjson.Value, methodName s return nil } -func requestAndCompare(request string, methodName string, errCtx string, reqGen *RequestGenerator, needCompare bool, rec *bufio.Writer, errs *bufio.Writer, channel chan CallResult) error { +func requestAndCompare(request string, methodName string, errCtx string, reqGen *RequestGenerator, needCompare bool, rec *bufio.Writer, errs *bufio.Writer, channel chan CallResult, insertOnlyIfSuccess bool) error { recording := rec != nil res := reqGen.Erigon2(methodName, request) if res.Err != nil { @@ -243,9 +243,6 @@ func requestAndCompare(request string, methodName string, errCtx string, reqGen return fmt.Errorf("error invoking %s (Erigon): %d %s", methodName, errVal.GetInt("code"), errVal.GetStringBytes("message")) } } - if channel != nil { - channel <- res - } if needCompare { resg := reqGen.Geth2(methodName, request) if resg.Err != nil { @@ -279,7 +276,14 @@ func requestAndCompare(request string, methodName string, errCtx string, reqGen } else { return compareErrors(errVal, errValg, methodName, errCtx, errs) } + } else { + if channel != nil { + if insertOnlyIfSuccess == false || (insertOnlyIfSuccess && errVal == nil) { + channel <- res + } + } } + if recording { fmt.Fprintf(rec, "%s\n%s\n\n", request, res.Response) }