@@ -28,6 +28,7 @@ import (
28
28
"github.com/ethereum/go-ethereum/core/types"
29
29
"github.com/ethereum/go-ethereum/eth/tracers"
30
30
"github.com/ethereum/go-ethereum/eth/tracers/internal"
31
+ "github.com/ethereum/go-ethereum/params"
31
32
"github.com/holiman/uint256"
32
33
33
34
"github.com/ethereum/go-ethereum/common"
@@ -46,10 +47,10 @@ func init() {
46
47
if err != nil {
47
48
panic (err )
48
49
}
49
- type ctorFn = func (* tracers.Context , json.RawMessage ) (* tracers.Tracer , error )
50
+ type ctorFn = func (* tracers.Context , json.RawMessage , * params. ChainConfig ) (* tracers.Tracer , error )
50
51
lookup := func (code string ) ctorFn {
51
- return func (ctx * tracers.Context , cfg json.RawMessage ) (* tracers.Tracer , error ) {
52
- return newJsTracer (code , ctx , cfg )
52
+ return func (ctx * tracers.Context , cfg json.RawMessage , chainConfig * params. ChainConfig ) (* tracers.Tracer , error ) {
53
+ return newJsTracer (code , ctx , cfg , chainConfig )
53
54
}
54
55
}
55
56
for name , code := range assetTracers {
@@ -102,6 +103,7 @@ func fromBuf(vm *goja.Runtime, bufType goja.Value, buf goja.Value, allowString b
102
103
type jsTracer struct {
103
104
vm * goja.Runtime
104
105
env * tracing.VMContext
106
+ chainConfig * params.ChainConfig
105
107
toBig toBigFn // Converts a hex string into a JS bigint
106
108
toBuf toBufFn // Converts a []byte into a JS buffer
107
109
fromBuf fromBufFn // Converts an array, hex string or Uint8Array to a []byte
@@ -138,13 +140,14 @@ type jsTracer struct {
138
140
// The methods `result` and `fault` are required to be present.
139
141
// The methods `step`, `enter`, and `exit` are optional, but note that
140
142
// `enter` and `exit` always go together.
141
- func newJsTracer (code string , ctx * tracers.Context , cfg json.RawMessage ) (* tracers.Tracer , error ) {
143
+ func newJsTracer (code string , ctx * tracers.Context , cfg json.RawMessage , chainConfig * params. ChainConfig ) (* tracers.Tracer , error ) {
142
144
vm := goja .New ()
143
145
// By default field names are exported to JS as is, i.e. capitalized.
144
146
vm .SetFieldNameMapper (goja .UncapFieldNameMapper ())
145
147
t := & jsTracer {
146
- vm : vm ,
147
- ctx : make (map [string ]goja.Value ),
148
+ vm : vm ,
149
+ ctx : make (map [string ]goja.Value ),
150
+ chainConfig : chainConfig ,
148
151
}
149
152
if ctx == nil {
150
153
ctx = new (tracers.Context )
@@ -234,7 +237,7 @@ func (t *jsTracer) OnTxStart(env *tracing.VMContext, tx *types.Transaction, from
234
237
db := & dbObj {db : env .StateDB , vm : t .vm , toBig : t .toBig , toBuf : t .toBuf , fromBuf : t .fromBuf }
235
238
t .dbValue = db .setupObject ()
236
239
// Update list of precompiles based on current block
237
- rules := env . ChainConfig .Rules (env .BlockNumber , env .Random != nil , env .Time )
240
+ rules := t . chainConfig .Rules (env .BlockNumber , env .Random != nil , env .Time )
238
241
t .activePrecompiles = vm .ActivePrecompiles (rules )
239
242
t .ctx ["block" ] = t .vm .ToValue (t .env .BlockNumber .Uint64 ())
240
243
t .ctx ["gas" ] = t .vm .ToValue (tx .Gas ())
0 commit comments