Skip to content

Commit ab1a404

Browse files
holiman0xTylerHolmess1na
authored
all: remove debug-field from vm config (ethereum#27048)
This PR removes the Debug field from vmconfig, making it so that if a tracer is set, debug=true is implied. --------- Co-authored-by: 0xTylerHolmes <tyler@ethereum.org> Co-authored-by: Sina Mahmoodi <1591639+s1na@users.noreply.github.com>
1 parent 0b76eb3 commit ab1a404

20 files changed

+32
-45
lines changed

cmd/evm/internal/t8ntool/execution.go

-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,6 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
174174
return nil, nil, err
175175
}
176176
vmConfig.Tracer = tracer
177-
vmConfig.Debug = (tracer != nil)
178177
statedb.SetTxContext(tx.Hash(), txIndex)
179178

180179
var (

cmd/evm/internal/t8ntool/transition.go

-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ func Transition(ctx *cli.Context) error {
180180

181181
vmConfig := vm.Config{
182182
Tracer: tracer,
183-
Debug: (tracer != nil),
184183
}
185184
// Construct the chainconfig
186185
var chainConfig *params.ChainConfig

cmd/evm/runner.go

-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,6 @@ func runCmd(ctx *cli.Context) error {
218218
BlockNumber: new(big.Int).SetUint64(genesisConfig.Number),
219219
EVMConfig: vm.Config{
220220
Tracer: tracer,
221-
Debug: ctx.Bool(DebugFlag.Name) || ctx.Bool(MachineFlag.Name),
222221
},
223222
}
224223

cmd/evm/staterunner.go

-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ func stateTestCmd(ctx *cli.Context) error {
9292
// Iterate over all the tests, run them and aggregate the results
9393
cfg := vm.Config{
9494
Tracer: tracer,
95-
Debug: ctx.Bool(DebugFlag.Name) || ctx.Bool(MachineFlag.Name),
9695
}
9796
results := make([]StatetestResult, 0, len(tests))
9897
for key, test := range tests {

core/blockchain.go

-1
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,6 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, genesis *Genesis
233233
if cacheConfig == nil {
234234
cacheConfig = defaultCacheConfig
235235
}
236-
237236
// Open trie database with provided config
238237
triedb := trie.NewDatabaseWithConfig(db, &trie.Config{
239238
Cache: cacheConfig.TrieCleanLimit,

core/blockchain_test.go

-2
Original file line numberDiff line numberDiff line change
@@ -3024,7 +3024,6 @@ func TestDeleteRecreateSlots(t *testing.T) {
30243024
})
30253025
// Import the canonical chain
30263026
chain, err := NewBlockChain(rawdb.NewMemoryDatabase(), nil, gspec, nil, engine, vm.Config{
3027-
Debug: true,
30283027
Tracer: logger.NewJSONLogger(nil, os.Stdout),
30293028
}, nil, nil)
30303029
if err != nil {
@@ -3102,7 +3101,6 @@ func TestDeleteRecreateAccount(t *testing.T) {
31023101
})
31033102
// Import the canonical chain
31043103
chain, err := NewBlockChain(rawdb.NewMemoryDatabase(), nil, gspec, nil, engine, vm.Config{
3105-
Debug: true,
31063104
Tracer: logger.NewJSONLogger(nil, os.Stdout),
31073105
}, nil, nil)
31083106
if err != nil {

core/state_transition.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -324,10 +324,10 @@ func (st *StateTransition) TransitionDb() (*ExecutionResult, error) {
324324
return nil, err
325325
}
326326

327-
if st.evm.Config.Debug {
328-
st.evm.Config.Tracer.CaptureTxStart(st.initialGas)
327+
if tracer := st.evm.Config.Tracer; tracer != nil {
328+
tracer.CaptureTxStart(st.initialGas)
329329
defer func() {
330-
st.evm.Config.Tracer.CaptureTxEnd(st.gasRemaining)
330+
tracer.CaptureTxEnd(st.gasRemaining)
331331
}()
332332
}
333333

core/vm/evm.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -182,11 +182,12 @@ func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas
182182
}
183183
snapshot := evm.StateDB.Snapshot()
184184
p, isPrecompile := evm.precompile(addr)
185+
debug := evm.Config.Tracer != nil
185186

186187
if !evm.StateDB.Exist(addr) {
187188
if !isPrecompile && evm.chainRules.IsEIP158 && value.Sign() == 0 {
188189
// Calling a non existing account, don't do anything, but ping the tracer
189-
if evm.Config.Debug {
190+
if debug {
190191
if evm.depth == 0 {
191192
evm.Config.Tracer.CaptureStart(evm, caller.Address(), addr, false, input, gas, value)
192193
evm.Config.Tracer.CaptureEnd(ret, 0, nil)
@@ -202,7 +203,7 @@ func (evm *EVM) Call(caller ContractRef, addr common.Address, input []byte, gas
202203
evm.Context.Transfer(evm.StateDB, caller.Address(), addr, value)
203204

204205
// Capture the tracer start/end events in debug mode
205-
if evm.Config.Debug {
206+
if debug {
206207
if evm.depth == 0 {
207208
evm.Config.Tracer.CaptureStart(evm, caller.Address(), addr, false, input, gas, value)
208209
defer func(startGas uint64) { // Lazy evaluation of the parameters
@@ -272,7 +273,7 @@ func (evm *EVM) CallCode(caller ContractRef, addr common.Address, input []byte,
272273
var snapshot = evm.StateDB.Snapshot()
273274

274275
// Invoke tracer hooks that signal entering/exiting a call frame
275-
if evm.Config.Debug {
276+
if evm.Config.Tracer != nil {
276277
evm.Config.Tracer.CaptureEnter(CALLCODE, caller.Address(), addr, input, gas, value)
277278
defer func(startGas uint64) {
278279
evm.Config.Tracer.CaptureExit(ret, startGas-gas, err)
@@ -313,7 +314,7 @@ func (evm *EVM) DelegateCall(caller ContractRef, addr common.Address, input []by
313314
var snapshot = evm.StateDB.Snapshot()
314315

315316
// Invoke tracer hooks that signal entering/exiting a call frame
316-
if evm.Config.Debug {
317+
if evm.Config.Tracer != nil {
317318
// NOTE: caller must, at all times be a contract. It should never happen
318319
// that caller is something other than a Contract.
319320
parent := caller.(*Contract)
@@ -367,7 +368,7 @@ func (evm *EVM) StaticCall(caller ContractRef, addr common.Address, input []byte
367368
evm.StateDB.AddBalance(addr, big0)
368369

369370
// Invoke tracer hooks that signal entering/exiting a call frame
370-
if evm.Config.Debug {
371+
if evm.Config.Tracer != nil {
371372
evm.Config.Tracer.CaptureEnter(STATICCALL, caller.Address(), addr, input, gas, nil)
372373
defer func(startGas uint64) {
373374
evm.Config.Tracer.CaptureExit(ret, startGas-gas, err)
@@ -450,7 +451,7 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64,
450451
contract := NewContract(caller, AccountRef(address), value, gas)
451452
contract.SetCodeOptionalHash(&address, codeAndHash)
452453

453-
if evm.Config.Debug {
454+
if evm.Config.Tracer != nil {
454455
if evm.depth == 0 {
455456
evm.Config.Tracer.CaptureStart(evm, caller.Address(), address, true, codeAndHash.code, gas, value)
456457
} else {
@@ -493,7 +494,7 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64,
493494
}
494495
}
495496

496-
if evm.Config.Debug {
497+
if evm.Config.Tracer != nil {
497498
if evm.depth == 0 {
498499
evm.Config.Tracer.CaptureEnd(ret, gas-contract.Gas, err)
499500
} else {

core/vm/instructions.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -822,9 +822,9 @@ func opSelfdestruct(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext
822822
balance := interpreter.evm.StateDB.GetBalance(scope.Contract.Address())
823823
interpreter.evm.StateDB.AddBalance(beneficiary.Bytes20(), balance)
824824
interpreter.evm.StateDB.Suicide(scope.Contract.Address())
825-
if interpreter.evm.Config.Debug {
826-
interpreter.evm.Config.Tracer.CaptureEnter(SELFDESTRUCT, scope.Contract.Address(), beneficiary.Bytes20(), []byte{}, 0, balance)
827-
interpreter.evm.Config.Tracer.CaptureExit([]byte{}, 0, nil)
825+
if tracer := interpreter.evm.Config.Tracer; tracer != nil {
826+
tracer.CaptureEnter(SELFDESTRUCT, scope.Contract.Address(), beneficiary.Bytes20(), []byte{}, 0, balance)
827+
tracer.CaptureExit([]byte{}, 0, nil)
828828
}
829829
return nil, errStopToken
830830
}

core/vm/interpreter.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525

2626
// Config are the configuration options for the Interpreter
2727
type Config struct {
28-
Debug bool // Enables debugging
2928
Tracer EVMLogger // Opcode logger
3029
NoBaseFee bool // Forces the EIP-1559 baseFee to 0 (needed for 0 price calls)
3130
EnablePreimageRecording bool // Enables recording of SHA3/keccak preimages
@@ -143,6 +142,7 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) (
143142
gasCopy uint64 // for EVMLogger to log gas remaining before execution
144143
logged bool // deferred EVMLogger should ignore already logged steps
145144
res []byte // result of the opcode execution function
145+
debug = in.evm.Config.Tracer != nil
146146
)
147147
// Don't move this deferred function, it's placed before the capturestate-deferred method,
148148
// so that it get's executed _after_: the capturestate needs the stacks before
@@ -152,7 +152,7 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) (
152152
}()
153153
contract.Input = input
154154

155-
if in.evm.Config.Debug {
155+
if debug {
156156
defer func() {
157157
if err != nil {
158158
if !logged {
@@ -168,7 +168,7 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) (
168168
// the execution of one of the operations or until the done flag is set by the
169169
// parent context.
170170
for {
171-
if in.evm.Config.Debug {
171+
if debug {
172172
// Capture pre-execution values for tracing.
173173
logged, pcCopy, gasCopy = false, pc, contract.Gas
174174
}
@@ -213,14 +213,14 @@ func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) (
213213
return nil, ErrOutOfGas
214214
}
215215
// Do tracing before memory expansion
216-
if in.evm.Config.Debug {
216+
if debug {
217217
in.evm.Config.Tracer.CaptureState(pc, op, gasCopy, cost, callContext, in.returnData, in.evm.depth, err)
218218
logged = true
219219
}
220220
if memorySize > 0 {
221221
mem.Resize(memorySize)
222222
}
223-
} else if in.evm.Config.Debug {
223+
} else if debug {
224224
in.evm.Config.Tracer.CaptureState(pc, op, gasCopy, cost, callContext, in.returnData, in.evm.depth, err)
225225
logged = true
226226
}

core/vm/runtime/runtime_test.go

-5
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,6 @@ func benchmarkNonModifyingCode(gas uint64, code []byte, name string, tracerCode
335335
b.Fatal(err)
336336
}
337337
cfg.EVMConfig = vm.Config{
338-
Debug: true,
339338
Tracer: tracer,
340339
}
341340
}
@@ -511,7 +510,6 @@ func TestEip2929Cases(t *testing.T) {
511510
code, ops)
512511
Execute(code, nil, &Config{
513512
EVMConfig: vm.Config{
514-
Debug: true,
515513
Tracer: logger.NewMarkdownLogger(nil, os.Stdout),
516514
ExtraEips: []int{2929},
517515
},
@@ -665,7 +663,6 @@ func TestColdAccountAccessCost(t *testing.T) {
665663
tracer := logger.NewStructLogger(nil)
666664
Execute(tc.code, nil, &Config{
667665
EVMConfig: vm.Config{
668-
Debug: true,
669666
Tracer: tracer,
670667
},
671668
})
@@ -837,7 +834,6 @@ func TestRuntimeJSTracer(t *testing.T) {
837834
GasLimit: 1000000,
838835
State: statedb,
839836
EVMConfig: vm.Config{
840-
Debug: true,
841837
Tracer: tracer,
842838
}})
843839
if err != nil {
@@ -872,7 +868,6 @@ func TestJSTracerCreateTx(t *testing.T) {
872868
_, _, _, err = Create(code, &Config{
873869
State: statedb,
874870
EVMConfig: vm.Config{
875-
Debug: true,
876871
Tracer: tracer,
877872
}})
878873
if err != nil {

eth/tracers/api.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -805,7 +805,6 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block
805805
// Swap out the noop logger to the standard tracer
806806
writer = bufio.NewWriter(dump)
807807
vmConf = vm.Config{
808-
Debug: true,
809808
Tracer: logger.NewJSONLogger(&logConfig, writer),
810809
EnablePreimageRecording: true,
811810
}
@@ -965,7 +964,7 @@ func (api *API) traceTx(ctx context.Context, message *core.Message, txctx *Conte
965964
return nil, err
966965
}
967966
}
968-
vmenv := vm.NewEVM(vmctx, txContext, statedb, api.backend.ChainConfig(), vm.Config{Debug: true, Tracer: tracer, NoBaseFee: true})
967+
vmenv := vm.NewEVM(vmctx, txContext, statedb, api.backend.ChainConfig(), vm.Config{Tracer: tracer, NoBaseFee: true})
969968

970969
// Define a meaningful timeout of a single transaction trace
971970
if config.Timeout != nil {

eth/tracers/internal/tracetest/calltrace_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ func testCallTracer(tracerName string, dirPath string, t *testing.T) {
143143
if err != nil {
144144
t.Fatalf("failed to create call tracer: %v", err)
145145
}
146-
evm := vm.NewEVM(context, txContext, statedb, test.Genesis.Config, vm.Config{Debug: true, Tracer: tracer})
146+
evm := vm.NewEVM(context, txContext, statedb, test.Genesis.Config, vm.Config{Tracer: tracer})
147147
msg, err := core.TransactionToMessage(tx, signer, nil)
148148
if err != nil {
149149
t.Fatalf("failed to prepare transaction for tracing: %v", err)
@@ -246,7 +246,7 @@ func benchTracer(tracerName string, test *callTracerTest, b *testing.B) {
246246
if err != nil {
247247
b.Fatalf("failed to create call tracer: %v", err)
248248
}
249-
evm := vm.NewEVM(context, txContext, statedb, test.Genesis.Config, vm.Config{Debug: true, Tracer: tracer})
249+
evm := vm.NewEVM(context, txContext, statedb, test.Genesis.Config, vm.Config{Tracer: tracer})
250250
snap := statedb.Snapshot()
251251
st := core.NewStateTransition(evm, msg, new(core.GasPool).AddGas(tx.Gas()))
252252
if _, err = st.TransitionDb(); err != nil {
@@ -352,7 +352,7 @@ func TestInternals(t *testing.T) {
352352
Balance: big.NewInt(500000000000000),
353353
},
354354
}, false)
355-
evm := vm.NewEVM(context, txContext, statedb, params.MainnetChainConfig, vm.Config{Debug: true, Tracer: tc.tracer})
355+
evm := vm.NewEVM(context, txContext, statedb, params.MainnetChainConfig, vm.Config{Tracer: tc.tracer})
356356
msg := &core.Message{
357357
To: &to,
358358
From: origin,

eth/tracers/internal/tracetest/flat_calltrace_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func flatCallTracerTestRunner(tracerName string, filename string, dirPath string
107107
if err != nil {
108108
return fmt.Errorf("failed to create call tracer: %v", err)
109109
}
110-
evm := vm.NewEVM(context, txContext, statedb, test.Genesis.Config, vm.Config{Debug: true, Tracer: tracer})
110+
evm := vm.NewEVM(context, txContext, statedb, test.Genesis.Config, vm.Config{Tracer: tracer})
111111

112112
msg, err := core.TransactionToMessage(tx, signer, nil)
113113
if err != nil {

eth/tracers/internal/tracetest/prestate_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func testPrestateDiffTracer(tracerName string, dirPath string, t *testing.T) {
114114
if err != nil {
115115
t.Fatalf("failed to create call tracer: %v", err)
116116
}
117-
evm := vm.NewEVM(context, txContext, statedb, test.Genesis.Config, vm.Config{Debug: true, Tracer: tracer})
117+
evm := vm.NewEVM(context, txContext, statedb, test.Genesis.Config, vm.Config{Tracer: tracer})
118118
msg, err := core.TransactionToMessage(tx, signer, nil)
119119
if err != nil {
120120
t.Fatalf("failed to prepare transaction for tracing: %v", err)

eth/tracers/js/tracer_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func testCtx() *vmContext {
6262

6363
func runTrace(tracer tracers.Tracer, vmctx *vmContext, chaincfg *params.ChainConfig, contractCode []byte) (json.RawMessage, error) {
6464
var (
65-
env = vm.NewEVM(vmctx.blockCtx, vmctx.txCtx, &dummyStatedb{}, chaincfg, vm.Config{Debug: true, Tracer: tracer})
65+
env = vm.NewEVM(vmctx.blockCtx, vmctx.txCtx, &dummyStatedb{}, chaincfg, vm.Config{Tracer: tracer})
6666
gasLimit uint64 = 31000
6767
startGas uint64 = 10000
6868
value = big.NewInt(0)
@@ -180,7 +180,7 @@ func TestHaltBetweenSteps(t *testing.T) {
180180
if err != nil {
181181
t.Fatal(err)
182182
}
183-
env := vm.NewEVM(vm.BlockContext{BlockNumber: big.NewInt(1)}, vm.TxContext{GasPrice: big.NewInt(1)}, &dummyStatedb{}, params.TestChainConfig, vm.Config{Debug: true, Tracer: tracer})
183+
env := vm.NewEVM(vm.BlockContext{BlockNumber: big.NewInt(1)}, vm.TxContext{GasPrice: big.NewInt(1)}, &dummyStatedb{}, params.TestChainConfig, vm.Config{Tracer: tracer})
184184
scope := &vm.ScopeContext{
185185
Contract: vm.NewContract(&account{}, &account{}, big.NewInt(0), 0),
186186
}
@@ -204,7 +204,7 @@ func TestNoStepExec(t *testing.T) {
204204
if err != nil {
205205
t.Fatal(err)
206206
}
207-
env := vm.NewEVM(vm.BlockContext{BlockNumber: big.NewInt(1)}, vm.TxContext{GasPrice: big.NewInt(100)}, &dummyStatedb{}, params.TestChainConfig, vm.Config{Debug: true, Tracer: tracer})
207+
env := vm.NewEVM(vm.BlockContext{BlockNumber: big.NewInt(1)}, vm.TxContext{GasPrice: big.NewInt(100)}, &dummyStatedb{}, params.TestChainConfig, vm.Config{Tracer: tracer})
208208
tracer.CaptureStart(env, common.Address{}, common.Address{}, false, []byte{}, 1000, big.NewInt(0))
209209
tracer.CaptureEnd(nil, 0, nil)
210210
ret, err := tracer.GetResult()

eth/tracers/logger/logger_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (*dummyStatedb) SetState(_ common.Address, _ common.Hash, _ common.Hash) {}
5555
func TestStoreCapture(t *testing.T) {
5656
var (
5757
logger = NewStructLogger(nil)
58-
env = vm.NewEVM(vm.BlockContext{}, vm.TxContext{}, &dummyStatedb{}, params.TestChainConfig, vm.Config{Debug: true, Tracer: logger})
58+
env = vm.NewEVM(vm.BlockContext{}, vm.TxContext{}, &dummyStatedb{}, params.TestChainConfig, vm.Config{Tracer: logger})
5959
contract = vm.NewContract(&dummyContractRef{}, &dummyContractRef{}, new(big.Int), 100000)
6060
)
6161
contract.Code = []byte{byte(vm.PUSH1), 0x1, byte(vm.PUSH1), 0x0, byte(vm.SSTORE)}

eth/tracers/tracers_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func BenchmarkTransactionTrace(b *testing.B) {
8787
//EnableMemory: false,
8888
//EnableReturnData: false,
8989
})
90-
evm := vm.NewEVM(context, txContext, statedb, params.AllEthashProtocolChanges, vm.Config{Debug: true, Tracer: tracer})
90+
evm := vm.NewEVM(context, txContext, statedb, params.AllEthashProtocolChanges, vm.Config{Tracer: tracer})
9191
msg, err := core.TransactionToMessage(tx, signer, nil)
9292
if err != nil {
9393
b.Fatalf("failed to prepare transaction for tracing: %v", err)

internal/ethapi/api.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1473,7 +1473,7 @@ func AccessList(ctx context.Context, b Backend, blockNrOrHash rpc.BlockNumberOrH
14731473

14741474
// Apply the transaction with the access list tracer
14751475
tracer := logger.NewAccessListTracer(accessList, args.from(), to, precompiles)
1476-
config := vm.Config{Tracer: tracer, Debug: true, NoBaseFee: true}
1476+
config := vm.Config{Tracer: tracer, NoBaseFee: true}
14771477
vmenv, _, err := b.GetEVM(ctx, msg, statedb, header, &config)
14781478
if err != nil {
14791479
return nil, 0, nil, err

tests/state_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,7 @@ func withTrace(t *testing.T, gasLimit uint64, test func(vm.Config) error) {
115115
}
116116
buf := new(bytes.Buffer)
117117
w := bufio.NewWriter(buf)
118-
tracer := logger.NewJSONLogger(&logger.Config{}, w)
119-
config.Debug, config.Tracer = true, tracer
118+
config.Tracer = logger.NewJSONLogger(&logger.Config{}, w)
120119
err2 := test(config)
121120
if !reflect.DeepEqual(err, err2) {
122121
t.Errorf("different error for second run: %v", err2)

0 commit comments

Comments
 (0)