Skip to content

Commit 64f0142

Browse files
Gabriel-TrintinaliaRampex1
authored andcommitted
core: fail execution if system call fails to execute (ethereum#31639)
see: ethereum/pm#1450 (comment)
1 parent 3e81c17 commit 64f0142

File tree

5 files changed

+41
-18
lines changed

5 files changed

+41
-18
lines changed

cmd/evm/internal/t8ntool/execution.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,9 +363,13 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
363363
return nil, nil, nil, NewError(ErrorEVM, fmt.Errorf("could not parse requests logs: %v", err))
364364
}
365365
// EIP-7002
366-
core.ProcessWithdrawalQueue(&requests, evm)
366+
if err := core.ProcessWithdrawalQueue(&requests, evm); err != nil {
367+
return nil, nil, nil, NewError(ErrorEVM, fmt.Errorf("could not process withdrawal requests: %v", err))
368+
}
367369
// EIP-7251
368-
core.ProcessConsolidationQueue(&requests, evm)
370+
if err := core.ProcessConsolidationQueue(&requests, evm); err != nil {
371+
return nil, nil, nil, NewError(ErrorEVM, fmt.Errorf("could not process consolidation requests: %v", err))
372+
}
369373
}
370374

371375
// Commit block

core/chain_makers.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,9 +328,13 @@ func (b *BlockGen) collectRequests(readonly bool) (requests [][]byte) {
328328
blockContext := NewEVMBlockContext(b.header, b.cm, &b.header.Coinbase)
329329
evm := vm.NewEVM(blockContext, statedb, b.cm.config, vm.Config{})
330330
// EIP-7002
331-
ProcessWithdrawalQueue(&requests, evm)
331+
if err := ProcessWithdrawalQueue(&requests, evm); err != nil {
332+
panic(fmt.Sprintf("could not process withdrawal requests: %v", err))
333+
}
332334
// EIP-7251
333-
ProcessConsolidationQueue(&requests, evm)
335+
if err := ProcessConsolidationQueue(&requests, evm); err != nil {
336+
panic(fmt.Sprintf("could not process consolidation requests: %v", err))
337+
}
334338
}
335339
return requests
336340
}

core/state_processor.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,13 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
113113
return nil, err
114114
}
115115
// EIP-7002
116-
ProcessWithdrawalQueue(&requests, evm)
116+
if err := ProcessWithdrawalQueue(&requests, evm); err != nil {
117+
return nil, err
118+
}
117119
// EIP-7251
118-
ProcessConsolidationQueue(&requests, evm)
120+
if err := ProcessConsolidationQueue(&requests, evm); err != nil {
121+
return nil, err
122+
}
119123
}
120124

121125
// Finalize the block, applying any consensus engine specific extras (e.g. block rewards)
@@ -265,17 +269,17 @@ func ProcessParentBlockHash(prevHash common.Hash, evm *vm.EVM) {
265269

266270
// ProcessWithdrawalQueue calls the EIP-7002 withdrawal queue contract.
267271
// It returns the opaque request data returned by the contract.
268-
func ProcessWithdrawalQueue(requests *[][]byte, evm *vm.EVM) {
269-
processRequestsSystemCall(requests, evm, 0x01, params.WithdrawalQueueAddress)
272+
func ProcessWithdrawalQueue(requests *[][]byte, evm *vm.EVM) error {
273+
return processRequestsSystemCall(requests, evm, 0x01, params.WithdrawalQueueAddress)
270274
}
271275

272276
// ProcessConsolidationQueue calls the EIP-7251 consolidation queue contract.
273277
// It returns the opaque request data returned by the contract.
274-
func ProcessConsolidationQueue(requests *[][]byte, evm *vm.EVM) {
275-
processRequestsSystemCall(requests, evm, 0x02, params.ConsolidationQueueAddress)
278+
func ProcessConsolidationQueue(requests *[][]byte, evm *vm.EVM) error {
279+
return processRequestsSystemCall(requests, evm, 0x02, params.ConsolidationQueueAddress)
276280
}
277281

278-
func processRequestsSystemCall(requests *[][]byte, evm *vm.EVM, requestType byte, addr common.Address) {
282+
func processRequestsSystemCall(requests *[][]byte, evm *vm.EVM, requestType byte, addr common.Address) error {
279283
if tracer := evm.Config.Tracer; tracer != nil {
280284
onSystemCallStart(tracer, evm.GetVMContext())
281285
if tracer.OnSystemCallEnd != nil {
@@ -292,17 +296,20 @@ func processRequestsSystemCall(requests *[][]byte, evm *vm.EVM, requestType byte
292296
}
293297
evm.SetTxContext(NewEVMTxContext(msg))
294298
evm.StateDB.AddAddressToAccessList(addr)
295-
ret, _, _ := evm.Call(msg.From, *msg.To, msg.Data, 30_000_000, common.U2560)
299+
ret, _, err := evm.Call(msg.From, *msg.To, msg.Data, 30_000_000, common.U2560)
296300
evm.StateDB.Finalise(true)
301+
if err != nil {
302+
return fmt.Errorf("system call failed to execute: %v", err)
303+
}
297304
if len(ret) == 0 {
298-
return // skip empty output
305+
return nil // skip empty output
299306
}
300-
301307
// Append prefixed requestsData to the requests list.
302308
requestsData := make([]byte, len(ret)+1)
303309
requestsData[0] = requestType
304310
copy(requestsData[1:], ret)
305311
*requests = append(*requests, requestsData)
312+
return nil
306313
}
307314

308315
var depositTopic = common.HexToHash("0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5")

internal/ethapi/simulate.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,9 +314,13 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header,
314314
return nil, nil, err
315315
}
316316
// EIP-7002
317-
core.ProcessWithdrawalQueue(&requests, evm)
317+
if err := core.ProcessWithdrawalQueue(&requests, evm); err != nil {
318+
return nil, nil, err
319+
}
318320
// EIP-7251
319-
core.ProcessConsolidationQueue(&requests, evm)
321+
if err := core.ProcessConsolidationQueue(&requests, evm); err != nil {
322+
return nil, nil, err
323+
}
320324
}
321325
if requests != nil {
322326
reqHash := types.CalcRequestsHash(requests)

miner/worker.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,13 @@ func (miner *Miner) generateWork(params *generateParams, witness bool) *newPaylo
127127
return &newPayloadResult{err: err}
128128
}
129129
// EIP-7002
130-
core.ProcessWithdrawalQueue(&requests, work.evm)
130+
if err := core.ProcessWithdrawalQueue(&requests, work.evm); err != nil {
131+
return &newPayloadResult{err: err}
132+
}
131133
// EIP-7251 consolidations
132-
core.ProcessConsolidationQueue(&requests, work.evm)
134+
if err := core.ProcessConsolidationQueue(&requests, work.evm); err != nil {
135+
return &newPayloadResult{err: err}
136+
}
133137
}
134138
if requests != nil {
135139
reqHash := types.CalcRequestsHash(requests)

0 commit comments

Comments
 (0)