From 0d059275e5e0f0870d4073677639e8fb75ff35b7 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Fri, 31 Mar 2023 16:17:45 +0200 Subject: [PATCH] feat(rpc): impl debug_getRawReceipts (#2059) --- crates/primitives/src/receipt.rs | 6 ++++++ crates/rpc/rpc-builder/tests/it/http.rs | 2 +- crates/rpc/rpc/src/debug.rs | 14 ++++++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/crates/primitives/src/receipt.rs b/crates/primitives/src/receipt.rs index d8c1504e70..f3851d0aba 100644 --- a/crates/primitives/src/receipt.rs +++ b/crates/primitives/src/receipt.rs @@ -26,6 +26,12 @@ impl Receipt { pub fn bloom_slow(&self) -> Bloom { logs_bloom(self.logs.iter()) } + + /// Calculates the bloom filter for the receipt and returns the [ReceiptWithBloom] container + /// type. + pub fn with_bloom(self) -> ReceiptWithBloom { + self.into() + } } impl From for ReceiptWithBloom { diff --git a/crates/rpc/rpc-builder/tests/it/http.rs b/crates/rpc/rpc-builder/tests/it/http.rs index 22c11bd227..3f0c8b583b 100644 --- a/crates/rpc/rpc-builder/tests/it/http.rs +++ b/crates/rpc/rpc-builder/tests/it/http.rs @@ -130,7 +130,7 @@ where DebugApiClient::raw_header(client, block_id).await.unwrap(); DebugApiClient::raw_block(client, block_id).await.unwrap(); DebugApiClient::raw_transaction(client, H256::default()).await.unwrap(); - assert!(is_unimplemented(DebugApiClient::raw_receipts(client, block_id).await.err().unwrap())); + DebugApiClient::raw_receipts(client, block_id).await.unwrap(); assert!(is_unimplemented(DebugApiClient::bad_blocks(client).await.err().unwrap())); } diff --git a/crates/rpc/rpc/src/debug.rs b/crates/rpc/rpc/src/debug.rs index 04a314a919..b16e21a9d2 100644 --- a/crates/rpc/rpc/src/debug.rs +++ b/crates/rpc/rpc/src/debug.rs @@ -183,8 +183,18 @@ where } /// Handler for `debug_getRawReceipts` - async fn raw_receipts(&self, _block_id: BlockId) -> RpcResult> { - Err(internal_rpc_err("unimplemented")) + async fn raw_receipts(&self, block_id: BlockId) -> RpcResult> { + let receipts = self.client.receipts_by_block(block_id).to_rpc_result()?.unwrap_or_default(); + let mut all_receipts = Vec::with_capacity(receipts.len()); + + for receipt in receipts { + let mut buf = Vec::new(); + let receipt = receipt.with_bloom(); + receipt.encode(&mut buf); + all_receipts.push(buf.into()); + } + + Ok(all_receipts) } /// Handler for `debug_getBadBlocks`