Fix internal data processing for Polygon

This commit is contained in:
Martin Boehm 2023-07-01 23:00:32 +02:00
parent 9f0286cef4
commit d1ffa7bb9e

View File

@ -653,8 +653,28 @@ func (b *EthereumRPC) getInternalDataForBlock(blockHash string, blockHeight uint
return data, contracts, err
}
if len(trace) != len(data) {
glog.Error("debug_traceBlockByHash block ", blockHash, ", error: trace length does not match block length ", len(trace), "!=", len(data))
return data, contracts, err
if len(trace) < len(data) {
for i := range transactions {
tx := &transactions[i]
// bridging transactions in Polygon do not create trace and cause mismatch between the trace size and block size, it is necessary to adjust the trace size
// bridging transaction that from and to zero address
if tx.To == "0x0000000000000000000000000000000000000000" && tx.From == "0x0000000000000000000000000000000000000000" {
if i >= len(trace) {
trace = append(trace, rpcTraceResult{})
} else {
trace = append(trace[:i+1], trace[i:]...)
trace[i] = rpcTraceResult{}
}
}
}
}
if len(trace) != len(data) {
e := fmt.Sprint("trace length does not match block length ", len(trace), "!=", len(data))
glog.Error("debug_traceBlockByHash block ", blockHash, ", error: ", e)
return data, contracts, errors.New(e)
} else {
glog.Warning("debug_traceBlockByHash block ", blockHash, ", trace adjusted to match the number of transactions in block")
}
}
for i, result := range trace {
r := &result.Result