laconicd/ethereum/rpc/namespaces/debug/trace.go
crypto-facs c7554e96aa
rpc, evm: debug_traceTransaction endpoint (#506)
* fix typo

* Added tracers package to debug API

* Add GetTransactionByHash function to backend package

* first version

* traceTransaction first version

* clean PR

* revert debug changes

* Update proto/ethermint/evm/v1/query.proto

Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>

* remove unnecesary panic

* remove internal debug api

* trace transaction javascript tracer

* add support for custom logConfig

* added comment

* traceTransactions tests

* fix linter

* remove unused

* add comments to traceConfig

* update dependencies

* updated endpoints md

* Apply suggestions from code review

* Update x/evm/keeper/grpc_query.go

Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>

* Update x/evm/keeper/grpc_query.go

Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>

Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com>
2021-09-04 20:33:06 +00:00

70 lines
2.1 KiB
Go

// Copyright 2016 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
//+build go1.5
package debug
import (
"errors"
"os"
"runtime/trace"
)
// StartGoTrace turns on tracing, writing to the given file.
func (a *API) StartGoTrace(file string) error {
a.logger.Debug("debug_startGoTrace", "file", file)
a.handler.mu.Lock()
defer a.handler.mu.Unlock()
if a.handler.traceFile != nil {
a.logger.Debug("trace already in progress")
return errors.New("trace already in progress")
}
f, err := os.Create(ExpandHome(file))
if err != nil {
a.logger.Debug("failed to create go trace file", "error", err.Error())
return err
}
if err := trace.Start(f); err != nil {
a.logger.Debug("Go tracing already started", "error", err.Error())
f.Close()
return err
}
a.handler.traceFile = f
a.handler.traceFilename = file
a.logger.Info("Go tracing started", "dump", a.handler.traceFilename)
return nil
}
// StopGoTrace stops an ongoing trace.
func (a *API) StopGoTrace() error {
a.logger.Debug("debug_stopGoTrace")
a.handler.mu.Lock()
defer a.handler.mu.Unlock()
trace.Stop()
if a.handler.traceFile == nil {
a.logger.Debug("trace not in progress")
return errors.New("trace not in progress")
}
a.logger.Info("Done writing Go trace", "dump", a.handler.traceFilename)
a.handler.traceFile.Close()
a.handler.traceFile = nil
a.handler.traceFilename = ""
return nil
}