From 2ec85818bb7ebc439056aa94a16c06607c832ea7 Mon Sep 17 00:00:00 2001 From: nisdas Date: Fri, 6 Dec 2024 12:24:28 +0800 Subject: [PATCH 1/4] Increase Max Payload Size --- beacon-chain/p2p/encoder/ssz.go | 11 ++++++----- beacon-chain/p2p/encoder/ssz_test.go | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/beacon-chain/p2p/encoder/ssz.go b/beacon-chain/p2p/encoder/ssz.go index 820af846189f..d0dd1a49d623 100644 --- a/beacon-chain/p2p/encoder/ssz.go +++ b/beacon-chain/p2p/encoder/ssz.go @@ -16,8 +16,9 @@ import ( var _ NetworkEncoding = (*SszNetworkEncoder)(nil) // MaxGossipSize allowed for gossip messages. -var MaxGossipSize = params.BeaconConfig().GossipMaxSize // 10 Mib. -var MaxChunkSize = params.BeaconConfig().MaxChunkSize // 10 Mib. +var MaxGossipSize = params.BeaconConfig().GossipMaxSize // 10 Mib. +var MaxChunkSize = params.BeaconConfig().MaxChunkSize // 10 Mib. +var MaxUncompressedPayloadSize = 2 * params.BeaconConfig().GossipMaxSize // 20 Mib. // This pool defines the sync pool for our buffered snappy writers, so that they // can be constantly reused. @@ -43,8 +44,8 @@ func (_ SszNetworkEncoder) EncodeGossip(w io.Writer, msg fastssz.Marshaler) (int if err != nil { return 0, err } - if uint64(len(b)) > MaxGossipSize { - return 0, errors.Errorf("gossip message exceeds max gossip size: %d bytes > %d bytes", len(b), MaxGossipSize) + if uint64(len(b)) > MaxUncompressedPayloadSize { + return 0, errors.Errorf("gossip message exceeds max gossip size: %d bytes > %d bytes", len(b), MaxUncompressedPayloadSize) } b = snappy.Encode(nil /*dst*/, b) return w.Write(b) @@ -81,7 +82,7 @@ func doDecode(b []byte, to fastssz.Unmarshaler) error { // DecodeGossip decodes the bytes to the protobuf gossip message provided. func (_ SszNetworkEncoder) DecodeGossip(b []byte, to fastssz.Unmarshaler) error { - b, err := DecodeSnappy(b, MaxGossipSize) + b, err := DecodeSnappy(b, MaxUncompressedPayloadSize) if err != nil { return err } diff --git a/beacon-chain/p2p/encoder/ssz_test.go b/beacon-chain/p2p/encoder/ssz_test.go index 6e12af4e7014..8a7f05c82c48 100644 --- a/beacon-chain/p2p/encoder/ssz_test.go +++ b/beacon-chain/p2p/encoder/ssz_test.go @@ -555,7 +555,7 @@ func TestSszNetworkEncoder_FailsSnappyLength(t *testing.T) { e := &encoder.SszNetworkEncoder{} att := ðpb.Fork{} data := make([]byte, 32) - binary.PutUvarint(data, encoder.MaxGossipSize+32) + binary.PutUvarint(data, encoder.MaxUncompressedPayloadSize+32) err := e.DecodeGossip(data, att) require.ErrorContains(t, "snappy message exceeds max size", err) } From 5fb5f85d37aa37744970c4cfb3bd1fefb7f134b8 Mon Sep 17 00:00:00 2001 From: nisdas Date: Fri, 6 Dec 2024 12:35:22 +0800 Subject: [PATCH 2/4] Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33055932d05d..c91183f3c7eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -73,6 +73,7 @@ The format is based on Keep a Changelog, and this project adheres to Semantic Ve - Improvements to HTTP response handling. [pr](https://github.com/prysmaticlabs/prysm/pull/14673) - Updated `Blobs` endpoint to return additional metadata fields. - Made QUIC the default method to connect with peers. +- Increase Max Payload Size in Gossip. ### Deprecated From 61f06f88e928d723d2d051aeca2f0f50597532e0 Mon Sep 17 00:00:00 2001 From: nisdas Date: Sat, 7 Dec 2024 16:05:09 +0800 Subject: [PATCH 3/4] Use MaxGossipSize --- beacon-chain/p2p/encoder/ssz.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/beacon-chain/p2p/encoder/ssz.go b/beacon-chain/p2p/encoder/ssz.go index d0dd1a49d623..5787d7bdbde4 100644 --- a/beacon-chain/p2p/encoder/ssz.go +++ b/beacon-chain/p2p/encoder/ssz.go @@ -16,9 +16,9 @@ import ( var _ NetworkEncoding = (*SszNetworkEncoder)(nil) // MaxGossipSize allowed for gossip messages. -var MaxGossipSize = params.BeaconConfig().GossipMaxSize // 10 Mib. -var MaxChunkSize = params.BeaconConfig().MaxChunkSize // 10 Mib. -var MaxUncompressedPayloadSize = 2 * params.BeaconConfig().GossipMaxSize // 20 Mib. +var MaxGossipSize = params.BeaconConfig().GossipMaxSize // 10 Mib. +var MaxChunkSize = params.BeaconConfig().MaxChunkSize // 10 Mib. +var MaxUncompressedPayloadSize = 2 * MaxGossipSize // 20 Mib. // This pool defines the sync pool for our buffered snappy writers, so that they // can be constantly reused. @@ -91,6 +91,7 @@ func (_ SszNetworkEncoder) DecodeGossip(b []byte, to fastssz.Unmarshaler) error // DecodeSnappy decodes a snappy compressed message. func DecodeSnappy(msg []byte, maxSize uint64) ([]byte, error) { + snappy.MaxEncodedLen() size, err := snappy.DecodedLen(msg) if err != nil { return nil, err From fecf38828fc6841bcc3dedcfd9032ed26210e3fe Mon Sep 17 00:00:00 2001 From: nisdas Date: Sat, 7 Dec 2024 16:08:46 +0800 Subject: [PATCH 4/4] Remove change --- beacon-chain/p2p/encoder/ssz.go | 1 - 1 file changed, 1 deletion(-) diff --git a/beacon-chain/p2p/encoder/ssz.go b/beacon-chain/p2p/encoder/ssz.go index 5787d7bdbde4..fc469969219e 100644 --- a/beacon-chain/p2p/encoder/ssz.go +++ b/beacon-chain/p2p/encoder/ssz.go @@ -91,7 +91,6 @@ func (_ SszNetworkEncoder) DecodeGossip(b []byte, to fastssz.Unmarshaler) error // DecodeSnappy decodes a snappy compressed message. func DecodeSnappy(msg []byte, maxSize uint64) ([]byte, error) { - snappy.MaxEncodedLen() size, err := snappy.DecodedLen(msg) if err != nil { return nil, err