diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Validators/PendingValidatorsDecoder.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Validators/PendingValidatorsDecoder.cs index 7dc6dcc28945..4160d122fc5d 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Validators/PendingValidatorsDecoder.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Validators/PendingValidatorsDecoder.cs @@ -7,9 +7,9 @@ namespace Nethermind.Consensus.AuRa.Validators { - internal class PendingValidatorsDecoder : IRlpObjectDecoder, IRlpStreamDecoder + internal sealed class PendingValidatorsDecoder : RlpStreamDecoder, IRlpObjectDecoder { - public PendingValidators Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override PendingValidators DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) { @@ -54,7 +54,7 @@ public Rlp Encode(PendingValidators item, RlpBehaviors rlpBehaviors = RlpBehavio return new Rlp(rlpStream.Data.ToArray()); } - public void Encode(RlpStream rlpStream, PendingValidators item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream rlpStream, PendingValidators item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { (int contentLength, int addressesLength) = GetContentLength(item, rlpBehaviors); rlpStream.StartSequence(contentLength); @@ -68,7 +68,7 @@ public void Encode(RlpStream rlpStream, PendingValidators item, RlpBehaviors rlp rlpStream.Encode(item.AreFinalized); } - public int GetLength(PendingValidators item, RlpBehaviors rlpBehaviors) => + public override int GetLength(PendingValidators item, RlpBehaviors rlpBehaviors) => item is null ? 1 : Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors).Total); private static (int Total, int Addresses) GetContentLength(PendingValidators item, RlpBehaviors rlpBehaviors) diff --git a/src/Nethermind/Nethermind.Consensus.AuRa/Validators/ValidatorInfoDecoder.cs b/src/Nethermind/Nethermind.Consensus.AuRa/Validators/ValidatorInfoDecoder.cs index 71b9c3e5a650..783878be3eec 100644 --- a/src/Nethermind/Nethermind.Consensus.AuRa/Validators/ValidatorInfoDecoder.cs +++ b/src/Nethermind/Nethermind.Consensus.AuRa/Validators/ValidatorInfoDecoder.cs @@ -6,9 +6,9 @@ namespace Nethermind.Consensus.AuRa.Validators { - internal class ValidatorInfoDecoder : IRlpStreamDecoder, IRlpObjectDecoder + internal sealed class ValidatorInfoDecoder : RlpStreamDecoder, IRlpObjectDecoder { - public ValidatorInfo? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override ValidatorInfo? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) { @@ -49,7 +49,7 @@ public Rlp Encode(ValidatorInfo? item, RlpBehaviors rlpBehaviors = RlpBehaviors. return new Rlp(rlpStream.Data.ToArray()); } - public void Encode(RlpStream stream, ValidatorInfo? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, ValidatorInfo? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -68,7 +68,7 @@ public void Encode(RlpStream stream, ValidatorInfo? item, RlpBehaviors rlpBehavi } } - public int GetLength(ValidatorInfo? item, RlpBehaviors rlpBehaviors) => item is null ? 1 : Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors).Total); + public override int GetLength(ValidatorInfo? item, RlpBehaviors rlpBehaviors) => item is null ? 1 : Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors).Total); private static (int Total, int Validators) GetContentLength(ValidatorInfo item, RlpBehaviors rlpBehaviors) { diff --git a/src/Nethermind/Nethermind.Consensus.Clique/SnapshotDecoder.cs b/src/Nethermind/Nethermind.Consensus.Clique/SnapshotDecoder.cs index 8bf9756d81d5..1d35ce104ffd 100644 --- a/src/Nethermind/Nethermind.Consensus.Clique/SnapshotDecoder.cs +++ b/src/Nethermind/Nethermind.Consensus.Clique/SnapshotDecoder.cs @@ -9,9 +9,9 @@ namespace Nethermind.Consensus.Clique { - internal class SnapshotDecoder : IRlpStreamDecoder + internal sealed class SnapshotDecoder : RlpStreamDecoder { - public Snapshot Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Snapshot DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { rlpStream.ReadSequenceLength(); @@ -30,7 +30,7 @@ public Snapshot Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehav return snapshot; } - public void Encode(RlpStream stream, Snapshot item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, Snapshot item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { (int contentLength, int signersLength, int votesLength, int tallyLength) = GetContentLength(item, rlpBehaviors); @@ -43,7 +43,7 @@ public void Encode(RlpStream stream, Snapshot item, RlpBehaviors rlpBehaviors = } - public int GetLength(Snapshot item, RlpBehaviors rlpBehaviors) + public override int GetLength(Snapshot item, RlpBehaviors rlpBehaviors) { (int contentLength, int _, int _, int _) = GetContentLength(item, rlpBehaviors); return Rlp.LengthOfSequence(contentLength); diff --git a/src/Nethermind/Nethermind.Network/NetworkNodeDecoder.cs b/src/Nethermind/Nethermind.Network/NetworkNodeDecoder.cs index c9654dbd9f8b..9b08784346a2 100644 --- a/src/Nethermind/Nethermind.Network/NetworkNodeDecoder.cs +++ b/src/Nethermind/Nethermind.Network/NetworkNodeDecoder.cs @@ -10,7 +10,7 @@ namespace Nethermind.Network { - public class NetworkNodeDecoder : IRlpStreamDecoder, IRlpObjectDecoder + public sealed class NetworkNodeDecoder : RlpStreamDecoder, IRlpObjectDecoder { private static readonly RlpLimit RlpLimit = RlpLimit.For((int)1.KiB(), nameof(NetworkNode.HostIp)); @@ -19,7 +19,7 @@ static NetworkNodeDecoder() Rlp.RegisterDecoder(typeof(NetworkNode), new NetworkNodeDecoder()); } - public NetworkNode Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override NetworkNode DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { rlpStream.ReadSequenceLength(); @@ -41,7 +41,7 @@ public NetworkNode Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBe return networkNode; } - public void Encode(RlpStream stream, NetworkNode item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, NetworkNode item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int contentLength = GetContentLength(item, rlpBehaviors); stream.StartSequence(contentLength); @@ -70,7 +70,7 @@ public void Encode(MemoryStream stream, NetworkNode item, RlpBehaviors rlpBehavi throw new NotImplementedException(); } - public int GetLength(NetworkNode item, RlpBehaviors rlpBehaviors) + public override int GetLength(NetworkNode item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); } diff --git a/src/Nethermind/Nethermind.Optimism/OptimismReceiptMessageDecoder.cs b/src/Nethermind/Nethermind.Optimism/OptimismReceiptMessageDecoder.cs index 89d983442eca..dfb4dbb60df7 100644 --- a/src/Nethermind/Nethermind.Optimism/OptimismReceiptMessageDecoder.cs +++ b/src/Nethermind/Nethermind.Optimism/OptimismReceiptMessageDecoder.cs @@ -11,13 +11,13 @@ namespace Nethermind.Optimism; [Rlp.Decoder(RlpDecoderKey.Trie)] -public class OptimismReceiptTrieDecoder() : OptimismReceiptMessageDecoder(true); +public sealed class OptimismReceiptTrieDecoder() : OptimismReceiptMessageDecoder(true); [Rlp.Decoder] -public class OptimismReceiptMessageDecoder(bool isEncodedForTrie = false, bool skipStateAndStatus = false) : IRlpStreamDecoder +public class OptimismReceiptMessageDecoder(bool isEncodedForTrie = false, bool skipStateAndStatus = false) : RlpStreamDecoder { private readonly bool _skipStateAndStatus = skipStateAndStatus; - public OptimismTxReceipt Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override OptimismTxReceipt DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { OptimismTxReceipt txReceipt = new(); if (!rlpStream.IsSequenceNext()) @@ -126,7 +126,7 @@ public static int GetLogsLength(TxReceipt item) /// /// https://eips.ethereum.org/EIPS/eip-2718 /// - public int GetLength(TxReceipt item, RlpBehaviors rlpBehaviors) + public override int GetLength(TxReceipt item, RlpBehaviors rlpBehaviors) { (int total, _) = GetContentLength(item, rlpBehaviors); int receiptPayloadLength = Rlp.LengthOfSequence(total); @@ -140,7 +140,7 @@ public int GetLength(TxReceipt item, RlpBehaviors rlpBehaviors) return result; } - public void Encode(RlpStream rlpStream, TxReceipt item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream rlpStream, TxReceipt item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -189,11 +189,6 @@ public void Encode(RlpStream rlpStream, TxReceipt item, RlpBehaviors rlpBehavior } } } - - TxReceipt IRlpStreamDecoder.Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors) - { - return Decode(rlpStream, rlpBehaviors); - } } internal static class TxReceiptExt diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/AccountDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/AccountDecoder.cs index 2e992b2443d2..ab7651dda751 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/AccountDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/AccountDecoder.cs @@ -7,7 +7,7 @@ namespace Nethermind.Serialization.Rlp { - public class AccountDecoder : IRlpObjectDecoder, IRlpStreamDecoder, IRlpValueDecoder + public sealed class AccountDecoder : RlpValueDecoder, IRlpObjectDecoder { private readonly bool _slimFormat; @@ -54,7 +54,7 @@ public Hash256 DecodeStorageRootOnly(ref Rlp.ValueDecoderContext context) return storageRoot; } - public Account? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Account? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int length = rlpStream.ReadSequenceLength(); if (length == 1) @@ -74,7 +74,7 @@ public Hash256 DecodeStorageRootOnly(ref Rlp.ValueDecoderContext context) return new(nonce, balance, storageRoot, codeHash); } - public void Encode(RlpStream stream, Account? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, Account? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -144,7 +144,7 @@ public int GetLength(Account[] accounts) return length; } - public int GetLength(Account? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override int GetLength(Account? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -234,7 +234,7 @@ private Hash256 DecodeCodeHash(RlpStream rlpStream) return codeHash; } - public Account? Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Account? DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int length = decoderContext.ReadSequenceLength(); if (length == 1) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BasicStreamDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BasicStreamDecoder.cs index 106413dbc446..c3cf4d93f67c 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BasicStreamDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BasicStreamDecoder.cs @@ -6,109 +6,109 @@ namespace Nethermind.Serialization.Rlp; // If any of these is triggered in prod, then something went wrong, coz these are fairly slow path. These are only // useful for easy tests. -public class ByteStreamDecoder : IRlpStreamDecoder +public sealed class ByteStreamDecoder : RlpStreamDecoder { - public int GetLength(byte item, RlpBehaviors rlpBehaviors) + public override int GetLength(byte item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOf(item); } - public byte Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override byte DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { return rlpStream.DecodeByte(); } - public void Encode(RlpStream stream, byte item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, byte item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { stream.Encode(item); } } -public class ShortStreamDecoder : IRlpStreamDecoder +public sealed class ShortStreamDecoder : RlpStreamDecoder { - public int GetLength(short item, RlpBehaviors rlpBehaviors) + public override int GetLength(short item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOf(item); } - public short Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override short DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { return (short)rlpStream.DecodeLong(); } - public void Encode(RlpStream stream, short item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, short item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { stream.Encode(item); } } -public class UShortStreamDecoder : IRlpStreamDecoder +public sealed class UShortStreamDecoder : RlpStreamDecoder { - public int GetLength(ushort item, RlpBehaviors rlpBehaviors) + public override int GetLength(ushort item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOf((long)item); } - public ushort Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override ushort DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { return (ushort)rlpStream.DecodeLong(); } - public void Encode(RlpStream stream, ushort item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, ushort item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { stream.Encode(item); } } -public class IntStreamDecoder : IRlpStreamDecoder +public sealed class IntStreamDecoder : RlpStreamDecoder { - public int GetLength(int item, RlpBehaviors rlpBehaviors) + public override int GetLength(int item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOf(item); } - public int Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override int DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { return rlpStream.DecodeInt(); } - public void Encode(RlpStream stream, int item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, int item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { stream.Encode(item); } } -public class UIntStreamDecoder : IRlpStreamDecoder +public sealed class UIntStreamDecoder : RlpStreamDecoder { - public int GetLength(uint item, RlpBehaviors rlpBehaviors) + public override int GetLength(uint item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOf((long)item); } - public uint Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override uint DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { return rlpStream.DecodeUInt(); } - public void Encode(RlpStream stream, uint item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, uint item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { stream.Encode(item); } } -public class ULongStreamDecoder : IRlpStreamDecoder +public sealed class ULongStreamDecoder : RlpStreamDecoder { - public int GetLength(ulong item, RlpBehaviors rlpBehaviors) + public override int GetLength(ulong item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOf(item); } - public ulong Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override ulong DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { return rlpStream.DecodeUInt(); } - public void Encode(RlpStream stream, ulong item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, ulong item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { stream.Encode(item); } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockBodyDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockBodyDecoder.cs index 4bf4179fce24..b2287601a824 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockBodyDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockBodyDecoder.cs @@ -6,7 +6,7 @@ namespace Nethermind.Serialization.Rlp; -public class BlockBodyDecoder : IRlpValueDecoder, IRlpStreamDecoder +public sealed class BlockBodyDecoder : RlpValueDecoder { private readonly TxDecoder _txDecoder = TxDecoder.Instance; private readonly IHeaderDecoder _headerDecoder; @@ -21,7 +21,7 @@ public BlockBodyDecoder(IHeaderDecoder headerDecoder = null) _headerDecoder = headerDecoder ?? new HeaderDecoder(); } - public int GetLength(BlockBody item, RlpBehaviors rlpBehaviors) + public override int GetLength(BlockBody item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOfSequence(GetBodyLength(item)); } @@ -80,7 +80,7 @@ private int GetWithdrawalsLength(Withdrawal[] withdrawals) return sum; } - public BlockBody? Decode(ref Rlp.ValueDecoderContext ctx, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override BlockBody? DecodeInternal(ref Rlp.ValueDecoderContext ctx, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int sequenceLength = ctx.ReadSequenceLength(); int startingPosition = ctx.Position; @@ -106,7 +106,7 @@ private int GetWithdrawalsLength(Withdrawal[] withdrawals) return new BlockBody(transactions, uncles, withdrawals); } - public BlockBody Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override BlockBody DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { Span span = rlpStream.PeekNextItem(); Rlp.ValueDecoderContext ctx = new Rlp.ValueDecoderContext(span); @@ -116,7 +116,7 @@ public BlockBody Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBeha return response; } - public void Encode(RlpStream stream, BlockBody body, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, BlockBody body, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { stream.StartSequence(GetBodyLength(body)); stream.StartSequence(GetTxLength(body.Transactions)); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs index 55d42c6854a7..136035521590 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockDecoder.cs @@ -7,14 +7,14 @@ namespace Nethermind.Serialization.Rlp { - public class BlockDecoder(IHeaderDecoder headerDecoder) : IRlpValueDecoder, IRlpStreamDecoder + public sealed class BlockDecoder(IHeaderDecoder headerDecoder) : RlpValueDecoder { private readonly IHeaderDecoder _headerDecoder = headerDecoder ?? throw new ArgumentNullException(nameof(headerDecoder)); private readonly BlockBodyDecoder _blockBodyDecoder = new BlockBodyDecoder(headerDecoder); public BlockDecoder() : this(new HeaderDecoder()) { } - public Block? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Block? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.Length == 0) { @@ -48,7 +48,7 @@ public BlockDecoder() : this(new HeaderDecoder()) { } return (contentLength, txs, uncles, withdrawals); } - public int GetLength(Block? item, RlpBehaviors rlpBehaviors) + public override int GetLength(Block? item, RlpBehaviors rlpBehaviors) { if (item is null) { @@ -58,7 +58,7 @@ public int GetLength(Block? item, RlpBehaviors rlpBehaviors) return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors).Total); } - public Block? Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Block? DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) { @@ -92,7 +92,7 @@ public Rlp Encode(Block? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) return new(rlpStream.Data.ToArray()); } - public void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, Block? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/BlockInfoDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/BlockInfoDecoder.cs index 69ee52db06c1..92cbb67ba098 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/BlockInfoDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/BlockInfoDecoder.cs @@ -7,11 +7,11 @@ namespace Nethermind.Serialization.Rlp { - public class BlockInfoDecoder : IRlpStreamDecoder, IRlpValueDecoder + public sealed class BlockInfoDecoder : RlpValueDecoder { public static BlockInfoDecoder Instance { get; } = new(); - public BlockInfo? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override BlockInfo? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) { @@ -52,7 +52,7 @@ public class BlockInfoDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpValueDecoder + public sealed class ChainLevelDecoder : RlpValueDecoder { - public ChainLevelInfo? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override ChainLevelInfo? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.Length == 0) { @@ -50,7 +50,7 @@ public class ChainLevelDecoder : IRlpStreamDecoder, IRlpValueDec return info; } - public void Encode(RlpStream stream, ChainLevelInfo? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, ChainLevelInfo? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -78,7 +78,7 @@ static void ThrowHasNull() => throw new InvalidOperationException($"{nameof(BlockInfo)} is null when encoding {nameof(ChainLevelInfo)}"); } - public ChainLevelInfo? Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override ChainLevelInfo? DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) { @@ -127,7 +127,7 @@ private static int GetContentLength(ChainLevelInfo item, RlpBehaviors rlpBehavio return contentLength; } - public int GetLength(ChainLevelInfo? item, RlpBehaviors rlpBehaviors) + public override int GetLength(ChainLevelInfo? item, RlpBehaviors rlpBehaviors) { if (item is null) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/CompactReceiptStorageDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/CompactReceiptStorageDecoder.cs index b6dea59d6ecc..9deecdaf1e72 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/CompactReceiptStorageDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/CompactReceiptStorageDecoder.cs @@ -13,7 +13,7 @@ namespace Nethermind.Serialization.Rlp { [Decoder(RlpDecoderKey.Storage)] - public class CompactReceiptStorageDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder, IReceiptRefDecoder + public sealed class CompactReceiptStorageDecoder : RlpValueDecoder, IRlpObjectDecoder, IReceiptRefDecoder { public static readonly CompactReceiptStorageDecoder Instance = new(); @@ -21,7 +21,7 @@ public CompactReceiptStorageDecoder() { } - public TxReceipt? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override TxReceipt? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) { @@ -67,7 +67,7 @@ public CompactReceiptStorageDecoder() return txReceipt; } - public TxReceipt? Decode(ref Rlp.ValueDecoderContext decoderContext, + protected override TxReceipt? DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) @@ -171,7 +171,7 @@ public Rlp Encode(TxReceipt item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) return new Rlp(rlpStream.Data.ToArray()); } - public void Encode(RlpStream rlpStream, TxReceipt? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream rlpStream, TxReceipt? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -245,7 +245,7 @@ private static int GetLogsLength(TxReceipt item) return logsLength; } - public int GetLength(TxReceipt item, RlpBehaviors rlpBehaviors) + public override int GetLength(TxReceipt item, RlpBehaviors rlpBehaviors) { (int Total, _) = GetContentLength(item, rlpBehaviors); return Rlp.LengthOfSequence(Total); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip2930/AccessListDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip2930/AccessListDecoder.cs index e61b35690cca..2556b482e275 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip2930/AccessListDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip2930/AccessListDecoder.cs @@ -7,7 +7,7 @@ namespace Nethermind.Serialization.Rlp.Eip2930 { - public class AccessListDecoder : IRlpStreamDecoder, IRlpValueDecoder + public sealed class AccessListDecoder : RlpValueDecoder { private const int IndexLength = 32; @@ -20,7 +20,7 @@ public class AccessListDecoder : IRlpStreamDecoder, IRlpValueDecode /// RLP serializable item and keep it as a compiled call available at runtime. /// It would be slightly slower but still much faster than what we would get from using dynamic serializers. /// - public AccessList? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override AccessList? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) { @@ -78,7 +78,7 @@ public class AccessListDecoder : IRlpStreamDecoder, IRlpValueDecode /// Question to Lukasz here -> would it be fine to always use ValueDecoderContext only? /// I believe it cannot be done for the network items decoding and is only relevant for the DB loads. /// - public AccessList? Decode( + protected override AccessList? DecodeInternal( ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { @@ -132,7 +132,7 @@ public class AccessListDecoder : IRlpStreamDecoder, IRlpValueDecode return accessListBuilder.Build(); } - public void Encode(RlpStream stream, AccessList? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, AccessList? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -166,7 +166,7 @@ public void Encode(RlpStream stream, AccessList? item, RlpBehaviors rlpBehaviors } } - public int GetLength(AccessList? accessList, RlpBehaviors rlpBehaviors) + public override int GetLength(AccessList? accessList, RlpBehaviors rlpBehaviors) { if (accessList is null) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs index 9557c6f29354..9ab45209ba1c 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/Eip7702/AuthorizationTupleDecoder.cs @@ -9,11 +9,11 @@ namespace Nethermind.Serialization.Rlp; -public class AuthorizationTupleDecoder : IRlpStreamDecoder, IRlpValueDecoder +public sealed class AuthorizationTupleDecoder : RlpValueDecoder { public static readonly AuthorizationTupleDecoder Instance = new(); - public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override AuthorizationTuple DecodeInternal(RlpStream stream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int length = stream.ReadSequenceLength(); int check = length + stream.Position; @@ -37,7 +37,7 @@ public AuthorizationTuple Decode(RlpStream stream, RlpBehaviors rlpBehaviors = R return new AuthorizationTuple(chainId, codeAddress, nonce, yParity, r, s); } - public AuthorizationTuple Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override AuthorizationTuple DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int length = decoderContext.ReadSequenceLength(); int check = length + decoderContext.Position; @@ -68,7 +68,7 @@ public RlpStream Encode(AuthorizationTuple item, RlpBehaviors rlpBehaviors = Rlp return stream; } - public void Encode(RlpStream stream, AuthorizationTuple item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, AuthorizationTuple item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { int contentLength = GetContentLength(item); stream.StartSequence(contentLength); @@ -89,7 +89,7 @@ public static void EncodeWithoutSignature(RlpStream stream, UInt256 chainId, Add stream.Encode(nonce); } - public int GetLength(AuthorizationTuple item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(GetContentLength(item)); + public override int GetLength(AuthorizationTuple item, RlpBehaviors rlpBehaviors) => Rlp.LengthOfSequence(GetContentLength(item)); private static int GetContentLength(AuthorizationTuple tuple) => GetContentLengthWithoutSig(tuple.ChainId, tuple.CodeAddress, tuple.Nonce) diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs index e4e824bfddf7..6a7164d46b92 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/HeaderDecoder.cs @@ -11,11 +11,11 @@ namespace Nethermind.Serialization.Rlp public interface IHeaderDecoder : IBlockHeaderDecoder { } public interface IBlockHeaderDecoder : IRlpValueDecoder, IRlpStreamDecoder where T : BlockHeader { } - public class HeaderDecoder : IHeaderDecoder + public sealed class HeaderDecoder : RlpValueDecoder, IHeaderDecoder { public const int NonceLength = 8; - public BlockHeader? Decode(ref Rlp.ValueDecoderContext decoderContext, + protected override BlockHeader? DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) @@ -85,7 +85,7 @@ public class HeaderDecoder : IHeaderDecoder return blockHeader; } - public BlockHeader? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override BlockHeader? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) { @@ -155,7 +155,7 @@ public class HeaderDecoder : IHeaderDecoder return blockHeader; } - public void Encode(RlpStream rlpStream, BlockHeader? header, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream rlpStream, BlockHeader? header, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (header is null) { @@ -289,7 +289,7 @@ private static int GetContentLength(BlockHeader? item, RlpBehaviors rlpBehaviors return contentLength; } - public int GetLength(BlockHeader? item, RlpBehaviors rlpBehaviors) + public override int GetLength(BlockHeader? item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/KeccakDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/KeccakDecoder.cs index 89dd7e564860..90d78edc2f3b 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/KeccakDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/KeccakDecoder.cs @@ -5,14 +5,19 @@ namespace Nethermind.Serialization.Rlp { - public class KeccakDecoder : IRlpValueDecoder + public sealed class KeccakDecoder : RlpValueDecoder { public static readonly KeccakDecoder Instance = new(); - public Hash256? Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) => decoderContext.DecodeKeccak(); + protected override Hash256? DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) => decoderContext.DecodeKeccak(); - public static Rlp Encode(Hash256 item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) => Rlp.Encode(item); + protected override Hash256? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) => rlpStream.DecodeKeccak(); - public int GetLength(Hash256 item, RlpBehaviors rlpBehaviors) => Rlp.LengthOf(item); + public override int GetLength(Hash256 item, RlpBehaviors rlpBehaviors) => Rlp.LengthOf(item); + + public override void Encode(RlpStream stream, Hash256 item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + stream.Encode(item); + } } } diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/LogEntryDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/LogEntryDecoder.cs index 7fc7be2d202b..966b5f9efdb1 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/LogEntryDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/LogEntryDecoder.cs @@ -7,11 +7,11 @@ namespace Nethermind.Serialization.Rlp { - public class LogEntryDecoder : IRlpStreamDecoder, IRlpValueDecoder + public sealed class LogEntryDecoder : RlpValueDecoder { public static LogEntryDecoder Instance { get; } = new(); - public LogEntry? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override LogEntry? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) { @@ -33,7 +33,7 @@ public class LogEntryDecoder : IRlpStreamDecoder, IRlpValueDecoder +public sealed class ReceiptArrayStorageDecoder(bool compactEncoding = true) : RlpStreamDecoder { public static readonly ReceiptArrayStorageDecoder Instance = new(); @@ -20,7 +20,7 @@ public class ReceiptArrayStorageDecoder(bool compactEncoding = true) : IRlpStrea public const int CompactEncoding = 127; - public int GetLength(TxReceipt[] items, RlpBehaviors rlpBehaviors) + public override int GetLength(TxReceipt[] items, RlpBehaviors rlpBehaviors) { if (items is null || items.Length == 0) { @@ -59,7 +59,7 @@ private int GetContentLength(TxReceipt[] items, RlpBehaviors rlpBehaviors) } } - public TxReceipt[] Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override TxReceipt[] DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.PeekByte() == CompactEncoding) { @@ -72,7 +72,7 @@ public TxReceipt[] Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBe } } - public void Encode(RlpStream stream, TxReceipt[] items, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, TxReceipt[] items, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (items is null || items.Length == 0) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptMessageDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptMessageDecoder.cs index c6330d11746e..dc25bc96d35e 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptMessageDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptMessageDecoder.cs @@ -10,7 +10,7 @@ namespace Nethermind.Serialization.Rlp { [Rlp.Decoder(RlpDecoderKey.Default)] [Rlp.Decoder(RlpDecoderKey.Trie)] - public class ReceiptMessageDecoder : IRlpStreamDecoder, IRlpValueDecoder + public sealed class ReceiptMessageDecoder : RlpValueDecoder { private readonly bool _skipStateAndStatus; @@ -18,7 +18,7 @@ public ReceiptMessageDecoder(bool skipStateAndStatus = false) { _skipStateAndStatus = skipStateAndStatus; } - public TxReceipt Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override TxReceipt DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { Span span = rlpStream.PeekNextItem(); Rlp.ValueDecoderContext ctx = new Rlp.ValueDecoderContext(span); @@ -28,7 +28,7 @@ public TxReceipt Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBeha return response; } - public TxReceipt Decode(ref Rlp.ValueDecoderContext ctx, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override TxReceipt DecodeInternal(ref Rlp.ValueDecoderContext ctx, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (ctx.IsNextItemNull()) { @@ -115,7 +115,7 @@ private static int GetLogsLength(TxReceipt item) /// /// https://eips.ethereum.org/EIPS/eip-2718 /// - public int GetLength(TxReceipt item, RlpBehaviors rlpBehaviors) + public override int GetLength(TxReceipt item, RlpBehaviors rlpBehaviors) { (int Total, _) = GetContentLength(item, rlpBehaviors); int receiptPayloadLength = Rlp.LengthOfSequence(Total); @@ -142,7 +142,7 @@ public byte[] EncodeNew(TxReceipt? item, RlpBehaviors rlpBehaviors = RlpBehavior return stream.Data.ToArray(); } - public void Encode(RlpStream rlpStream, TxReceipt item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream rlpStream, TxReceipt item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptStorageDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptStorageDecoder.cs index 655dadabfcf8..d6673d1a089b 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptStorageDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/ReceiptStorageDecoder.cs @@ -11,7 +11,7 @@ namespace Nethermind.Serialization.Rlp { [Rlp.Decoder(RlpDecoderKey.LegacyStorage)] - public class ReceiptStorageDecoder : IRlpStreamDecoder, IRlpValueDecoder, IRlpObjectDecoder, IReceiptRefDecoder + public sealed class ReceiptStorageDecoder : RlpValueDecoder, IRlpObjectDecoder, IReceiptRefDecoder { private readonly bool _supportTxHash; private const byte MarkTxHashByte = 255; @@ -26,7 +26,7 @@ public ReceiptStorageDecoder() : this(true) { } - public TxReceipt? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override TxReceipt? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) { @@ -100,7 +100,7 @@ public ReceiptStorageDecoder() : this(true) return txReceipt; } - public TxReceipt? Decode(ref Rlp.ValueDecoderContext decoderContext, + protected override TxReceipt? DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) @@ -182,7 +182,7 @@ public Rlp Encode(TxReceipt item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) return new Rlp(rlpStream.Data.ToArray()); } - public void Encode(RlpStream rlpStream, TxReceipt? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream rlpStream, TxReceipt? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -319,7 +319,7 @@ private static int GetLogsLength(TxReceipt item) /// /// https://eips.ethereum.org/EIPS/eip-2718 /// - public int GetLength(TxReceipt item, RlpBehaviors rlpBehaviors) + public override int GetLength(TxReceipt item, RlpBehaviors rlpBehaviors) { (int Total, _) = GetContentLength(item, rlpBehaviors); int receiptPayloadLength = Rlp.LengthOfSequence(Total); diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs index 082cbcc3bd92..bf3174dd9a74 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/TxDecoder.cs @@ -29,7 +29,7 @@ static TxDecoder() public sealed class SystemTxDecoder : TxDecoder; public sealed class GeneratedTxDecoder : TxDecoder; -public class TxDecoder : IRlpStreamDecoder, IRlpValueDecoder where T : Transaction, new() +public class TxDecoder : RlpValueDecoder where T : Transaction, new() { private readonly ITxDecoder?[] _decoders = new ITxDecoder?[Transaction.MaxTxType + 1]; @@ -45,7 +45,7 @@ protected TxDecoder(Func? transactionFactory = null) public void RegisterDecoder(ITxDecoder decoder) => _decoders[(int)decoder.Type] = decoder; - public T? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override T? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { static void ThrowIfLegacy(TxType txType1) { @@ -88,7 +88,7 @@ private ITxDecoder GetDecoder(TxType txType) => ? decoder : throw new RlpException($"Unknown transaction type {txType}") { Data = { { "txType", txType } } }; - public T? Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override T? DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { T transaction = null; Decode(ref decoderContext, ref transaction, rlpBehaviors); @@ -131,6 +131,11 @@ public void Decode(ref Rlp.ValueDecoderContext decoderContext, ref T? transactio GetDecoder(txType).Decode(ref Unsafe.As(ref transaction), txSequenceStart, transactionSequence, ref decoderContext, rlpBehaviors); } + public override void Encode(RlpStream stream, T? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + { + EncodeTx(stream, item, rlpBehaviors, forSigning: false, isEip155Enabled: false, chainId: 0); + } + public Rlp Encode(T item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { RlpStream rlpStream = new(GetLength(item, rlpBehaviors)); @@ -138,11 +143,6 @@ public Rlp Encode(T item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) return new Rlp(rlpStream.Data.ToArray() ?? []); } - public void Encode(RlpStream stream, T? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) - { - EncodeTx(stream, item, rlpBehaviors, forSigning: false, isEip155Enabled: false, chainId: 0); - } - public Rlp EncodeTx(T? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None, bool forSigning = false, bool isEip155Enabled = false, ulong chainId = 0) { RlpStream rlpStream = new(GetLength(item, rlpBehaviors, forSigning, isEip155Enabled, chainId)); @@ -153,7 +153,7 @@ public Rlp EncodeTx(T? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None, bool /// /// https://eips.ethereum.org/EIPS/eip-2718 /// - public int GetLength(T tx, RlpBehaviors rlpBehaviors) => GetLength(tx, rlpBehaviors, forSigning: false, isEip155Enabled: false, chainId: 0); + public override int GetLength(T tx, RlpBehaviors rlpBehaviors) => GetLength(tx, rlpBehaviors, forSigning: false, isEip155Enabled: false, chainId: 0); public void EncodeTx(RlpStream stream, T? item, RlpBehaviors rlpBehaviors, bool forSigning, bool isEip155Enabled, ulong chainId) { diff --git a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalDecoder.cs b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalDecoder.cs index 6ddd0e6a6009..d70984bb7e71 100644 --- a/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalDecoder.cs +++ b/src/Nethermind/Nethermind.Serialization.Rlp/WithdrawalDecoder.cs @@ -5,9 +5,9 @@ namespace Nethermind.Serialization.Rlp; -public class WithdrawalDecoder : IRlpStreamDecoder, IRlpValueDecoder +public sealed class WithdrawalDecoder : RlpValueDecoder { - public Withdrawal? Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Withdrawal? DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) { @@ -27,7 +27,7 @@ public class WithdrawalDecoder : IRlpStreamDecoder, IRlpValueDecoder }; } - public Withdrawal? Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Withdrawal? DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) { @@ -47,7 +47,7 @@ public class WithdrawalDecoder : IRlpStreamDecoder, IRlpValueDecoder }; } - public void Encode(RlpStream stream, Withdrawal? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, Withdrawal? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -79,5 +79,5 @@ private static int GetContentLength(Withdrawal item) => Rlp.LengthOfAddressRlp + Rlp.LengthOf(item.AmountInGwei); - public int GetLength(Withdrawal item, RlpBehaviors _) => Rlp.LengthOfSequence(GetContentLength(item)); + public override int GetLength(Withdrawal item, RlpBehaviors _) => Rlp.LengthOfSequence(GetContentLength(item)); } diff --git a/src/Nethermind/Nethermind.Taiko/L1OriginDecoder.cs b/src/Nethermind/Nethermind.Taiko/L1OriginDecoder.cs index 4429af90bb95..4d5fb87948a8 100644 --- a/src/Nethermind/Nethermind.Taiko/L1OriginDecoder.cs +++ b/src/Nethermind/Nethermind.Taiko/L1OriginDecoder.cs @@ -8,11 +8,11 @@ namespace Nethermind.Taiko; -public class L1OriginDecoder : IRlpStreamDecoder +public sealed class L1OriginDecoder : RlpStreamDecoder { const int BuildPayloadArgsIdLength = 8; - public L1Origin Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override L1Origin DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { (int _, int contentLength) = rlpStream.ReadPrefixAndContentLength(); int itemsCount = rlpStream.PeekNumberOfItemsRemaining(maxSearch: contentLength); @@ -36,7 +36,7 @@ public Rlp Encode(L1Origin? item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) return new(rlpStream.Data.ToArray()!); } - public void Encode(RlpStream stream, L1Origin item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, L1Origin item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { stream.StartSequence(GetLength(item, rlpBehaviors)); @@ -55,7 +55,7 @@ public void Encode(RlpStream stream, L1Origin item, RlpBehaviors rlpBehaviors = } } - public int GetLength(L1Origin item, RlpBehaviors rlpBehaviors) + public override int GetLength(L1Origin item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOfSequence( Rlp.LengthOf(item.BlockId) diff --git a/src/Nethermind/Nethermind.Xdc/RLP/ExtraConsensusDataDecoder.cs b/src/Nethermind/Nethermind.Xdc/RLP/ExtraConsensusDataDecoder.cs index a31ae50e3087..0869fec40552 100644 --- a/src/Nethermind/Nethermind.Xdc/RLP/ExtraConsensusDataDecoder.cs +++ b/src/Nethermind/Nethermind.Xdc/RLP/ExtraConsensusDataDecoder.cs @@ -10,10 +10,10 @@ using System.Threading.Tasks; namespace Nethermind.Xdc.RLP; -internal class ExtraConsensusDataDecoder : IRlpValueDecoder, IRlpStreamDecoder +internal sealed class ExtraConsensusDataDecoder : RlpValueDecoder { private QuorumCertificateDecoder _quorumCertificateDecoder = new(); - public ExtraFieldsV2 Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override ExtraFieldsV2 DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) return null; @@ -28,7 +28,7 @@ public ExtraFieldsV2 Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehav return new ExtraFieldsV2(round, quorumCert); } - public ExtraFieldsV2 Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override ExtraFieldsV2 DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) return null; @@ -52,7 +52,7 @@ public Rlp Encode(ExtraFieldsV2 item, RlpBehaviors rlpBehaviors = RlpBehaviors.N return new Rlp(rlpStream.Data.ToArray()); } - public void Encode(RlpStream stream, ExtraFieldsV2 item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, ExtraFieldsV2 item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -65,7 +65,7 @@ public void Encode(RlpStream stream, ExtraFieldsV2 item, RlpBehaviors rlpBehavio _quorumCertificateDecoder.Encode(stream, item.QuorumCert, rlpBehaviors); } - public int GetLength(ExtraFieldsV2 item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override int GetLength(ExtraFieldsV2 item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); } diff --git a/src/Nethermind/Nethermind.Xdc/RLP/QuorumCertificateDecoder.cs b/src/Nethermind/Nethermind.Xdc/RLP/QuorumCertificateDecoder.cs index c3d25f156986..7d5e22762065 100644 --- a/src/Nethermind/Nethermind.Xdc/RLP/QuorumCertificateDecoder.cs +++ b/src/Nethermind/Nethermind.Xdc/RLP/QuorumCertificateDecoder.cs @@ -17,10 +17,10 @@ using BlockRoundInfo = Nethermind.Xdc.Types.BlockRoundInfo; namespace Nethermind.Xdc; -internal class QuorumCertificateDecoder : IRlpValueDecoder, IRlpStreamDecoder +internal sealed class QuorumCertificateDecoder : RlpValueDecoder { private XdcBlockInfoDecoder _blockInfoDecoder = new XdcBlockInfoDecoder(); - public QuorumCertificate Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override QuorumCertificate DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) return null; @@ -46,7 +46,7 @@ public QuorumCertificate Decode(ref Rlp.ValueDecoderContext decoderContext, RlpB return new QuorumCertificate(blockInfo, signatures, gap); } - public QuorumCertificate Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override QuorumCertificate DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) return null; @@ -83,7 +83,7 @@ public Rlp Encode(QuorumCertificate item, RlpBehaviors rlpBehaviors = RlpBehavio return new Rlp(rlpStream.Data.ToArray()); } - public void Encode(RlpStream stream, QuorumCertificate item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, QuorumCertificate item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -113,7 +113,7 @@ public void Encode(RlpStream stream, QuorumCertificate item, RlpBehaviors rlpBeh stream.Encode(item.GapNumber); } - public int GetLength(QuorumCertificate item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override int GetLength(QuorumCertificate item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); } diff --git a/src/Nethermind/Nethermind.Xdc/RLP/SnapshotDecoder.cs b/src/Nethermind/Nethermind.Xdc/RLP/SnapshotDecoder.cs index e46d339dea09..743a298c9ac8 100644 --- a/src/Nethermind/Nethermind.Xdc/RLP/SnapshotDecoder.cs +++ b/src/Nethermind/Nethermind.Xdc/RLP/SnapshotDecoder.cs @@ -12,9 +12,9 @@ using System.Threading.Tasks; namespace Nethermind.Xdc.RLP; -internal class SnapshotDecoder : IRlpStreamDecoder, IRlpValueDecoder +internal sealed class SnapshotDecoder : RlpValueDecoder { - public Snapshot Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Snapshot DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) return null; @@ -59,7 +59,7 @@ public Rlp Encode(Snapshot item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) return new Rlp(rlpStream.Data.ToArray()); } - public Snapshot Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Snapshot DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) return null; @@ -73,7 +73,7 @@ public Snapshot Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehav return new Snapshot(number, hash256, candidate); } - public void Encode(RlpStream stream, Snapshot item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, Snapshot item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -103,7 +103,7 @@ private void EncodeAddressSequence(RlpStream stream, Address[] nextEpochCandidat } } - public int GetLength(Snapshot item, RlpBehaviors rlpBehaviors) + public override int GetLength(Snapshot item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); } diff --git a/src/Nethermind/Nethermind.Xdc/RLP/TimeoutCertificateDecoder.cs b/src/Nethermind/Nethermind.Xdc/RLP/TimeoutCertificateDecoder.cs index 20e4a5d24926..942e38e1060e 100644 --- a/src/Nethermind/Nethermind.Xdc/RLP/TimeoutCertificateDecoder.cs +++ b/src/Nethermind/Nethermind.Xdc/RLP/TimeoutCertificateDecoder.cs @@ -9,9 +9,9 @@ namespace Nethermind.Xdc.RLP; -public class TimeoutCertificateDecoder : IRlpValueDecoder, IRlpStreamDecoder +public sealed class TimeoutCertificateDecoder : RlpValueDecoder { - public TimeoutCertificate Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override TimeoutCertificate DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) return null; @@ -43,7 +43,7 @@ public TimeoutCertificate Decode(ref Rlp.ValueDecoderContext decoderContext, Rlp return new TimeoutCertificate(round, signatures, gapNumber); } - public TimeoutCertificate Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override TimeoutCertificate DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) return null; @@ -86,7 +86,7 @@ public Rlp Encode(TimeoutCertificate item, RlpBehaviors rlpBehaviors = RlpBehavi return new Rlp(rlpStream.Data.ToArray()); } - public void Encode(RlpStream stream, TimeoutCertificate item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, TimeoutCertificate item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -110,7 +110,7 @@ public void Encode(RlpStream stream, TimeoutCertificate item, RlpBehaviors rlpBe stream.Encode(item.GapNumber); } - public int GetLength(TimeoutCertificate item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override int GetLength(TimeoutCertificate item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); } diff --git a/src/Nethermind/Nethermind.Xdc/RLP/TimeoutDecoder.cs b/src/Nethermind/Nethermind.Xdc/RLP/TimeoutDecoder.cs index 74e87d5d2e69..980acefbe9f4 100644 --- a/src/Nethermind/Nethermind.Xdc/RLP/TimeoutDecoder.cs +++ b/src/Nethermind/Nethermind.Xdc/RLP/TimeoutDecoder.cs @@ -9,9 +9,9 @@ namespace Nethermind.Xdc.RLP; -public class TimeoutDecoder : IRlpValueDecoder, IRlpStreamDecoder +public sealed class TimeoutDecoder : RlpValueDecoder { - public Timeout Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Timeout DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) return null; @@ -38,7 +38,7 @@ public Timeout Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors r return new Timeout(round, signature, gapNumber); } - public Timeout Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Timeout DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) return null; @@ -76,7 +76,7 @@ public Rlp Encode(Timeout item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) return new Rlp(rlpStream.Data.ToArray()); } - public void Encode(RlpStream stream, Timeout item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, Timeout item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -100,7 +100,7 @@ public void Encode(RlpStream stream, Timeout item, RlpBehaviors rlpBehaviors = R stream.Encode(item.GapNumber); } - public int GetLength(Timeout item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override int GetLength(Timeout item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); } diff --git a/src/Nethermind/Nethermind.Xdc/RLP/VoteDecoder.cs b/src/Nethermind/Nethermind.Xdc/RLP/VoteDecoder.cs index e424126dc8df..3240f7ad6db4 100644 --- a/src/Nethermind/Nethermind.Xdc/RLP/VoteDecoder.cs +++ b/src/Nethermind/Nethermind.Xdc/RLP/VoteDecoder.cs @@ -12,11 +12,11 @@ using System.Threading.Tasks; namespace Nethermind.Xdc; -public class VoteDecoder : IRlpValueDecoder, IRlpStreamDecoder +public sealed class VoteDecoder : RlpValueDecoder { private static readonly XdcBlockInfoDecoder _xdcBlockInfoDecoder = new(); - public Vote Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Vote DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) return null; @@ -40,7 +40,7 @@ public Vote Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpB return new Vote(proposedBlockInfo, gapNumber, signature); } - public Vote Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override Vote DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) return null; @@ -64,7 +64,7 @@ public Vote Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors return new Vote(proposedBlockInfo, gapNumber, signature); } - public void Encode(RlpStream stream, Vote item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, Vote item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -89,7 +89,7 @@ public Rlp Encode(Vote item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) return new Rlp(rlpStream.Data.ToArray()); } - public int GetLength(Vote item, RlpBehaviors rlpBehaviors) + public override int GetLength(Vote item, RlpBehaviors rlpBehaviors) { return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); } diff --git a/src/Nethermind/Nethermind.Xdc/RLP/XdcBlockInfoDecoder.cs b/src/Nethermind/Nethermind.Xdc/RLP/XdcBlockInfoDecoder.cs index c634fd4a2b11..aa8c2eee13fc 100644 --- a/src/Nethermind/Nethermind.Xdc/RLP/XdcBlockInfoDecoder.cs +++ b/src/Nethermind/Nethermind.Xdc/RLP/XdcBlockInfoDecoder.cs @@ -6,9 +6,9 @@ using Nethermind.Xdc.Types; namespace Nethermind.Xdc.RLP; -internal class XdcBlockInfoDecoder : IRlpValueDecoder, IRlpStreamDecoder +internal sealed class XdcBlockInfoDecoder : RlpValueDecoder { - public BlockRoundInfo Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override BlockRoundInfo DecodeInternal(ref Rlp.ValueDecoderContext decoderContext, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (decoderContext.IsNextItemNull()) return null; @@ -25,7 +25,7 @@ public BlockRoundInfo Decode(ref Rlp.ValueDecoderContext decoderContext, RlpBeha } - public BlockRoundInfo Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + protected override BlockRoundInfo DecodeInternal(RlpStream rlpStream, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (rlpStream.IsNextItemNull()) return null; @@ -41,7 +41,7 @@ public BlockRoundInfo Decode(RlpStream rlpStream, RlpBehaviors rlpBehaviors = Rl return new BlockRoundInfo(new Hash256(hashBytes), round, number); } - public void Encode(RlpStream stream, BlockRoundInfo item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override void Encode(RlpStream stream, BlockRoundInfo item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { if (item is null) { @@ -54,7 +54,7 @@ public void Encode(RlpStream stream, BlockRoundInfo item, RlpBehaviors rlpBehavi stream.Encode(item.BlockNumber); } - public int GetLength(BlockRoundInfo item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) + public override int GetLength(BlockRoundInfo item, RlpBehaviors rlpBehaviors = RlpBehaviors.None) { return Rlp.LengthOfSequence(GetContentLength(item, rlpBehaviors)); }