Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

eth: manually convert errors to strings on the trace API (json cannot) #2398

Merged
merged 1 commit into from
Mar 31, 2016
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions eth/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -1513,9 +1513,9 @@ func NewPrivateDebugAPI(eth *Ethereum) *PrivateDebugAPI {
// BlockTraceResults is the returned value when replaying a block to check for
// consensus results and full VM trace logs for all included transactions.
type BlockTraceResult struct {
Validated bool `json: "validated"`
Validated bool `json:"validated"`
StructLogs []structLogRes `json:"structLogs"`
Error error `json:"error"`
Error string `json:"error"`
}

// TraceBlock processes the given block's RLP but does not import the block in to
Expand All @@ -1524,14 +1524,14 @@ func (api *PrivateDebugAPI) TraceBlock(blockRlp []byte, config vm.Config) BlockT
var block types.Block
err := rlp.Decode(bytes.NewReader(blockRlp), &block)
if err != nil {
return BlockTraceResult{Error: fmt.Errorf("could not decode block: %v", err)}
return BlockTraceResult{Error: fmt.Sprintf("could not decode block: %v", err)}
}

validated, logs, err := api.traceBlock(&block, config)
return BlockTraceResult{
Validated: validated,
StructLogs: formatLogs(logs),
Error: err,
Error: err.Error(),
}
}

Expand All @@ -1540,7 +1540,7 @@ func (api *PrivateDebugAPI) TraceBlock(blockRlp []byte, config vm.Config) BlockT
func (api *PrivateDebugAPI) TraceBlockFromFile(file string, config vm.Config) BlockTraceResult {
blockRlp, err := ioutil.ReadFile(file)
if err != nil {
return BlockTraceResult{Error: fmt.Errorf("could not read file: %v", err)}
return BlockTraceResult{Error: fmt.Sprintf("could not read file: %v", err)}
}
return api.TraceBlock(blockRlp, config)
}
Expand All @@ -1550,14 +1550,14 @@ func (api *PrivateDebugAPI) TraceBlockByNumber(number uint64, config vm.Config)
// Fetch the block that we aim to reprocess
block := api.eth.BlockChain().GetBlockByNumber(number)
if block == nil {
return BlockTraceResult{Error: fmt.Errorf("block #%d not found", number)}
return BlockTraceResult{Error: fmt.Sprintf("block #%d not found", number)}
}

validated, logs, err := api.traceBlock(block, config)
return BlockTraceResult{
Validated: validated,
StructLogs: formatLogs(logs),
Error: err,
Error: err.Error(),
}
}

Expand All @@ -1566,14 +1566,14 @@ func (api *PrivateDebugAPI) TraceBlockByHash(hash common.Hash, config vm.Config)
// Fetch the block that we aim to reprocess
block := api.eth.BlockChain().GetBlock(hash)
if block == nil {
return BlockTraceResult{Error: fmt.Errorf("block #%x not found", hash)}
return BlockTraceResult{Error: fmt.Sprintf("block #%x not found", hash)}
}

validated, logs, err := api.traceBlock(block, config)
return BlockTraceResult{
Validated: validated,
StructLogs: formatLogs(logs),
Error: err,
Error: err.Error(),
}
}

Expand Down Expand Up @@ -1641,7 +1641,7 @@ type structLogRes struct {
Gas *big.Int `json:"gas"`
GasCost *big.Int `json:"gasCost"`
Depth int `json:"depth"`
Error error `json:"error"`
Error string `json:"error"`
Stack []string `json:"stack"`
Memory []string `json:"memory"`
Storage map[string]string `json:"storage"`
Expand All @@ -1666,7 +1666,7 @@ func formatLogs(structLogs []vm.StructLog) []structLogRes {
Gas: trace.Gas,
GasCost: trace.GasCost,
Depth: trace.Depth,
Error: trace.Err,
Error: trace.Err.Error(),
Stack: make([]string, len(trace.Stack)),
Storage: make(map[string]string),
}
Expand Down