eth/tracers: make txhash blockhash accessible to native tracers (#24679)

This commit is contained in:
Sina Mahmoodi 2022-04-12 21:09:27 +02:00 committed by GitHub
parent d4d288e3f1
commit 9c82c646e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 12 additions and 9 deletions

View File

@ -55,7 +55,7 @@ type fourByteTracer struct {
// newFourByteTracer returns a native go tracer which collects // newFourByteTracer returns a native go tracer which collects
// 4 byte-identifiers of a tx, and implements vm.EVMLogger. // 4 byte-identifiers of a tx, and implements vm.EVMLogger.
func newFourByteTracer() tracers.Tracer { func newFourByteTracer(ctx *tracers.Context) tracers.Tracer {
t := &fourByteTracer{ t := &fourByteTracer{
ids: make(map[string]int), ids: make(map[string]int),
} }

View File

@ -56,7 +56,7 @@ type callTracer struct {
// newCallTracer returns a native go tracer which tracks // newCallTracer returns a native go tracer which tracks
// call frames of a tx, and implements vm.EVMLogger. // call frames of a tx, and implements vm.EVMLogger.
func newCallTracer() tracers.Tracer { func newCallTracer(ctx *tracers.Context) tracers.Tracer {
// First callframe contains tx context info // First callframe contains tx context info
// and is populated on start and end. // and is populated on start and end.
return &callTracer{callstack: make([]callFrame, 1)} return &callTracer{callstack: make([]callFrame, 1)}

View File

@ -35,7 +35,7 @@ func init() {
type noopTracer struct{} type noopTracer struct{}
// newNoopTracer returns a new noop tracer. // newNoopTracer returns a new noop tracer.
func newNoopTracer() tracers.Tracer { func newNoopTracer(ctx *tracers.Context) tracers.Tracer {
return &noopTracer{} return &noopTracer{}
} }

View File

@ -51,7 +51,7 @@ type prestateTracer struct {
reason error // Textual reason for the interruption reason error // Textual reason for the interruption
} }
func newPrestateTracer() tracers.Tracer { func newPrestateTracer(ctx *tracers.Context) tracers.Tracer {
// First callframe contains tx context info // First callframe contains tx context info
// and is populated on start and end. // and is populated on start and end.
return &prestateTracer{prestate: prestate{}} return &prestateTracer{prestate: prestate{}}

View File

@ -45,6 +45,9 @@ func init() {
tracers.RegisterLookup(false, lookup) tracers.RegisterLookup(false, lookup)
} }
// ctorFn is the constructor signature of a native tracer.
type ctorFn = func(*tracers.Context) tracers.Tracer
/* /*
ctors is a map of package-local tracer constructors. ctors is a map of package-local tracer constructors.
@ -57,12 +60,12 @@ The go spec (https://golang.org/ref/spec#Package_initialization) says
Hence, we cannot make the map in init, but must make it upon first use. Hence, we cannot make the map in init, but must make it upon first use.
*/ */
var ctors map[string]func() tracers.Tracer var ctors map[string]ctorFn
// register is used by native tracers to register their presence. // register is used by native tracers to register their presence.
func register(name string, ctor func() tracers.Tracer) { func register(name string, ctor ctorFn) {
if ctors == nil { if ctors == nil {
ctors = make(map[string]func() tracers.Tracer) ctors = make(map[string]ctorFn)
} }
ctors[name] = ctor ctors[name] = ctor
} }
@ -70,10 +73,10 @@ func register(name string, ctor func() tracers.Tracer) {
// lookup returns a tracer, if one can be matched to the given name. // lookup returns a tracer, if one can be matched to the given name.
func lookup(name string, ctx *tracers.Context) (tracers.Tracer, error) { func lookup(name string, ctx *tracers.Context) (tracers.Tracer, error) {
if ctors == nil { if ctors == nil {
ctors = make(map[string]func() tracers.Tracer) ctors = make(map[string]ctorFn)
} }
if ctor, ok := ctors[name]; ok { if ctor, ok := ctors[name]; ok {
return ctor(), nil return ctor(ctx), nil
} }
return nil, errors.New("no tracer found") return nil, errors.New("no tracer found")
} }