|
|
|
@ -21,7 +21,6 @@ import ( |
|
|
|
|
"math/big" |
|
|
|
|
"strconv" |
|
|
|
|
"sync/atomic" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/common" |
|
|
|
|
"github.com/ethereum/go-ethereum/core/vm" |
|
|
|
@ -47,6 +46,7 @@ func init() { |
|
|
|
|
// 0xc281d19e-0: 1
|
|
|
|
|
// }
|
|
|
|
|
type fourByteTracer struct { |
|
|
|
|
noopTracer |
|
|
|
|
ids map[string]int // ids aggregates the 4byte ids found
|
|
|
|
|
interrupt uint32 // Atomic flag to signal execution interruption
|
|
|
|
|
reason error // Textual reason for the interruption
|
|
|
|
@ -90,10 +90,6 @@ func (t *fourByteTracer) CaptureStart(env *vm.EVM, from common.Address, to commo |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// CaptureState implements the EVMLogger interface to trace a single step of VM execution.
|
|
|
|
|
func (t *fourByteTracer) CaptureState(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, rData []byte, depth int, err error) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// CaptureEnter is called when EVM enters a new scope (via call, create or selfdestruct).
|
|
|
|
|
func (t *fourByteTracer) CaptureEnter(op vm.OpCode, from common.Address, to common.Address, input []byte, gas uint64, value *big.Int) { |
|
|
|
|
// Skip if tracing was interrupted
|
|
|
|
@ -115,23 +111,6 @@ func (t *fourByteTracer) CaptureEnter(op vm.OpCode, from common.Address, to comm |
|
|
|
|
t.store(input[0:4], len(input)-4) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// CaptureExit is called when EVM exits a scope, even if the scope didn't
|
|
|
|
|
// execute any code.
|
|
|
|
|
func (t *fourByteTracer) CaptureExit(output []byte, gasUsed uint64, err error) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// CaptureFault implements the EVMLogger interface to trace an execution fault.
|
|
|
|
|
func (t *fourByteTracer) CaptureFault(pc uint64, op vm.OpCode, gas, cost uint64, scope *vm.ScopeContext, depth int, err error) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// CaptureEnd is called after the call finishes to finalize the tracing.
|
|
|
|
|
func (t *fourByteTracer) CaptureEnd(output []byte, gasUsed uint64, _ time.Duration, err error) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (*fourByteTracer) CaptureTxStart(gasLimit uint64) {} |
|
|
|
|
|
|
|
|
|
func (*fourByteTracer) CaptureTxEnd(restGas uint64) {} |
|
|
|
|
|
|
|
|
|
// GetResult returns the json-encoded nested list of call traces, and any
|
|
|
|
|
// error arising from the encoding or forceful termination (via `Stop`).
|
|
|
|
|
func (t *fourByteTracer) GetResult() (json.RawMessage, error) { |
|
|
|
|