logger

package
v0.0.0-...-a1ef408 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 10, 2024 License: GPL-3.0 Imports: 16 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewJSONLogger

func NewJSONLogger(cfg *Config, writer io.Writer) *tracing.Hooks

NewJSONLogger creates a new EVM tracer that prints execution steps as JSON objects into the provided stream.

func NewJSONLoggerWithCallFrames

func NewJSONLoggerWithCallFrames(cfg *Config, writer io.Writer) *tracing.Hooks

NewJSONLoggerWithCallFrames creates a new EVM tracer that prints execution steps as JSON objects into the provided stream. It also includes call frames in the output.

func NewMarkdownLogger

func NewMarkdownLogger(cfg *Config, writer io.Writer) *mdLogger

NewMarkdownLogger creates a logger which outputs information in a format adapted for human readability, and is also a valid markdown table

func WriteLogs

func WriteLogs(writer io.Writer, logs []*types.Log)

WriteLogs writes vm logs in a readable format to the given writer

func WriteTrace

func WriteTrace(writer io.Writer, logs []StructLog)

WriteTrace writes a formatted trace to the given writer

Types

type AccessListTracer

type AccessListTracer struct {
	// contains filtered or unexported fields
}

AccessListTracer is a tracer that accumulates touched accounts and storage slots into an internal set.

func NewAccessListTracer

func NewAccessListTracer(
	acl types.AccessList, from, to common.Address, precompiles []common.Address,
) *AccessListTracer

NewAccessListTracer creates a new tracer that can generate AccessLists. An optional AccessList can be specified to occupy slots and addresses in the resulting accesslist.

func (*AccessListTracer) AccessList

func (a *AccessListTracer) AccessList() types.AccessList

AccessList returns the current accesslist maintained by the tracer.

func (*AccessListTracer) Equal

func (a *AccessListTracer) Equal(other *AccessListTracer) bool

Equal returns if the content of two access list traces are equal.

func (*AccessListTracer) Hooks

func (a *AccessListTracer) Hooks() *tracing.Hooks

func (*AccessListTracer) OnOpcode

func (a *AccessListTracer) OnOpcode(
	pc uint64, opcode byte, gas, cost uint64, scope tracing.OpContext, rData []byte, depth int, err error,
)

OnOpcode captures all opcodes that touch storage or addresses and adds them to the accesslist.

type Config

type Config struct {
	EnableMemory     bool // enable memory capture
	DisableStack     bool // disable stack capture
	DisableStorage   bool // disable storage capture
	EnableReturnData bool // enable return data capture
	Debug            bool // print output during capture end
	Limit            int  // maximum length of output, but zero means unlimited
	// Chain overrides, can be used to execute a trace using future fork rules
	Overrides *params.ChainConfig `json:"overrides,omitempty"`
}

Config are the configuration options for structured logger the EVM

type ExecutionResult

type ExecutionResult struct {
	Gas         uint64         `json:"gas"`
	Failed      bool           `json:"failed"`
	ReturnValue string         `json:"returnValue"`
	StructLogs  []StructLogRes `json:"structLogs"`
}

ExecutionResult groups all structured logs emitted by the EVM while replaying a transaction in debug mode as well as transaction execution status, the amount of gas used and the return value

type Storage

type Storage map[common.Hash]common.Hash

Storage represents a contract's storage.

func (Storage) Copy

func (s Storage) Copy() Storage

Copy duplicates the current storage.

type StructLog

type StructLog struct {
	Pc            uint64                      `json:"pc"`
	Op            vm.OpCode                   `json:"op"`
	Gas           uint64                      `json:"gas"`
	GasCost       uint64                      `json:"gasCost"`
	Memory        []byte                      `json:"memory,omitempty"`
	MemorySize    int                         `json:"memSize"`
	Stack         []uint256.Int               `json:"stack"`
	ReturnData    []byte                      `json:"returnData,omitempty"`
	Storage       map[common.Hash]common.Hash `json:"-"`
	Depth         int                         `json:"depth"`
	RefundCounter uint64                      `json:"refund"`
	Err           error                       `json:"-"`
}

StructLog is emitted to the EVM each cycle and lists information about the current internal state prior to the execution of the statement.

func (*StructLog) ErrorString

func (s *StructLog) ErrorString() string

ErrorString formats the log's error as a string.

func (StructLog) MarshalJSON

func (s StructLog) MarshalJSON() ([]byte, error)

MarshalJSON marshals as JSON.

func (*StructLog) OpName

func (s *StructLog) OpName() string

OpName formats the operand name in a human-readable format.

func (*StructLog) UnmarshalJSON

func (s *StructLog) UnmarshalJSON(input []byte) error

UnmarshalJSON unmarshals from JSON.

type StructLogRes

type StructLogRes struct {
	Pc            uint64             `json:"pc"`
	Op            string             `json:"op"`
	Gas           uint64             `json:"gas"`
	GasCost       uint64             `json:"gasCost"`
	Depth         int                `json:"depth"`
	Error         string             `json:"error,omitempty"`
	Stack         *[]string          `json:"stack,omitempty"`
	ReturnData    string             `json:"returnData,omitempty"`
	Memory        *[]string          `json:"memory,omitempty"`
	Storage       *map[string]string `json:"storage,omitempty"`
	RefundCounter uint64             `json:"refund,omitempty"`
}

StructLogRes stores a structured log emitted by the EVM while replaying a transaction in debug mode

type StructLogger

type StructLogger struct {
	// contains filtered or unexported fields
}

StructLogger is an EVM state logger and implements EVMLogger.

StructLogger can capture state based on the given Log configuration and also keeps a track record of modified storage which is used in reporting snapshots of the contract their storage.

func NewStructLogger

func NewStructLogger(cfg *Config) *StructLogger

NewStructLogger returns a new logger

func (*StructLogger) Error

func (l *StructLogger) Error() error

Error returns the VM error captured by the trace.

func (*StructLogger) GetResult

func (l *StructLogger) GetResult() (json.RawMessage, error)

func (*StructLogger) Hooks

func (l *StructLogger) Hooks() *tracing.Hooks

func (*StructLogger) OnExit

func (l *StructLogger) OnExit(depth int, output []byte, gasUsed uint64, err error, reverted bool)

OnExit is called a call frame finishes processing.

func (*StructLogger) OnOpcode

func (l *StructLogger) OnOpcode(
	pc uint64, opcode byte, gas, cost uint64, scope tracing.OpContext, rData []byte, depth int, err error,
)

OnOpcode logs a new structured log message and pushes it out to the environment

OnOpcode also tracks SLOAD/SSTORE ops to track storage change.

func (*StructLogger) OnTxEnd

func (l *StructLogger) OnTxEnd(receipt *types.Receipt, err error)

func (*StructLogger) OnTxStart

func (l *StructLogger) OnTxStart(env *tracing.VMContext, tx *types.Transaction, from common.Address)

func (*StructLogger) Output

func (l *StructLogger) Output() []byte

Output returns the VM return value captured by the trace.

func (*StructLogger) Reset

func (l *StructLogger) Reset()

Reset clears the data held by the logger.

func (*StructLogger) Stop

func (l *StructLogger) Stop(err error)

Stop terminates execution of the tracer at the first opportune moment.

func (*StructLogger) StructLogs

func (l *StructLogger) StructLogs() []StructLog

StructLogs returns the captured log entries.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL