@@ -106,18 +106,15 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg
106106 // Read requests if Prague is enabled.
107107 var requests [][]byte
108108 if p .config .IsPrague (block .Number (), block .Time ()) {
109- // EIP-6110 deposits
110- depositRequests , err := ParseDepositLogs ( allLogs , p . config )
111- if err != nil {
109+ requests = [][] byte {}
110+ // EIP-6110
111+ if err := ParseDepositLogs ( & requests , allLogs , p . config ); err != nil {
112112 return nil , err
113113 }
114- requests = append (requests , depositRequests )
115- // EIP-7002 withdrawals
116- withdrawalRequests := ProcessWithdrawalQueue (evm )
117- requests = append (requests , withdrawalRequests )
118- // EIP-7251 consolidations
119- consolidationRequests := ProcessConsolidationQueue (evm )
120- requests = append (requests , consolidationRequests )
114+ // EIP-7002
115+ ProcessWithdrawalQueue (& requests , evm )
116+ // EIP-7251
117+ ProcessConsolidationQueue (& requests , evm )
121118 }
122119
123120 // Finalize the block, applying any consensus engine specific extras (e.g. block rewards)
@@ -298,17 +295,17 @@ func ProcessParentBlockHash(prevHash common.Hash, evm *vm.EVM) {
298295
299296// ProcessWithdrawalQueue calls the EIP-7002 withdrawal queue contract.
300297// It returns the opaque request data returned by the contract.
301- func ProcessWithdrawalQueue (evm * vm.EVM ) [] byte {
302- return processRequestsSystemCall (evm , 0x01 , params .WithdrawalQueueAddress )
298+ func ProcessWithdrawalQueue (requests * [][] byte , evm * vm.EVM ) {
299+ processRequestsSystemCall (requests , evm , 0x01 , params .WithdrawalQueueAddress )
303300}
304301
305302// ProcessConsolidationQueue calls the EIP-7251 consolidation queue contract.
306303// It returns the opaque request data returned by the contract.
307- func ProcessConsolidationQueue (evm * vm.EVM ) [] byte {
308- return processRequestsSystemCall (evm , 0x02 , params .ConsolidationQueueAddress )
304+ func ProcessConsolidationQueue (requests * [][] byte , evm * vm.EVM ) {
305+ processRequestsSystemCall (requests , evm , 0x02 , params .ConsolidationQueueAddress )
309306}
310307
311- func processRequestsSystemCall (evm * vm.EVM , requestType byte , addr common.Address ) [] byte {
308+ func processRequestsSystemCall (requests * [][] byte , evm * vm.EVM , requestType byte , addr common.Address ) {
312309 if tracer := evm .Config .Tracer ; tracer != nil {
313310 if tracer .OnSystemCallStart != nil {
314311 tracer .OnSystemCallStart ()
@@ -329,26 +326,32 @@ func processRequestsSystemCall(evm *vm.EVM, requestType byte, addr common.Addres
329326 evm .StateDB .AddAddressToAccessList (addr )
330327 ret , _ , _ := evm .Call (vm .AccountRef (msg .From ), * msg .To , msg .Data , 30_000_000 , common .U2560 )
331328 evm .StateDB .Finalise (true )
329+ if len (ret ) == 0 {
330+ return // skip empty output
331+ }
332332
333- // Create withdrawals requestsData with prefix 0x01
333+ // Append prefixed requestsData to the requests list.
334334 requestsData := make ([]byte , len (ret )+ 1 )
335335 requestsData [0 ] = requestType
336336 copy (requestsData [1 :], ret )
337- return requestsData
337+ * requests = append ( * requests , requestsData )
338338}
339339
340340// ParseDepositLogs extracts the EIP-6110 deposit values from logs emitted by
341341// BeaconDepositContract.
342- func ParseDepositLogs (logs []* types.Log , config * params.ChainConfig ) ([] byte , error ) {
342+ func ParseDepositLogs (requests * [][] byte , logs []* types.Log , config * params.ChainConfig ) error {
343343 deposits := make ([]byte , 1 ) // note: first byte is 0x00 (== deposit request type)
344344 for _ , log := range logs {
345345 if log .Address == config .DepositContractAddress {
346346 request , err := types .DepositLogToRequest (log .Data )
347347 if err != nil {
348- return nil , fmt .Errorf ("unable to parse deposit data: %v" , err )
348+ return fmt .Errorf ("unable to parse deposit data: %v" , err )
349349 }
350350 deposits = append (deposits , request ... )
351351 }
352352 }
353- return deposits , nil
353+ if len (deposits ) > 1 {
354+ * requests = append (* requests , deposits )
355+ }
356+ return nil
354357}
0 commit comments