Skip to content

Commit 2148546

Browse files
authoredNov 20, 2024
Block building fixes found for large deposit requests set (#12804)
- Add requests sidecar to Seal func - Additional logging for better debugging on live networks - Fix issue with requests in getPayload API
1 parent f475cc4 commit 2148546

File tree

5 files changed

+18
-3
lines changed

5 files changed

+18
-3
lines changed
 

‎consensus/merge/merge.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ func (s *Merge) verifyHeader(chain consensus.ChainHeaderReader, header, parent *
297297
func (s *Merge) Seal(chain consensus.ChainHeaderReader, blockWithReceipts *types.BlockWithReceipts, results chan<- *types.BlockWithReceipts, stop <-chan struct{}) error {
298298
block := blockWithReceipts.Block
299299
receipts := blockWithReceipts.Receipts
300+
requests := blockWithReceipts.Requests
300301
if !misc.IsPoSHeader(block.HeaderNoCopy()) {
301302
return s.eth1Engine.Seal(chain, blockWithReceipts, results, stop)
302303
}
@@ -305,7 +306,7 @@ func (s *Merge) Seal(chain consensus.ChainHeaderReader, blockWithReceipts *types
305306
header.Nonce = ProofOfStakeNonce
306307

307308
select {
308-
case results <- &types.BlockWithReceipts{Block: block.WithSeal(header), Receipts: receipts}:
309+
case results <- &types.BlockWithReceipts{Block: block.WithSeal(header), Receipts: receipts, Requests: requests}:
309310
default:
310311
log.Warn("Sealing result is not read", "sealhash", block.Hash())
311312
}

‎consensus/misc/eip6110.go

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
libcommon "github.com/ledgerwatch/erigon-lib/common"
2323
"github.com/ledgerwatch/erigon/accounts/abi"
2424
"github.com/ledgerwatch/erigon/core/types"
25+
"github.com/ledgerwatch/log/v3"
2526
)
2627

2728
const (
@@ -71,6 +72,9 @@ func unpackDepositLog(data []byte) ([]byte, error) {
7172
// ParseDepositLogs extracts the EIP-6110 deposit values from logs emitted by
7273
// BeaconDepositContract and returns a FlatRequest object ptr
7374
func ParseDepositLogs(logs []*types.Log, depositContractAddress libcommon.Address) (*types.FlatRequest, error) {
75+
if depositContractAddress == (libcommon.Address{}) {
76+
log.Warn("Error in ParseDepositLogs - depositContractAddress is 0x0")
77+
}
7478
reqData := make([]byte, 0, len(logs)*types.DepositRequestDataLen)
7579
for _, l := range logs {
7680
if l.Address == depositContractAddress {

‎turbo/builder/block_builder.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package builder
22

33
import (
4+
"fmt"
45
"sync"
56
"sync/atomic"
67
"time"
@@ -33,7 +34,11 @@ func NewBlockBuilder(build BlockBuilderFunc, param *core.BlockBuilderParameters)
3334
log.Warn("Failed to build a block", "err", err)
3435
} else {
3536
block := result.Block
36-
log.Info("Built block", "hash", block.Hash(), "height", block.NumberU64(), "txs", len(block.Transactions()), "gas used %", 100*float64(block.GasUsed())/float64(block.GasLimit()), "time", time.Since(t))
37+
reqLenStr := "nil"
38+
if len(result.Requests) == 3 {
39+
reqLenStr = fmt.Sprint("Deposit Requests", len(result.Requests[0].RequestData), "Withdrawal Requests", len(result.Requests[1].RequestData), "Consolidation Requests", len(result.Requests[2].RequestData))
40+
}
41+
log.Info("Built block", "hash", block.Hash(), "height", block.NumberU64(), "txs", len(block.Transactions()), "executionRequests", len(result.Requests), "Requests", reqLenStr, "gas used %", 100*float64(block.GasUsed())/float64(block.GasLimit()), "time", time.Since(t))
3742
}
3843

3944
builder.syncCond.L.Lock()

‎turbo/engineapi/engine_server.go

+3
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,9 @@ func (s *EngineServer) getPayload(ctx context.Context, payloadId uint64, version
462462
var executionRequests []hexutility.Bytes
463463
if version >= clparams.ElectraVersion {
464464
executionRequests = make([]hexutility.Bytes, len(types.KnownRequestTypes))
465+
if len(data.Requests.Requests) != 3 {
466+
s.logger.Warn("Error in getPayload - data.Requests.Requests len not 3")
467+
}
465468
for i := 0; i < len(types.KnownRequestTypes); i++ {
466469
if len(data.Requests.Requests) < i+1 || data.Requests.Requests[i] == nil {
467470
executionRequests[i] = make(hexutility.Bytes, 0)

‎turbo/execution/eth1/block_building.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,11 @@ func (e *EthereumExecutionModule) GetAssembledBlock(ctx context.Context, req *ex
204204
requests := make([][]byte, len(types.KnownRequestTypes))
205205
if len(blockWithReceipts.Requests) == len(types.KnownRequestTypes) {
206206
for i, r := range blockWithReceipts.Requests {
207-
requests[i] = r.RequestData
207+
requests[i] = make([]byte, 0)
208+
requests[i] = append(requests[i], r.RequestData...)
208209
}
209210
} else {
211+
e.logger.Error("Requests len SHOULD BE", "equal to", len(types.KnownRequestTypes), "got", len(blockWithReceipts.Requests))
210212
for i := 0; i < len(types.KnownRequestTypes); i++ {
211213
requests[i] = make([]byte, 0)
212214
}

0 commit comments

Comments
 (0)