fix: eth_getRawReceipts (#7101)

This commit is contained in:
greged93
2024-03-12 11:59:51 +01:00
committed by GitHub
parent 024bb264b7
commit 7a83143ae1
2 changed files with 25 additions and 7 deletions

View File

@@ -1,6 +1,6 @@
use crate::{
compression::{RECEIPT_COMPRESSOR, RECEIPT_DECOMPRESSOR},
logs_bloom, Bloom, Log, PruneSegmentError, TxType, B256,
logs_bloom, Bloom, Bytes, Log, PruneSegmentError, TxType, B256,
};
use alloy_rlp::{length_of_length, Decodable, Encodable};
use bytes::{Buf, BufMut};
@@ -274,6 +274,28 @@ impl<'a> arbitrary::Arbitrary<'a> for Receipt {
}
impl ReceiptWithBloom {
/// Returns the enveloped encoded receipt.
///
/// See also [ReceiptWithBloom::encode_enveloped]
pub fn envelope_encoded(&self) -> Bytes {
let mut buf = Vec::new();
self.encode_enveloped(&mut buf);
buf.into()
}
/// Encodes the receipt into its "raw" format.
/// This format is also referred to as "binary" encoding.
///
/// For legacy receipts, it encodes the RLP of the receipt into the buffer:
/// `rlp([status, cumulativeGasUsed, logsBloom, logs])` as per EIP-2718.
/// For EIP-2718 typed transactions, it encodes the type of the transaction followed by the rlp
/// of the receipt:
/// - EIP-1559, 2930 and 4844 transactions: `tx-type || rlp([status, cumulativeGasUsed,
/// logsBloom, logs])`
pub fn encode_enveloped(&self, out: &mut dyn bytes::BufMut) {
self.encode_inner(out, false)
}
/// Encode receipt with or without the header data.
pub fn encode_inner(&self, out: &mut dyn BufMut, with_header: bool) {
self.as_encoder().encode_inner(out, with_header)
@@ -542,7 +564,7 @@ impl<'a> Encodable for ReceiptWithBloomEncoder<'a> {
mod tests {
use super::*;
use crate::hex_literal::hex;
use alloy_primitives::{address, b256, bytes, Bytes};
use alloy_primitives::{address, b256, bytes};
// Test vector from: https://eips.ethereum.org/EIPS/eip-2481
#[test]

View File

@@ -685,11 +685,7 @@ where
.to_rpc_result()?
.unwrap_or_default()
.into_iter()
.map(|receipt| {
let mut buf = Vec::new();
receipt.with_bloom().encode(&mut buf);
Bytes::from(buf)
})
.map(|receipt| receipt.with_bloom().envelope_encoded())
.collect())
}