From db6ecc76728b437df8393e46ee60f0216b0cb652 Mon Sep 17 00:00:00 2001 From: Ayman Bouchareb Date: Wed, 10 Jan 2024 10:49:41 +0100 Subject: [PATCH] Aligned with spec and added some tests (#6494) --- .../Modules/DebugModuleTests.cs | 40 ++++++++++++++++++- .../Modules/DebugModule/DebugRpcModule.cs | 20 +++++----- .../Modules/DebugModule/IDebugRpcModule.cs | 6 +-- 3 files changed, 52 insertions(+), 14 deletions(-) diff --git a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs index ed059c86e65..a0150d8609f 100644 --- a/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs +++ b/src/Nethermind/Nethermind.JsonRpc.Test/Modules/DebugModuleTests.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Runtime.CompilerServices; +using System.Text; using System.Threading; using System.Threading.Tasks; using FluentAssertions; @@ -96,6 +96,19 @@ public async Task Get_block_rlp_by_hash() Assert.That((byte[]?)response?.Result, Is.EqualTo(rlp.Bytes)); } + [Test] + public async Task Get_raw_Header() + { + HeaderDecoder decoder = new(); + Block blk = Build.A.Block.WithNumber(0).TestObject; + Rlp rlp = decoder.Encode(blk.Header); + debugBridge.GetBlock(new BlockParameter((long)0)).Returns(blk); + + DebugRpcModule rpcModule = new(LimboLogs.Instance, debugBridge, jsonRpcConfig); + JsonRpcSuccessResponse? response = await RpcTest.TestRequest(rpcModule, "debug_getRawHeader", $"{Keccak.Zero.Bytes.ToHexString()}") as JsonRpcSuccessResponse; + Assert.That((byte[]?)response?.Result, Is.EqualTo(rlp.Bytes)); + } + [Test] public async Task Get_block_rlp() { @@ -110,6 +123,20 @@ public async Task Get_block_rlp() Assert.That((byte[]?)response?.Result, Is.EqualTo(rlp.Bytes)); } + [Test] + public async Task Get_rawblock() + { + BlockDecoder decoder = new(); + IDebugBridge debugBridge = Substitute.For(); + Rlp rlp = decoder.Encode(Build.A.Block.WithNumber(1).TestObject); + debugBridge.GetBlockRlp(new BlockParameter(1)).Returns(rlp.Bytes); + + DebugRpcModule rpcModule = new(LimboLogs.Instance, debugBridge, jsonRpcConfig); + JsonRpcSuccessResponse? response = await RpcTest.TestRequest(rpcModule, "debug_getRawBlock", "1") as JsonRpcSuccessResponse; + + Assert.That((byte[]?)response?.Result, Is.EqualTo(rlp.Bytes)); + } + [Test] public async Task Get_block_rlp_when_missing() { @@ -121,6 +148,17 @@ public async Task Get_block_rlp_when_missing() Assert.That(response?.Error?.Code, Is.EqualTo(-32001)); } + [Test] + public async Task Get_rawblock_when_missing() + { + debugBridge.GetBlockRlp(new BlockParameter(1)).ReturnsNull(); + + DebugRpcModule rpcModule = new(LimboLogs.Instance, debugBridge, jsonRpcConfig); + JsonRpcErrorResponse? response = await RpcTest.TestRequest(rpcModule, "debug_getRawBlock", "1") as JsonRpcErrorResponse; + + Assert.That(response?.Error?.Code, Is.EqualTo(-32001)); + } + [Test] public async Task Get_block_rlp_by_hash_when_missing() { diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugRpcModule.cs index d24f73cb7fc..7e9b6e2e859 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/DebugRpcModule.cs @@ -272,34 +272,34 @@ public ResultWrapper debug_getRawTransaction(Hash256 transactionHash) return ResultWrapper.Success(rlp.Bytes); } - public ResultWrapper debug_getRawReceipts(long blockNumber) + public ResultWrapper debug_getRawReceipts(BlockParameter blockParameter) { - var receipts = _debugBridge.GetReceiptsForBlock(new BlockParameter(blockNumber)); + var receipts = _debugBridge.GetReceiptsForBlock(blockParameter); if (receipts == null) { - return ResultWrapper.Fail($"Receipts are not found for block {blockNumber}", ErrorCodes.ResourceNotFound); + return ResultWrapper.Fail($"Receipts are not found for block {blockParameter}", ErrorCodes.ResourceNotFound); } - var rlp = receipts.Select(tx => Rlp.Encode(tx, RlpBehaviors.Eip658Receipts).Bytes); + var rlp = receipts.Select(tx => Rlp.Encode(tx).Bytes); return ResultWrapper.Success(rlp.ToArray()); } - public ResultWrapper debug_getRawBlock(long blockNumber) + public ResultWrapper debug_getRawBlock(BlockParameter blockParameter) { - var blockRLP = _debugBridge.GetBlockRlp(new BlockParameter(blockNumber)); + var blockRLP = _debugBridge.GetBlockRlp(blockParameter); if (blockRLP == null) { - return ResultWrapper.Fail($"Block {blockNumber} was not found", ErrorCodes.ResourceNotFound); + return ResultWrapper.Fail($"Block {blockParameter} was not found", ErrorCodes.ResourceNotFound); } return ResultWrapper.Success(blockRLP); } - public ResultWrapper debug_getRawHeader(long blockNumber) + public ResultWrapper debug_getRawHeader(BlockParameter blockParameter) { - var block = _debugBridge.GetBlock(new BlockParameter(blockNumber)); + var block = _debugBridge.GetBlock(blockParameter); if (block == null) { - return ResultWrapper.Fail($"Block {blockNumber} was not found", ErrorCodes.ResourceNotFound); + return ResultWrapper.Fail($"Block {blockParameter} was not found", ErrorCodes.ResourceNotFound); } Rlp rlp = Rlp.Encode(block.Header); return ResultWrapper.Success(rlp.Bytes); diff --git a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugRpcModule.cs b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugRpcModule.cs index 932a1d300da..fbebd3f69ca 100644 --- a/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugRpcModule.cs +++ b/src/Nethermind/Nethermind.JsonRpc/Modules/DebugModule/IDebugRpcModule.cs @@ -89,13 +89,13 @@ public interface IDebugRpcModule : IRpcModule Task> debug_insertReceipts(BlockParameter blockParameter, ReceiptForRpc[] receiptForRpc); [JsonRpcMethod(Description = "Get Raw Block format.")] - ResultWrapper debug_getRawBlock(long blockNumber); + ResultWrapper debug_getRawBlock(BlockParameter blockParameter); [JsonRpcMethod(Description = "Get Raw Receipt format.")] - ResultWrapper debug_getRawReceipts(long blockNumber); + ResultWrapper debug_getRawReceipts(BlockParameter blockParameter); [JsonRpcMethod(Description = "Get Raw Header format.")] - ResultWrapper debug_getRawHeader(long blockNumber); + ResultWrapper debug_getRawHeader(BlockParameter blockParameter); [JsonRpcMethod(Description = "Get Raw Transaction format.")] ResultWrapper debug_getRawTransaction(Hash256 transactionHash);