MCPcopy Create free account
hub / github.com/erpc/erpc / fetchTracesViaForward

Method fetchTracesViaForward

erpc/query_shim.go:372–420  ·  view source on GitHub ↗
(ctx context.Context, blockNum uint64, header *evm.BlockHeader)

Source from the content-addressed store, hash-verified

370}
371
372func (qe *EvmQueryExecutor) fetchTracesViaForward(ctx context.Context, blockNum uint64, header *evm.BlockHeader) ([]*evm.Trace, error) {
373 result, err := qe.forwardSubrequest(ctx, "trace_block", []interface{}{fmt.Sprintf("0x%x", blockNum)})
374 if err == nil {
375 var rawItems []map[string]interface{}
376 if err := sonic.Unmarshal(result, &rawItems); err != nil {
377 return nil, err
378 }
379 out := make([]*evm.Trace, 0, len(rawItems))
380 for _, rawItem := range rawItems {
381 trace, err := evm.TraceFromParity(rawItem, blockNum, headerHash(header), headerTimestamp(header))
382 if err != nil {
383 return nil, err
384 }
385 out = append(out, trace)
386 }
387 return out, nil
388 }
389 if !common.HasErrorCode(err, common.ErrCodeEndpointUnsupported) {
390 return nil, err
391 }
392
393 debugResult, err := qe.forwardSubrequest(ctx, "debug_traceBlockByNumber", []interface{}{
394 fmt.Sprintf("0x%x", blockNum),
395 map[string]interface{}{"tracer": "callTracer"},
396 })
397 if err != nil {
398 if common.HasErrorCode(err, common.ErrCodeEndpointUnsupported) {
399 return nil, status.Error(codes.Unimplemented, "eth_queryTraces requires trace_block or debug_traceBlockByNumber support")
400 }
401 return nil, err
402 }
403 var nested []map[string]interface{}
404 if err := sonic.Unmarshal(debugResult, &nested); err == nil {
405 out := make([]*evm.Trace, 0, len(nested))
406 for _, item := range nested {
407 traces, err := evm.TraceFromGethDebug(item, blockNum, headerHash(header), headerTimestamp(header))
408 if err != nil {
409 return nil, err
410 }
411 out = append(out, traces...)
412 }
413 return out, nil
414 }
415 var single map[string]interface{}
416 if err := sonic.Unmarshal(debugResult, &single); err != nil {
417 return nil, err
418 }
419 return evm.TraceFromGethDebug(single, blockNum, headerHash(header), headerTimestamp(header))
420}
421
422func (qe *EvmQueryExecutor) forwardSubrequest(ctx context.Context, method string, params []interface{}) ([]byte, error) {
423 if qe.forwardSubrequestFn != nil {

Callers 1

shimQueryTracesMethod · 0.95

Calls 5

forwardSubrequestMethod · 0.95
HasErrorCodeFunction · 0.92
headerHashFunction · 0.85
headerTimestampFunction · 0.85
ErrorMethod · 0.65

Tested by

no test coverage detected