Skip to content

Commit 18f4b0e

Browse files
authored
Fix tx blob deserialization after PeerDAS (#8729)
* Added test for failed deserialization * Try fix failing deserialization * Simplify code * Try another fix * Simplify fix
1 parent 7a96dca commit 18f4b0e

File tree

3 files changed

+15
-7
lines changed

3 files changed

+15
-7
lines changed

src/Nethermind/Nethermind.Network.Test/P2P/Subprotocols/Eth/V66/PooledTransactionsMessageSerializerTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited
22
// SPDX-License-Identifier: LGPL-3.0-only
33

4+
using System;
45
using Nethermind.Core;
56
using Nethermind.Core.Collections;
67
using Nethermind.Core.Crypto;
@@ -52,5 +53,16 @@ public void Roundtrip()
5253

5354
SerializerTester.TestZero(serializer, message, "f8d7820457f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb");
5455
}
56+
57+
// Generated during Hive devp2p
58+
[TestCase(
59+
"f8f78808a6f328496c6b92f8ecb87403f871f86c870c72dd9d5e883e800107830186a09400000000000000000000000000000000000000008080c001c001a00e0f68ba5a5f7820c9b47f4388b542f55849114944b6ac20d9f14cc2e3aa0368a00ad549ecdcc4756e5f05f6364ded164a1b7d69424d232ea8f29c35420efb39c4c0c0c0b87403f871f86c870c72dd9d5e883e010107830186a09400000000000000000000000000000000000000008080c001c080a0cd2109f56cec3c639c72e2d407e85eb2e54a2a6c4cd94cafe251b62ad1dbb723a068e1fee4a81ffccb9720b8a342f2cb6278570917132e9f639339b778f2da7169c0c0c0"
60+
)]
61+
public void Deserialize(string hex)
62+
{
63+
PooledTransactionsMessageSerializer serializer = new();
64+
65+
serializer.Deserialize(Convert.FromHexString(hex));
66+
}
5567
}
5668
}

src/Nethermind/Nethermind.Serialization.Rlp/Rlp.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1179,9 +1179,7 @@ public void DecodeBloomStructRef(out BloomStructRef bloom)
11791179
public ReadOnlySpan<byte> PeekNextItem()
11801180
{
11811181
int length = PeekNextRlpLength();
1182-
ReadOnlySpan<byte> item = Read(length);
1183-
Position -= item.Length;
1184-
return item;
1182+
return Peek(length);
11851183
}
11861184

11871185
public readonly bool IsNextItemNull()

src/Nethermind/Nethermind.Serialization.Rlp/TxDecoders/BlobTxDecoder.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,7 @@ protected override void EncodePayload(Transaction transaction, RlpStream stream,
144144
private static void DecodeShardBlobNetworkWrapper(Transaction transaction, RlpStream rlpStream)
145145
{
146146
ProofVersion version = ProofVersion.V0;
147-
var startingRlp = rlpStream.PeekNextItem();
148-
if (startingRlp.Length is 1)
147+
if (!rlpStream.IsSequenceNext())
149148
{
150149
version = (ProofVersion)rlpStream.ReadByte();
151150
if (version > ProofVersion.V1)
@@ -164,8 +163,7 @@ private static void DecodeShardBlobNetworkWrapper(Transaction transaction, RlpSt
164163
private static void DecodeShardBlobNetworkWrapper(Transaction transaction, ref Rlp.ValueDecoderContext decoderContext)
165164
{
166165
ProofVersion version = ProofVersion.V0;
167-
var startingRlp = decoderContext.PeekNextItem();
168-
if (startingRlp.Length is 1)
166+
if (!decoderContext.IsSequenceNext())
169167
{
170168
version = (ProofVersion)decoderContext.ReadByte();
171169
if (version != ProofVersion.V1)

0 commit comments

Comments
 (0)