Merge pull request #2399 from karalabe/fix-trace-json-output

eth: fix accidental nil panic on nil errors
This commit is contained in:
Jeffrey Wilcke 2016-03-31 17:39:21 +02:00
commit db739b506a
1 changed files with 13 additions and 4 deletions

View File

@ -1531,7 +1531,7 @@ func (api *PrivateDebugAPI) TraceBlock(blockRlp []byte, config vm.Config) BlockT
return BlockTraceResult{ return BlockTraceResult{
Validated: validated, Validated: validated,
StructLogs: formatLogs(logs), StructLogs: formatLogs(logs),
Error: err.Error(), Error: formatError(err),
} }
} }
@ -1557,7 +1557,7 @@ func (api *PrivateDebugAPI) TraceBlockByNumber(number uint64, config vm.Config)
return BlockTraceResult{ return BlockTraceResult{
Validated: validated, Validated: validated,
StructLogs: formatLogs(logs), StructLogs: formatLogs(logs),
Error: err.Error(), Error: formatError(err),
} }
} }
@ -1573,7 +1573,7 @@ func (api *PrivateDebugAPI) TraceBlockByHash(hash common.Hash, config vm.Config)
return BlockTraceResult{ return BlockTraceResult{
Validated: validated, Validated: validated,
StructLogs: formatLogs(logs), StructLogs: formatLogs(logs),
Error: err.Error(), Error: formatError(err),
} }
} }
@ -1666,7 +1666,7 @@ func formatLogs(structLogs []vm.StructLog) []structLogRes {
Gas: trace.Gas, Gas: trace.Gas,
GasCost: trace.GasCost, GasCost: trace.GasCost,
Depth: trace.Depth, Depth: trace.Depth,
Error: trace.Err.Error(), Error: formatError(trace.Err),
Stack: make([]string, len(trace.Stack)), Stack: make([]string, len(trace.Stack)),
Storage: make(map[string]string), Storage: make(map[string]string),
} }
@ -1686,6 +1686,15 @@ func formatLogs(structLogs []vm.StructLog) []structLogRes {
return formattedStructLogs return formattedStructLogs
} }
// formatError formats a Go error into either an empty string or the data content
// of the error itself.
func formatError(err error) string {
if err == nil {
return ""
}
return err.Error()
}
// TraceTransaction returns the structured logs created during the execution of EVM // TraceTransaction returns the structured logs created during the execution of EVM
// and returns them as a JSON object. // and returns them as a JSON object.
func (s *PrivateDebugAPI) TraceTransaction(txHash common.Hash, logger vm.LogConfig) (*ExecutionResult, error) { func (s *PrivateDebugAPI) TraceTransaction(txHash common.Hash, logger vm.LogConfig) (*ExecutionResult, error) {