Skip to content

Commit dd6f692

Browse files
committed
Merge branch 'master' into engine-otel-tracing
2 parents ec5f992 + 550ca91 commit dd6f692

29 files changed

+1214
-609
lines changed

cmd/devp2p/internal/ethtest/protocol.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,3 @@ func protoOffset(proto Proto) uint64 {
8686
panic("unhandled protocol")
8787
}
8888
}
89-
90-
// msgTypePtr is the constraint for protocol message types.
91-
type msgTypePtr[U any] interface {
92-
*U
93-
Kind() byte
94-
}

cmd/devp2p/internal/ethtest/snap.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"github.com/ethereum/go-ethereum/crypto"
3131
"github.com/ethereum/go-ethereum/eth/protocols/snap"
3232
"github.com/ethereum/go-ethereum/internal/utesting"
33+
"github.com/ethereum/go-ethereum/rlp"
3334
"github.com/ethereum/go-ethereum/trie"
3435
"github.com/ethereum/go-ethereum/trie/trienode"
3536
)
@@ -937,10 +938,14 @@ func (s *Suite) snapGetTrieNodes(t *utesting.T, tc *trieNodesTest) error {
937938
}
938939

939940
// write0 request
941+
paths, err := rlp.EncodeToRawList(tc.paths)
942+
if err != nil {
943+
panic(err)
944+
}
940945
req := &snap.GetTrieNodesPacket{
941946
ID: uint64(rand.Int63()),
942947
Root: tc.root,
943-
Paths: tc.paths,
948+
Paths: paths,
944949
Bytes: tc.nBytes,
945950
}
946951
msg, err := conn.snapRequest(snap.GetTrieNodesMsg, req)

cmd/devp2p/internal/ethtest/suite.go

Lines changed: 56 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"github.com/ethereum/go-ethereum/internal/utesting"
3535
"github.com/ethereum/go-ethereum/p2p"
3636
"github.com/ethereum/go-ethereum/p2p/enode"
37+
"github.com/ethereum/go-ethereum/rlp"
3738
"github.com/holiman/uint256"
3839
)
3940

@@ -151,7 +152,11 @@ func (s *Suite) TestGetBlockHeaders(t *utesting.T) {
151152
if err != nil {
152153
t.Fatalf("failed to get headers for given request: %v", err)
153154
}
154-
if !headersMatch(expected, headers.BlockHeadersRequest) {
155+
received, err := headers.List.Items()
156+
if err != nil {
157+
t.Fatalf("invalid headers received: %v", err)
158+
}
159+
if !headersMatch(expected, received) {
155160
t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers)
156161
}
157162
}
@@ -237,7 +242,7 @@ concurrently, with different request IDs.`)
237242

238243
// Wait for responses.
239244
// Note they can arrive in either order.
240-
resp, err := collectResponses(conn, 2, func(msg *eth.BlockHeadersPacket) uint64 {
245+
resp, err := collectHeaderResponses(conn, 2, func(msg *eth.BlockHeadersPacket) uint64 {
241246
if msg.RequestId != 111 && msg.RequestId != 222 {
242247
t.Fatalf("response with unknown request ID: %v", msg.RequestId)
243248
}
@@ -248,17 +253,11 @@ concurrently, with different request IDs.`)
248253
}
249254

250255
// Check if headers match.
251-
resp1 := resp[111]
252-
if expected, err := s.chain.GetHeaders(req1); err != nil {
253-
t.Fatalf("failed to get expected headers for request 1: %v", err)
254-
} else if !headersMatch(expected, resp1.BlockHeadersRequest) {
255-
t.Fatalf("header mismatch for request ID %v: \nexpected %v \ngot %v", 111, expected, resp1)
256-
}
257-
resp2 := resp[222]
258-
if expected, err := s.chain.GetHeaders(req2); err != nil {
259-
t.Fatalf("failed to get expected headers for request 2: %v", err)
260-
} else if !headersMatch(expected, resp2.BlockHeadersRequest) {
261-
t.Fatalf("header mismatch for request ID %v: \nexpected %v \ngot %v", 222, expected, resp2)
256+
if err := s.checkHeadersAgainstChain(req1, resp[111]); err != nil {
257+
t.Fatal(err)
258+
}
259+
if err := s.checkHeadersAgainstChain(req2, resp[222]); err != nil {
260+
t.Fatal(err)
262261
}
263262
}
264263

@@ -303,8 +302,8 @@ same request ID. The node should handle the request by responding to both reques
303302

304303
// Wait for the responses. They can arrive in either order, and we can't tell them
305304
// apart by their request ID, so use the number of headers instead.
306-
resp, err := collectResponses(conn, 2, func(msg *eth.BlockHeadersPacket) uint64 {
307-
id := uint64(len(msg.BlockHeadersRequest))
305+
resp, err := collectHeaderResponses(conn, 2, func(msg *eth.BlockHeadersPacket) uint64 {
306+
id := uint64(msg.List.Len())
308307
if id != 2 && id != 3 {
309308
t.Fatalf("invalid number of headers in response: %d", id)
310309
}
@@ -315,26 +314,35 @@ same request ID. The node should handle the request by responding to both reques
315314
}
316315

317316
// Check if headers match.
318-
resp1 := resp[2]
319-
if expected, err := s.chain.GetHeaders(request1); err != nil {
320-
t.Fatalf("failed to get expected headers for request 1: %v", err)
321-
} else if !headersMatch(expected, resp1.BlockHeadersRequest) {
322-
t.Fatalf("headers mismatch: \nexpected %v \ngot %v", expected, resp1)
323-
}
324-
resp2 := resp[3]
325-
if expected, err := s.chain.GetHeaders(request2); err != nil {
326-
t.Fatalf("failed to get expected headers for request 2: %v", err)
327-
} else if !headersMatch(expected, resp2.BlockHeadersRequest) {
328-
t.Fatalf("headers mismatch: \nexpected %v \ngot %v", expected, resp2)
317+
if err := s.checkHeadersAgainstChain(request1, resp[2]); err != nil {
318+
t.Fatal(err)
319+
}
320+
if err := s.checkHeadersAgainstChain(request2, resp[3]); err != nil {
321+
t.Fatal(err)
322+
}
323+
}
324+
325+
func (s *Suite) checkHeadersAgainstChain(req *eth.GetBlockHeadersPacket, resp *eth.BlockHeadersPacket) error {
326+
received2, err := resp.List.Items()
327+
if err != nil {
328+
return fmt.Errorf("invalid headers in response with request ID %v (%d items): %v", resp.RequestId, resp.List.Len(), err)
329+
}
330+
if expected, err := s.chain.GetHeaders(req); err != nil {
331+
return fmt.Errorf("test chain failed to get expected headers for request: %v", err)
332+
} else if !headersMatch(expected, received2) {
333+
return fmt.Errorf("header mismatch for request ID %v (%d items): \nexpected %v \ngot %v", resp.RequestId, resp.List.Len(), expected, resp)
329334
}
335+
return nil
330336
}
331337

332338
// collectResponses waits for n messages of type T on the given connection.
333339
// The messsages are collected according to the 'identity' function.
334-
func collectResponses[T any, P msgTypePtr[T]](conn *Conn, n int, identity func(P) uint64) (map[uint64]P, error) {
335-
resp := make(map[uint64]P, n)
340+
//
341+
// This function is written in a generic way to handle
342+
func collectHeaderResponses(conn *Conn, n int, identity func(*eth.BlockHeadersPacket) uint64) (map[uint64]*eth.BlockHeadersPacket, error) {
343+
resp := make(map[uint64]*eth.BlockHeadersPacket, n)
336344
for range n {
337-
r := new(T)
345+
r := new(eth.BlockHeadersPacket)
338346
if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, r); err != nil {
339347
return resp, fmt.Errorf("read error: %v", err)
340348
}
@@ -373,10 +381,8 @@ and expects a response.`)
373381
if got, want := headers.RequestId, req.RequestId; got != want {
374382
t.Fatalf("unexpected request id")
375383
}
376-
if expected, err := s.chain.GetHeaders(req); err != nil {
377-
t.Fatalf("failed to get expected block headers: %v", err)
378-
} else if !headersMatch(expected, headers.BlockHeadersRequest) {
379-
t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers)
384+
if err := s.checkHeadersAgainstChain(req, headers); err != nil {
385+
t.Fatal(err)
380386
}
381387
}
382388

@@ -407,9 +413,8 @@ func (s *Suite) TestGetBlockBodies(t *utesting.T) {
407413
if got, want := resp.RequestId, req.RequestId; got != want {
408414
t.Fatalf("unexpected request id in respond", got, want)
409415
}
410-
bodies := resp.BlockBodiesResponse
411-
if len(bodies) != len(req.GetBlockBodiesRequest) {
412-
t.Fatalf("wrong bodies in response: expected %d bodies, got %d", len(req.GetBlockBodiesRequest), len(bodies))
416+
if resp.List.Len() != len(req.GetBlockBodiesRequest) {
417+
t.Fatalf("wrong bodies in response: expected %d bodies, got %d", len(req.GetBlockBodiesRequest), resp.List.Len())
413418
}
414419
}
415420

@@ -433,7 +438,7 @@ func (s *Suite) TestGetReceipts(t *utesting.T) {
433438
}
434439
}
435440

436-
// Create block bodies request.
441+
// Create receipts request.
437442
req := &eth.GetReceiptsPacket{
438443
RequestId: 66,
439444
GetReceiptsRequest: (eth.GetReceiptsRequest)(hashes),
@@ -449,8 +454,8 @@ func (s *Suite) TestGetReceipts(t *utesting.T) {
449454
if got, want := resp.RequestId, req.RequestId; got != want {
450455
t.Fatalf("unexpected request id in respond", got, want)
451456
}
452-
if len(resp.List) != len(req.GetReceiptsRequest) {
453-
t.Fatalf("wrong bodies in response: expected %d bodies, got %d", len(req.GetReceiptsRequest), len(resp.List))
457+
if resp.List.Len() != len(req.GetReceiptsRequest) {
458+
t.Fatalf("wrong receipts in response: expected %d receipts, got %d", len(req.GetReceiptsRequest), resp.List.Len())
454459
}
455460
}
456461

@@ -804,7 +809,11 @@ on another peer connection using GetPooledTransactions.`)
804809
if got, want := msg.RequestId, req.RequestId; got != want {
805810
t.Fatalf("unexpected request id in response: got %d, want %d", got, want)
806811
}
807-
for _, got := range msg.PooledTransactionsResponse {
812+
responseTxs, err := msg.List.Items()
813+
if err != nil {
814+
t.Fatalf("invalid transactions in response: %v", err)
815+
}
816+
for _, got := range responseTxs {
808817
if _, exists := set[got.Hash()]; !exists {
809818
t.Fatalf("unexpected tx received: %v", got.Hash())
810819
}
@@ -976,7 +985,9 @@ func (s *Suite) TestBlobViolations(t *utesting.T) {
976985
if err := conn.ReadMsg(ethProto, eth.GetPooledTransactionsMsg, req); err != nil {
977986
t.Fatalf("reading pooled tx request failed: %v", err)
978987
}
979-
resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, PooledTransactionsResponse: test.resp}
988+
989+
encTxs, _ := rlp.EncodeToRawList(test.resp)
990+
resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, List: encTxs}
980991
if err := conn.Write(ethProto, eth.PooledTransactionsMsg, resp); err != nil {
981992
t.Fatalf("writing pooled tx response failed: %v", err)
982993
}
@@ -1104,7 +1115,8 @@ func (s *Suite) testBadBlobTx(t *utesting.T, tx *types.Transaction, badTx *types
11041115
// the good peer is connected, and has announced the tx.
11051116
// proceed to send the incorrect one from the bad peer.
11061117

1107-
resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, PooledTransactionsResponse: eth.PooledTransactionsResponse(types.Transactions{badTx})}
1118+
encTxs, _ := rlp.EncodeToRawList([]*types.Transaction{badTx})
1119+
resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, List: encTxs}
11081120
if err := conn.Write(ethProto, eth.PooledTransactionsMsg, resp); err != nil {
11091121
errc <- fmt.Errorf("writing pooled tx response failed: %v", err)
11101122
return
@@ -1164,7 +1176,8 @@ func (s *Suite) testBadBlobTx(t *utesting.T, tx *types.Transaction, badTx *types
11641176
return
11651177
}
11661178

1167-
resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, PooledTransactionsResponse: eth.PooledTransactionsResponse(types.Transactions{tx})}
1179+
encTxs, _ := rlp.EncodeToRawList([]*types.Transaction{tx})
1180+
resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, List: encTxs}
11681181
if err := conn.Write(ethProto, eth.PooledTransactionsMsg, resp); err != nil {
11691182
errc <- fmt.Errorf("writing pooled tx response failed: %v", err)
11701183
return

cmd/devp2p/internal/ethtest/transaction.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/ethereum/go-ethereum/core/types"
2727
"github.com/ethereum/go-ethereum/eth/protocols/eth"
2828
"github.com/ethereum/go-ethereum/internal/utesting"
29+
"github.com/ethereum/go-ethereum/rlp"
2930
)
3031

3132
// sendTxs sends the given transactions to the node and
@@ -51,7 +52,8 @@ func (s *Suite) sendTxs(t *utesting.T, txs []*types.Transaction) error {
5152
return fmt.Errorf("peering failed: %v", err)
5253
}
5354

54-
if err = sendConn.Write(ethProto, eth.TransactionsMsg, eth.TransactionsPacket(txs)); err != nil {
55+
encTxs, _ := rlp.EncodeToRawList(txs)
56+
if err = sendConn.Write(ethProto, eth.TransactionsMsg, eth.TransactionsPacket{RawList: encTxs}); err != nil {
5557
return fmt.Errorf("failed to write message to connection: %v", err)
5658
}
5759

@@ -68,7 +70,8 @@ func (s *Suite) sendTxs(t *utesting.T, txs []*types.Transaction) error {
6870
}
6971
switch msg := msg.(type) {
7072
case *eth.TransactionsPacket:
71-
for _, tx := range *msg {
73+
txs, _ := msg.Items()
74+
for _, tx := range txs {
7275
got[tx.Hash()] = true
7376
}
7477
case *eth.NewPooledTransactionHashesPacket:
@@ -80,9 +83,10 @@ func (s *Suite) sendTxs(t *utesting.T, txs []*types.Transaction) error {
8083
if err != nil {
8184
t.Logf("invalid GetBlockHeaders request: %v", err)
8285
}
86+
encHeaders, _ := rlp.EncodeToRawList(headers)
8387
recvConn.Write(ethProto, eth.BlockHeadersMsg, &eth.BlockHeadersPacket{
84-
RequestId: msg.RequestId,
85-
BlockHeadersRequest: headers,
88+
RequestId: msg.RequestId,
89+
List: encHeaders,
8690
})
8791
default:
8892
return fmt.Errorf("unexpected eth wire msg: %s", pretty.Sdump(msg))
@@ -167,9 +171,10 @@ func (s *Suite) sendInvalidTxs(t *utesting.T, txs []*types.Transaction) error {
167171
if err != nil {
168172
t.Logf("invalid GetBlockHeaders request: %v", err)
169173
}
174+
encHeaders, _ := rlp.EncodeToRawList(headers)
170175
recvConn.Write(ethProto, eth.BlockHeadersMsg, &eth.BlockHeadersPacket{
171-
RequestId: msg.RequestId,
172-
BlockHeadersRequest: headers,
176+
RequestId: msg.RequestId,
177+
List: encHeaders,
173178
})
174179
default:
175180
return fmt.Errorf("unexpected eth message: %v", pretty.Sdump(msg))

consensus/misc/eip1559/eip1559.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ func VerifyEIP1559Header(config *params.ChainConfig, parent, header *types.Heade
4343
if header.BaseFee == nil {
4444
return errors.New("header is missing baseFee")
4545
}
46+
// Verify the parent header is not malformed
47+
if config.IsLondon(parent.Number) && parent.BaseFee == nil {
48+
return errors.New("parent header is missing baseFee")
49+
}
4650
// Verify the baseFee is correct based on the parent header.
4751
expectedBaseFee := CalcBaseFee(config, parent)
4852
if header.BaseFee.Cmp(expectedBaseFee) != 0 {

0 commit comments

Comments
 (0)